rugged 0.27.9 → 0.27.10
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/lib/rugged/version.rb +1 -1
- data/vendor/libgit2/AUTHORS +1 -0
- data/vendor/libgit2/CMakeLists.txt +98 -54
- data/vendor/libgit2/COPYING +28 -0
- data/vendor/libgit2/cmake/Modules/AddCFlagIfSupported.cmake +15 -1
- data/vendor/libgit2/cmake/Modules/EnableWarnings.cmake +9 -8
- data/vendor/libgit2/cmake/Modules/FindCoreFoundation.cmake +2 -2
- data/vendor/libgit2/cmake/Modules/FindGSSAPI.cmake +1 -1
- data/vendor/libgit2/cmake/Modules/FindGSSFramework.cmake +28 -0
- data/vendor/libgit2/cmake/Modules/FindPCRE.cmake +38 -0
- data/vendor/libgit2/cmake/Modules/FindPCRE2.cmake +37 -0
- data/vendor/libgit2/cmake/Modules/FindSecurity.cmake +2 -2
- data/vendor/libgit2/cmake/Modules/FindStatNsec.cmake +6 -0
- data/vendor/libgit2/cmake/Modules/FindmbedTLS.cmake +93 -0
- data/vendor/libgit2/cmake/Modules/PkgBuildConfig.cmake +110 -0
- data/vendor/libgit2/cmake/Modules/SelectGSSAPI.cmake +53 -0
- data/vendor/libgit2/cmake/Modules/SelectHTTPSBackend.cmake +124 -0
- data/vendor/libgit2/cmake/Modules/SelectHashes.cmake +66 -0
- data/vendor/libgit2/deps/http-parser/CMakeLists.txt +2 -0
- data/vendor/libgit2/deps/http-parser/{LICENSE-MIT → COPYING} +0 -0
- data/vendor/libgit2/deps/http-parser/http_parser.c +11 -6
- data/vendor/libgit2/deps/ntlmclient/CMakeLists.txt +21 -0
- data/vendor/libgit2/deps/ntlmclient/compat.h +33 -0
- data/vendor/libgit2/deps/ntlmclient/crypt.h +64 -0
- data/vendor/libgit2/deps/ntlmclient/crypt_commoncrypto.c +120 -0
- data/vendor/libgit2/deps/ntlmclient/crypt_commoncrypto.h +18 -0
- data/vendor/libgit2/deps/ntlmclient/crypt_mbedtls.c +145 -0
- data/vendor/libgit2/deps/ntlmclient/crypt_mbedtls.h +18 -0
- data/vendor/libgit2/deps/ntlmclient/crypt_openssl.c +130 -0
- data/vendor/libgit2/deps/ntlmclient/crypt_openssl.h +21 -0
- data/vendor/libgit2/deps/ntlmclient/ntlm.c +1420 -0
- data/vendor/libgit2/deps/ntlmclient/ntlm.h +174 -0
- data/vendor/libgit2/deps/ntlmclient/ntlmclient.h +320 -0
- data/vendor/libgit2/deps/ntlmclient/unicode.h +36 -0
- data/vendor/libgit2/deps/ntlmclient/unicode_builtin.c +445 -0
- data/vendor/libgit2/deps/ntlmclient/unicode_iconv.c +201 -0
- data/vendor/libgit2/deps/ntlmclient/utf8.h +1257 -0
- data/vendor/libgit2/deps/ntlmclient/util.c +21 -0
- data/vendor/libgit2/deps/ntlmclient/util.h +14 -0
- data/vendor/libgit2/deps/pcre/CMakeLists.txt +140 -0
- data/vendor/libgit2/deps/pcre/COPYING +5 -0
- data/vendor/libgit2/deps/pcre/cmake/COPYING-CMAKE-SCRIPTS +22 -0
- data/vendor/libgit2/deps/pcre/cmake/FindEditline.cmake +17 -0
- data/vendor/libgit2/deps/pcre/cmake/FindPackageHandleStandardArgs.cmake +58 -0
- data/vendor/libgit2/deps/pcre/cmake/FindReadline.cmake +29 -0
- data/vendor/libgit2/deps/pcre/config.h.in +57 -0
- data/vendor/libgit2/deps/pcre/pcre.h +641 -0
- data/vendor/libgit2/deps/pcre/pcre_byte_order.c +319 -0
- data/vendor/libgit2/deps/pcre/pcre_chartables.c +198 -0
- data/vendor/libgit2/deps/pcre/pcre_compile.c +9800 -0
- data/vendor/libgit2/deps/pcre/pcre_config.c +190 -0
- data/vendor/libgit2/deps/pcre/pcre_dfa_exec.c +3676 -0
- data/vendor/libgit2/deps/pcre/pcre_exec.c +7173 -0
- data/vendor/libgit2/deps/pcre/pcre_fullinfo.c +245 -0
- data/vendor/libgit2/deps/pcre/pcre_get.c +669 -0
- data/vendor/libgit2/deps/pcre/pcre_globals.c +86 -0
- data/vendor/libgit2/deps/pcre/pcre_internal.h +2787 -0
- data/vendor/libgit2/deps/pcre/pcre_jit_compile.c +11913 -0
- data/vendor/libgit2/deps/pcre/pcre_maketables.c +156 -0
- data/vendor/libgit2/deps/pcre/pcre_newline.c +210 -0
- data/vendor/libgit2/deps/pcre/pcre_ord2utf8.c +94 -0
- data/vendor/libgit2/deps/pcre/pcre_printint.c +834 -0
- data/vendor/libgit2/deps/pcre/pcre_refcount.c +92 -0
- data/vendor/libgit2/deps/pcre/pcre_string_utils.c +211 -0
- data/vendor/libgit2/deps/pcre/pcre_study.c +1686 -0
- data/vendor/libgit2/deps/pcre/pcre_tables.c +727 -0
- data/vendor/libgit2/deps/pcre/pcre_ucd.c +3644 -0
- data/vendor/libgit2/deps/pcre/pcre_valid_utf8.c +301 -0
- data/vendor/libgit2/deps/pcre/pcre_version.c +98 -0
- data/vendor/libgit2/deps/pcre/pcre_xclass.c +268 -0
- data/vendor/libgit2/deps/pcre/pcreposix.c +421 -0
- data/vendor/libgit2/deps/pcre/pcreposix.h +117 -0
- data/vendor/libgit2/deps/pcre/ucp.h +224 -0
- data/vendor/libgit2/deps/winhttp/COPYING.GPL +993 -0
- data/vendor/libgit2/deps/winhttp/COPYING.LGPL +502 -0
- data/vendor/libgit2/deps/zlib/CMakeLists.txt +1 -0
- data/vendor/libgit2/deps/zlib/COPYING +27 -0
- data/vendor/libgit2/deps/zlib/adler32.c +0 -7
- data/vendor/libgit2/deps/zlib/crc32.c +0 -7
- data/vendor/libgit2/include/git2.h +5 -0
- data/vendor/libgit2/include/git2/annotated_commit.h +9 -0
- data/vendor/libgit2/include/git2/apply.h +149 -0
- data/vendor/libgit2/include/git2/attr.h +38 -20
- data/vendor/libgit2/include/git2/blame.h +42 -25
- data/vendor/libgit2/include/git2/blob.h +45 -13
- data/vendor/libgit2/include/git2/branch.h +1 -1
- data/vendor/libgit2/include/git2/buffer.h +22 -16
- data/vendor/libgit2/include/git2/cert.h +135 -0
- data/vendor/libgit2/include/git2/checkout.h +65 -32
- data/vendor/libgit2/include/git2/cherrypick.h +9 -7
- data/vendor/libgit2/include/git2/clone.h +12 -10
- data/vendor/libgit2/include/git2/commit.h +53 -3
- data/vendor/libgit2/include/git2/common.h +60 -8
- data/vendor/libgit2/include/git2/config.h +30 -19
- data/vendor/libgit2/include/git2/cred.h +308 -0
- data/vendor/libgit2/include/git2/deprecated.h +493 -0
- data/vendor/libgit2/include/git2/describe.h +32 -9
- data/vendor/libgit2/include/git2/diff.h +208 -156
- data/vendor/libgit2/include/git2/errors.h +54 -46
- data/vendor/libgit2/include/git2/filter.h +8 -0
- data/vendor/libgit2/include/git2/ignore.h +2 -2
- data/vendor/libgit2/include/git2/index.h +74 -52
- data/vendor/libgit2/include/git2/indexer.h +76 -6
- data/vendor/libgit2/include/git2/mailmap.h +115 -0
- data/vendor/libgit2/include/git2/merge.h +35 -18
- data/vendor/libgit2/include/git2/net.h +0 -5
- data/vendor/libgit2/include/git2/notes.h +1 -1
- data/vendor/libgit2/include/git2/object.h +17 -29
- data/vendor/libgit2/include/git2/odb.h +12 -11
- data/vendor/libgit2/include/git2/odb_backend.h +10 -9
- data/vendor/libgit2/include/git2/oid.h +2 -2
- data/vendor/libgit2/include/git2/pack.h +14 -3
- data/vendor/libgit2/include/git2/proxy.h +14 -8
- data/vendor/libgit2/include/git2/rebase.h +53 -6
- data/vendor/libgit2/include/git2/refs.h +33 -15
- data/vendor/libgit2/include/git2/refspec.h +17 -0
- data/vendor/libgit2/include/git2/remote.h +123 -24
- data/vendor/libgit2/include/git2/repository.h +76 -39
- data/vendor/libgit2/include/git2/revert.h +6 -4
- data/vendor/libgit2/include/git2/revwalk.h +7 -7
- data/vendor/libgit2/include/git2/signature.h +2 -2
- data/vendor/libgit2/include/git2/stash.h +15 -12
- data/vendor/libgit2/include/git2/status.h +33 -20
- data/vendor/libgit2/include/git2/submodule.h +30 -12
- data/vendor/libgit2/include/git2/sys/alloc.h +101 -0
- data/vendor/libgit2/include/git2/sys/commit.h +1 -1
- data/vendor/libgit2/include/git2/sys/config.h +13 -13
- data/vendor/libgit2/include/git2/sys/cred.h +90 -0
- data/vendor/libgit2/include/git2/sys/filter.h +6 -6
- data/vendor/libgit2/include/git2/sys/index.h +3 -0
- data/vendor/libgit2/include/git2/sys/mempack.h +35 -35
- data/vendor/libgit2/include/git2/sys/merge.h +9 -4
- data/vendor/libgit2/include/git2/sys/odb_backend.h +66 -22
- data/vendor/libgit2/include/git2/sys/path.h +64 -0
- data/vendor/libgit2/include/git2/sys/refdb_backend.h +76 -40
- data/vendor/libgit2/include/git2/sys/repository.h +5 -1
- data/vendor/libgit2/include/git2/sys/stream.h +92 -12
- data/vendor/libgit2/include/git2/sys/transport.h +129 -83
- data/vendor/libgit2/include/git2/tag.h +13 -4
- data/vendor/libgit2/include/git2/trace.h +2 -2
- data/vendor/libgit2/include/git2/transaction.h +1 -0
- data/vendor/libgit2/include/git2/transport.h +11 -311
- data/vendor/libgit2/include/git2/tree.h +4 -4
- data/vendor/libgit2/include/git2/types.h +33 -111
- data/vendor/libgit2/include/git2/version.h +4 -4
- data/vendor/libgit2/include/git2/worktree.h +48 -13
- data/vendor/libgit2/src/CMakeLists.txt +96 -164
- data/vendor/libgit2/src/alloc.c +43 -0
- data/vendor/libgit2/src/alloc.h +40 -0
- data/vendor/libgit2/src/allocators/stdalloc.c +119 -0
- data/vendor/libgit2/src/{streams/curl.h → allocators/stdalloc.h} +5 -5
- data/vendor/libgit2/src/allocators/win32_crtdbg.c +118 -0
- data/vendor/libgit2/src/{transports/cred.h → allocators/win32_crtdbg.h} +5 -4
- data/vendor/libgit2/src/annotated_commit.c +15 -8
- data/vendor/libgit2/src/apply.c +537 -31
- data/vendor/libgit2/src/apply.h +3 -1
- data/vendor/libgit2/src/array.h +2 -2
- data/vendor/libgit2/src/attr.c +81 -75
- data/vendor/libgit2/src/attr_file.c +207 -121
- data/vendor/libgit2/src/attr_file.h +9 -9
- data/vendor/libgit2/src/attrcache.c +51 -53
- data/vendor/libgit2/src/attrcache.h +2 -1
- data/vendor/libgit2/src/blame.c +47 -20
- data/vendor/libgit2/src/blame.h +2 -1
- data/vendor/libgit2/src/blame_git.c +37 -20
- data/vendor/libgit2/src/blob.c +128 -42
- data/vendor/libgit2/src/blob.h +19 -2
- data/vendor/libgit2/src/branch.c +67 -43
- data/vendor/libgit2/src/buf_text.c +7 -6
- data/vendor/libgit2/src/buffer.c +69 -57
- data/vendor/libgit2/src/buffer.h +1 -1
- data/vendor/libgit2/src/cache.c +38 -45
- data/vendor/libgit2/src/cache.h +3 -3
- data/vendor/libgit2/src/cc-compat.h +20 -3
- data/vendor/libgit2/src/checkout.c +109 -90
- data/vendor/libgit2/src/cherrypick.c +15 -9
- data/vendor/libgit2/src/clone.c +49 -27
- data/vendor/libgit2/src/clone.h +4 -0
- data/vendor/libgit2/src/commit.c +117 -49
- data/vendor/libgit2/src/commit.h +7 -0
- data/vendor/libgit2/src/commit_list.c +30 -78
- data/vendor/libgit2/src/commit_list.h +2 -2
- data/vendor/libgit2/src/common.h +27 -91
- data/vendor/libgit2/src/config.c +194 -176
- data/vendor/libgit2/src/config.h +8 -20
- data/vendor/libgit2/src/config_backend.h +96 -0
- data/vendor/libgit2/src/config_cache.c +41 -35
- data/vendor/libgit2/src/config_entries.c +229 -0
- data/vendor/libgit2/src/config_entries.h +24 -0
- data/vendor/libgit2/src/config_file.c +439 -753
- data/vendor/libgit2/src/config_mem.c +220 -0
- data/vendor/libgit2/src/config_parse.c +114 -63
- data/vendor/libgit2/src/config_parse.h +17 -16
- data/vendor/libgit2/src/config_snapshot.c +206 -0
- data/vendor/libgit2/src/crlf.c +219 -190
- data/vendor/libgit2/src/delta.c +25 -18
- data/vendor/libgit2/src/describe.c +42 -41
- data/vendor/libgit2/src/diff.c +53 -68
- data/vendor/libgit2/src/diff.h +2 -1
- data/vendor/libgit2/src/diff_driver.c +47 -49
- data/vendor/libgit2/src/diff_file.c +19 -17
- data/vendor/libgit2/src/diff_file.h +1 -1
- data/vendor/libgit2/src/diff_generate.c +162 -106
- data/vendor/libgit2/src/diff_generate.h +3 -3
- data/vendor/libgit2/src/diff_parse.c +4 -4
- data/vendor/libgit2/src/diff_print.c +42 -30
- data/vendor/libgit2/src/diff_stats.c +22 -7
- data/vendor/libgit2/src/diff_tform.c +16 -16
- data/vendor/libgit2/src/diff_xdiff.c +15 -3
- data/vendor/libgit2/src/errors.c +51 -39
- data/vendor/libgit2/src/errors.h +81 -0
- data/vendor/libgit2/src/features.h.in +11 -3
- data/vendor/libgit2/src/fetch.c +10 -5
- data/vendor/libgit2/src/fetchhead.c +17 -17
- data/vendor/libgit2/src/filebuf.c +32 -36
- data/vendor/libgit2/src/filebuf.h +2 -2
- data/vendor/libgit2/src/filter.c +46 -38
- data/vendor/libgit2/src/filter.h +0 -10
- data/vendor/libgit2/src/{fileops.c → futils.c} +80 -73
- data/vendor/libgit2/src/{fileops.h → futils.h} +6 -6
- data/vendor/libgit2/src/global.c +48 -63
- data/vendor/libgit2/src/global.h +0 -2
- data/vendor/libgit2/src/hash.c +61 -0
- data/vendor/libgit2/src/hash.h +20 -19
- data/vendor/libgit2/src/hash/sha1.h +38 -0
- data/vendor/libgit2/src/hash/sha1/collisiondetect.c +48 -0
- data/vendor/libgit2/src/hash/sha1/collisiondetect.h +19 -0
- data/vendor/libgit2/src/hash/{hash_common_crypto.h → sha1/common_crypto.c} +17 -17
- data/vendor/libgit2/src/hash/sha1/common_crypto.h +19 -0
- data/vendor/libgit2/src/hash/{hash_generic.c → sha1/generic.c} +22 -10
- data/vendor/libgit2/src/hash/{hash_generic.h → sha1/generic.h} +4 -10
- data/vendor/libgit2/src/hash/sha1/mbedtls.c +46 -0
- data/vendor/libgit2/src/hash/sha1/mbedtls.h +19 -0
- data/vendor/libgit2/src/hash/sha1/openssl.c +59 -0
- data/vendor/libgit2/src/hash/sha1/openssl.h +19 -0
- data/vendor/libgit2/src/hash/{sha1dc → sha1/sha1dc}/sha1.c +14 -3
- data/vendor/libgit2/src/hash/{sha1dc → sha1/sha1dc}/sha1.h +0 -0
- data/vendor/libgit2/src/hash/{sha1dc → sha1/sha1dc}/ubc_check.c +0 -0
- data/vendor/libgit2/src/hash/{sha1dc → sha1/sha1dc}/ubc_check.h +0 -0
- data/vendor/libgit2/src/hash/{hash_win32.c → sha1/win32.c} +47 -37
- data/vendor/libgit2/src/hash/{hash_win32.h → sha1/win32.h} +6 -19
- data/vendor/libgit2/src/hashsig.c +5 -5
- data/vendor/libgit2/src/idxmap.c +107 -61
- data/vendor/libgit2/src/idxmap.h +153 -31
- data/vendor/libgit2/src/ignore.c +43 -47
- data/vendor/libgit2/src/index.c +337 -232
- data/vendor/libgit2/src/index.h +17 -1
- data/vendor/libgit2/src/indexer.c +346 -175
- data/vendor/libgit2/src/integer.h +71 -26
- data/vendor/libgit2/src/iterator.c +142 -70
- data/vendor/libgit2/src/iterator.h +15 -0
- data/vendor/libgit2/src/khash.h +3 -1
- data/vendor/libgit2/src/mailmap.c +485 -0
- data/vendor/libgit2/src/mailmap.h +35 -0
- data/vendor/libgit2/src/map.h +1 -1
- data/vendor/libgit2/src/merge.c +144 -100
- data/vendor/libgit2/src/merge_driver.c +11 -11
- data/vendor/libgit2/src/merge_file.c +2 -2
- data/vendor/libgit2/src/mwindow.c +24 -29
- data/vendor/libgit2/src/mwindow.h +4 -4
- data/vendor/libgit2/src/net.c +184 -0
- data/vendor/libgit2/src/net.h +36 -0
- data/vendor/libgit2/src/netops.c +55 -156
- data/vendor/libgit2/src/netops.h +3 -23
- data/vendor/libgit2/src/notes.c +16 -11
- data/vendor/libgit2/src/object.c +120 -69
- data/vendor/libgit2/src/object.h +22 -9
- data/vendor/libgit2/src/object_api.c +8 -8
- data/vendor/libgit2/src/odb.c +116 -93
- data/vendor/libgit2/src/odb.h +8 -7
- data/vendor/libgit2/src/odb_loose.c +62 -55
- data/vendor/libgit2/src/odb_mempack.c +21 -34
- data/vendor/libgit2/src/odb_pack.c +18 -14
- data/vendor/libgit2/src/offmap.c +53 -35
- data/vendor/libgit2/src/offmap.h +108 -21
- data/vendor/libgit2/src/oid.c +12 -7
- data/vendor/libgit2/src/oidmap.c +49 -47
- data/vendor/libgit2/src/oidmap.h +101 -24
- data/vendor/libgit2/src/pack-objects.c +88 -87
- data/vendor/libgit2/src/pack-objects.h +2 -8
- data/vendor/libgit2/src/pack.c +99 -101
- data/vendor/libgit2/src/pack.h +17 -19
- data/vendor/libgit2/src/parse.c +10 -0
- data/vendor/libgit2/src/parse.h +3 -3
- data/vendor/libgit2/src/patch.c +4 -4
- data/vendor/libgit2/src/patch_generate.c +20 -20
- data/vendor/libgit2/src/patch_parse.c +151 -63
- data/vendor/libgit2/src/path.c +169 -125
- data/vendor/libgit2/src/path.h +3 -71
- data/vendor/libgit2/src/pathspec.c +19 -19
- data/vendor/libgit2/src/pool.c +26 -22
- data/vendor/libgit2/src/pool.h +7 -7
- data/vendor/libgit2/src/posix.c +10 -10
- data/vendor/libgit2/src/posix.h +12 -1
- data/vendor/libgit2/src/proxy.c +8 -3
- data/vendor/libgit2/src/push.c +37 -31
- data/vendor/libgit2/src/push.h +2 -1
- data/vendor/libgit2/src/reader.c +265 -0
- data/vendor/libgit2/src/reader.h +107 -0
- data/vendor/libgit2/src/rebase.c +115 -59
- data/vendor/libgit2/src/refdb.c +15 -3
- data/vendor/libgit2/src/refdb_fs.c +381 -254
- data/vendor/libgit2/src/reflog.c +13 -15
- data/vendor/libgit2/src/refs.c +118 -88
- data/vendor/libgit2/src/refs.h +5 -3
- data/vendor/libgit2/src/refspec.c +56 -37
- data/vendor/libgit2/src/refspec.h +1 -1
- data/vendor/libgit2/src/regexp.c +221 -0
- data/vendor/libgit2/src/regexp.h +97 -0
- data/vendor/libgit2/src/remote.c +266 -215
- data/vendor/libgit2/src/remote.h +11 -2
- data/vendor/libgit2/src/repository.c +280 -225
- data/vendor/libgit2/src/repository.h +52 -40
- data/vendor/libgit2/src/reset.c +8 -8
- data/vendor/libgit2/src/revert.c +14 -9
- data/vendor/libgit2/src/revparse.c +47 -48
- data/vendor/libgit2/src/revwalk.c +120 -57
- data/vendor/libgit2/src/revwalk.h +22 -1
- data/vendor/libgit2/src/settings.c +47 -10
- data/vendor/libgit2/src/signature.c +11 -11
- data/vendor/libgit2/src/sortedcache.c +22 -36
- data/vendor/libgit2/src/sortedcache.h +1 -1
- data/vendor/libgit2/src/stash.c +125 -99
- data/vendor/libgit2/src/status.c +28 -22
- data/vendor/libgit2/src/stream.h +17 -2
- data/vendor/libgit2/src/streams/mbedtls.c +483 -0
- data/vendor/libgit2/src/streams/mbedtls.h +23 -0
- data/vendor/libgit2/src/streams/openssl.c +224 -114
- data/vendor/libgit2/src/streams/openssl.h +4 -108
- data/vendor/libgit2/src/streams/registry.c +118 -0
- data/vendor/libgit2/src/streams/registry.h +19 -0
- data/vendor/libgit2/src/streams/socket.c +55 -30
- data/vendor/libgit2/src/streams/stransport.c +57 -32
- data/vendor/libgit2/src/streams/stransport.h +5 -0
- data/vendor/libgit2/src/streams/tls.c +50 -19
- data/vendor/libgit2/src/streams/tls.h +12 -4
- data/vendor/libgit2/src/strmap.c +47 -74
- data/vendor/libgit2/src/strmap.h +108 -33
- data/vendor/libgit2/src/submodule.c +272 -216
- data/vendor/libgit2/src/submodule.h +1 -1
- data/vendor/libgit2/src/sysdir.c +29 -19
- data/vendor/libgit2/src/tag.c +41 -28
- data/vendor/libgit2/src/tag.h +2 -1
- data/vendor/libgit2/src/trace.c +2 -2
- data/vendor/libgit2/src/trace.h +3 -3
- data/vendor/libgit2/src/trailer.c +52 -38
- data/vendor/libgit2/src/transaction.c +30 -29
- data/vendor/libgit2/src/transport.c +5 -5
- data/vendor/libgit2/src/transports/auth.c +15 -11
- data/vendor/libgit2/src/transports/auth.h +10 -3
- data/vendor/libgit2/src/transports/auth_negotiate.c +33 -18
- data/vendor/libgit2/src/transports/auth_negotiate.h +2 -2
- data/vendor/libgit2/src/transports/auth_ntlm.c +223 -0
- data/vendor/libgit2/src/transports/auth_ntlm.h +35 -0
- data/vendor/libgit2/src/transports/cred.c +24 -24
- data/vendor/libgit2/src/transports/git.c +26 -31
- data/vendor/libgit2/src/transports/http.c +881 -348
- data/vendor/libgit2/src/transports/http.h +2 -0
- data/vendor/libgit2/src/transports/local.c +35 -35
- data/vendor/libgit2/src/transports/smart.c +70 -47
- data/vendor/libgit2/src/transports/smart.h +3 -4
- data/vendor/libgit2/src/transports/smart_pkt.c +43 -40
- data/vendor/libgit2/src/transports/smart_protocol.c +96 -116
- data/vendor/libgit2/src/transports/ssh.c +77 -66
- data/vendor/libgit2/src/transports/winhttp.c +318 -314
- data/vendor/libgit2/src/tree-cache.c +19 -12
- data/vendor/libgit2/src/tree.c +103 -142
- data/vendor/libgit2/src/tree.h +1 -12
- data/vendor/libgit2/src/unix/map.c +3 -3
- data/vendor/libgit2/src/unix/posix.h +1 -11
- data/vendor/libgit2/src/userdiff.h +3 -1
- data/vendor/libgit2/src/util.c +70 -56
- data/vendor/libgit2/src/util.h +28 -156
- data/vendor/libgit2/src/vector.c +4 -4
- data/vendor/libgit2/src/wildmatch.c +320 -0
- data/vendor/libgit2/src/wildmatch.h +23 -0
- data/vendor/libgit2/src/win32/dir.c +3 -3
- data/vendor/libgit2/src/win32/findfile.c +3 -3
- data/vendor/libgit2/src/win32/map.c +9 -11
- data/vendor/libgit2/src/win32/msvc-compat.h +6 -0
- data/vendor/libgit2/src/win32/path_w32.c +113 -9
- data/vendor/libgit2/src/win32/path_w32.h +18 -29
- data/vendor/libgit2/src/win32/posix.h +1 -4
- data/vendor/libgit2/src/win32/posix_w32.c +70 -45
- data/vendor/libgit2/src/win32/precompiled.h +0 -2
- data/vendor/libgit2/src/win32/thread.c +5 -10
- data/vendor/libgit2/src/win32/w32_buffer.c +9 -5
- data/vendor/libgit2/src/win32/w32_common.h +39 -0
- data/vendor/libgit2/src/win32/w32_crtdbg_stacktrace.c +3 -2
- data/vendor/libgit2/src/win32/w32_crtdbg_stacktrace.h +26 -75
- data/vendor/libgit2/src/win32/w32_stack.c +6 -11
- data/vendor/libgit2/src/win32/w32_stack.h +3 -3
- data/vendor/libgit2/src/win32/w32_util.c +27 -64
- data/vendor/libgit2/src/win32/w32_util.h +5 -49
- data/vendor/libgit2/src/worktree.c +95 -60
- data/vendor/libgit2/src/worktree.h +2 -0
- data/vendor/libgit2/src/xdiff/xdiffi.c +7 -5
- data/vendor/libgit2/src/xdiff/xhistogram.c +1 -1
- data/vendor/libgit2/src/xdiff/xmerge.c +27 -15
- data/vendor/libgit2/src/xdiff/xpatience.c +3 -0
- data/vendor/libgit2/src/zstream.c +4 -4
- metadata +122 -33
- data/vendor/libgit2/deps/regex/CMakeLists.txt +0 -2
- data/vendor/libgit2/deps/regex/config.h +0 -7
- data/vendor/libgit2/deps/regex/regcomp.c +0 -3857
- data/vendor/libgit2/deps/regex/regex.c +0 -92
- data/vendor/libgit2/deps/regex/regex.h +0 -582
- data/vendor/libgit2/deps/regex/regex_internal.c +0 -1744
- data/vendor/libgit2/deps/regex/regex_internal.h +0 -819
- data/vendor/libgit2/deps/regex/regexec.c +0 -4369
- data/vendor/libgit2/include/git2/inttypes.h +0 -309
- data/vendor/libgit2/include/git2/sys/time.h +0 -31
- data/vendor/libgit2/libgit2.pc.in +0 -13
- data/vendor/libgit2/src/config_file.h +0 -73
- data/vendor/libgit2/src/fnmatch.c +0 -248
- data/vendor/libgit2/src/fnmatch.h +0 -48
- data/vendor/libgit2/src/hash/hash_collisiondetect.h +0 -47
- data/vendor/libgit2/src/hash/hash_openssl.h +0 -59
- data/vendor/libgit2/src/streams/curl.c +0 -385
data/vendor/libgit2/src/diff.h
CHANGED
@@ -57,7 +57,8 @@ extern int git_diff_delta__format_file_header(
|
|
57
57
|
const git_diff_delta *delta,
|
58
58
|
const char *oldpfx,
|
59
59
|
const char *newpfx,
|
60
|
-
int oid_strlen
|
60
|
+
int oid_strlen,
|
61
|
+
bool print_index);
|
61
62
|
|
62
63
|
extern int git_diff_delta__cmp(const void *a, const void *b);
|
63
64
|
extern int git_diff_delta__casecmp(const void *a, const void *b);
|
@@ -9,11 +9,13 @@
|
|
9
9
|
|
10
10
|
#include "git2/attr.h"
|
11
11
|
|
12
|
+
#include "common.h"
|
12
13
|
#include "diff.h"
|
13
14
|
#include "strmap.h"
|
14
15
|
#include "map.h"
|
15
16
|
#include "buf_text.h"
|
16
17
|
#include "config.h"
|
18
|
+
#include "regexp.h"
|
17
19
|
#include "repository.h"
|
18
20
|
|
19
21
|
typedef enum {
|
@@ -24,7 +26,7 @@ typedef enum {
|
|
24
26
|
} git_diff_driver_t;
|
25
27
|
|
26
28
|
typedef struct {
|
27
|
-
|
29
|
+
git_regexp re;
|
28
30
|
int flags;
|
29
31
|
} git_diff_driver_pattern;
|
30
32
|
|
@@ -38,7 +40,7 @@ struct git_diff_driver {
|
|
38
40
|
uint32_t binary_flags;
|
39
41
|
uint32_t other_flags;
|
40
42
|
git_array_t(git_diff_driver_pattern) fn_patterns;
|
41
|
-
|
43
|
+
git_regexp word_pattern;
|
42
44
|
char name[GIT_FLEX_ARRAY];
|
43
45
|
};
|
44
46
|
|
@@ -63,7 +65,7 @@ git_diff_driver_registry *git_diff_driver_registry_new(void)
|
|
63
65
|
if (!reg)
|
64
66
|
return NULL;
|
65
67
|
|
66
|
-
if (
|
68
|
+
if (git_strmap_new(®->drivers) < 0) {
|
67
69
|
git_diff_driver_registry_free(reg);
|
68
70
|
return NULL;
|
69
71
|
}
|
@@ -112,7 +114,7 @@ static int diff_driver_add_patterns(
|
|
112
114
|
if (error < 0)
|
113
115
|
break;
|
114
116
|
|
115
|
-
if ((error =
|
117
|
+
if ((error = git_regexp_compile(&pat->re, buf.ptr, regex_flags)) != 0) {
|
116
118
|
/*
|
117
119
|
* TODO: issue a warning
|
118
120
|
*/
|
@@ -121,7 +123,7 @@ static int diff_driver_add_patterns(
|
|
121
123
|
|
122
124
|
if (error && pat != NULL)
|
123
125
|
(void)git_array_pop(drv->fn_patterns); /* release last item */
|
124
|
-
|
126
|
+
git_buf_dispose(&buf);
|
125
127
|
|
126
128
|
/* We want to ignore bad patterns, so return success regardless */
|
127
129
|
return 0;
|
@@ -129,7 +131,7 @@ static int diff_driver_add_patterns(
|
|
129
131
|
|
130
132
|
static int diff_driver_xfuncname(const git_config_entry *entry, void *payload)
|
131
133
|
{
|
132
|
-
return diff_driver_add_patterns(payload, entry->value,
|
134
|
+
return diff_driver_add_patterns(payload, entry->value, 0);
|
133
135
|
}
|
134
136
|
|
135
137
|
static int diff_driver_funcname(const git_config_entry *entry, void *payload)
|
@@ -149,7 +151,7 @@ static git_diff_driver_registry *git_repository_driver_registry(
|
|
149
151
|
}
|
150
152
|
|
151
153
|
if (!repo->diff_drivers)
|
152
|
-
|
154
|
+
git_error_set(GIT_ERROR_REPOSITORY, "unable to create diff driver registry");
|
153
155
|
|
154
156
|
return repo->diff_drivers;
|
155
157
|
}
|
@@ -162,11 +164,11 @@ static int diff_driver_alloc(
|
|
162
164
|
namelen = strlen(name),
|
163
165
|
alloclen;
|
164
166
|
|
165
|
-
|
166
|
-
|
167
|
+
GIT_ERROR_CHECK_ALLOC_ADD(&alloclen, driverlen, namelen);
|
168
|
+
GIT_ERROR_CHECK_ALLOC_ADD(&alloclen, alloclen, 1);
|
167
169
|
|
168
170
|
driver = git__calloc(1, alloclen);
|
169
|
-
|
171
|
+
GIT_ERROR_CHECK_ALLOC(driver);
|
170
172
|
|
171
173
|
memcpy(driver->name, name, namelen);
|
172
174
|
|
@@ -183,9 +185,9 @@ static int git_diff_driver_builtin(
|
|
183
185
|
git_diff_driver_registry *reg,
|
184
186
|
const char *driver_name)
|
185
187
|
{
|
186
|
-
int error = 0;
|
187
188
|
git_diff_driver_definition *ddef = NULL;
|
188
189
|
git_diff_driver *drv = NULL;
|
190
|
+
int error = 0;
|
189
191
|
size_t idx;
|
190
192
|
|
191
193
|
for (idx = 0; idx < ARRAY_SIZE(builtin_defs); ++idx) {
|
@@ -204,20 +206,15 @@ static int git_diff_driver_builtin(
|
|
204
206
|
|
205
207
|
if (ddef->fns &&
|
206
208
|
(error = diff_driver_add_patterns(
|
207
|
-
drv, ddef->fns, ddef->flags
|
209
|
+
drv, ddef->fns, ddef->flags)) < 0)
|
208
210
|
goto done;
|
209
211
|
|
210
212
|
if (ddef->words &&
|
211
|
-
|
212
|
-
&drv->word_pattern, ddef->words, ddef->flags | REG_EXTENDED)))
|
213
|
-
{
|
214
|
-
error = giterr_set_regex(&drv->word_pattern, error);
|
213
|
+
(error = git_regexp_compile(&drv->word_pattern, ddef->words, ddef->flags)) < 0)
|
215
214
|
goto done;
|
216
|
-
}
|
217
215
|
|
218
|
-
|
219
|
-
|
220
|
-
error = 0;
|
216
|
+
if ((error = git_strmap_set(reg->drivers, drv->name, drv)) < 0)
|
217
|
+
goto done;
|
221
218
|
|
222
219
|
done:
|
223
220
|
if (error && drv)
|
@@ -233,9 +230,8 @@ static int git_diff_driver_load(
|
|
233
230
|
{
|
234
231
|
int error = 0;
|
235
232
|
git_diff_driver_registry *reg;
|
236
|
-
git_diff_driver *drv
|
233
|
+
git_diff_driver *drv;
|
237
234
|
size_t namelen;
|
238
|
-
khiter_t pos;
|
239
235
|
git_config *cfg = NULL;
|
240
236
|
git_buf name = GIT_BUF_INIT;
|
241
237
|
git_config_entry *ce = NULL;
|
@@ -244,9 +240,8 @@ static int git_diff_driver_load(
|
|
244
240
|
if ((reg = git_repository_driver_registry(repo)) == NULL)
|
245
241
|
return -1;
|
246
242
|
|
247
|
-
|
248
|
-
|
249
|
-
*out = git_strmap_value_at(reg->drivers, pos);
|
243
|
+
if ((drv = git_strmap_get(reg->drivers, driver_name)) != NULL) {
|
244
|
+
*out = drv;
|
250
245
|
return 0;
|
251
246
|
}
|
252
247
|
|
@@ -257,7 +252,7 @@ static int git_diff_driver_load(
|
|
257
252
|
|
258
253
|
/* if you can't read config for repo, just use default driver */
|
259
254
|
if (git_repository_config_snapshot(&cfg, repo) < 0) {
|
260
|
-
|
255
|
+
git_error_clear();
|
261
256
|
goto done;
|
262
257
|
}
|
263
258
|
|
@@ -283,21 +278,25 @@ static int git_diff_driver_load(
|
|
283
278
|
/* TODO: warn if diff.<name>.command or diff.<name>.textconv are set */
|
284
279
|
|
285
280
|
git_buf_truncate(&name, namelen + strlen("diff.."));
|
286
|
-
|
281
|
+
if ((error = git_buf_PUTS(&name, "xfuncname")) < 0)
|
282
|
+
goto done;
|
283
|
+
|
287
284
|
if ((error = git_config_get_multivar_foreach(
|
288
285
|
cfg, name.ptr, NULL, diff_driver_xfuncname, drv)) < 0) {
|
289
286
|
if (error != GIT_ENOTFOUND)
|
290
287
|
goto done;
|
291
|
-
|
288
|
+
git_error_clear(); /* no diff.<driver>.xfuncname, so just continue */
|
292
289
|
}
|
293
290
|
|
294
291
|
git_buf_truncate(&name, namelen + strlen("diff.."));
|
295
|
-
|
292
|
+
if ((error = git_buf_PUTS(&name, "funcname")) < 0)
|
293
|
+
goto done;
|
294
|
+
|
296
295
|
if ((error = git_config_get_multivar_foreach(
|
297
296
|
cfg, name.ptr, NULL, diff_driver_funcname, drv)) < 0) {
|
298
297
|
if (error != GIT_ENOTFOUND)
|
299
298
|
goto done;
|
300
|
-
|
299
|
+
git_error_clear(); /* no diff.<driver>.funcname, so just continue */
|
301
300
|
}
|
302
301
|
|
303
302
|
/* if we found any patterns, set driver type to use correct callback */
|
@@ -307,16 +306,17 @@ static int git_diff_driver_load(
|
|
307
306
|
}
|
308
307
|
|
309
308
|
git_buf_truncate(&name, namelen + strlen("diff.."));
|
310
|
-
|
309
|
+
if ((error = git_buf_PUTS(&name, "wordregex")) < 0)
|
310
|
+
goto done;
|
311
|
+
|
311
312
|
if ((error = git_config__lookup_entry(&ce, cfg, name.ptr, false)) < 0)
|
312
313
|
goto done;
|
313
314
|
if (!ce || !ce->value)
|
314
315
|
/* no diff.<driver>.wordregex, so just continue */;
|
315
|
-
else if (!(error =
|
316
|
+
else if (!(error = git_regexp_compile(&drv->word_pattern, ce->value, 0)))
|
316
317
|
found_driver = true;
|
317
318
|
else {
|
318
319
|
/* TODO: warn about bad regex instead of failure */
|
319
|
-
error = giterr_set_regex(&drv->word_pattern, error);
|
320
320
|
goto done;
|
321
321
|
}
|
322
322
|
|
@@ -329,16 +329,14 @@ static int git_diff_driver_load(
|
|
329
329
|
goto done;
|
330
330
|
|
331
331
|
/* store driver in registry */
|
332
|
-
|
333
|
-
if (error < 0)
|
332
|
+
if ((error = git_strmap_set(reg->drivers, drv->name, drv)) < 0)
|
334
333
|
goto done;
|
335
|
-
error = 0;
|
336
334
|
|
337
335
|
*out = drv;
|
338
336
|
|
339
337
|
done:
|
340
338
|
git_config_entry_free(ce);
|
341
|
-
|
339
|
+
git_buf_dispose(&name);
|
342
340
|
git_config_free(cfg);
|
343
341
|
|
344
342
|
if (!*out) {
|
@@ -369,18 +367,18 @@ int git_diff_driver_lookup(
|
|
369
367
|
attrsession, 0, path, 1, attrs)) < 0)
|
370
368
|
/* return error below */;
|
371
369
|
|
372
|
-
else if (
|
370
|
+
else if (GIT_ATTR_IS_UNSPECIFIED(values[0]))
|
373
371
|
/* just use the auto value */;
|
374
|
-
else if (
|
372
|
+
else if (GIT_ATTR_IS_FALSE(values[0]))
|
375
373
|
*out = &global_drivers[DIFF_DRIVER_BINARY];
|
376
|
-
else if (
|
374
|
+
else if (GIT_ATTR_IS_TRUE(values[0]))
|
377
375
|
*out = &global_drivers[DIFF_DRIVER_TEXT];
|
378
376
|
|
379
377
|
/* otherwise look for driver information in config and build driver */
|
380
378
|
else if ((error = git_diff_driver_load(out, repo, values[0])) < 0) {
|
381
379
|
if (error == GIT_ENOTFOUND) {
|
382
380
|
error = 0;
|
383
|
-
|
381
|
+
git_error_clear();
|
384
382
|
}
|
385
383
|
}
|
386
384
|
|
@@ -398,10 +396,10 @@ void git_diff_driver_free(git_diff_driver *driver)
|
|
398
396
|
return;
|
399
397
|
|
400
398
|
for (i = 0; i < git_array_size(driver->fn_patterns); ++i)
|
401
|
-
|
399
|
+
git_regexp_dispose(& git_array_get(driver->fn_patterns, i)->re);
|
402
400
|
git_array_clear(driver->fn_patterns);
|
403
401
|
|
404
|
-
|
402
|
+
git_regexp_dispose(&driver->word_pattern);
|
405
403
|
|
406
404
|
git__free(driver);
|
407
405
|
}
|
@@ -449,19 +447,19 @@ static int diff_context_line__pattern_match(
|
|
449
447
|
git_diff_driver *driver, git_buf *line)
|
450
448
|
{
|
451
449
|
size_t i, maxi = git_array_size(driver->fn_patterns);
|
452
|
-
|
450
|
+
git_regmatch pmatch[2];
|
453
451
|
|
454
452
|
for (i = 0; i < maxi; ++i) {
|
455
453
|
git_diff_driver_pattern *pat = git_array_get(driver->fn_patterns, i);
|
456
454
|
|
457
|
-
if (!
|
455
|
+
if (!git_regexp_search(&pat->re, line->ptr, 2, pmatch)) {
|
458
456
|
if (pat->flags & REG_NEGATE)
|
459
457
|
return false;
|
460
458
|
|
461
459
|
/* use pmatch data to trim line data */
|
462
|
-
i = (pmatch[1].
|
463
|
-
git_buf_consume(line, git_buf_cstr(line) + pmatch[i].
|
464
|
-
git_buf_truncate(line, pmatch[i].
|
460
|
+
i = (pmatch[1].start >= 0) ? 1 : 0;
|
461
|
+
git_buf_consume(line, git_buf_cstr(line) + pmatch[i].start);
|
462
|
+
git_buf_truncate(line, pmatch[i].end - pmatch[i].start);
|
465
463
|
git_buf_rtrim(line);
|
466
464
|
|
467
465
|
return true;
|
@@ -516,7 +514,7 @@ void git_diff_find_context_init(
|
|
516
514
|
void git_diff_find_context_clear(git_diff_find_context_payload *payload)
|
517
515
|
{
|
518
516
|
if (payload) {
|
519
|
-
|
517
|
+
git_buf_dispose(&payload->line);
|
520
518
|
payload->driver = NULL;
|
521
519
|
}
|
522
520
|
}
|
@@ -12,7 +12,7 @@
|
|
12
12
|
#include "diff.h"
|
13
13
|
#include "diff_generate.h"
|
14
14
|
#include "odb.h"
|
15
|
-
#include "
|
15
|
+
#include "futils.h"
|
16
16
|
#include "filter.h"
|
17
17
|
|
18
18
|
#define DIFF_MAX_FILESIZE 0x20000000
|
@@ -62,7 +62,7 @@ static int diff_file_content_init_common(
|
|
62
62
|
git_diff_driver_update_options(&fc->opts_flags, fc->driver);
|
63
63
|
|
64
64
|
/* make sure file is conceivable mmap-able */
|
65
|
-
if ((
|
65
|
+
if ((size_t)fc->file->size != fc->file->size)
|
66
66
|
fc->file->flags |= GIT_DIFF_FLAG_BINARY;
|
67
67
|
/* check if user is forcing text diff the file */
|
68
68
|
else if (fc->opts_flags & GIT_DIFF_FORCE_TEXT) {
|
@@ -161,7 +161,7 @@ int git_diff_file_content__init_from_src(
|
|
161
161
|
fc->flags |= GIT_DIFF_FLAG__FREE_BLOB;
|
162
162
|
} else {
|
163
163
|
fc->file->size = src->buflen;
|
164
|
-
git_odb_hash(&fc->file->id, src->buf, src->buflen,
|
164
|
+
git_odb_hash(&fc->file->id, src->buf, src->buflen, GIT_OBJECT_BLOB);
|
165
165
|
fc->file->id_abbrev = GIT_OID_HEXSZ;
|
166
166
|
|
167
167
|
fc->map.len = src->buflen;
|
@@ -188,7 +188,7 @@ static int diff_file_content_commit_to_str(
|
|
188
188
|
if ((error = git_submodule_lookup(&sm, fc->repo, fc->file->path)) < 0) {
|
189
189
|
/* GIT_EEXISTS means a "submodule" that has not been git added */
|
190
190
|
if (error == GIT_EEXISTS) {
|
191
|
-
|
191
|
+
git_error_clear();
|
192
192
|
error = 0;
|
193
193
|
}
|
194
194
|
return error;
|
@@ -232,7 +232,7 @@ static int diff_file_content_load_blob(
|
|
232
232
|
int error = 0;
|
233
233
|
git_odb_object *odb_obj = NULL;
|
234
234
|
|
235
|
-
if (
|
235
|
+
if (git_oid_is_zero(&fc->file->id))
|
236
236
|
return 0;
|
237
237
|
|
238
238
|
if (fc->file->mode == GIT_FILEMODE_COMMIT)
|
@@ -251,7 +251,7 @@ static int diff_file_content_load_blob(
|
|
251
251
|
|
252
252
|
if (odb_obj != NULL) {
|
253
253
|
error = git_object__from_odb_object(
|
254
|
-
(git_object **)&fc->blob, fc->repo, odb_obj,
|
254
|
+
(git_object **)&fc->blob, fc->repo, odb_obj, GIT_OBJECT_BLOB);
|
255
255
|
git_odb_object_free(odb_obj);
|
256
256
|
} else {
|
257
257
|
error = git_blob_lookup(
|
@@ -280,7 +280,7 @@ static int diff_file_content_load_workdir_symlink_fake(
|
|
280
280
|
fc->map.data = git_buf_detach(&target);
|
281
281
|
fc->flags |= GIT_DIFF_FLAG__FREE_DATA;
|
282
282
|
|
283
|
-
|
283
|
+
git_buf_dispose(&target);
|
284
284
|
return error;
|
285
285
|
}
|
286
286
|
|
@@ -290,8 +290,8 @@ static int diff_file_content_load_workdir_symlink(
|
|
290
290
|
ssize_t alloc_len, read_len;
|
291
291
|
int symlink_supported, error;
|
292
292
|
|
293
|
-
if ((error =
|
294
|
-
&symlink_supported, fc->repo,
|
293
|
+
if ((error = git_repository__configmap_lookup(
|
294
|
+
&symlink_supported, fc->repo, GIT_CONFIGMAP_SYMLINKS)) < 0)
|
295
295
|
return -1;
|
296
296
|
|
297
297
|
if (!symlink_supported)
|
@@ -303,13 +303,13 @@ static int diff_file_content_load_workdir_symlink(
|
|
303
303
|
alloc_len = (ssize_t)(fc->file->size * 2) + 1;
|
304
304
|
|
305
305
|
fc->map.data = git__calloc(alloc_len, sizeof(char));
|
306
|
-
|
306
|
+
GIT_ERROR_CHECK_ALLOC(fc->map.data);
|
307
307
|
|
308
308
|
fc->flags |= GIT_DIFF_FLAG__FREE_DATA;
|
309
309
|
|
310
310
|
read_len = p_readlink(git_buf_cstr(path), fc->map.data, alloc_len);
|
311
311
|
if (read_len < 0) {
|
312
|
-
|
312
|
+
git_error_set(GIT_ERROR_OS, "failed to read symlink '%s'", fc->file->path);
|
313
313
|
return -1;
|
314
314
|
}
|
315
315
|
|
@@ -330,8 +330,10 @@ static int diff_file_content_load_workdir_file(
|
|
330
330
|
if (fd < 0)
|
331
331
|
return fd;
|
332
332
|
|
333
|
-
if (!fc->file->size
|
334
|
-
|
333
|
+
if (!fc->file->size)
|
334
|
+
error = git_futils_filesize(&fc->file->size, fd);
|
335
|
+
|
336
|
+
if (error < 0 || !fc->file->size)
|
335
337
|
goto cleanup;
|
336
338
|
|
337
339
|
if ((diff_opts->flags & GIT_DIFF_SHOW_BINARY) == 0 &&
|
@@ -352,7 +354,7 @@ static int diff_file_content_load_workdir_file(
|
|
352
354
|
}
|
353
355
|
|
354
356
|
/* if mmap failed, fall through to try readbuffer below */
|
355
|
-
|
357
|
+
git_error_clear();
|
356
358
|
}
|
357
359
|
|
358
360
|
if (!(error = git_futils_readbuffer_fd(&raw, fd, (size_t)fc->file->size))) {
|
@@ -361,7 +363,7 @@ static int diff_file_content_load_workdir_file(
|
|
361
363
|
error = git_filter_list_apply_to_data(&out, fl, &raw);
|
362
364
|
|
363
365
|
if (out.ptr != raw.ptr)
|
364
|
-
|
366
|
+
git_buf_dispose(&raw);
|
365
367
|
|
366
368
|
if (!error) {
|
367
369
|
fc->map.len = out.size;
|
@@ -402,11 +404,11 @@ static int diff_file_content_load_workdir(
|
|
402
404
|
/* once data is loaded, update OID if we didn't have it previously */
|
403
405
|
if (!error && (fc->file->flags & GIT_DIFF_FLAG_VALID_ID) == 0) {
|
404
406
|
error = git_odb_hash(
|
405
|
-
&fc->file->id, fc->map.data, fc->map.len,
|
407
|
+
&fc->file->id, fc->map.data, fc->map.len, GIT_OBJECT_BLOB);
|
406
408
|
fc->file->flags |= GIT_DIFF_FLAG_VALID_ID;
|
407
409
|
}
|
408
410
|
|
409
|
-
|
411
|
+
git_buf_dispose(&path);
|
410
412
|
return error;
|
411
413
|
}
|
412
414
|
|
@@ -9,7 +9,7 @@
|
|
9
9
|
|
10
10
|
#include "diff.h"
|
11
11
|
#include "patch_generate.h"
|
12
|
-
#include "
|
12
|
+
#include "futils.h"
|
13
13
|
#include "config.h"
|
14
14
|
#include "attr_file.h"
|
15
15
|
#include "filter.h"
|
@@ -81,7 +81,7 @@ static int diff_insert_delta(
|
|
81
81
|
if (error > 0) /* positive value means to skip this delta */
|
82
82
|
return 0;
|
83
83
|
else /* negative value means to cancel diff */
|
84
|
-
return
|
84
|
+
return git_error_set_after_callback_function(error, "git_diff");
|
85
85
|
}
|
86
86
|
}
|
87
87
|
|
@@ -138,7 +138,7 @@ static int diff_delta__from_one(
|
|
138
138
|
if (DIFF_FLAG_IS_SET(diff, GIT_DIFF_REVERSE))
|
139
139
|
has_old = !has_old;
|
140
140
|
|
141
|
-
if ((entry->flags &
|
141
|
+
if ((entry->flags & GIT_INDEX_ENTRY_VALID) != 0)
|
142
142
|
return 0;
|
143
143
|
|
144
144
|
if (status == GIT_DELTA_IGNORED &&
|
@@ -157,7 +157,7 @@ static int diff_delta__from_one(
|
|
157
157
|
return 0;
|
158
158
|
|
159
159
|
delta = diff_delta__alloc(diff, status, entry->path);
|
160
|
-
|
160
|
+
GIT_ERROR_CHECK_ALLOC(delta);
|
161
161
|
|
162
162
|
/* This fn is just for single-sided diffs */
|
163
163
|
assert(status != GIT_DELTA_MODIFIED);
|
@@ -179,7 +179,7 @@ static int diff_delta__from_one(
|
|
179
179
|
|
180
180
|
delta->old_file.flags |= GIT_DIFF_FLAG_VALID_ID;
|
181
181
|
|
182
|
-
if (has_old || !
|
182
|
+
if (has_old || !git_oid_is_zero(&delta->new_file.id))
|
183
183
|
delta->new_file.flags |= GIT_DIFF_FLAG_VALID_ID;
|
184
184
|
|
185
185
|
return diff_insert_delta(diff, delta, matched_pathspec);
|
@@ -220,7 +220,7 @@ static int diff_delta__from_two(
|
|
220
220
|
}
|
221
221
|
|
222
222
|
delta = diff_delta__alloc(diff, status, canonical_path);
|
223
|
-
|
223
|
+
GIT_ERROR_CHECK_ALLOC(delta);
|
224
224
|
delta->nfiles = 2;
|
225
225
|
|
226
226
|
if (!git_index_entry_is_conflict(old_entry)) {
|
@@ -240,7 +240,7 @@ static int diff_delta__from_two(
|
|
240
240
|
delta->old_file.flags |= GIT_DIFF_FLAG_EXISTS;
|
241
241
|
delta->new_file.flags |= GIT_DIFF_FLAG_EXISTS;
|
242
242
|
|
243
|
-
if (!
|
243
|
+
if (!git_oid_is_zero(&new_entry->id))
|
244
244
|
delta->new_file.flags |= GIT_DIFF_FLAG_VALID_ID;
|
245
245
|
}
|
246
246
|
|
@@ -273,7 +273,8 @@ static git_diff_delta *diff_delta__last_for_item(
|
|
273
273
|
break;
|
274
274
|
case GIT_DELTA_MODIFIED:
|
275
275
|
if (git_oid__cmp(&delta->old_file.id, &item->id) == 0 ||
|
276
|
-
|
276
|
+
(delta->new_file.mode == item->mode &&
|
277
|
+
git_oid__cmp(&delta->new_file.id, &item->id) == 0))
|
277
278
|
return delta;
|
278
279
|
break;
|
279
280
|
default:
|
@@ -471,17 +472,17 @@ static int diff_generated_apply_options(
|
|
471
472
|
if ((val = git_repository_config_snapshot(&cfg, repo)) < 0)
|
472
473
|
return val;
|
473
474
|
|
474
|
-
if (!
|
475
|
+
if (!git_config__configmap_lookup(&val, cfg, GIT_CONFIGMAP_SYMLINKS) && val)
|
475
476
|
diff->diffcaps |= GIT_DIFFCAPS_HAS_SYMLINKS;
|
476
477
|
|
477
|
-
if (!
|
478
|
+
if (!git_config__configmap_lookup(&val, cfg, GIT_CONFIGMAP_IGNORESTAT) && val)
|
478
479
|
diff->diffcaps |= GIT_DIFFCAPS_IGNORE_STAT;
|
479
480
|
|
480
481
|
if ((diff->base.opts.flags & GIT_DIFF_IGNORE_FILEMODE) == 0 &&
|
481
|
-
!
|
482
|
+
!git_config__configmap_lookup(&val, cfg, GIT_CONFIGMAP_FILEMODE) && val)
|
482
483
|
diff->diffcaps |= GIT_DIFFCAPS_TRUST_MODE_BITS;
|
483
484
|
|
484
|
-
if (!
|
485
|
+
if (!git_config__configmap_lookup(&val, cfg, GIT_CONFIGMAP_TRUSTCTIME) && val)
|
485
486
|
diff->diffcaps |= GIT_DIFFCAPS_TRUST_CTIME;
|
486
487
|
|
487
488
|
/* Don't set GIT_DIFFCAPS_USE_DEV - compile time option in core git */
|
@@ -516,7 +517,7 @@ static int diff_generated_apply_options(
|
|
516
517
|
|
517
518
|
if (entry && git_submodule_parse_ignore(
|
518
519
|
&diff->base.opts.ignore_submodules, entry->value) < 0)
|
519
|
-
|
520
|
+
git_error_clear();
|
520
521
|
git_config_entry_free(entry);
|
521
522
|
}
|
522
523
|
|
@@ -559,13 +560,18 @@ int git_diff__oid_for_file(
|
|
559
560
|
git_diff *diff,
|
560
561
|
const char *path,
|
561
562
|
uint16_t mode,
|
562
|
-
|
563
|
+
git_object_size_t size)
|
563
564
|
{
|
564
565
|
git_index_entry entry;
|
565
566
|
|
567
|
+
if (size > UINT32_MAX) {
|
568
|
+
git_error_set(GIT_ERROR_NOMEMORY, "file size overflow (for 32-bits) on '%s'", path);
|
569
|
+
return -1;
|
570
|
+
}
|
571
|
+
|
566
572
|
memset(&entry, 0, sizeof(entry));
|
567
573
|
entry.mode = mode;
|
568
|
-
entry.file_size = size;
|
574
|
+
entry.file_size = (uint32_t)size;
|
569
575
|
entry.path = (char *)path;
|
570
576
|
|
571
577
|
return git_diff__oid_for_entry(out, diff, &entry, mode, NULL);
|
@@ -600,7 +606,7 @@ int git_diff__oid_for_entry(
|
|
600
606
|
|
601
607
|
if (p_stat(full_path.ptr, &st) < 0) {
|
602
608
|
error = git_path_set_error(errno, entry.path, "stat");
|
603
|
-
|
609
|
+
git_buf_dispose(&full_path);
|
604
610
|
return error;
|
605
611
|
}
|
606
612
|
|
@@ -621,13 +627,13 @@ int git_diff__oid_for_entry(
|
|
621
627
|
/* if submodule lookup failed probably just in an intermediate
|
622
628
|
* state where some init hasn't happened, so ignore the error
|
623
629
|
*/
|
624
|
-
|
630
|
+
git_error_clear();
|
625
631
|
}
|
626
632
|
} else if (S_ISLNK(mode)) {
|
627
633
|
error = git_odb__hashlink(out, full_path.ptr);
|
628
634
|
diff->base.perf.oid_calculations++;
|
629
635
|
} else if (!git__is_sizet(entry.file_size)) {
|
630
|
-
|
636
|
+
git_error_set(GIT_ERROR_NOMEMORY, "file size overflow (for 32-bits) on '%s'",
|
631
637
|
entry.path);
|
632
638
|
error = -1;
|
633
639
|
} else if (!(error = git_filter_list_load(&fl,
|
@@ -639,7 +645,7 @@ int git_diff__oid_for_entry(
|
|
639
645
|
error = fd;
|
640
646
|
else {
|
641
647
|
error = git_odb__hashfd_filtered(
|
642
|
-
out, fd, (size_t)entry.file_size,
|
648
|
+
out, fd, (size_t)entry.file_size, GIT_OBJECT_BLOB, fl);
|
643
649
|
p_close(fd);
|
644
650
|
diff->base.perf.oid_calculations++;
|
645
651
|
}
|
@@ -663,7 +669,7 @@ int git_diff__oid_for_entry(
|
|
663
669
|
}
|
664
670
|
}
|
665
671
|
|
666
|
-
|
672
|
+
git_buf_dispose(&full_path);
|
667
673
|
return error;
|
668
674
|
}
|
669
675
|
|
@@ -699,7 +705,7 @@ static int maybe_modified_submodule(
|
|
699
705
|
|
700
706
|
/* GIT_EEXISTS means dir with .git in it was found - ignore it */
|
701
707
|
if (error == GIT_EEXISTS) {
|
702
|
-
|
708
|
+
git_error_clear();
|
703
709
|
error = 0;
|
704
710
|
}
|
705
711
|
return error;
|
@@ -763,11 +769,11 @@ static int maybe_modified(
|
|
763
769
|
status = GIT_DELTA_CONFLICTED;
|
764
770
|
|
765
771
|
/* support "assume unchanged" (poorly, b/c we still stat everything) */
|
766
|
-
} else if ((oitem->flags &
|
772
|
+
} else if ((oitem->flags & GIT_INDEX_ENTRY_VALID) != 0) {
|
767
773
|
status = GIT_DELTA_UNMODIFIED;
|
768
774
|
|
769
775
|
/* support "skip worktree" index bit */
|
770
|
-
} else if ((oitem->flags_extended &
|
776
|
+
} else if ((oitem->flags_extended & GIT_INDEX_ENTRY_SKIP_WORKTREE) != 0) {
|
771
777
|
status = GIT_DELTA_UNMODIFIED;
|
772
778
|
|
773
779
|
/* if basic type of file changed, then split into delete and add */
|
@@ -791,13 +797,13 @@ static int maybe_modified(
|
|
791
797
|
/* if oids and modes match (and are valid), then file is unmodified */
|
792
798
|
} else if (git_oid_equal(&oitem->id, &nitem->id) &&
|
793
799
|
omode == nmode &&
|
794
|
-
!
|
800
|
+
!git_oid_is_zero(&oitem->id)) {
|
795
801
|
status = GIT_DELTA_UNMODIFIED;
|
796
802
|
|
797
803
|
/* if we have an unknown OID and a workdir iterator, then check some
|
798
804
|
* circumstances that can accelerate things or need special handling
|
799
805
|
*/
|
800
|
-
} else if (
|
806
|
+
} else if (git_oid_is_zero(&nitem->id) && new_is_workdir) {
|
801
807
|
bool use_ctime =
|
802
808
|
((diff->diffcaps & GIT_DIFFCAPS_TRUST_CTIME) != 0);
|
803
809
|
git_index *index = git_iterator_index(info->new_iter);
|
@@ -837,7 +843,7 @@ static int maybe_modified(
|
|
837
843
|
/* if we got here and decided that the files are modified, but we
|
838
844
|
* haven't calculated the OID of the new item, then calculate it now
|
839
845
|
*/
|
840
|
-
if (modified_uncertain &&
|
846
|
+
if (modified_uncertain && git_oid_is_zero(&nitem->id)) {
|
841
847
|
const git_oid *update_check =
|
842
848
|
DIFF_FLAG_IS_SET(diff, GIT_DIFF_UPDATE_INDEX) && omode == nmode ?
|
843
849
|
&oitem->id : NULL;
|
@@ -871,7 +877,7 @@ static int maybe_modified(
|
|
871
877
|
|
872
878
|
return diff_delta__from_two(
|
873
879
|
diff, status, oitem, omode, nitem, nmode,
|
874
|
-
|
880
|
+
git_oid_is_zero(&noid) ? NULL : &noid, matched_pathspec);
|
875
881
|
}
|
876
882
|
|
877
883
|
static bool entry_is_prefixed(
|
@@ -1059,7 +1065,7 @@ static int handle_unmatched_new_item(
|
|
1059
1065
|
|
1060
1066
|
/* if directory is empty, can't advance into it, so skip it */
|
1061
1067
|
if (error == GIT_ENOTFOUND) {
|
1062
|
-
|
1068
|
+
git_error_clear();
|
1063
1069
|
error = iterator_advance(&info->nitem, info->new_iter);
|
1064
1070
|
}
|
1065
1071
|
|
@@ -1081,7 +1087,7 @@ static int handle_unmatched_new_item(
|
|
1081
1087
|
else if (nitem->mode == GIT_FILEMODE_COMMIT) {
|
1082
1088
|
/* ignore things that are not actual submodules */
|
1083
1089
|
if (git_submodule_lookup(NULL, info->repo, nitem->path) != 0) {
|
1084
|
-
|
1090
|
+
git_error_clear();
|
1085
1091
|
delta_type = GIT_DELTA_IGNORED;
|
1086
1092
|
|
1087
1093
|
/* if this contains a tracked item, treat as normal TREE */
|
@@ -1090,7 +1096,7 @@ static int handle_unmatched_new_item(
|
|
1090
1096
|
if (error != GIT_ENOTFOUND)
|
1091
1097
|
return error;
|
1092
1098
|
|
1093
|
-
|
1099
|
+
git_error_clear();
|
1094
1100
|
return iterator_advance(&info->nitem, info->new_iter);
|
1095
1101
|
}
|
1096
1102
|
}
|
@@ -1191,7 +1197,7 @@ int git_diff__from_iterators(
|
|
1191
1197
|
*out = NULL;
|
1192
1198
|
|
1193
1199
|
diff = diff_generated_alloc(repo, old_iter, new_iter);
|
1194
|
-
|
1200
|
+
GIT_ERROR_CHECK_ALLOC(diff);
|
1195
1201
|
|
1196
1202
|
info.repo = repo;
|
1197
1203
|
info.old_iter = old_iter;
|
@@ -1256,29 +1262,31 @@ cleanup:
|
|
1256
1262
|
return error;
|
1257
1263
|
}
|
1258
1264
|
|
1259
|
-
|
1260
|
-
|
1261
|
-
|
1262
|
-
|
1263
|
-
|
1264
|
-
|
1265
|
-
|
1266
|
-
|
1267
|
-
|
1268
|
-
|
1269
|
-
|
1270
|
-
|
1271
|
-
|
1272
|
-
|
1273
|
-
|
1274
|
-
|
1275
|
-
|
1276
|
-
|
1277
|
-
|
1278
|
-
|
1279
|
-
|
1280
|
-
|
1281
|
-
|
1265
|
+
static int diff_prepare_iterator_opts(char **prefix, git_iterator_options *a, int aflags,
|
1266
|
+
git_iterator_options *b, int bflags,
|
1267
|
+
const git_diff_options *opts)
|
1268
|
+
{
|
1269
|
+
GIT_ERROR_CHECK_VERSION(opts, GIT_DIFF_OPTIONS_VERSION, "git_diff_options");
|
1270
|
+
|
1271
|
+
*prefix = NULL;
|
1272
|
+
|
1273
|
+
if (opts && (opts->flags & GIT_DIFF_DISABLE_PATHSPEC_MATCH)) {
|
1274
|
+
a->pathlist.strings = opts->pathspec.strings;
|
1275
|
+
a->pathlist.count = opts->pathspec.count;
|
1276
|
+
b->pathlist.strings = opts->pathspec.strings;
|
1277
|
+
b->pathlist.count = opts->pathspec.count;
|
1278
|
+
} else if (opts) {
|
1279
|
+
*prefix = git_pathspec_prefix(&opts->pathspec);
|
1280
|
+
GIT_ERROR_CHECK_ALLOC(prefix);
|
1281
|
+
}
|
1282
|
+
|
1283
|
+
a->flags = aflags;
|
1284
|
+
b->flags = bflags;
|
1285
|
+
a->start = b->start = *prefix;
|
1286
|
+
a->end = b->end = *prefix;
|
1287
|
+
|
1288
|
+
return 0;
|
1289
|
+
}
|
1282
1290
|
|
1283
1291
|
int git_diff_tree_to_tree(
|
1284
1292
|
git_diff **out,
|
@@ -1287,8 +1295,12 @@ int git_diff_tree_to_tree(
|
|
1287
1295
|
git_tree *new_tree,
|
1288
1296
|
const git_diff_options *opts)
|
1289
1297
|
{
|
1290
|
-
git_diff *diff = NULL;
|
1291
1298
|
git_iterator_flag_t iflag = GIT_ITERATOR_DONT_IGNORE_CASE;
|
1299
|
+
git_iterator_options a_opts = GIT_ITERATOR_OPTIONS_INIT,
|
1300
|
+
b_opts = GIT_ITERATOR_OPTIONS_INIT;
|
1301
|
+
git_iterator *a = NULL, *b = NULL;
|
1302
|
+
git_diff *diff = NULL;
|
1303
|
+
char *prefix = NULL;
|
1292
1304
|
int error = 0;
|
1293
1305
|
|
1294
1306
|
assert(out && repo);
|
@@ -1302,13 +1314,19 @@ int git_diff_tree_to_tree(
|
|
1302
1314
|
if (opts && (opts->flags & GIT_DIFF_IGNORE_CASE) != 0)
|
1303
1315
|
iflag = GIT_ITERATOR_IGNORE_CASE;
|
1304
1316
|
|
1305
|
-
|
1306
|
-
|
1307
|
-
|
1308
|
-
|
1317
|
+
if ((error = diff_prepare_iterator_opts(&prefix, &a_opts, iflag, &b_opts, iflag, opts)) < 0 ||
|
1318
|
+
(error = git_iterator_for_tree(&a, old_tree, &a_opts)) < 0 ||
|
1319
|
+
(error = git_iterator_for_tree(&b, new_tree, &b_opts)) < 0 ||
|
1320
|
+
(error = git_diff__from_iterators(&diff, repo, a, b, opts)) < 0)
|
1321
|
+
goto out;
|
1309
1322
|
|
1310
|
-
|
1311
|
-
|
1323
|
+
*out = diff;
|
1324
|
+
diff = NULL;
|
1325
|
+
out:
|
1326
|
+
git_iterator_free(a);
|
1327
|
+
git_iterator_free(b);
|
1328
|
+
git_diff_free(diff);
|
1329
|
+
git__free(prefix);
|
1312
1330
|
|
1313
1331
|
return error;
|
1314
1332
|
}
|
@@ -1319,7 +1337,7 @@ static int diff_load_index(git_index **index, git_repository *repo)
|
|
1319
1337
|
|
1320
1338
|
/* reload the repository index when user did not pass one in */
|
1321
1339
|
if (!error && git_index_read(*index, false) < 0)
|
1322
|
-
|
1340
|
+
git_error_clear();
|
1323
1341
|
|
1324
1342
|
return error;
|
1325
1343
|
}
|
@@ -1331,9 +1349,13 @@ int git_diff_tree_to_index(
|
|
1331
1349
|
git_index *index,
|
1332
1350
|
const git_diff_options *opts)
|
1333
1351
|
{
|
1334
|
-
git_diff *diff = NULL;
|
1335
1352
|
git_iterator_flag_t iflag = GIT_ITERATOR_DONT_IGNORE_CASE |
|
1336
1353
|
GIT_ITERATOR_INCLUDE_CONFLICTS;
|
1354
|
+
git_iterator_options a_opts = GIT_ITERATOR_OPTIONS_INIT,
|
1355
|
+
b_opts = GIT_ITERATOR_OPTIONS_INIT;
|
1356
|
+
git_iterator *a = NULL, *b = NULL;
|
1357
|
+
git_diff *diff = NULL;
|
1358
|
+
char *prefix = NULL;
|
1337
1359
|
bool index_ignore_case = false;
|
1338
1360
|
int error = 0;
|
1339
1361
|
|
@@ -1346,17 +1368,23 @@ int git_diff_tree_to_index(
|
|
1346
1368
|
|
1347
1369
|
index_ignore_case = index->ignore_case;
|
1348
1370
|
|
1349
|
-
|
1350
|
-
|
1351
|
-
|
1352
|
-
|
1371
|
+
if ((error = diff_prepare_iterator_opts(&prefix, &a_opts, iflag, &b_opts, iflag, opts)) < 0 ||
|
1372
|
+
(error = git_iterator_for_tree(&a, old_tree, &a_opts)) < 0 ||
|
1373
|
+
(error = git_iterator_for_index(&b, repo, index, &b_opts)) < 0 ||
|
1374
|
+
(error = git_diff__from_iterators(&diff, repo, a, b, opts)) < 0)
|
1375
|
+
goto out;
|
1353
1376
|
|
1354
1377
|
/* if index is in case-insensitive order, re-sort deltas to match */
|
1355
|
-
if (
|
1378
|
+
if (index_ignore_case)
|
1356
1379
|
git_diff__set_ignore_case(diff, true);
|
1357
1380
|
|
1358
|
-
|
1359
|
-
|
1381
|
+
*out = diff;
|
1382
|
+
diff = NULL;
|
1383
|
+
out:
|
1384
|
+
git_iterator_free(a);
|
1385
|
+
git_iterator_free(b);
|
1386
|
+
git_diff_free(diff);
|
1387
|
+
git__free(prefix);
|
1360
1388
|
|
1361
1389
|
return error;
|
1362
1390
|
}
|
@@ -1367,7 +1395,11 @@ int git_diff_index_to_workdir(
|
|
1367
1395
|
git_index *index,
|
1368
1396
|
const git_diff_options *opts)
|
1369
1397
|
{
|
1398
|
+
git_iterator_options a_opts = GIT_ITERATOR_OPTIONS_INIT,
|
1399
|
+
b_opts = GIT_ITERATOR_OPTIONS_INIT;
|
1400
|
+
git_iterator *a = NULL, *b = NULL;
|
1370
1401
|
git_diff *diff = NULL;
|
1402
|
+
char *prefix = NULL;
|
1371
1403
|
int error = 0;
|
1372
1404
|
|
1373
1405
|
assert(out && repo);
|
@@ -1377,20 +1409,24 @@ int git_diff_index_to_workdir(
|
|
1377
1409
|
if (!index && (error = diff_load_index(&index, repo)) < 0)
|
1378
1410
|
return error;
|
1379
1411
|
|
1380
|
-
|
1381
|
-
|
1382
|
-
|
1383
|
-
|
1384
|
-
|
1385
|
-
|
1386
|
-
|
1387
|
-
|
1388
|
-
|
1389
|
-
|
1390
|
-
|
1391
|
-
|
1392
|
-
|
1393
|
-
|
1412
|
+
if ((error = diff_prepare_iterator_opts(&prefix, &a_opts, GIT_ITERATOR_INCLUDE_CONFLICTS,
|
1413
|
+
&b_opts, GIT_ITERATOR_DONT_AUTOEXPAND, opts)) < 0 ||
|
1414
|
+
(error = git_iterator_for_index(&a, repo, index, &a_opts)) < 0 ||
|
1415
|
+
(error = git_iterator_for_workdir(&b, repo, index, NULL, &b_opts)) < 0 ||
|
1416
|
+
(error = git_diff__from_iterators(&diff, repo, a, b, opts)) < 0)
|
1417
|
+
goto out;
|
1418
|
+
|
1419
|
+
if ((diff->opts.flags & GIT_DIFF_UPDATE_INDEX) && ((git_diff_generated *)diff)->index_updated)
|
1420
|
+
if ((error = git_index_write(index)) < 0)
|
1421
|
+
goto out;
|
1422
|
+
|
1423
|
+
*out = diff;
|
1424
|
+
diff = NULL;
|
1425
|
+
out:
|
1426
|
+
git_iterator_free(a);
|
1427
|
+
git_iterator_free(b);
|
1428
|
+
git_diff_free(diff);
|
1429
|
+
git__free(prefix);
|
1394
1430
|
|
1395
1431
|
return error;
|
1396
1432
|
}
|
@@ -1401,24 +1437,33 @@ int git_diff_tree_to_workdir(
|
|
1401
1437
|
git_tree *old_tree,
|
1402
1438
|
const git_diff_options *opts)
|
1403
1439
|
{
|
1440
|
+
git_iterator_options a_opts = GIT_ITERATOR_OPTIONS_INIT,
|
1441
|
+
b_opts = GIT_ITERATOR_OPTIONS_INIT;
|
1442
|
+
git_iterator *a = NULL, *b = NULL;
|
1404
1443
|
git_diff *diff = NULL;
|
1444
|
+
char *prefix = NULL;
|
1405
1445
|
git_index *index;
|
1406
|
-
int error
|
1446
|
+
int error;
|
1407
1447
|
|
1408
1448
|
assert(out && repo);
|
1409
1449
|
|
1410
1450
|
*out = NULL;
|
1411
1451
|
|
1412
|
-
if ((error =
|
1413
|
-
|
1414
|
-
|
1415
|
-
|
1416
|
-
|
1417
|
-
|
1418
|
-
|
1419
|
-
|
1420
|
-
|
1421
|
-
|
1452
|
+
if ((error = diff_prepare_iterator_opts(&prefix, &a_opts, 0,
|
1453
|
+
&b_opts, GIT_ITERATOR_DONT_AUTOEXPAND, opts) < 0) ||
|
1454
|
+
(error = git_repository_index__weakptr(&index, repo)) < 0 ||
|
1455
|
+
(error = git_iterator_for_tree(&a, old_tree, &a_opts)) < 0 ||
|
1456
|
+
(error = git_iterator_for_workdir(&b, repo, index, old_tree, &b_opts)) < 0 ||
|
1457
|
+
(error = git_diff__from_iterators(&diff, repo, a, b, opts)) < 0)
|
1458
|
+
goto out;
|
1459
|
+
|
1460
|
+
*out = diff;
|
1461
|
+
diff = NULL;
|
1462
|
+
out:
|
1463
|
+
git_iterator_free(a);
|
1464
|
+
git_iterator_free(b);
|
1465
|
+
git_diff_free(diff);
|
1466
|
+
git__free(prefix);
|
1422
1467
|
|
1423
1468
|
return error;
|
1424
1469
|
}
|
@@ -1462,24 +1507,35 @@ int git_diff_index_to_index(
|
|
1462
1507
|
git_index *new_index,
|
1463
1508
|
const git_diff_options *opts)
|
1464
1509
|
{
|
1465
|
-
|
1466
|
-
|
1510
|
+
git_iterator_options a_opts = GIT_ITERATOR_OPTIONS_INIT,
|
1511
|
+
b_opts = GIT_ITERATOR_OPTIONS_INIT;
|
1512
|
+
git_iterator *a = NULL, *b = NULL;
|
1513
|
+
git_diff *diff = NULL;
|
1514
|
+
char *prefix = NULL;
|
1515
|
+
int error;
|
1467
1516
|
|
1468
1517
|
assert(out && old_index && new_index);
|
1469
1518
|
|
1470
1519
|
*out = NULL;
|
1471
1520
|
|
1472
|
-
|
1473
|
-
|
1474
|
-
|
1475
|
-
|
1521
|
+
if ((error = diff_prepare_iterator_opts(&prefix, &a_opts, GIT_ITERATOR_DONT_IGNORE_CASE,
|
1522
|
+
&b_opts, GIT_ITERATOR_DONT_IGNORE_CASE, opts) < 0) ||
|
1523
|
+
(error = git_iterator_for_index(&a, repo, old_index, &a_opts)) < 0 ||
|
1524
|
+
(error = git_iterator_for_index(&b, repo, new_index, &b_opts)) < 0 ||
|
1525
|
+
(error = git_diff__from_iterators(&diff, repo, a, b, opts)) < 0)
|
1526
|
+
goto out;
|
1476
1527
|
|
1477
1528
|
/* if index is in case-insensitive order, re-sort deltas to match */
|
1478
|
-
if (
|
1529
|
+
if (old_index->ignore_case || new_index->ignore_case)
|
1479
1530
|
git_diff__set_ignore_case(diff, true);
|
1480
1531
|
|
1481
|
-
|
1482
|
-
|
1532
|
+
*out = diff;
|
1533
|
+
diff = NULL;
|
1534
|
+
out:
|
1535
|
+
git_iterator_free(a);
|
1536
|
+
git_iterator_free(b);
|
1537
|
+
git_diff_free(diff);
|
1538
|
+
git__free(prefix);
|
1483
1539
|
|
1484
1540
|
return error;
|
1485
1541
|
}
|
@@ -1551,7 +1607,7 @@ int git_diff__paired_foreach(
|
|
1551
1607
|
}
|
1552
1608
|
|
1553
1609
|
if ((error = cb(h2i, i2w, payload)) != 0) {
|
1554
|
-
|
1610
|
+
git_error_set_after_callback(error);
|
1555
1611
|
break;
|
1556
1612
|
}
|
1557
1613
|
}
|
@@ -1590,7 +1646,7 @@ int git_diff__commit(
|
|
1590
1646
|
char commit_oidstr[GIT_OID_HEXSZ + 1];
|
1591
1647
|
|
1592
1648
|
error = -1;
|
1593
|
-
|
1649
|
+
git_error_set(GIT_ERROR_INVALID, "commit %s is a merge commit",
|
1594
1650
|
git_oid_tostr(commit_oidstr, GIT_OID_HEXSZ + 1, git_commit_id(commit)));
|
1595
1651
|
goto on_error;
|
1596
1652
|
}
|