rugged 1.3.2.3 → 1.4.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/ext/rugged/extconf.rb +1 -1
- data/ext/rugged/rugged_config.c +7 -2
- data/ext/rugged/rugged_remote.c +17 -0
- data/lib/rugged/version.rb +1 -1
- data/vendor/libgit2/CMakeLists.txt +103 -276
- data/vendor/libgit2/COPYING +36 -19
- data/vendor/libgit2/cmake/AddCFlagIfSupported.cmake +21 -21
- data/vendor/libgit2/cmake/DefaultCFlags.cmake +154 -0
- data/vendor/libgit2/cmake/EnableWarnings.cmake +13 -13
- data/vendor/libgit2/cmake/FindCoreFoundation.cmake +13 -13
- data/vendor/libgit2/cmake/FindGSSAPI.cmake +171 -287
- data/vendor/libgit2/cmake/FindGSSFramework.cmake +13 -13
- data/vendor/libgit2/cmake/{FindHTTP_Parser.cmake → FindHTTPParser.cmake} +17 -17
- data/vendor/libgit2/cmake/FindIconv.cmake +27 -27
- data/vendor/libgit2/cmake/FindLibSSH2.cmake +5 -5
- data/vendor/libgit2/cmake/FindPCRE.cmake +13 -13
- data/vendor/libgit2/cmake/FindPCRE2.cmake +12 -12
- data/vendor/libgit2/cmake/FindPkgLibraries.cmake +19 -19
- data/vendor/libgit2/cmake/FindSecurity.cmake +14 -14
- data/vendor/libgit2/cmake/FindStatNsec.cmake +12 -18
- data/vendor/libgit2/cmake/Findfutimens.cmake +8 -8
- data/vendor/libgit2/cmake/FindmbedTLS.cmake +63 -70
- data/vendor/libgit2/cmake/IdeSplitSources.cmake +18 -18
- data/vendor/libgit2/cmake/PkgBuildConfig.cmake +60 -60
- data/vendor/libgit2/cmake/SanitizeBool.cmake +20 -20
- data/vendor/libgit2/cmake/SelectGSSAPI.cmake +37 -37
- data/vendor/libgit2/cmake/SelectHTTPParser.cmake +19 -0
- data/vendor/libgit2/cmake/SelectHTTPSBackend.cmake +100 -100
- data/vendor/libgit2/cmake/SelectHashes.cmake +39 -49
- data/vendor/libgit2/cmake/SelectRegex.cmake +51 -0
- data/vendor/libgit2/cmake/SelectSSH.cmake +41 -0
- data/vendor/libgit2/cmake/SelectWinHTTP.cmake +17 -0
- data/vendor/libgit2/cmake/SelectZlib.cmake +34 -0
- data/vendor/libgit2/deps/chromium-zlib/CMakeLists.txt +6 -6
- data/vendor/libgit2/deps/ntlmclient/CMakeLists.txt +31 -31
- data/vendor/libgit2/deps/ntlmclient/crypt_openssl.c +1 -1
- data/vendor/libgit2/deps/ntlmclient/ntlm.c +4 -4
- data/vendor/libgit2/deps/ntlmclient/ntlm.h +4 -4
- data/vendor/libgit2/deps/ntlmclient/ntlmclient.h +2 -2
- data/vendor/libgit2/deps/pcre/CMakeLists.txt +88 -88
- data/vendor/libgit2/deps/winhttp/CMakeLists.txt +14 -16
- data/vendor/libgit2/deps/zlib/adler32.c +0 -7
- data/vendor/libgit2/deps/zlib/crc32.c +288 -975
- data/vendor/libgit2/deps/zlib/crc32.h +436 -9441
- data/vendor/libgit2/deps/zlib/deflate.c +31 -83
- data/vendor/libgit2/deps/zlib/deflate.h +15 -12
- data/vendor/libgit2/deps/zlib/gzguts.h +2 -3
- data/vendor/libgit2/deps/zlib/infback.c +1 -2
- data/vendor/libgit2/deps/zlib/inffast.c +14 -14
- data/vendor/libgit2/deps/zlib/inflate.c +8 -39
- data/vendor/libgit2/deps/zlib/inflate.h +2 -3
- data/vendor/libgit2/deps/zlib/inftrees.c +3 -3
- data/vendor/libgit2/deps/zlib/trees.c +48 -27
- data/vendor/libgit2/deps/zlib/zlib.h +100 -126
- data/vendor/libgit2/deps/zlib/zutil.c +2 -2
- data/vendor/libgit2/deps/zlib/zutil.h +9 -12
- data/vendor/libgit2/include/git2/apply.h +16 -2
- data/vendor/libgit2/include/git2/attr.h +11 -2
- data/vendor/libgit2/include/git2/blame.h +4 -1
- data/vendor/libgit2/include/git2/blob.h +14 -1
- data/vendor/libgit2/include/git2/branch.h +2 -0
- data/vendor/libgit2/include/git2/buffer.h +18 -78
- data/vendor/libgit2/include/git2/cert.h +2 -2
- data/vendor/libgit2/include/git2/checkout.h +5 -2
- data/vendor/libgit2/include/git2/clone.h +3 -3
- data/vendor/libgit2/include/git2/commit.h +2 -0
- data/vendor/libgit2/include/git2/common.h +5 -12
- data/vendor/libgit2/include/git2/config.h +19 -3
- data/vendor/libgit2/include/git2/credential.h +2 -1
- data/vendor/libgit2/include/git2/credential_helpers.h +1 -0
- data/vendor/libgit2/include/git2/deprecated.h +1 -1
- data/vendor/libgit2/include/git2/describe.h +7 -2
- data/vendor/libgit2/include/git2/diff.h +17 -9
- data/vendor/libgit2/include/git2/email.h +1 -1
- data/vendor/libgit2/include/git2/errors.h +1 -2
- data/vendor/libgit2/include/git2/filter.h +7 -2
- data/vendor/libgit2/include/git2/graph.h +1 -0
- data/vendor/libgit2/include/git2/ignore.h +1 -1
- data/vendor/libgit2/include/git2/index.h +11 -5
- data/vendor/libgit2/include/git2/indexer.h +19 -0
- data/vendor/libgit2/include/git2/merge.h +23 -3
- data/vendor/libgit2/include/git2/message.h +2 -0
- data/vendor/libgit2/include/git2/object.h +23 -0
- data/vendor/libgit2/include/git2/odb.h +37 -7
- data/vendor/libgit2/include/git2/odb_backend.h +1 -1
- data/vendor/libgit2/include/git2/pack.h +24 -8
- data/vendor/libgit2/include/git2/patch.h +8 -0
- data/vendor/libgit2/include/git2/pathspec.h +1 -1
- data/vendor/libgit2/include/git2/proxy.h +1 -1
- data/vendor/libgit2/include/git2/rebase.h +9 -1
- data/vendor/libgit2/include/git2/refdb.h +3 -0
- data/vendor/libgit2/include/git2/reflog.h +1 -1
- data/vendor/libgit2/include/git2/refs.h +2 -2
- data/vendor/libgit2/include/git2/remote.h +184 -37
- data/vendor/libgit2/include/git2/repository.h +14 -9
- data/vendor/libgit2/include/git2/reset.h +2 -2
- data/vendor/libgit2/include/git2/revparse.h +1 -1
- data/vendor/libgit2/include/git2/revwalk.h +4 -1
- data/vendor/libgit2/include/git2/signature.h +1 -1
- data/vendor/libgit2/include/git2/stash.h +3 -3
- data/vendor/libgit2/include/git2/status.h +9 -3
- data/vendor/libgit2/include/git2/submodule.h +7 -2
- data/vendor/libgit2/include/git2/sys/commit_graph.h +1 -1
- data/vendor/libgit2/include/git2/sys/odb_backend.h +2 -5
- data/vendor/libgit2/include/git2/sys/remote.h +31 -0
- data/vendor/libgit2/include/git2/sys/stream.h +1 -1
- data/vendor/libgit2/include/git2/sys/transport.h +25 -34
- data/vendor/libgit2/include/git2/tag.h +1 -0
- data/vendor/libgit2/include/git2/tree.h +4 -3
- data/vendor/libgit2/include/git2/types.h +7 -7
- data/vendor/libgit2/include/git2/version.h +3 -3
- data/vendor/libgit2/include/git2/worktree.h +12 -2
- data/vendor/libgit2/src/CMakeLists.txt +189 -315
- data/vendor/libgit2/src/annotated_commit.h +1 -1
- data/vendor/libgit2/src/apply.c +18 -18
- data/vendor/libgit2/src/apply.h +2 -2
- data/vendor/libgit2/src/attr.c +18 -18
- data/vendor/libgit2/src/attr_file.c +17 -17
- data/vendor/libgit2/src/attr_file.h +4 -4
- data/vendor/libgit2/src/attrcache.c +17 -12
- data/vendor/libgit2/src/blame_git.c +1 -1
- data/vendor/libgit2/src/blob.c +33 -26
- data/vendor/libgit2/src/blob.h +1 -1
- data/vendor/libgit2/src/branch.c +150 -109
- data/vendor/libgit2/src/branch.h +15 -3
- data/vendor/libgit2/src/buf.c +126 -0
- data/vendor/libgit2/src/buf.h +50 -0
- data/vendor/libgit2/src/cc-compat.h +1 -1
- data/vendor/libgit2/src/checkout.c +74 -68
- data/vendor/libgit2/src/cherrypick.c +10 -10
- data/vendor/libgit2/src/clone.c +66 -66
- data/vendor/libgit2/src/commit.c +128 -58
- data/vendor/libgit2/src/commit.h +24 -1
- data/vendor/libgit2/src/commit_graph.c +68 -53
- data/vendor/libgit2/src/commit_graph.h +10 -3
- data/vendor/libgit2/src/commit_list.c +2 -3
- data/vendor/libgit2/src/common.h +10 -3
- data/vendor/libgit2/src/config.c +99 -77
- data/vendor/libgit2/src/config.h +15 -2
- data/vendor/libgit2/src/config_file.c +103 -91
- data/vendor/libgit2/src/config_mem.c +9 -9
- data/vendor/libgit2/src/config_parse.c +27 -23
- data/vendor/libgit2/src/crlf.c +24 -21
- data/vendor/libgit2/src/date.c +10 -17
- data/vendor/libgit2/src/date.h +33 -0
- data/vendor/libgit2/src/describe.c +27 -19
- data/vendor/libgit2/src/diff.c +25 -8
- data/vendor/libgit2/src/diff.h +2 -4
- data/vendor/libgit2/src/diff_driver.c +34 -36
- data/vendor/libgit2/src/diff_driver.h +3 -3
- data/vendor/libgit2/src/diff_file.c +29 -20
- data/vendor/libgit2/src/diff_generate.c +30 -6
- data/vendor/libgit2/src/diff_generate.h +5 -3
- data/vendor/libgit2/src/diff_print.c +102 -95
- data/vendor/libgit2/src/diff_stats.c +40 -29
- data/vendor/libgit2/src/{message.h → diff_stats.h} +7 -6
- data/vendor/libgit2/src/diff_tform.c +9 -8
- data/vendor/libgit2/src/diff_xdiff.c +3 -8
- data/vendor/libgit2/src/email.c +54 -38
- data/vendor/libgit2/src/email.h +1 -1
- data/vendor/libgit2/src/errors.c +18 -18
- data/vendor/libgit2/src/features.h.in +6 -1
- data/vendor/libgit2/src/fetch.c +69 -24
- data/vendor/libgit2/src/fetch.h +1 -1
- data/vendor/libgit2/src/fetchhead.c +19 -19
- data/vendor/libgit2/src/filebuf.c +28 -28
- data/vendor/libgit2/src/filebuf.h +1 -1
- data/vendor/libgit2/src/filter.c +96 -52
- data/vendor/libgit2/src/filter.h +26 -5
- data/vendor/libgit2/src/fs_path.c +1912 -0
- data/vendor/libgit2/src/fs_path.h +752 -0
- data/vendor/libgit2/src/futils.c +91 -85
- data/vendor/libgit2/src/futils.h +26 -14
- data/vendor/libgit2/src/hash/sha1/collisiondetect.c +2 -2
- data/vendor/libgit2/src/hash/sha1/common_crypto.c +2 -2
- data/vendor/libgit2/src/hash/sha1/generic.c +2 -2
- data/vendor/libgit2/src/hash/sha1/mbedtls.c +2 -2
- data/vendor/libgit2/src/hash/sha1/openssl.c +2 -2
- data/vendor/libgit2/src/hash/sha1/sha1dc/sha1.c +1 -1
- data/vendor/libgit2/src/hash/sha1/win32.c +6 -6
- data/vendor/libgit2/src/hash/sha1.h +3 -1
- data/vendor/libgit2/src/hash.c +67 -35
- data/vendor/libgit2/src/hash.h +12 -12
- data/vendor/libgit2/src/ident.c +18 -18
- data/vendor/libgit2/src/ignore.c +35 -34
- data/vendor/libgit2/src/ignore.h +2 -2
- data/vendor/libgit2/src/index.c +79 -80
- data/vendor/libgit2/src/index.h +6 -3
- data/vendor/libgit2/src/indexer.c +75 -57
- data/vendor/libgit2/src/iterator.c +64 -56
- data/vendor/libgit2/src/iterator.h +5 -5
- data/vendor/libgit2/src/khash.h +1 -1
- data/vendor/libgit2/src/libgit2.c +22 -19
- data/vendor/libgit2/src/mailmap.c +38 -36
- data/vendor/libgit2/src/merge.c +27 -27
- data/vendor/libgit2/src/merge.h +1 -14
- data/vendor/libgit2/src/merge_driver.c +2 -2
- data/vendor/libgit2/src/merge_file.c +13 -3
- data/vendor/libgit2/src/message.c +21 -10
- data/vendor/libgit2/src/midx.c +83 -66
- data/vendor/libgit2/src/midx.h +3 -3
- data/vendor/libgit2/src/mwindow.c +1 -1
- data/vendor/libgit2/src/net.c +278 -68
- data/vendor/libgit2/src/net.h +10 -3
- data/vendor/libgit2/src/netops.c +1 -1
- data/vendor/libgit2/src/netops.h +1 -1
- data/vendor/libgit2/src/notes.c +20 -29
- data/vendor/libgit2/src/object.c +49 -9
- data/vendor/libgit2/src/object.h +1 -1
- data/vendor/libgit2/src/odb.c +35 -32
- data/vendor/libgit2/src/odb.h +1 -1
- data/vendor/libgit2/src/odb_loose.c +68 -68
- data/vendor/libgit2/src/odb_mempack.c +18 -5
- data/vendor/libgit2/src/odb_pack.c +43 -43
- data/vendor/libgit2/src/oid.c +11 -4
- data/vendor/libgit2/src/oid.h +15 -0
- data/vendor/libgit2/src/pack-objects.c +41 -26
- data/vendor/libgit2/src/pack-objects.h +11 -6
- data/vendor/libgit2/src/pack.c +10 -10
- data/vendor/libgit2/src/patch.c +3 -3
- data/vendor/libgit2/src/patch.h +1 -0
- data/vendor/libgit2/src/patch_generate.c +27 -11
- data/vendor/libgit2/src/patch_generate.h +5 -5
- data/vendor/libgit2/src/patch_parse.c +24 -24
- data/vendor/libgit2/src/path.c +76 -1951
- data/vendor/libgit2/src/path.h +34 -741
- data/vendor/libgit2/src/pathspec.c +6 -6
- data/vendor/libgit2/src/pathspec.h +2 -2
- data/vendor/libgit2/src/posix.c +3 -3
- data/vendor/libgit2/src/posix.h +1 -0
- data/vendor/libgit2/src/pqueue.h +1 -1
- data/vendor/libgit2/src/proxy.c +4 -1
- data/vendor/libgit2/src/proxy.h +1 -1
- data/vendor/libgit2/src/push.c +30 -35
- data/vendor/libgit2/src/push.h +4 -16
- data/vendor/libgit2/src/rand.c +226 -0
- data/vendor/libgit2/src/rand.h +37 -0
- data/vendor/libgit2/src/reader.c +8 -8
- data/vendor/libgit2/src/reader.h +2 -2
- data/vendor/libgit2/src/rebase.c +89 -88
- data/vendor/libgit2/src/refdb_fs.c +447 -173
- data/vendor/libgit2/src/refs.c +32 -32
- data/vendor/libgit2/src/refs.h +2 -2
- data/vendor/libgit2/src/refspec.c +32 -37
- data/vendor/libgit2/src/refspec.h +5 -2
- data/vendor/libgit2/src/regexp.c +1 -1
- data/vendor/libgit2/src/remote.c +713 -419
- data/vendor/libgit2/src/remote.h +15 -10
- data/vendor/libgit2/src/repository.c +350 -467
- data/vendor/libgit2/src/repository.h +11 -10
- data/vendor/libgit2/src/reset.c +8 -5
- data/vendor/libgit2/src/revert.c +10 -10
- data/vendor/libgit2/src/revparse.c +48 -35
- data/vendor/libgit2/src/revwalk.c +7 -7
- data/vendor/libgit2/src/signature.c +12 -6
- data/vendor/libgit2/src/signature.h +1 -1
- data/vendor/libgit2/src/sortedcache.c +1 -1
- data/vendor/libgit2/src/sortedcache.h +1 -1
- data/vendor/libgit2/src/stash.c +36 -37
- data/vendor/libgit2/src/status.c +4 -1
- data/vendor/libgit2/src/{buffer.c → str.c} +157 -151
- data/vendor/libgit2/src/str.h +357 -0
- data/vendor/libgit2/src/streams/mbedtls.c +8 -6
- data/vendor/libgit2/src/streams/openssl_dynamic.h +3 -3
- data/vendor/libgit2/src/submodule.c +171 -159
- data/vendor/libgit2/src/submodule.h +1 -1
- data/vendor/libgit2/src/sysdir.c +68 -52
- data/vendor/libgit2/src/sysdir.h +15 -10
- data/vendor/libgit2/src/tag.c +29 -27
- data/vendor/libgit2/src/thread.h +3 -3
- data/vendor/libgit2/src/threadstate.c +3 -3
- data/vendor/libgit2/src/threadstate.h +1 -1
- data/vendor/libgit2/src/trace.c +1 -14
- data/vendor/libgit2/src/trace.h +5 -22
- data/vendor/libgit2/src/trailer.c +1 -1
- data/vendor/libgit2/src/transaction.c +1 -1
- data/vendor/libgit2/src/transport.c +10 -10
- data/vendor/libgit2/src/transports/auth.c +7 -9
- data/vendor/libgit2/src/transports/auth.h +2 -3
- data/vendor/libgit2/src/transports/auth_negotiate.c +12 -13
- data/vendor/libgit2/src/transports/auth_ntlm.c +10 -10
- data/vendor/libgit2/src/transports/auth_ntlm.h +0 -1
- data/vendor/libgit2/src/transports/git.c +9 -11
- data/vendor/libgit2/src/transports/http.c +37 -17
- data/vendor/libgit2/src/transports/http.h +2 -3
- data/vendor/libgit2/src/transports/httpclient.c +65 -65
- data/vendor/libgit2/src/transports/local.c +124 -116
- data/vendor/libgit2/src/transports/smart.c +51 -139
- data/vendor/libgit2/src/transports/smart.h +25 -31
- data/vendor/libgit2/src/transports/smart_pkt.c +33 -33
- data/vendor/libgit2/src/transports/smart_protocol.c +57 -39
- data/vendor/libgit2/src/transports/ssh.c +47 -112
- data/vendor/libgit2/src/transports/winhttp.c +50 -56
- data/vendor/libgit2/src/tree-cache.c +5 -5
- data/vendor/libgit2/src/tree-cache.h +2 -2
- data/vendor/libgit2/src/tree.c +59 -48
- data/vendor/libgit2/src/tree.h +1 -1
- data/vendor/libgit2/src/unix/map.c +0 -2
- data/vendor/libgit2/src/unix/posix.h +1 -4
- data/vendor/libgit2/src/unix/realpath.c +0 -2
- data/vendor/libgit2/src/util.c +14 -14
- data/vendor/libgit2/src/util.h +2 -28
- data/vendor/libgit2/src/vector.h +1 -1
- data/vendor/libgit2/src/win32/findfile.c +172 -116
- data/vendor/libgit2/src/win32/findfile.h +7 -4
- data/vendor/libgit2/src/win32/path_w32.c +140 -9
- data/vendor/libgit2/src/win32/path_w32.h +2 -0
- data/vendor/libgit2/src/win32/posix.h +0 -1
- data/vendor/libgit2/src/win32/posix_w32.c +11 -27
- data/vendor/libgit2/src/win32/w32_buffer.c +2 -3
- data/vendor/libgit2/src/win32/w32_buffer.h +2 -3
- data/vendor/libgit2/src/win32/w32_leakcheck.c +1 -1
- data/vendor/libgit2/src/worktree.c +116 -94
- data/vendor/libgit2/src/worktree.h +1 -1
- data/vendor/libgit2/src/xdiff/git-xdiff.h +53 -0
- data/vendor/libgit2/src/xdiff/xdiff.h +15 -15
- data/vendor/libgit2/src/xdiff/xdiffi.c +134 -108
- data/vendor/libgit2/src/xdiff/xemit.c +23 -7
- data/vendor/libgit2/src/xdiff/xhistogram.c +87 -78
- data/vendor/libgit2/src/xdiff/xinclude.h +1 -12
- data/vendor/libgit2/src/xdiff/xmerge.c +104 -117
- data/vendor/libgit2/src/xdiff/xpatience.c +6 -17
- data/vendor/libgit2/src/xdiff/xprepare.c +15 -20
- data/vendor/libgit2/src/xdiff/xutils.c +18 -7
- data/vendor/libgit2/src/zstream.c +5 -5
- data/vendor/libgit2/src/zstream.h +4 -4
- metadata +25 -10
- data/vendor/libgit2/src/buffer.h +0 -374
|
@@ -42,8 +42,6 @@
|
|
|
42
42
|
*/
|
|
43
43
|
|
|
44
44
|
#include "xinclude.h"
|
|
45
|
-
#include "xtypes.h"
|
|
46
|
-
#include "xdiff.h"
|
|
47
45
|
|
|
48
46
|
#define MAX_PTR UINT_MAX
|
|
49
47
|
#define MAX_CNT UINT_MAX
|
|
@@ -90,27 +88,21 @@ struct region {
|
|
|
90
88
|
#define REC(env, s, l) \
|
|
91
89
|
(env->xdf##s.recs[l - 1])
|
|
92
90
|
|
|
93
|
-
static int cmp_recs(
|
|
94
|
-
xrecord_t *r1, xrecord_t *r2)
|
|
91
|
+
static int cmp_recs(xrecord_t *r1, xrecord_t *r2)
|
|
95
92
|
{
|
|
96
|
-
return r1->ha == r2->ha
|
|
97
|
-
xdl_recmatch(r1->ptr, r1->size, r2->ptr, r2->size,
|
|
98
|
-
xpp->flags);
|
|
99
|
-
}
|
|
93
|
+
return r1->ha == r2->ha;
|
|
100
94
|
|
|
101
|
-
|
|
102
|
-
(cmp_recs(xpp, REC(env, s1, l1), REC(env, s2, l2)))
|
|
95
|
+
}
|
|
103
96
|
|
|
104
97
|
#define CMP(i, s1, l1, s2, l2) \
|
|
105
|
-
(cmp_recs(
|
|
98
|
+
(cmp_recs(REC(i->env, s1, l1), REC(i->env, s2, l2)))
|
|
106
99
|
|
|
107
100
|
#define TABLE_HASH(index, side, line) \
|
|
108
101
|
XDL_HASHLONG((REC(index->env, side, line))->ha, index->table_bits)
|
|
109
102
|
|
|
110
|
-
static int scanA(struct histindex *index,
|
|
103
|
+
static int scanA(struct histindex *index, int line1, int count1)
|
|
111
104
|
{
|
|
112
|
-
unsigned int ptr;
|
|
113
|
-
unsigned int tbl_idx;
|
|
105
|
+
unsigned int ptr, tbl_idx;
|
|
114
106
|
unsigned int chain_len;
|
|
115
107
|
struct record **rec_chain, *rec;
|
|
116
108
|
|
|
@@ -161,10 +153,8 @@ continue_scan:
|
|
|
161
153
|
return 0;
|
|
162
154
|
}
|
|
163
155
|
|
|
164
|
-
static int try_lcs(
|
|
165
|
-
|
|
166
|
-
unsigned int line1, unsigned int count1,
|
|
167
|
-
unsigned int line2, unsigned int count2)
|
|
156
|
+
static int try_lcs(struct histindex *index, struct region *lcs, int b_ptr,
|
|
157
|
+
int line1, int count1, int line2, int count2)
|
|
168
158
|
{
|
|
169
159
|
unsigned int b_next = b_ptr + 1;
|
|
170
160
|
struct record *rec = index->records[TABLE_HASH(index, 2, b_ptr)];
|
|
@@ -236,59 +226,33 @@ static int try_lcs(
|
|
|
236
226
|
return b_next;
|
|
237
227
|
}
|
|
238
228
|
|
|
239
|
-
static int
|
|
240
|
-
|
|
241
|
-
unsigned int line1, unsigned int count1,
|
|
242
|
-
unsigned int line2, unsigned int count2)
|
|
229
|
+
static int fall_back_to_classic_diff(xpparam_t const *xpp, xdfenv_t *env,
|
|
230
|
+
int line1, int count1, int line2, int count2)
|
|
243
231
|
{
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
if (scanA(index, line1, count1))
|
|
247
|
-
return -1;
|
|
248
|
-
|
|
249
|
-
index->cnt = index->max_chain_length + 1;
|
|
232
|
+
xpparam_t xpparam;
|
|
250
233
|
|
|
251
|
-
|
|
252
|
-
|
|
234
|
+
memset(&xpparam, 0, sizeof(xpparam));
|
|
235
|
+
xpparam.flags = xpp->flags & ~XDF_DIFF_ALGORITHM_MASK;
|
|
253
236
|
|
|
254
|
-
return
|
|
237
|
+
return xdl_fall_back_diff(env, &xpparam,
|
|
238
|
+
line1, count1, line2, count2);
|
|
255
239
|
}
|
|
256
240
|
|
|
257
|
-
static
|
|
258
|
-
int line1, int count1, int line2, int count2)
|
|
241
|
+
static inline void free_index(struct histindex *index)
|
|
259
242
|
{
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
line1, count1, line2, count2);
|
|
243
|
+
xdl_free(index->records);
|
|
244
|
+
xdl_free(index->line_map);
|
|
245
|
+
xdl_free(index->next_ptrs);
|
|
246
|
+
xdl_cha_free(&index->rcha);
|
|
265
247
|
}
|
|
266
248
|
|
|
267
|
-
static int
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
unsigned int line2, unsigned int count2)
|
|
249
|
+
static int find_lcs(xpparam_t const *xpp, xdfenv_t *env,
|
|
250
|
+
struct region *lcs,
|
|
251
|
+
int line1, int count1, int line2, int count2)
|
|
271
252
|
{
|
|
253
|
+
int b_ptr;
|
|
254
|
+
int sz, ret = -1;
|
|
272
255
|
struct histindex index;
|
|
273
|
-
struct region lcs;
|
|
274
|
-
size_t sz;
|
|
275
|
-
int result = -1;
|
|
276
|
-
|
|
277
|
-
if (count1 <= 0 && count2 <= 0)
|
|
278
|
-
return 0;
|
|
279
|
-
|
|
280
|
-
if (LINE_END(1) >= MAX_PTR)
|
|
281
|
-
return -1;
|
|
282
|
-
|
|
283
|
-
if (!count1) {
|
|
284
|
-
while(count2--)
|
|
285
|
-
env->xdf2.rchg[line2++ - 1] = 1;
|
|
286
|
-
return 0;
|
|
287
|
-
} else if (!count2) {
|
|
288
|
-
while(count1--)
|
|
289
|
-
env->xdf1.rchg[line1++ - 1] = 1;
|
|
290
|
-
return 0;
|
|
291
|
-
}
|
|
292
256
|
|
|
293
257
|
memset(&index, 0, sizeof(index));
|
|
294
258
|
|
|
@@ -302,8 +266,7 @@ static int histogram_diff(
|
|
|
302
266
|
|
|
303
267
|
index.table_bits = xdl_hashbits(count1);
|
|
304
268
|
sz = index.records_size = 1 << index.table_bits;
|
|
305
|
-
|
|
306
|
-
|
|
269
|
+
sz *= sizeof(struct record *);
|
|
307
270
|
if (!(index.records = (struct record **) xdl_malloc(sz)))
|
|
308
271
|
goto cleanup;
|
|
309
272
|
memset(index.records, 0, sz);
|
|
@@ -327,9 +290,55 @@ static int histogram_diff(
|
|
|
327
290
|
index.ptr_shift = line1;
|
|
328
291
|
index.max_chain_length = 64;
|
|
329
292
|
|
|
293
|
+
if (scanA(&index, line1, count1))
|
|
294
|
+
goto cleanup;
|
|
295
|
+
|
|
296
|
+
index.cnt = index.max_chain_length + 1;
|
|
297
|
+
|
|
298
|
+
for (b_ptr = line2; b_ptr <= LINE_END(2); )
|
|
299
|
+
b_ptr = try_lcs(&index, lcs, b_ptr, line1, count1, line2, count2);
|
|
300
|
+
|
|
301
|
+
if (index.has_common && index.max_chain_length < index.cnt)
|
|
302
|
+
ret = 1;
|
|
303
|
+
else
|
|
304
|
+
ret = 0;
|
|
305
|
+
|
|
306
|
+
cleanup:
|
|
307
|
+
free_index(&index);
|
|
308
|
+
return ret;
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
static int histogram_diff(xpparam_t const *xpp, xdfenv_t *env,
|
|
312
|
+
int line1, int count1, int line2, int count2)
|
|
313
|
+
{
|
|
314
|
+
struct region lcs;
|
|
315
|
+
int lcs_found;
|
|
316
|
+
int result;
|
|
317
|
+
redo:
|
|
318
|
+
result = -1;
|
|
319
|
+
|
|
320
|
+
if (count1 <= 0 && count2 <= 0)
|
|
321
|
+
return 0;
|
|
322
|
+
|
|
323
|
+
if (LINE_END(1) >= MAX_PTR)
|
|
324
|
+
return -1;
|
|
325
|
+
|
|
326
|
+
if (!count1) {
|
|
327
|
+
while(count2--)
|
|
328
|
+
env->xdf2.rchg[line2++ - 1] = 1;
|
|
329
|
+
return 0;
|
|
330
|
+
} else if (!count2) {
|
|
331
|
+
while(count1--)
|
|
332
|
+
env->xdf1.rchg[line1++ - 1] = 1;
|
|
333
|
+
return 0;
|
|
334
|
+
}
|
|
335
|
+
|
|
330
336
|
memset(&lcs, 0, sizeof(lcs));
|
|
331
|
-
|
|
332
|
-
|
|
337
|
+
lcs_found = find_lcs(xpp, env, &lcs, line1, count1, line2, count2);
|
|
338
|
+
if (lcs_found < 0)
|
|
339
|
+
goto out;
|
|
340
|
+
else if (lcs_found)
|
|
341
|
+
result = fall_back_to_classic_diff(xpp, env, line1, count1, line2, count2);
|
|
333
342
|
else {
|
|
334
343
|
if (lcs.begin1 == 0 && lcs.begin2 == 0) {
|
|
335
344
|
while (count1--)
|
|
@@ -342,21 +351,21 @@ static int histogram_diff(
|
|
|
342
351
|
line1, lcs.begin1 - line1,
|
|
343
352
|
line2, lcs.begin2 - line2);
|
|
344
353
|
if (result)
|
|
345
|
-
goto
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
354
|
+
goto out;
|
|
355
|
+
/*
|
|
356
|
+
* result = histogram_diff(xpp, env,
|
|
357
|
+
* lcs.end1 + 1, LINE_END(1) - lcs.end1,
|
|
358
|
+
* lcs.end2 + 1, LINE_END(2) - lcs.end2);
|
|
359
|
+
* but let's optimize tail recursion ourself:
|
|
360
|
+
*/
|
|
361
|
+
count1 = LINE_END(1) - lcs.end1;
|
|
362
|
+
line1 = lcs.end1 + 1;
|
|
363
|
+
count2 = LINE_END(2) - lcs.end2;
|
|
364
|
+
line2 = lcs.end2 + 1;
|
|
365
|
+
goto redo;
|
|
351
366
|
}
|
|
352
367
|
}
|
|
353
|
-
|
|
354
|
-
cleanup:
|
|
355
|
-
xdl_free(index.records);
|
|
356
|
-
xdl_free(index.line_map);
|
|
357
|
-
xdl_free(index.next_ptrs);
|
|
358
|
-
xdl_cha_free(&index.rcha);
|
|
359
|
-
|
|
368
|
+
out:
|
|
360
369
|
return result;
|
|
361
370
|
}
|
|
362
371
|
|
|
@@ -23,17 +23,7 @@
|
|
|
23
23
|
#if !defined(XINCLUDE_H)
|
|
24
24
|
#define XINCLUDE_H
|
|
25
25
|
|
|
26
|
-
#include
|
|
27
|
-
#include <stdio.h>
|
|
28
|
-
#include <stdlib.h>
|
|
29
|
-
#include <string.h>
|
|
30
|
-
#include <limits.h>
|
|
31
|
-
|
|
32
|
-
#ifdef _WIN32
|
|
33
|
-
#else
|
|
34
|
-
#include <unistd.h>
|
|
35
|
-
#endif
|
|
36
|
-
|
|
26
|
+
#include "git-xdiff.h"
|
|
37
27
|
#include "xmacros.h"
|
|
38
28
|
#include "xdiff.h"
|
|
39
29
|
#include "xtypes.h"
|
|
@@ -42,6 +32,5 @@
|
|
|
42
32
|
#include "xdiffi.h"
|
|
43
33
|
#include "xemit.h"
|
|
44
34
|
|
|
45
|
-
#include "common.h"
|
|
46
35
|
|
|
47
36
|
#endif /* #if !defined(XINCLUDE_H) */
|
|
@@ -88,7 +88,7 @@ static int xdl_cleanup_merge(xdmerge_t *c)
|
|
|
88
88
|
if (c->mode == 0)
|
|
89
89
|
count++;
|
|
90
90
|
next_c = c->next;
|
|
91
|
-
|
|
91
|
+
xdl_free(c);
|
|
92
92
|
}
|
|
93
93
|
return count;
|
|
94
94
|
}
|
|
@@ -109,53 +109,44 @@ static int xdl_merge_cmp_lines(xdfenv_t *xe1, int i1, xdfenv_t *xe2, int i2,
|
|
|
109
109
|
return 0;
|
|
110
110
|
}
|
|
111
111
|
|
|
112
|
-
static int xdl_recs_copy_0(
|
|
112
|
+
static int xdl_recs_copy_0(int use_orig, xdfenv_t *xe, int i, int count, int needs_cr, int add_nl, char *dest)
|
|
113
113
|
{
|
|
114
114
|
xrecord_t **recs;
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
*out = 0;
|
|
115
|
+
int size = 0;
|
|
118
116
|
|
|
119
117
|
recs = (use_orig ? xe->xdf1.recs : xe->xdf2.recs) + i;
|
|
120
118
|
|
|
121
119
|
if (count < 1)
|
|
122
120
|
return 0;
|
|
123
121
|
|
|
124
|
-
for (i = 0; i < count; )
|
|
122
|
+
for (i = 0; i < count; size += recs[i++]->size)
|
|
125
123
|
if (dest)
|
|
126
124
|
memcpy(dest + size, recs[i]->ptr, recs[i]->size);
|
|
127
|
-
|
|
128
|
-
GIT_ERROR_CHECK_ALLOC_ADD(&size, size, recs[i++]->size);
|
|
129
|
-
}
|
|
130
|
-
|
|
131
125
|
if (add_nl) {
|
|
132
126
|
i = recs[count - 1]->size;
|
|
133
127
|
if (i == 0 || recs[count - 1]->ptr[i - 1] != '\n') {
|
|
134
128
|
if (needs_cr) {
|
|
135
129
|
if (dest)
|
|
136
130
|
dest[size] = '\r';
|
|
137
|
-
|
|
131
|
+
size++;
|
|
138
132
|
}
|
|
139
133
|
|
|
140
134
|
if (dest)
|
|
141
135
|
dest[size] = '\n';
|
|
142
|
-
|
|
143
|
-
GIT_ERROR_CHECK_ALLOC_ADD(&size, size, 1);
|
|
136
|
+
size++;
|
|
144
137
|
}
|
|
145
138
|
}
|
|
146
|
-
|
|
147
|
-
*out = size;
|
|
148
|
-
return 0;
|
|
139
|
+
return size;
|
|
149
140
|
}
|
|
150
141
|
|
|
151
|
-
static int xdl_recs_copy(
|
|
142
|
+
static int xdl_recs_copy(xdfenv_t *xe, int i, int count, int needs_cr, int add_nl, char *dest)
|
|
152
143
|
{
|
|
153
|
-
return xdl_recs_copy_0(
|
|
144
|
+
return xdl_recs_copy_0(0, xe, i, count, needs_cr, add_nl, dest);
|
|
154
145
|
}
|
|
155
146
|
|
|
156
|
-
static int xdl_orig_copy(
|
|
147
|
+
static int xdl_orig_copy(xdfenv_t *xe, int i, int count, int needs_cr, int add_nl, char *dest)
|
|
157
148
|
{
|
|
158
|
-
return xdl_recs_copy_0(
|
|
149
|
+
return xdl_recs_copy_0(1, xe, i, count, needs_cr, add_nl, dest);
|
|
159
150
|
}
|
|
160
151
|
|
|
161
152
|
/*
|
|
@@ -202,32 +193,26 @@ static int is_cr_needed(xdfenv_t *xe1, xdfenv_t *xe2, xdmerge_t *m)
|
|
|
202
193
|
return needs_cr < 0 ? 0 : needs_cr;
|
|
203
194
|
}
|
|
204
195
|
|
|
205
|
-
static int fill_conflict_hunk(
|
|
196
|
+
static int fill_conflict_hunk(xdfenv_t *xe1, const char *name1,
|
|
206
197
|
xdfenv_t *xe2, const char *name2,
|
|
207
198
|
const char *name3,
|
|
208
|
-
|
|
199
|
+
int size, int i, int style,
|
|
209
200
|
xdmerge_t *m, char *dest, int marker_size)
|
|
210
201
|
{
|
|
211
|
-
int marker1_size = (name1 ?
|
|
212
|
-
int marker2_size = (name2 ?
|
|
213
|
-
int marker3_size = (name3 ?
|
|
202
|
+
int marker1_size = (name1 ? strlen(name1) + 1 : 0);
|
|
203
|
+
int marker2_size = (name2 ? strlen(name2) + 1 : 0);
|
|
204
|
+
int marker3_size = (name3 ? strlen(name3) + 1 : 0);
|
|
214
205
|
int needs_cr = is_cr_needed(xe1, xe2, m);
|
|
215
|
-
size_t copied;
|
|
216
|
-
|
|
217
|
-
*out = 0;
|
|
218
206
|
|
|
219
207
|
if (marker_size <= 0)
|
|
220
208
|
marker_size = DEFAULT_CONFLICT_MARKER_SIZE;
|
|
221
209
|
|
|
222
210
|
/* Before conflicting part */
|
|
223
|
-
|
|
224
|
-
dest ? dest + size : NULL)
|
|
225
|
-
return -1;
|
|
226
|
-
|
|
227
|
-
GIT_ERROR_CHECK_ALLOC_ADD(&size, size, copied);
|
|
211
|
+
size += xdl_recs_copy(xe1, i, m->i1 - i, 0, 0,
|
|
212
|
+
dest ? dest + size : NULL);
|
|
228
213
|
|
|
229
214
|
if (!dest) {
|
|
230
|
-
|
|
215
|
+
size += marker_size + 1 + needs_cr + marker1_size;
|
|
231
216
|
} else {
|
|
232
217
|
memset(dest + size, '<', marker_size);
|
|
233
218
|
size += marker_size;
|
|
@@ -242,16 +227,13 @@ static int fill_conflict_hunk(size_t *out, xdfenv_t *xe1, const char *name1,
|
|
|
242
227
|
}
|
|
243
228
|
|
|
244
229
|
/* Postimage from side #1 */
|
|
245
|
-
|
|
246
|
-
dest ? dest + size : NULL)
|
|
247
|
-
return -1;
|
|
230
|
+
size += xdl_recs_copy(xe1, m->i1, m->chg1, needs_cr, 1,
|
|
231
|
+
dest ? dest + size : NULL);
|
|
248
232
|
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
if (style == XDL_MERGE_DIFF3) {
|
|
233
|
+
if (style == XDL_MERGE_DIFF3 || style == XDL_MERGE_ZEALOUS_DIFF3) {
|
|
252
234
|
/* Shared preimage */
|
|
253
235
|
if (!dest) {
|
|
254
|
-
|
|
236
|
+
size += marker_size + 1 + needs_cr + marker3_size;
|
|
255
237
|
} else {
|
|
256
238
|
memset(dest + size, '|', marker_size);
|
|
257
239
|
size += marker_size;
|
|
@@ -264,15 +246,12 @@ static int fill_conflict_hunk(size_t *out, xdfenv_t *xe1, const char *name1,
|
|
|
264
246
|
dest[size++] = '\r';
|
|
265
247
|
dest[size++] = '\n';
|
|
266
248
|
}
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
dest ? dest + size : NULL) < 0)
|
|
270
|
-
return -1;
|
|
271
|
-
GIT_ERROR_CHECK_ALLOC_ADD(&size, size, copied);
|
|
249
|
+
size += xdl_orig_copy(xe1, m->i0, m->chg0, needs_cr, 1,
|
|
250
|
+
dest ? dest + size : NULL);
|
|
272
251
|
}
|
|
273
252
|
|
|
274
253
|
if (!dest) {
|
|
275
|
-
|
|
254
|
+
size += marker_size + 1 + needs_cr;
|
|
276
255
|
} else {
|
|
277
256
|
memset(dest + size, '=', marker_size);
|
|
278
257
|
size += marker_size;
|
|
@@ -282,14 +261,10 @@ static int fill_conflict_hunk(size_t *out, xdfenv_t *xe1, const char *name1,
|
|
|
282
261
|
}
|
|
283
262
|
|
|
284
263
|
/* Postimage from side #2 */
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
dest ? dest + size : NULL) < 0)
|
|
288
|
-
return -1;
|
|
289
|
-
GIT_ERROR_CHECK_ALLOC_ADD(&size, size, copied);
|
|
290
|
-
|
|
264
|
+
size += xdl_recs_copy(xe2, m->i2, m->chg2, needs_cr, 1,
|
|
265
|
+
dest ? dest + size : NULL);
|
|
291
266
|
if (!dest) {
|
|
292
|
-
|
|
267
|
+
size += marker_size + 1 + needs_cr + marker2_size;
|
|
293
268
|
} else {
|
|
294
269
|
memset(dest + size, '>', marker_size);
|
|
295
270
|
size += marker_size;
|
|
@@ -302,71 +277,83 @@ static int fill_conflict_hunk(size_t *out, xdfenv_t *xe1, const char *name1,
|
|
|
302
277
|
dest[size++] = '\r';
|
|
303
278
|
dest[size++] = '\n';
|
|
304
279
|
}
|
|
305
|
-
|
|
306
|
-
*out = size;
|
|
307
|
-
return 0;
|
|
280
|
+
return size;
|
|
308
281
|
}
|
|
309
282
|
|
|
310
|
-
static int xdl_fill_merge_buffer(
|
|
311
|
-
xdfenv_t *xe1, const char *name1,
|
|
283
|
+
static int xdl_fill_merge_buffer(xdfenv_t *xe1, const char *name1,
|
|
312
284
|
xdfenv_t *xe2, const char *name2,
|
|
313
285
|
const char *ancestor_name,
|
|
314
286
|
int favor,
|
|
315
287
|
xdmerge_t *m, char *dest, int style,
|
|
316
288
|
int marker_size)
|
|
317
289
|
{
|
|
318
|
-
|
|
319
|
-
int i;
|
|
320
|
-
|
|
321
|
-
*out = 0;
|
|
290
|
+
int size, i;
|
|
322
291
|
|
|
323
292
|
for (size = i = 0; m; m = m->next) {
|
|
324
293
|
if (favor && !m->mode)
|
|
325
294
|
m->mode = favor;
|
|
326
295
|
|
|
327
|
-
if (m->mode == 0)
|
|
328
|
-
|
|
296
|
+
if (m->mode == 0)
|
|
297
|
+
size = fill_conflict_hunk(xe1, name1, xe2, name2,
|
|
329
298
|
ancestor_name,
|
|
330
299
|
size, i, style, m, dest,
|
|
331
|
-
marker_size)
|
|
332
|
-
return -1;
|
|
333
|
-
}
|
|
300
|
+
marker_size);
|
|
334
301
|
else if (m->mode & 3) {
|
|
335
302
|
/* Before conflicting part */
|
|
336
|
-
|
|
337
|
-
dest ? dest + size : NULL)
|
|
338
|
-
return -1;
|
|
339
|
-
GIT_ERROR_CHECK_ALLOC_ADD(&size, size, copied);
|
|
340
|
-
|
|
303
|
+
size += xdl_recs_copy(xe1, i, m->i1 - i, 0, 0,
|
|
304
|
+
dest ? dest + size : NULL);
|
|
341
305
|
/* Postimage from side #1 */
|
|
342
306
|
if (m->mode & 1) {
|
|
343
307
|
int needs_cr = is_cr_needed(xe1, xe2, m);
|
|
344
308
|
|
|
345
|
-
|
|
346
|
-
dest ? dest + size : NULL)
|
|
347
|
-
return -1;
|
|
348
|
-
GIT_ERROR_CHECK_ALLOC_ADD(&size, size, copied);
|
|
309
|
+
size += xdl_recs_copy(xe1, m->i1, m->chg1, needs_cr, (m->mode & 2),
|
|
310
|
+
dest ? dest + size : NULL);
|
|
349
311
|
}
|
|
350
|
-
|
|
351
312
|
/* Postimage from side #2 */
|
|
352
|
-
if (m->mode & 2)
|
|
353
|
-
|
|
354
|
-
dest ? dest + size : NULL)
|
|
355
|
-
return -1;
|
|
356
|
-
GIT_ERROR_CHECK_ALLOC_ADD(&size, size, copied);
|
|
357
|
-
}
|
|
313
|
+
if (m->mode & 2)
|
|
314
|
+
size += xdl_recs_copy(xe2, m->i2, m->chg2, 0, 0,
|
|
315
|
+
dest ? dest + size : NULL);
|
|
358
316
|
} else
|
|
359
317
|
continue;
|
|
360
318
|
i = m->i1 + m->chg1;
|
|
361
319
|
}
|
|
320
|
+
size += xdl_recs_copy(xe1, i, xe1->xdf2.nrec - i, 0, 0,
|
|
321
|
+
dest ? dest + size : NULL);
|
|
322
|
+
return size;
|
|
323
|
+
}
|
|
362
324
|
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
325
|
+
static int recmatch(xrecord_t *rec1, xrecord_t *rec2, unsigned long flags)
|
|
326
|
+
{
|
|
327
|
+
return xdl_recmatch(rec1->ptr, rec1->size,
|
|
328
|
+
rec2->ptr, rec2->size, flags);
|
|
329
|
+
}
|
|
367
330
|
|
|
368
|
-
|
|
369
|
-
|
|
331
|
+
/*
|
|
332
|
+
* Remove any common lines from the beginning and end of the conflicted region.
|
|
333
|
+
*/
|
|
334
|
+
static void xdl_refine_zdiff3_conflicts(xdfenv_t *xe1, xdfenv_t *xe2, xdmerge_t *m,
|
|
335
|
+
xpparam_t const *xpp)
|
|
336
|
+
{
|
|
337
|
+
xrecord_t **rec1 = xe1->xdf2.recs, **rec2 = xe2->xdf2.recs;
|
|
338
|
+
for (; m; m = m->next) {
|
|
339
|
+
/* let's handle just the conflicts */
|
|
340
|
+
if (m->mode)
|
|
341
|
+
continue;
|
|
342
|
+
|
|
343
|
+
while(m->chg1 && m->chg2 &&
|
|
344
|
+
recmatch(rec1[m->i1], rec2[m->i2], xpp->flags)) {
|
|
345
|
+
m->chg1--;
|
|
346
|
+
m->chg2--;
|
|
347
|
+
m->i1++;
|
|
348
|
+
m->i2++;
|
|
349
|
+
}
|
|
350
|
+
while (m->chg1 && m->chg2 &&
|
|
351
|
+
recmatch(rec1[m->i1 + m->chg1 - 1],
|
|
352
|
+
rec2[m->i2 + m->chg2 - 1], xpp->flags)) {
|
|
353
|
+
m->chg1--;
|
|
354
|
+
m->chg2--;
|
|
355
|
+
}
|
|
356
|
+
}
|
|
370
357
|
}
|
|
371
358
|
|
|
372
359
|
/*
|
|
@@ -469,7 +456,7 @@ static void xdl_merge_two_conflicts(xdmerge_t *m)
|
|
|
469
456
|
m->chg1 = next_m->i1 + next_m->chg1 - m->i1;
|
|
470
457
|
m->chg2 = next_m->i2 + next_m->chg2 - m->i2;
|
|
471
458
|
m->next = next_m->next;
|
|
472
|
-
|
|
459
|
+
xdl_free(next_m);
|
|
473
460
|
}
|
|
474
461
|
|
|
475
462
|
/*
|
|
@@ -529,7 +516,22 @@ static int xdl_do_merge(xdfenv_t *xe1, xdchange_t *xscr1,
|
|
|
529
516
|
int style = xmp->style;
|
|
530
517
|
int favor = xmp->favor;
|
|
531
518
|
|
|
532
|
-
|
|
519
|
+
/*
|
|
520
|
+
* XDL_MERGE_DIFF3 does not attempt to refine conflicts by looking
|
|
521
|
+
* at common areas of sides 1 & 2, because the base (side 0) does
|
|
522
|
+
* not match and is being shown. Similarly, simplification of
|
|
523
|
+
* non-conflicts is also skipped due to the skipping of conflict
|
|
524
|
+
* refinement.
|
|
525
|
+
*
|
|
526
|
+
* XDL_MERGE_ZEALOUS_DIFF3, on the other hand, will attempt to
|
|
527
|
+
* refine conflicts looking for common areas of sides 1 & 2.
|
|
528
|
+
* However, since the base is being shown and does not match,
|
|
529
|
+
* it will only look for common areas at the beginning or end
|
|
530
|
+
* of the conflict block. Since XDL_MERGE_ZEALOUS_DIFF3's
|
|
531
|
+
* conflict refinement is much more limited in this fashion, the
|
|
532
|
+
* conflict simplification will be skipped.
|
|
533
|
+
*/
|
|
534
|
+
if (style == XDL_MERGE_DIFF3 || style == XDL_MERGE_ZEALOUS_DIFF3) {
|
|
533
535
|
/*
|
|
534
536
|
* "diff3 -m" output does not make sense for anything
|
|
535
537
|
* more aggressive than XDL_MERGE_EAGER.
|
|
@@ -650,34 +652,31 @@ static int xdl_do_merge(xdfenv_t *xe1, xdchange_t *xscr1,
|
|
|
650
652
|
if (!changes)
|
|
651
653
|
changes = c;
|
|
652
654
|
/* refine conflicts */
|
|
653
|
-
if (
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
655
|
+
if (style == XDL_MERGE_ZEALOUS_DIFF3) {
|
|
656
|
+
xdl_refine_zdiff3_conflicts(xe1, xe2, changes, xpp);
|
|
657
|
+
} else if (XDL_MERGE_ZEALOUS <= level &&
|
|
658
|
+
(xdl_refine_conflicts(xe1, xe2, changes, xpp) < 0 ||
|
|
659
|
+
xdl_simplify_non_conflicts(xe1, changes,
|
|
660
|
+
XDL_MERGE_ZEALOUS < level) < 0)) {
|
|
657
661
|
xdl_cleanup_merge(changes);
|
|
658
662
|
return -1;
|
|
659
663
|
}
|
|
660
664
|
/* output */
|
|
661
665
|
if (result) {
|
|
662
666
|
int marker_size = xmp->marker_size;
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
if (xdl_fill_merge_buffer(&size, xe1, name1, xe2, name2,
|
|
667
|
+
int size = xdl_fill_merge_buffer(xe1, name1, xe2, name2,
|
|
666
668
|
ancestor_name,
|
|
667
669
|
favor, changes, NULL, style,
|
|
668
|
-
marker_size)
|
|
669
|
-
return -1;
|
|
670
|
-
|
|
670
|
+
marker_size);
|
|
671
671
|
result->ptr = xdl_malloc(size);
|
|
672
672
|
if (!result->ptr) {
|
|
673
673
|
xdl_cleanup_merge(changes);
|
|
674
674
|
return -1;
|
|
675
675
|
}
|
|
676
676
|
result->size = size;
|
|
677
|
-
|
|
677
|
+
xdl_fill_merge_buffer(xe1, name1, xe2, name2,
|
|
678
678
|
ancestor_name, favor, changes,
|
|
679
|
-
result->ptr, style, marker_size)
|
|
680
|
-
return -1;
|
|
679
|
+
result->ptr, style, marker_size);
|
|
681
680
|
}
|
|
682
681
|
return xdl_cleanup_merge(changes);
|
|
683
682
|
}
|
|
@@ -717,22 +716,10 @@ int xdl_merge(mmfile_t *orig, mmfile_t *mf1, mmfile_t *mf2,
|
|
|
717
716
|
status = 0;
|
|
718
717
|
if (!xscr1) {
|
|
719
718
|
result->ptr = xdl_malloc(mf2->size);
|
|
720
|
-
if (!result->ptr) {
|
|
721
|
-
xdl_free_script(xscr2);
|
|
722
|
-
xdl_free_env(&xe1);
|
|
723
|
-
xdl_free_env(&xe2);
|
|
724
|
-
return -1;
|
|
725
|
-
}
|
|
726
719
|
memcpy(result->ptr, mf2->ptr, mf2->size);
|
|
727
720
|
result->size = mf2->size;
|
|
728
721
|
} else if (!xscr2) {
|
|
729
722
|
result->ptr = xdl_malloc(mf1->size);
|
|
730
|
-
if (!result->ptr) {
|
|
731
|
-
xdl_free_script(xscr1);
|
|
732
|
-
xdl_free_env(&xe1);
|
|
733
|
-
xdl_free_env(&xe2);
|
|
734
|
-
return -1;
|
|
735
|
-
}
|
|
736
723
|
memcpy(result->ptr, mf1->ptr, mf1->size);
|
|
737
724
|
result->size = mf1->size;
|
|
738
725
|
} else {
|