rugged 0.27.7 → 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 +99 -51
- data/vendor/libgit2/COPYING +28 -0
- data/vendor/libgit2/cmake/Modules/AddCFlagIfSupported.cmake +15 -1
- data/vendor/libgit2/cmake/Modules/CheckPrototypeDefinition.c.in +29 -0
- data/vendor/libgit2/cmake/Modules/CheckPrototypeDefinition.cmake +96 -0
- 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/FindIconv.cmake +11 -6
- 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/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/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/annotated_commit.h +9 -0
- data/vendor/libgit2/include/git2/apply.h +149 -0
- data/vendor/libgit2/include/git2/attr.h +20 -13
- data/vendor/libgit2/include/git2/blame.h +4 -4
- data/vendor/libgit2/include/git2/blob.h +44 -12
- data/vendor/libgit2/include/git2/buffer.h +20 -26
- data/vendor/libgit2/include/git2/cert.h +135 -0
- data/vendor/libgit2/include/git2/checkout.h +53 -21
- data/vendor/libgit2/include/git2/cherrypick.h +3 -3
- data/vendor/libgit2/include/git2/clone.h +5 -5
- data/vendor/libgit2/include/git2/commit.h +25 -3
- data/vendor/libgit2/include/git2/common.h +35 -10
- data/vendor/libgit2/include/git2/config.h +29 -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 +4 -4
- data/vendor/libgit2/include/git2/diff.h +177 -135
- data/vendor/libgit2/include/git2/errors.h +53 -46
- data/vendor/libgit2/include/git2/filter.h +8 -0
- data/vendor/libgit2/include/git2/index.h +74 -52
- data/vendor/libgit2/include/git2/indexer.h +76 -6
- data/vendor/libgit2/include/git2/merge.h +25 -10
- 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 +5 -3
- data/vendor/libgit2/include/git2/rebase.h +46 -2
- data/vendor/libgit2/include/git2/refs.h +34 -16
- data/vendor/libgit2/include/git2/remote.h +111 -14
- data/vendor/libgit2/include/git2/repository.h +69 -34
- data/vendor/libgit2/include/git2/revert.h +1 -1
- 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 +5 -5
- data/vendor/libgit2/include/git2/status.h +26 -17
- data/vendor/libgit2/include/git2/submodule.h +23 -6
- data/vendor/libgit2/include/git2/sys/alloc.h +18 -18
- 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/merge.h +3 -3
- data/vendor/libgit2/include/git2/sys/odb_backend.h +66 -22
- data/vendor/libgit2/include/git2/sys/path.h +14 -5
- 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/transport.h +11 -311
- data/vendor/libgit2/include/git2/tree.h +4 -4
- data/vendor/libgit2/include/git2/types.h +25 -106
- data/vendor/libgit2/include/git2/version.h +3 -3
- data/vendor/libgit2/include/git2/worktree.h +5 -5
- data/vendor/libgit2/include/git2.h +4 -0
- data/vendor/libgit2/src/CMakeLists.txt +104 -235
- data/vendor/libgit2/src/alloc.c +14 -18
- data/vendor/libgit2/src/{stdalloc.c → allocators/stdalloc.c} +7 -8
- data/vendor/libgit2/src/{stdalloc.h → allocators/stdalloc.h} +4 -4
- 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 +18 -11
- data/vendor/libgit2/src/apply.c +535 -28
- data/vendor/libgit2/src/apply.h +3 -1
- data/vendor/libgit2/src/array.h +2 -2
- data/vendor/libgit2/src/attr.c +77 -71
- data/vendor/libgit2/src/attr_file.c +203 -117
- data/vendor/libgit2/src/attr_file.h +9 -9
- data/vendor/libgit2/src/attrcache.c +49 -51
- data/vendor/libgit2/src/attrcache.h +2 -1
- data/vendor/libgit2/src/blame.c +38 -18
- data/vendor/libgit2/src/blame.h +1 -1
- data/vendor/libgit2/src/blame_git.c +29 -15
- data/vendor/libgit2/src/blob.c +123 -37
- data/vendor/libgit2/src/blob.h +19 -2
- data/vendor/libgit2/src/branch.c +47 -23
- data/vendor/libgit2/src/buf_text.c +7 -6
- data/vendor/libgit2/src/buffer.c +60 -53
- 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 +77 -67
- data/vendor/libgit2/src/cherrypick.c +12 -6
- data/vendor/libgit2/src/clone.c +36 -14
- data/vendor/libgit2/src/clone.h +4 -0
- data/vendor/libgit2/src/commit.c +103 -48
- data/vendor/libgit2/src/commit.h +7 -0
- data/vendor/libgit2/src/commit_list.c +36 -78
- data/vendor/libgit2/src/commit_list.h +2 -2
- data/vendor/libgit2/src/common.h +24 -90
- data/vendor/libgit2/src/config.c +203 -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 +422 -680
- data/vendor/libgit2/src/config_mem.c +220 -0
- data/vendor/libgit2/src/config_parse.c +96 -68
- data/vendor/libgit2/src/config_parse.h +15 -14
- data/vendor/libgit2/src/config_snapshot.c +206 -0
- data/vendor/libgit2/src/crlf.c +219 -196
- data/vendor/libgit2/src/delta.c +25 -18
- data/vendor/libgit2/src/describe.c +42 -41
- data/vendor/libgit2/src/diff.c +52 -67
- data/vendor/libgit2/src/diff.h +2 -1
- data/vendor/libgit2/src/diff_driver.c +44 -46
- data/vendor/libgit2/src/diff_file.c +16 -14
- data/vendor/libgit2/src/diff_file.h +1 -1
- data/vendor/libgit2/src/diff_generate.c +158 -103
- 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 +34 -22
- data/vendor/libgit2/src/diff_stats.c +22 -7
- data/vendor/libgit2/src/diff_tform.c +18 -16
- data/vendor/libgit2/src/diff_xdiff.c +3 -3
- data/vendor/libgit2/src/errors.c +51 -39
- data/vendor/libgit2/src/errors.h +81 -0
- data/vendor/libgit2/src/features.h.in +9 -3
- data/vendor/libgit2/src/fetch.c +8 -3
- data/vendor/libgit2/src/fetchhead.c +12 -12
- data/vendor/libgit2/src/filebuf.c +28 -32
- data/vendor/libgit2/src/filebuf.h +2 -2
- data/vendor/libgit2/src/filter.c +47 -33
- data/vendor/libgit2/src/filter.h +0 -10
- data/vendor/libgit2/src/{fileops.c → futils.c} +70 -63
- data/vendor/libgit2/src/{fileops.h → futils.h} +6 -6
- data/vendor/libgit2/src/global.c +35 -55
- data/vendor/libgit2/src/global.h +0 -2
- 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/{hash_mbedtls.c → sha1/mbedtls.c} +15 -7
- data/vendor/libgit2/src/hash/{hash_mbedtls.h → sha1/mbedtls.h} +6 -7
- 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/{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/hash/sha1.h +38 -0
- data/vendor/libgit2/src/hash.c +61 -0
- data/vendor/libgit2/src/hash.h +20 -21
- 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 +38 -42
- data/vendor/libgit2/src/index.c +264 -199
- data/vendor/libgit2/src/index.h +7 -1
- data/vendor/libgit2/src/indexer.c +338 -167
- data/vendor/libgit2/src/integer.h +71 -26
- data/vendor/libgit2/src/iterator.c +134 -62
- data/vendor/libgit2/src/iterator.h +15 -0
- data/vendor/libgit2/src/mailmap.c +8 -8
- data/vendor/libgit2/src/map.h +1 -1
- data/vendor/libgit2/src/merge.c +137 -93
- 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 +14 -9
- 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 +111 -88
- data/vendor/libgit2/src/odb.h +8 -7
- data/vendor/libgit2/src/odb_loose.c +58 -47
- data/vendor/libgit2/src/odb_mempack.c +21 -34
- data/vendor/libgit2/src/odb_pack.c +17 -13
- 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 +87 -86
- data/vendor/libgit2/src/pack-objects.h +2 -8
- data/vendor/libgit2/src/pack.c +94 -96
- data/vendor/libgit2/src/pack.h +16 -18
- data/vendor/libgit2/src/parse.c +17 -4
- data/vendor/libgit2/src/parse.h +3 -3
- data/vendor/libgit2/src/patch.c +3 -3
- data/vendor/libgit2/src/patch_generate.c +18 -18
- data/vendor/libgit2/src/patch_parse.c +147 -79
- data/vendor/libgit2/src/path.c +207 -62
- data/vendor/libgit2/src/path.h +14 -0
- data/vendor/libgit2/src/pathspec.c +18 -18
- 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 +35 -29
- 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 +97 -38
- data/vendor/libgit2/src/refdb.c +15 -3
- data/vendor/libgit2/src/refdb_fs.c +318 -222
- data/vendor/libgit2/src/reflog.c +13 -15
- data/vendor/libgit2/src/refs.c +122 -89
- data/vendor/libgit2/src/refs.h +5 -3
- data/vendor/libgit2/src/refspec.c +27 -33
- data/vendor/libgit2/src/regexp.c +221 -0
- data/vendor/libgit2/src/regexp.h +97 -0
- data/vendor/libgit2/src/remote.c +229 -178
- data/vendor/libgit2/src/remote.h +11 -2
- data/vendor/libgit2/src/repository.c +227 -172
- data/vendor/libgit2/src/repository.h +52 -40
- data/vendor/libgit2/src/reset.c +7 -7
- data/vendor/libgit2/src/revert.c +11 -6
- data/vendor/libgit2/src/revparse.c +46 -46
- data/vendor/libgit2/src/revwalk.c +89 -54
- data/vendor/libgit2/src/revwalk.h +20 -0
- data/vendor/libgit2/src/settings.c +22 -9
- data/vendor/libgit2/src/signature.c +15 -13
- data/vendor/libgit2/src/sortedcache.c +22 -36
- data/vendor/libgit2/src/sortedcache.h +1 -1
- data/vendor/libgit2/src/stash.c +56 -76
- data/vendor/libgit2/src/status.c +27 -21
- data/vendor/libgit2/src/stream.h +17 -2
- data/vendor/libgit2/src/streams/mbedtls.c +100 -80
- data/vendor/libgit2/src/streams/mbedtls.h +5 -2
- data/vendor/libgit2/src/streams/openssl.c +93 -81
- data/vendor/libgit2/src/streams/openssl.h +5 -2
- 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 +48 -20
- 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 +190 -169
- data/vendor/libgit2/src/submodule.h +1 -1
- data/vendor/libgit2/src/sysdir.c +25 -15
- data/vendor/libgit2/src/tag.c +39 -26
- data/vendor/libgit2/src/tag.h +2 -1
- data/vendor/libgit2/src/trace.c +2 -2
- data/vendor/libgit2/src/trace.h +2 -2
- data/vendor/libgit2/src/trailer.c +46 -32
- data/vendor/libgit2/src/transaction.c +30 -29
- data/vendor/libgit2/src/transport.c +3 -3
- data/vendor/libgit2/src/transports/auth.c +14 -10
- data/vendor/libgit2/src/transports/auth.h +10 -3
- data/vendor/libgit2/src/transports/auth_negotiate.c +31 -16
- 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 +25 -30
- data/vendor/libgit2/src/transports/http.c +871 -335
- data/vendor/libgit2/src/transports/http.h +2 -0
- data/vendor/libgit2/src/transports/local.c +28 -28
- data/vendor/libgit2/src/transports/smart.c +64 -46
- data/vendor/libgit2/src/transports/smart.h +5 -6
- data/vendor/libgit2/src/transports/smart_pkt.c +162 -151
- data/vendor/libgit2/src/transports/smart_protocol.c +64 -94
- data/vendor/libgit2/src/transports/ssh.c +76 -65
- data/vendor/libgit2/src/transports/winhttp.c +328 -319
- data/vendor/libgit2/src/tree-cache.c +21 -14
- data/vendor/libgit2/src/tree.c +119 -112
- data/vendor/libgit2/src/tree.h +1 -0
- 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 +154 -93
- data/vendor/libgit2/src/util.h +19 -23
- data/vendor/libgit2/src/vector.c +15 -10
- 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 +1 -1
- 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 +69 -44
- 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 +2 -95
- data/vendor/libgit2/src/win32/w32_crtdbg_stacktrace.h +0 -2
- 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 +44 -30
- data/vendor/libgit2/src/xdiff/xdiffi.c +5 -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 +115 -38
- 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/streams/curl.h +0 -17
- /data/vendor/libgit2/deps/http-parser/{LICENSE-MIT → COPYING} +0 -0
- /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/apply.c
CHANGED
|
@@ -7,18 +7,20 @@
|
|
|
7
7
|
|
|
8
8
|
#include "apply.h"
|
|
9
9
|
|
|
10
|
-
#include
|
|
11
|
-
|
|
10
|
+
#include "git2/apply.h"
|
|
12
11
|
#include "git2/patch.h"
|
|
13
12
|
#include "git2/filter.h"
|
|
13
|
+
#include "git2/blob.h"
|
|
14
|
+
#include "git2/index.h"
|
|
15
|
+
#include "git2/checkout.h"
|
|
16
|
+
#include "git2/repository.h"
|
|
14
17
|
#include "array.h"
|
|
15
18
|
#include "patch.h"
|
|
16
|
-
#include "
|
|
19
|
+
#include "futils.h"
|
|
17
20
|
#include "delta.h"
|
|
18
21
|
#include "zstream.h"
|
|
19
|
-
|
|
20
|
-
#
|
|
21
|
-
( giterr_set(GITERR_PATCH, __VA_ARGS__), -1 )
|
|
22
|
+
#include "reader.h"
|
|
23
|
+
#include "index.h"
|
|
22
24
|
|
|
23
25
|
typedef struct {
|
|
24
26
|
/* The lines that we allocate ourself are allocated out of the pool.
|
|
@@ -28,6 +30,18 @@ typedef struct {
|
|
|
28
30
|
git_vector lines;
|
|
29
31
|
} patch_image;
|
|
30
32
|
|
|
33
|
+
static int apply_err(const char *fmt, ...) GIT_FORMAT_PRINTF(1, 2);
|
|
34
|
+
static int apply_err(const char *fmt, ...)
|
|
35
|
+
{
|
|
36
|
+
va_list ap;
|
|
37
|
+
|
|
38
|
+
va_start(ap, fmt);
|
|
39
|
+
git_error_vset(GIT_ERROR_PATCH, fmt, ap);
|
|
40
|
+
va_end(ap);
|
|
41
|
+
|
|
42
|
+
return GIT_EAPPLYFAIL;
|
|
43
|
+
}
|
|
44
|
+
|
|
31
45
|
static void patch_line_init(
|
|
32
46
|
git_diff_line *out,
|
|
33
47
|
const char *in,
|
|
@@ -52,7 +66,7 @@ static int patch_image_init_fromstr(
|
|
|
52
66
|
git_pool_init(&out->pool, sizeof(git_diff_line));
|
|
53
67
|
|
|
54
68
|
for (start = in; start < in + in_len; start = end) {
|
|
55
|
-
end = memchr(start, '\n', in_len);
|
|
69
|
+
end = memchr(start, '\n', in_len - (start - in));
|
|
56
70
|
|
|
57
71
|
if (end == NULL)
|
|
58
72
|
end = in + in_len;
|
|
@@ -61,7 +75,7 @@ static int patch_image_init_fromstr(
|
|
|
61
75
|
end++;
|
|
62
76
|
|
|
63
77
|
line = git_pool_mallocz(&out->pool, 1);
|
|
64
|
-
|
|
78
|
+
GIT_ERROR_CHECK_ALLOC(line);
|
|
65
79
|
|
|
66
80
|
if (git_vector_insert(&out->lines, line) < 0)
|
|
67
81
|
return -1;
|
|
@@ -131,7 +145,7 @@ static bool find_hunk_linenum(
|
|
|
131
145
|
|
|
132
146
|
static int update_hunk(
|
|
133
147
|
patch_image *image,
|
|
134
|
-
|
|
148
|
+
size_t linenum,
|
|
135
149
|
patch_image *preimage,
|
|
136
150
|
patch_image *postimage)
|
|
137
151
|
{
|
|
@@ -148,7 +162,7 @@ static int update_hunk(
|
|
|
148
162
|
&image->lines, linenum, (prelen - postlen));
|
|
149
163
|
|
|
150
164
|
if (error) {
|
|
151
|
-
|
|
165
|
+
git_error_set_oom();
|
|
152
166
|
return -1;
|
|
153
167
|
}
|
|
154
168
|
|
|
@@ -160,38 +174,77 @@ static int update_hunk(
|
|
|
160
174
|
return 0;
|
|
161
175
|
}
|
|
162
176
|
|
|
177
|
+
typedef struct {
|
|
178
|
+
git_apply_options opts;
|
|
179
|
+
size_t skipped_new_lines;
|
|
180
|
+
size_t skipped_old_lines;
|
|
181
|
+
} apply_hunks_ctx;
|
|
182
|
+
|
|
163
183
|
static int apply_hunk(
|
|
164
184
|
patch_image *image,
|
|
165
185
|
git_patch *patch,
|
|
166
|
-
git_patch_hunk *hunk
|
|
186
|
+
git_patch_hunk *hunk,
|
|
187
|
+
apply_hunks_ctx *ctx)
|
|
167
188
|
{
|
|
168
189
|
patch_image preimage = PATCH_IMAGE_INIT, postimage = PATCH_IMAGE_INIT;
|
|
169
190
|
size_t line_num, i;
|
|
170
191
|
int error = 0;
|
|
171
192
|
|
|
193
|
+
if (ctx->opts.hunk_cb) {
|
|
194
|
+
error = ctx->opts.hunk_cb(&hunk->hunk, ctx->opts.payload);
|
|
195
|
+
|
|
196
|
+
if (error) {
|
|
197
|
+
if (error > 0) {
|
|
198
|
+
ctx->skipped_new_lines += hunk->hunk.new_lines;
|
|
199
|
+
ctx->skipped_old_lines += hunk->hunk.old_lines;
|
|
200
|
+
error = 0;
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
goto done;
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
|
|
172
207
|
for (i = 0; i < hunk->line_count; i++) {
|
|
173
208
|
size_t linenum = hunk->line_start + i;
|
|
174
|
-
git_diff_line *line = git_array_get(patch->lines, linenum);
|
|
209
|
+
git_diff_line *line = git_array_get(patch->lines, linenum), *prev;
|
|
175
210
|
|
|
176
211
|
if (!line) {
|
|
177
212
|
error = apply_err("preimage does not contain line %"PRIuZ, linenum);
|
|
178
213
|
goto done;
|
|
179
214
|
}
|
|
180
215
|
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
216
|
+
switch (line->origin) {
|
|
217
|
+
case GIT_DIFF_LINE_CONTEXT_EOFNL:
|
|
218
|
+
case GIT_DIFF_LINE_DEL_EOFNL:
|
|
219
|
+
case GIT_DIFF_LINE_ADD_EOFNL:
|
|
220
|
+
prev = i ? git_array_get(patch->lines, linenum - 1) : NULL;
|
|
221
|
+
if (prev && prev->content[prev->content_len - 1] == '\n')
|
|
222
|
+
prev->content_len -= 1;
|
|
223
|
+
break;
|
|
224
|
+
case GIT_DIFF_LINE_CONTEXT:
|
|
225
|
+
if ((error = git_vector_insert(&preimage.lines, line)) < 0 ||
|
|
226
|
+
(error = git_vector_insert(&postimage.lines, line)) < 0)
|
|
227
|
+
goto done;
|
|
228
|
+
break;
|
|
229
|
+
case GIT_DIFF_LINE_DELETION:
|
|
230
|
+
if ((error = git_vector_insert(&preimage.lines, line)) < 0)
|
|
231
|
+
goto done;
|
|
232
|
+
break;
|
|
233
|
+
case GIT_DIFF_LINE_ADDITION:
|
|
234
|
+
if ((error = git_vector_insert(&postimage.lines, line)) < 0)
|
|
235
|
+
goto done;
|
|
236
|
+
break;
|
|
191
237
|
}
|
|
192
238
|
}
|
|
193
239
|
|
|
194
|
-
|
|
240
|
+
if (hunk->hunk.new_start) {
|
|
241
|
+
line_num = hunk->hunk.new_start -
|
|
242
|
+
ctx->skipped_new_lines +
|
|
243
|
+
ctx->skipped_old_lines -
|
|
244
|
+
1;
|
|
245
|
+
} else {
|
|
246
|
+
line_num = 0;
|
|
247
|
+
}
|
|
195
248
|
|
|
196
249
|
if (!find_hunk_linenum(&line_num, image, &preimage, line_num)) {
|
|
197
250
|
error = apply_err("hunk at line %d did not apply",
|
|
@@ -212,7 +265,8 @@ static int apply_hunks(
|
|
|
212
265
|
git_buf *out,
|
|
213
266
|
const char *source,
|
|
214
267
|
size_t source_len,
|
|
215
|
-
git_patch *patch
|
|
268
|
+
git_patch *patch,
|
|
269
|
+
apply_hunks_ctx *ctx)
|
|
216
270
|
{
|
|
217
271
|
git_patch_hunk *hunk;
|
|
218
272
|
git_diff_line *line;
|
|
@@ -224,7 +278,7 @@ static int apply_hunks(
|
|
|
224
278
|
goto done;
|
|
225
279
|
|
|
226
280
|
git_array_foreach(patch->hunks, i, hunk) {
|
|
227
|
-
if ((error = apply_hunk(&image, patch, hunk)) < 0)
|
|
281
|
+
if ((error = apply_hunk(&image, patch, hunk, ctx)) < 0)
|
|
228
282
|
goto done;
|
|
229
283
|
}
|
|
230
284
|
|
|
@@ -312,8 +366,9 @@ static int apply_binary(
|
|
|
312
366
|
&patch->binary.old_file)) < 0)
|
|
313
367
|
goto done;
|
|
314
368
|
|
|
369
|
+
/* Verify that the resulting file with the reverse patch applied matches the source file */
|
|
315
370
|
if (source_len != reverse.size ||
|
|
316
|
-
memcmp(source, reverse.ptr, source_len) != 0) {
|
|
371
|
+
(source_len && memcmp(source, reverse.ptr, source_len) != 0)) {
|
|
317
372
|
error = apply_err("binary patch did not apply cleanly");
|
|
318
373
|
goto done;
|
|
319
374
|
}
|
|
@@ -332,14 +387,19 @@ int git_apply__patch(
|
|
|
332
387
|
unsigned int *mode_out,
|
|
333
388
|
const char *source,
|
|
334
389
|
size_t source_len,
|
|
335
|
-
git_patch *patch
|
|
390
|
+
git_patch *patch,
|
|
391
|
+
const git_apply_options *given_opts)
|
|
336
392
|
{
|
|
393
|
+
apply_hunks_ctx ctx = { GIT_APPLY_OPTIONS_INIT };
|
|
337
394
|
char *filename = NULL;
|
|
338
395
|
unsigned int mode = 0;
|
|
339
396
|
int error = 0;
|
|
340
397
|
|
|
341
398
|
assert(contents_out && filename_out && mode_out && (source || !source_len) && patch);
|
|
342
399
|
|
|
400
|
+
if (given_opts)
|
|
401
|
+
memcpy(&ctx.opts, given_opts, sizeof(git_apply_options));
|
|
402
|
+
|
|
343
403
|
*filename_out = NULL;
|
|
344
404
|
*mode_out = 0;
|
|
345
405
|
|
|
@@ -354,7 +414,7 @@ int git_apply__patch(
|
|
|
354
414
|
if (patch->delta->flags & GIT_DIFF_FLAG_BINARY)
|
|
355
415
|
error = apply_binary(contents_out, source, source_len, patch);
|
|
356
416
|
else if (patch->hunks.size)
|
|
357
|
-
error = apply_hunks(contents_out, source, source_len, patch);
|
|
417
|
+
error = apply_hunks(contents_out, source, source_len, patch, &ctx);
|
|
358
418
|
else
|
|
359
419
|
error = git_buf_put(contents_out, source, source_len);
|
|
360
420
|
|
|
@@ -376,3 +436,450 @@ done:
|
|
|
376
436
|
|
|
377
437
|
return error;
|
|
378
438
|
}
|
|
439
|
+
|
|
440
|
+
static int apply_one(
|
|
441
|
+
git_repository *repo,
|
|
442
|
+
git_reader *preimage_reader,
|
|
443
|
+
git_index *preimage,
|
|
444
|
+
git_reader *postimage_reader,
|
|
445
|
+
git_index *postimage,
|
|
446
|
+
git_diff *diff,
|
|
447
|
+
git_strmap *removed_paths,
|
|
448
|
+
size_t i,
|
|
449
|
+
const git_apply_options *opts)
|
|
450
|
+
{
|
|
451
|
+
git_patch *patch = NULL;
|
|
452
|
+
git_buf pre_contents = GIT_BUF_INIT, post_contents = GIT_BUF_INIT;
|
|
453
|
+
const git_diff_delta *delta;
|
|
454
|
+
char *filename = NULL;
|
|
455
|
+
unsigned int mode;
|
|
456
|
+
git_oid pre_id, post_id;
|
|
457
|
+
git_filemode_t pre_filemode;
|
|
458
|
+
git_index_entry pre_entry, post_entry;
|
|
459
|
+
bool skip_preimage = false;
|
|
460
|
+
int error;
|
|
461
|
+
|
|
462
|
+
if ((error = git_patch_from_diff(&patch, diff, i)) < 0)
|
|
463
|
+
goto done;
|
|
464
|
+
|
|
465
|
+
delta = git_patch_get_delta(patch);
|
|
466
|
+
|
|
467
|
+
if (opts->delta_cb) {
|
|
468
|
+
error = opts->delta_cb(delta, opts->payload);
|
|
469
|
+
|
|
470
|
+
if (error) {
|
|
471
|
+
if (error > 0)
|
|
472
|
+
error = 0;
|
|
473
|
+
|
|
474
|
+
goto done;
|
|
475
|
+
}
|
|
476
|
+
}
|
|
477
|
+
|
|
478
|
+
/*
|
|
479
|
+
* Ensure that the file has not been deleted or renamed if we're
|
|
480
|
+
* applying a modification delta.
|
|
481
|
+
*/
|
|
482
|
+
if (delta->status != GIT_DELTA_RENAMED &&
|
|
483
|
+
delta->status != GIT_DELTA_ADDED) {
|
|
484
|
+
if (git_strmap_exists(removed_paths, delta->old_file.path)) {
|
|
485
|
+
error = apply_err("path '%s' has been renamed or deleted", delta->old_file.path);
|
|
486
|
+
goto done;
|
|
487
|
+
}
|
|
488
|
+
}
|
|
489
|
+
|
|
490
|
+
/*
|
|
491
|
+
* We may be applying a second delta to an already seen file. If so,
|
|
492
|
+
* use the already modified data in the postimage instead of the
|
|
493
|
+
* content from the index or working directory. (Don't do this in
|
|
494
|
+
* the case of a rename, which must be specified before additional
|
|
495
|
+
* deltas since we apply deltas to the target filename.)
|
|
496
|
+
*/
|
|
497
|
+
if (delta->status != GIT_DELTA_RENAMED) {
|
|
498
|
+
if ((error = git_reader_read(&pre_contents, &pre_id, &pre_filemode,
|
|
499
|
+
postimage_reader, delta->old_file.path)) == 0) {
|
|
500
|
+
skip_preimage = true;
|
|
501
|
+
} else if (error == GIT_ENOTFOUND) {
|
|
502
|
+
git_error_clear();
|
|
503
|
+
error = 0;
|
|
504
|
+
} else {
|
|
505
|
+
goto done;
|
|
506
|
+
}
|
|
507
|
+
}
|
|
508
|
+
|
|
509
|
+
if (!skip_preimage && delta->status != GIT_DELTA_ADDED) {
|
|
510
|
+
error = git_reader_read(&pre_contents, &pre_id, &pre_filemode,
|
|
511
|
+
preimage_reader, delta->old_file.path);
|
|
512
|
+
|
|
513
|
+
/* ENOTFOUND means the preimage was not found; apply failed. */
|
|
514
|
+
if (error == GIT_ENOTFOUND)
|
|
515
|
+
error = GIT_EAPPLYFAIL;
|
|
516
|
+
|
|
517
|
+
/* When applying to BOTH, the index did not match the workdir. */
|
|
518
|
+
if (error == GIT_READER_MISMATCH)
|
|
519
|
+
error = apply_err("%s: does not match index", delta->old_file.path);
|
|
520
|
+
|
|
521
|
+
if (error < 0)
|
|
522
|
+
goto done;
|
|
523
|
+
|
|
524
|
+
/*
|
|
525
|
+
* We need to populate the preimage data structure with the
|
|
526
|
+
* contents that we are using as the preimage for this file.
|
|
527
|
+
* This allows us to apply patches to files that have been
|
|
528
|
+
* modified in the working directory. During checkout,
|
|
529
|
+
* we will use this expected preimage as the baseline, and
|
|
530
|
+
* limit checkout to only the paths affected by patch
|
|
531
|
+
* application. (Without this, we would fail to write the
|
|
532
|
+
* postimage contents to any file that had been modified
|
|
533
|
+
* from HEAD on-disk, even if the patch application succeeded.)
|
|
534
|
+
* Use the contents from the delta where available - some
|
|
535
|
+
* fields may not be available, like the old file mode (eg in
|
|
536
|
+
* an exact rename situation) so trust the patch parsing to
|
|
537
|
+
* validate and use the preimage data in that case.
|
|
538
|
+
*/
|
|
539
|
+
if (preimage) {
|
|
540
|
+
memset(&pre_entry, 0, sizeof(git_index_entry));
|
|
541
|
+
pre_entry.path = delta->old_file.path;
|
|
542
|
+
pre_entry.mode = delta->old_file.mode ? delta->old_file.mode : pre_filemode;
|
|
543
|
+
git_oid_cpy(&pre_entry.id, &pre_id);
|
|
544
|
+
|
|
545
|
+
if ((error = git_index_add(preimage, &pre_entry)) < 0)
|
|
546
|
+
goto done;
|
|
547
|
+
}
|
|
548
|
+
}
|
|
549
|
+
|
|
550
|
+
if (delta->status != GIT_DELTA_DELETED) {
|
|
551
|
+
if ((error = git_apply__patch(&post_contents, &filename, &mode,
|
|
552
|
+
pre_contents.ptr, pre_contents.size, patch, opts)) < 0 ||
|
|
553
|
+
(error = git_blob_create_from_buffer(&post_id, repo,
|
|
554
|
+
post_contents.ptr, post_contents.size)) < 0)
|
|
555
|
+
goto done;
|
|
556
|
+
|
|
557
|
+
memset(&post_entry, 0, sizeof(git_index_entry));
|
|
558
|
+
post_entry.path = filename;
|
|
559
|
+
post_entry.mode = mode;
|
|
560
|
+
git_oid_cpy(&post_entry.id, &post_id);
|
|
561
|
+
|
|
562
|
+
if ((error = git_index_add(postimage, &post_entry)) < 0)
|
|
563
|
+
goto done;
|
|
564
|
+
}
|
|
565
|
+
|
|
566
|
+
if (delta->status == GIT_DELTA_RENAMED ||
|
|
567
|
+
delta->status == GIT_DELTA_DELETED)
|
|
568
|
+
error = git_strmap_set(removed_paths, delta->old_file.path, (char *) delta->old_file.path);
|
|
569
|
+
|
|
570
|
+
if (delta->status == GIT_DELTA_RENAMED ||
|
|
571
|
+
delta->status == GIT_DELTA_ADDED)
|
|
572
|
+
git_strmap_delete(removed_paths, delta->new_file.path);
|
|
573
|
+
|
|
574
|
+
done:
|
|
575
|
+
git_buf_dispose(&pre_contents);
|
|
576
|
+
git_buf_dispose(&post_contents);
|
|
577
|
+
git__free(filename);
|
|
578
|
+
git_patch_free(patch);
|
|
579
|
+
|
|
580
|
+
return error;
|
|
581
|
+
}
|
|
582
|
+
|
|
583
|
+
static int apply_deltas(
|
|
584
|
+
git_repository *repo,
|
|
585
|
+
git_reader *pre_reader,
|
|
586
|
+
git_index *preimage,
|
|
587
|
+
git_reader *post_reader,
|
|
588
|
+
git_index *postimage,
|
|
589
|
+
git_diff *diff,
|
|
590
|
+
const git_apply_options *opts)
|
|
591
|
+
{
|
|
592
|
+
git_strmap *removed_paths;
|
|
593
|
+
size_t i;
|
|
594
|
+
int error = 0;
|
|
595
|
+
|
|
596
|
+
if (git_strmap_new(&removed_paths) < 0)
|
|
597
|
+
return -1;
|
|
598
|
+
|
|
599
|
+
for (i = 0; i < git_diff_num_deltas(diff); i++) {
|
|
600
|
+
if ((error = apply_one(repo, pre_reader, preimage, post_reader, postimage, diff, removed_paths, i, opts)) < 0)
|
|
601
|
+
goto done;
|
|
602
|
+
}
|
|
603
|
+
|
|
604
|
+
done:
|
|
605
|
+
git_strmap_free(removed_paths);
|
|
606
|
+
return error;
|
|
607
|
+
}
|
|
608
|
+
|
|
609
|
+
int git_apply_to_tree(
|
|
610
|
+
git_index **out,
|
|
611
|
+
git_repository *repo,
|
|
612
|
+
git_tree *preimage,
|
|
613
|
+
git_diff *diff,
|
|
614
|
+
const git_apply_options *given_opts)
|
|
615
|
+
{
|
|
616
|
+
git_index *postimage = NULL;
|
|
617
|
+
git_reader *pre_reader = NULL, *post_reader = NULL;
|
|
618
|
+
git_apply_options opts = GIT_APPLY_OPTIONS_INIT;
|
|
619
|
+
const git_diff_delta *delta;
|
|
620
|
+
size_t i;
|
|
621
|
+
int error = 0;
|
|
622
|
+
|
|
623
|
+
assert(out && repo && preimage && diff);
|
|
624
|
+
|
|
625
|
+
*out = NULL;
|
|
626
|
+
|
|
627
|
+
if (given_opts)
|
|
628
|
+
memcpy(&opts, given_opts, sizeof(git_apply_options));
|
|
629
|
+
|
|
630
|
+
if ((error = git_reader_for_tree(&pre_reader, preimage)) < 0)
|
|
631
|
+
goto done;
|
|
632
|
+
|
|
633
|
+
/*
|
|
634
|
+
* put the current tree into the postimage as-is - the diff will
|
|
635
|
+
* replace any entries contained therein
|
|
636
|
+
*/
|
|
637
|
+
if ((error = git_index_new(&postimage)) < 0 ||
|
|
638
|
+
(error = git_index_read_tree(postimage, preimage)) < 0 ||
|
|
639
|
+
(error = git_reader_for_index(&post_reader, repo, postimage)) < 0)
|
|
640
|
+
goto done;
|
|
641
|
+
|
|
642
|
+
/*
|
|
643
|
+
* Remove the old paths from the index before applying diffs -
|
|
644
|
+
* we need to do a full pass to remove them before adding deltas,
|
|
645
|
+
* in order to handle rename situations.
|
|
646
|
+
*/
|
|
647
|
+
for (i = 0; i < git_diff_num_deltas(diff); i++) {
|
|
648
|
+
delta = git_diff_get_delta(diff, i);
|
|
649
|
+
|
|
650
|
+
if (delta->status == GIT_DELTA_DELETED ||
|
|
651
|
+
delta->status == GIT_DELTA_RENAMED) {
|
|
652
|
+
if ((error = git_index_remove(postimage,
|
|
653
|
+
delta->old_file.path, 0)) < 0)
|
|
654
|
+
goto done;
|
|
655
|
+
}
|
|
656
|
+
}
|
|
657
|
+
|
|
658
|
+
if ((error = apply_deltas(repo, pre_reader, NULL, post_reader, postimage, diff, &opts)) < 0)
|
|
659
|
+
goto done;
|
|
660
|
+
|
|
661
|
+
*out = postimage;
|
|
662
|
+
|
|
663
|
+
done:
|
|
664
|
+
if (error < 0)
|
|
665
|
+
git_index_free(postimage);
|
|
666
|
+
|
|
667
|
+
git_reader_free(pre_reader);
|
|
668
|
+
git_reader_free(post_reader);
|
|
669
|
+
|
|
670
|
+
return error;
|
|
671
|
+
}
|
|
672
|
+
|
|
673
|
+
static int git_apply__to_workdir(
|
|
674
|
+
git_repository *repo,
|
|
675
|
+
git_diff *diff,
|
|
676
|
+
git_index *preimage,
|
|
677
|
+
git_index *postimage,
|
|
678
|
+
git_apply_location_t location,
|
|
679
|
+
git_apply_options *opts)
|
|
680
|
+
{
|
|
681
|
+
git_vector paths = GIT_VECTOR_INIT;
|
|
682
|
+
git_checkout_options checkout_opts = GIT_CHECKOUT_OPTIONS_INIT;
|
|
683
|
+
const git_diff_delta *delta;
|
|
684
|
+
size_t i;
|
|
685
|
+
int error;
|
|
686
|
+
|
|
687
|
+
GIT_UNUSED(opts);
|
|
688
|
+
|
|
689
|
+
/*
|
|
690
|
+
* Limit checkout to the paths affected by the diff; this ensures
|
|
691
|
+
* that other modifications in the working directory are unaffected.
|
|
692
|
+
*/
|
|
693
|
+
if ((error = git_vector_init(&paths, git_diff_num_deltas(diff), NULL)) < 0)
|
|
694
|
+
goto done;
|
|
695
|
+
|
|
696
|
+
for (i = 0; i < git_diff_num_deltas(diff); i++) {
|
|
697
|
+
delta = git_diff_get_delta(diff, i);
|
|
698
|
+
|
|
699
|
+
if ((error = git_vector_insert(&paths, (void *)delta->old_file.path)) < 0)
|
|
700
|
+
goto done;
|
|
701
|
+
|
|
702
|
+
if (strcmp(delta->old_file.path, delta->new_file.path) &&
|
|
703
|
+
(error = git_vector_insert(&paths, (void *)delta->new_file.path)) < 0)
|
|
704
|
+
goto done;
|
|
705
|
+
}
|
|
706
|
+
|
|
707
|
+
checkout_opts.checkout_strategy |= GIT_CHECKOUT_SAFE;
|
|
708
|
+
checkout_opts.checkout_strategy |= GIT_CHECKOUT_DISABLE_PATHSPEC_MATCH;
|
|
709
|
+
checkout_opts.checkout_strategy |= GIT_CHECKOUT_DONT_WRITE_INDEX;
|
|
710
|
+
|
|
711
|
+
if (location == GIT_APPLY_LOCATION_WORKDIR)
|
|
712
|
+
checkout_opts.checkout_strategy |= GIT_CHECKOUT_DONT_UPDATE_INDEX;
|
|
713
|
+
|
|
714
|
+
checkout_opts.paths.strings = (char **)paths.contents;
|
|
715
|
+
checkout_opts.paths.count = paths.length;
|
|
716
|
+
|
|
717
|
+
checkout_opts.baseline_index = preimage;
|
|
718
|
+
|
|
719
|
+
error = git_checkout_index(repo, postimage, &checkout_opts);
|
|
720
|
+
|
|
721
|
+
done:
|
|
722
|
+
git_vector_free(&paths);
|
|
723
|
+
return error;
|
|
724
|
+
}
|
|
725
|
+
|
|
726
|
+
static int git_apply__to_index(
|
|
727
|
+
git_repository *repo,
|
|
728
|
+
git_diff *diff,
|
|
729
|
+
git_index *preimage,
|
|
730
|
+
git_index *postimage,
|
|
731
|
+
git_apply_options *opts)
|
|
732
|
+
{
|
|
733
|
+
git_index *index = NULL;
|
|
734
|
+
const git_diff_delta *delta;
|
|
735
|
+
const git_index_entry *entry;
|
|
736
|
+
size_t i;
|
|
737
|
+
int error;
|
|
738
|
+
|
|
739
|
+
GIT_UNUSED(preimage);
|
|
740
|
+
GIT_UNUSED(opts);
|
|
741
|
+
|
|
742
|
+
if ((error = git_repository_index(&index, repo)) < 0)
|
|
743
|
+
goto done;
|
|
744
|
+
|
|
745
|
+
/* Remove deleted (or renamed) paths from the index. */
|
|
746
|
+
for (i = 0; i < git_diff_num_deltas(diff); i++) {
|
|
747
|
+
delta = git_diff_get_delta(diff, i);
|
|
748
|
+
|
|
749
|
+
if (delta->status == GIT_DELTA_DELETED ||
|
|
750
|
+
delta->status == GIT_DELTA_RENAMED) {
|
|
751
|
+
if ((error = git_index_remove(index, delta->old_file.path, 0)) < 0)
|
|
752
|
+
goto done;
|
|
753
|
+
}
|
|
754
|
+
}
|
|
755
|
+
|
|
756
|
+
/* Then add the changes back to the index. */
|
|
757
|
+
for (i = 0; i < git_index_entrycount(postimage); i++) {
|
|
758
|
+
entry = git_index_get_byindex(postimage, i);
|
|
759
|
+
|
|
760
|
+
if ((error = git_index_add(index, entry)) < 0)
|
|
761
|
+
goto done;
|
|
762
|
+
}
|
|
763
|
+
|
|
764
|
+
done:
|
|
765
|
+
git_index_free(index);
|
|
766
|
+
return error;
|
|
767
|
+
}
|
|
768
|
+
|
|
769
|
+
int git_apply_options_init(git_apply_options *opts, unsigned int version)
|
|
770
|
+
{
|
|
771
|
+
GIT_INIT_STRUCTURE_FROM_TEMPLATE(
|
|
772
|
+
opts, version, git_apply_options, GIT_APPLY_OPTIONS_INIT);
|
|
773
|
+
return 0;
|
|
774
|
+
}
|
|
775
|
+
|
|
776
|
+
/*
|
|
777
|
+
* Handle the three application options ("locations"):
|
|
778
|
+
*
|
|
779
|
+
* GIT_APPLY_LOCATION_WORKDIR: the default, emulates `git apply`.
|
|
780
|
+
* Applies the diff only to the workdir items and ignores the index
|
|
781
|
+
* entirely.
|
|
782
|
+
*
|
|
783
|
+
* GIT_APPLY_LOCATION_INDEX: emulates `git apply --cached`.
|
|
784
|
+
* Applies the diff only to the index items and ignores the workdir
|
|
785
|
+
* completely.
|
|
786
|
+
*
|
|
787
|
+
* GIT_APPLY_LOCATION_BOTH: emulates `git apply --index`.
|
|
788
|
+
* Applies the diff to both the index items and the working directory
|
|
789
|
+
* items.
|
|
790
|
+
*/
|
|
791
|
+
|
|
792
|
+
int git_apply(
|
|
793
|
+
git_repository *repo,
|
|
794
|
+
git_diff *diff,
|
|
795
|
+
git_apply_location_t location,
|
|
796
|
+
const git_apply_options *given_opts)
|
|
797
|
+
{
|
|
798
|
+
git_indexwriter indexwriter = GIT_INDEXWRITER_INIT;
|
|
799
|
+
git_index *index = NULL, *preimage = NULL, *postimage = NULL;
|
|
800
|
+
git_reader *pre_reader = NULL, *post_reader = NULL;
|
|
801
|
+
git_apply_options opts = GIT_APPLY_OPTIONS_INIT;
|
|
802
|
+
int error = GIT_EINVALID;
|
|
803
|
+
|
|
804
|
+
assert(repo && diff);
|
|
805
|
+
|
|
806
|
+
GIT_ERROR_CHECK_VERSION(
|
|
807
|
+
given_opts, GIT_APPLY_OPTIONS_VERSION, "git_apply_options");
|
|
808
|
+
|
|
809
|
+
if (given_opts)
|
|
810
|
+
memcpy(&opts, given_opts, sizeof(git_apply_options));
|
|
811
|
+
|
|
812
|
+
/*
|
|
813
|
+
* by default, we apply a patch directly to the working directory;
|
|
814
|
+
* in `--cached` or `--index` mode, we apply to the contents already
|
|
815
|
+
* in the index.
|
|
816
|
+
*/
|
|
817
|
+
switch (location) {
|
|
818
|
+
case GIT_APPLY_LOCATION_BOTH:
|
|
819
|
+
error = git_reader_for_workdir(&pre_reader, repo, true);
|
|
820
|
+
break;
|
|
821
|
+
case GIT_APPLY_LOCATION_INDEX:
|
|
822
|
+
error = git_reader_for_index(&pre_reader, repo, NULL);
|
|
823
|
+
break;
|
|
824
|
+
case GIT_APPLY_LOCATION_WORKDIR:
|
|
825
|
+
error = git_reader_for_workdir(&pre_reader, repo, false);
|
|
826
|
+
break;
|
|
827
|
+
default:
|
|
828
|
+
assert(false);
|
|
829
|
+
}
|
|
830
|
+
|
|
831
|
+
if (error < 0)
|
|
832
|
+
goto done;
|
|
833
|
+
|
|
834
|
+
/*
|
|
835
|
+
* Build the preimage and postimage (differences). Note that
|
|
836
|
+
* this is not the complete preimage or postimage, it only
|
|
837
|
+
* contains the files affected by the patch. We want to avoid
|
|
838
|
+
* having the full repo index, so we will limit our checkout
|
|
839
|
+
* to only write these files that were affected by the diff.
|
|
840
|
+
*/
|
|
841
|
+
if ((error = git_index_new(&preimage)) < 0 ||
|
|
842
|
+
(error = git_index_new(&postimage)) < 0 ||
|
|
843
|
+
(error = git_reader_for_index(&post_reader, repo, postimage)) < 0)
|
|
844
|
+
goto done;
|
|
845
|
+
|
|
846
|
+
if (!(opts.flags & GIT_APPLY_CHECK))
|
|
847
|
+
if ((error = git_repository_index(&index, repo)) < 0 ||
|
|
848
|
+
(error = git_indexwriter_init(&indexwriter, index)) < 0)
|
|
849
|
+
goto done;
|
|
850
|
+
|
|
851
|
+
if ((error = apply_deltas(repo, pre_reader, preimage, post_reader, postimage, diff, &opts)) < 0)
|
|
852
|
+
goto done;
|
|
853
|
+
|
|
854
|
+
if ((opts.flags & GIT_APPLY_CHECK))
|
|
855
|
+
goto done;
|
|
856
|
+
|
|
857
|
+
switch (location) {
|
|
858
|
+
case GIT_APPLY_LOCATION_BOTH:
|
|
859
|
+
error = git_apply__to_workdir(repo, diff, preimage, postimage, location, &opts);
|
|
860
|
+
break;
|
|
861
|
+
case GIT_APPLY_LOCATION_INDEX:
|
|
862
|
+
error = git_apply__to_index(repo, diff, preimage, postimage, &opts);
|
|
863
|
+
break;
|
|
864
|
+
case GIT_APPLY_LOCATION_WORKDIR:
|
|
865
|
+
error = git_apply__to_workdir(repo, diff, preimage, postimage, location, &opts);
|
|
866
|
+
break;
|
|
867
|
+
default:
|
|
868
|
+
assert(false);
|
|
869
|
+
}
|
|
870
|
+
|
|
871
|
+
if (error < 0)
|
|
872
|
+
goto done;
|
|
873
|
+
|
|
874
|
+
error = git_indexwriter_commit(&indexwriter);
|
|
875
|
+
|
|
876
|
+
done:
|
|
877
|
+
git_indexwriter_cleanup(&indexwriter);
|
|
878
|
+
git_index_free(postimage);
|
|
879
|
+
git_index_free(preimage);
|
|
880
|
+
git_index_free(index);
|
|
881
|
+
git_reader_free(pre_reader);
|
|
882
|
+
git_reader_free(post_reader);
|
|
883
|
+
|
|
884
|
+
return error;
|
|
885
|
+
}
|
data/vendor/libgit2/src/apply.h
CHANGED
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
#include "common.h"
|
|
11
11
|
|
|
12
12
|
#include "git2/patch.h"
|
|
13
|
+
#include "git2/apply.h"
|
|
13
14
|
#include "buffer.h"
|
|
14
15
|
|
|
15
16
|
extern int git_apply__patch(
|
|
@@ -18,6 +19,7 @@ extern int git_apply__patch(
|
|
|
18
19
|
unsigned int *mode,
|
|
19
20
|
const char *source,
|
|
20
21
|
size_t source_len,
|
|
21
|
-
git_patch *patch
|
|
22
|
+
git_patch *patch,
|
|
23
|
+
const git_apply_options *opts);
|
|
22
24
|
|
|
23
25
|
#endif
|
data/vendor/libgit2/src/array.h
CHANGED
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
* git_array_t(int) my_ints = GIT_ARRAY_INIT;
|
|
16
16
|
* ...
|
|
17
17
|
* int *i = git_array_alloc(my_ints);
|
|
18
|
-
*
|
|
18
|
+
* GIT_ERROR_CHECK_ALLOC(i);
|
|
19
19
|
* ...
|
|
20
20
|
* git_array_clear(my_ints);
|
|
21
21
|
*
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
#define git_array_clear(a) \
|
|
37
37
|
do { git__free((a).ptr); git_array_init(a); } while (0)
|
|
38
38
|
|
|
39
|
-
#define
|
|
39
|
+
#define GIT_ERROR_CHECK_ARRAY(a) GIT_ERROR_CHECK_ALLOC((a).ptr)
|
|
40
40
|
|
|
41
41
|
|
|
42
42
|
typedef git_array_t(char) git_array_generic_t;
|