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
|
@@ -33,7 +33,19 @@ typedef struct {
|
|
|
33
33
|
char *old_prefix, *new_prefix;
|
|
34
34
|
} git_patch_parsed;
|
|
35
35
|
|
|
36
|
-
static int
|
|
36
|
+
static int git_parse_err(const char *fmt, ...) GIT_FORMAT_PRINTF(1, 2);
|
|
37
|
+
static int git_parse_err(const char *fmt, ...)
|
|
38
|
+
{
|
|
39
|
+
va_list ap;
|
|
40
|
+
|
|
41
|
+
va_start(ap, fmt);
|
|
42
|
+
git_error_vset(GIT_ERROR_PATCH, fmt, ap);
|
|
43
|
+
va_end(ap);
|
|
44
|
+
|
|
45
|
+
return -1;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
static size_t header_path_len(git_patch_parse_ctx *ctx)
|
|
37
49
|
{
|
|
38
50
|
bool inquote = 0;
|
|
39
51
|
bool quoted = git_parse_ctx_contains_s(&ctx->parse_ctx, "\"");
|
|
@@ -58,31 +70,36 @@ static int parse_header_path_buf(git_buf *path, git_patch_parse_ctx *ctx, size_t
|
|
|
58
70
|
int error;
|
|
59
71
|
|
|
60
72
|
if ((error = git_buf_put(path, ctx->parse_ctx.line, path_len)) < 0)
|
|
61
|
-
|
|
73
|
+
return error;
|
|
62
74
|
|
|
63
75
|
git_parse_advance_chars(&ctx->parse_ctx, path_len);
|
|
64
76
|
|
|
65
77
|
git_buf_rtrim(path);
|
|
66
78
|
|
|
67
|
-
if (path->size > 0 && path->ptr[0] == '"'
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
if (error < 0)
|
|
71
|
-
goto done;
|
|
79
|
+
if (path->size > 0 && path->ptr[0] == '"' &&
|
|
80
|
+
(error = git_buf_unquote(path)) < 0)
|
|
81
|
+
return error;
|
|
72
82
|
|
|
73
83
|
git_path_squash_slashes(path);
|
|
74
84
|
|
|
75
|
-
|
|
76
|
-
|
|
85
|
+
if (!path->size)
|
|
86
|
+
return git_parse_err("patch contains empty path at line %"PRIuZ,
|
|
87
|
+
ctx->parse_ctx.line_num);
|
|
88
|
+
|
|
89
|
+
return 0;
|
|
77
90
|
}
|
|
78
91
|
|
|
79
92
|
static int parse_header_path(char **out, git_patch_parse_ctx *ctx)
|
|
80
93
|
{
|
|
81
94
|
git_buf path = GIT_BUF_INIT;
|
|
82
|
-
int error
|
|
95
|
+
int error;
|
|
83
96
|
|
|
97
|
+
if ((error = parse_header_path_buf(&path, ctx, header_path_len(ctx))) < 0)
|
|
98
|
+
goto out;
|
|
84
99
|
*out = git_buf_detach(&path);
|
|
85
100
|
|
|
101
|
+
out:
|
|
102
|
+
git_buf_dispose(&path);
|
|
86
103
|
return error;
|
|
87
104
|
}
|
|
88
105
|
|
|
@@ -92,6 +109,12 @@ static int parse_header_git_oldpath(
|
|
|
92
109
|
git_buf old_path = GIT_BUF_INIT;
|
|
93
110
|
int error;
|
|
94
111
|
|
|
112
|
+
if (patch->old_path) {
|
|
113
|
+
error = git_parse_err("patch contains duplicate old path at line %"PRIuZ,
|
|
114
|
+
ctx->parse_ctx.line_num);
|
|
115
|
+
goto out;
|
|
116
|
+
}
|
|
117
|
+
|
|
95
118
|
if ((error = parse_header_path_buf(&old_path, ctx, ctx->parse_ctx.line_len - 1)) < 0)
|
|
96
119
|
goto out;
|
|
97
120
|
|
|
@@ -108,9 +131,14 @@ static int parse_header_git_newpath(
|
|
|
108
131
|
git_buf new_path = GIT_BUF_INIT;
|
|
109
132
|
int error;
|
|
110
133
|
|
|
111
|
-
if (
|
|
134
|
+
if (patch->new_path) {
|
|
135
|
+
error = git_parse_err("patch contains duplicate new path at line %"PRIuZ,
|
|
136
|
+
ctx->parse_ctx.line_num);
|
|
112
137
|
goto out;
|
|
138
|
+
}
|
|
113
139
|
|
|
140
|
+
if ((error = parse_header_path_buf(&new_path, ctx, ctx->parse_ctx.line_len - 1)) < 0)
|
|
141
|
+
goto out;
|
|
114
142
|
patch->new_path = git_buf_detach(&new_path);
|
|
115
143
|
|
|
116
144
|
out:
|
|
@@ -203,9 +231,9 @@ static int parse_header_git_deletedfilemode(
|
|
|
203
231
|
git_patch_parsed *patch,
|
|
204
232
|
git_patch_parse_ctx *ctx)
|
|
205
233
|
{
|
|
206
|
-
git__free((char *)patch->base.delta->
|
|
234
|
+
git__free((char *)patch->base.delta->new_file.path);
|
|
207
235
|
|
|
208
|
-
patch->base.delta->
|
|
236
|
+
patch->base.delta->new_file.path = NULL;
|
|
209
237
|
patch->base.delta->status = GIT_DELTA_DELETED;
|
|
210
238
|
patch->base.delta->nfiles = 1;
|
|
211
239
|
|
|
@@ -216,9 +244,9 @@ static int parse_header_git_newfilemode(
|
|
|
216
244
|
git_patch_parsed *patch,
|
|
217
245
|
git_patch_parse_ctx *ctx)
|
|
218
246
|
{
|
|
219
|
-
git__free((char *)patch->base.delta->
|
|
247
|
+
git__free((char *)patch->base.delta->old_file.path);
|
|
220
248
|
|
|
221
|
-
patch->base.delta->
|
|
249
|
+
patch->base.delta->old_file.path = NULL;
|
|
222
250
|
patch->base.delta->status = GIT_DELTA_ADDED;
|
|
223
251
|
patch->base.delta->nfiles = 1;
|
|
224
252
|
|
|
@@ -282,7 +310,7 @@ static int parse_header_percent(uint16_t *out, git_patch_parse_ctx *ctx)
|
|
|
282
310
|
if (val < 0 || val > 100)
|
|
283
311
|
return -1;
|
|
284
312
|
|
|
285
|
-
*out = val;
|
|
313
|
+
*out = (uint16_t)val;
|
|
286
314
|
return 0;
|
|
287
315
|
}
|
|
288
316
|
|
|
@@ -328,7 +356,8 @@ static int parse_header_start(git_patch_parsed *patch, git_patch_parse_ctx *ctx)
|
|
|
328
356
|
* proceeed here. We then hope for the "---" and "+++" lines to fix that
|
|
329
357
|
* for us.
|
|
330
358
|
*/
|
|
331
|
-
if (!git_parse_ctx_contains(&ctx->parse_ctx, "\n", 1)
|
|
359
|
+
if (!git_parse_ctx_contains(&ctx->parse_ctx, "\n", 1) &&
|
|
360
|
+
!git_parse_ctx_contains(&ctx->parse_ctx, "\r\n", 2)) {
|
|
332
361
|
git_parse_advance_chars(&ctx->parse_ctx, ctx->parse_ctx.line_len - 1);
|
|
333
362
|
|
|
334
363
|
git__free(patch->header_old_path);
|
|
@@ -376,6 +405,7 @@ static const parse_header_transition transitions[] = {
|
|
|
376
405
|
{ "index " , STATE_DIFF, STATE_INDEX, parse_header_git_index },
|
|
377
406
|
{ "index " , STATE_END, STATE_INDEX, parse_header_git_index },
|
|
378
407
|
|
|
408
|
+
{ "--- " , STATE_DIFF, STATE_PATH, parse_header_git_oldpath },
|
|
379
409
|
{ "--- " , STATE_INDEX, STATE_PATH, parse_header_git_oldpath },
|
|
380
410
|
{ "+++ " , STATE_PATH, STATE_END, parse_header_git_newpath },
|
|
381
411
|
{ "GIT binary patch" , STATE_INDEX, STATE_END, NULL },
|
|
@@ -393,6 +423,7 @@ static const parse_header_transition transitions[] = {
|
|
|
393
423
|
/* Next patch */
|
|
394
424
|
{ "diff --git " , STATE_END, 0, NULL },
|
|
395
425
|
{ "@@ -" , STATE_END, 0, NULL },
|
|
426
|
+
{ "-- " , STATE_INDEX, 0, NULL },
|
|
396
427
|
{ "-- " , STATE_END, 0, NULL },
|
|
397
428
|
};
|
|
398
429
|
|
|
@@ -458,29 +489,9 @@ done:
|
|
|
458
489
|
return error;
|
|
459
490
|
}
|
|
460
491
|
|
|
461
|
-
static int parse_number(git_off_t *out, git_patch_parse_ctx *ctx)
|
|
462
|
-
{
|
|
463
|
-
const char *end;
|
|
464
|
-
int64_t num;
|
|
465
|
-
|
|
466
|
-
if (!git__isdigit(ctx->parse_ctx.line[0]))
|
|
467
|
-
return -1;
|
|
468
|
-
|
|
469
|
-
if (git__strntol64(&num, ctx->parse_ctx.line, ctx->parse_ctx.line_len, &end, 10) < 0)
|
|
470
|
-
return -1;
|
|
471
|
-
|
|
472
|
-
if (num < 0)
|
|
473
|
-
return -1;
|
|
474
|
-
|
|
475
|
-
*out = num;
|
|
476
|
-
git_parse_advance_chars(&ctx->parse_ctx, (end - ctx->parse_ctx.line));
|
|
477
|
-
|
|
478
|
-
return 0;
|
|
479
|
-
}
|
|
480
|
-
|
|
481
492
|
static int parse_int(int *out, git_patch_parse_ctx *ctx)
|
|
482
493
|
{
|
|
483
|
-
|
|
494
|
+
int64_t num;
|
|
484
495
|
|
|
485
496
|
if (git_parse_advance_digit(&num, &ctx->parse_ctx, 10) < 0 || !git__is_int(num))
|
|
486
497
|
return -1;
|
|
@@ -538,11 +549,19 @@ static int parse_hunk_header(
|
|
|
538
549
|
return 0;
|
|
539
550
|
|
|
540
551
|
fail:
|
|
541
|
-
|
|
552
|
+
git_error_set(GIT_ERROR_PATCH, "invalid patch hunk header at line %"PRIuZ,
|
|
542
553
|
ctx->parse_ctx.line_num);
|
|
543
554
|
return -1;
|
|
544
555
|
}
|
|
545
556
|
|
|
557
|
+
static int eof_for_origin(int origin) {
|
|
558
|
+
if (origin == GIT_DIFF_LINE_ADDITION)
|
|
559
|
+
return GIT_DIFF_LINE_ADD_EOFNL;
|
|
560
|
+
if (origin == GIT_DIFF_LINE_DELETION)
|
|
561
|
+
return GIT_DIFF_LINE_DEL_EOFNL;
|
|
562
|
+
return GIT_DIFF_LINE_CONTEXT_EOFNL;
|
|
563
|
+
}
|
|
564
|
+
|
|
546
565
|
static int parse_hunk_body(
|
|
547
566
|
git_patch_parsed *patch,
|
|
548
567
|
git_patch_hunk *hunk,
|
|
@@ -553,6 +572,7 @@ static int parse_hunk_body(
|
|
|
553
572
|
|
|
554
573
|
int oldlines = hunk->hunk.old_lines;
|
|
555
574
|
int newlines = hunk->hunk.new_lines;
|
|
575
|
+
int last_origin = 0;
|
|
556
576
|
|
|
557
577
|
for (;
|
|
558
578
|
ctx->parse_ctx.remain_len > 1 &&
|
|
@@ -560,11 +580,17 @@ static int parse_hunk_body(
|
|
|
560
580
|
!git_parse_ctx_contains_s(&ctx->parse_ctx, "@@ -");
|
|
561
581
|
git_parse_advance_line(&ctx->parse_ctx)) {
|
|
562
582
|
|
|
583
|
+
int old_lineno, new_lineno, origin, prefix = 1;
|
|
563
584
|
char c;
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
585
|
+
|
|
586
|
+
if (git__add_int_overflow(&old_lineno, hunk->hunk.old_start, hunk->hunk.old_lines) ||
|
|
587
|
+
git__sub_int_overflow(&old_lineno, old_lineno, oldlines) ||
|
|
588
|
+
git__add_int_overflow(&new_lineno, hunk->hunk.new_start, hunk->hunk.new_lines) ||
|
|
589
|
+
git__sub_int_overflow(&new_lineno, new_lineno, newlines)) {
|
|
590
|
+
error = git_parse_err("unrepresentable line count at line %"PRIuZ,
|
|
591
|
+
ctx->parse_ctx.line_num);
|
|
592
|
+
goto done;
|
|
593
|
+
}
|
|
568
594
|
|
|
569
595
|
if (ctx->parse_ctx.line_len == 0 || ctx->parse_ctx.line[ctx->parse_ctx.line_len - 1] != '\n') {
|
|
570
596
|
error = git_parse_err("invalid patch instruction at line %"PRIuZ,
|
|
@@ -597,18 +623,34 @@ static int parse_hunk_body(
|
|
|
597
623
|
old_lineno = -1;
|
|
598
624
|
break;
|
|
599
625
|
|
|
626
|
+
case '\\':
|
|
627
|
+
/*
|
|
628
|
+
* If there are no oldlines left, then this is probably
|
|
629
|
+
* the "" marker. Do not
|
|
630
|
+
* verify its format, as it may be localized.
|
|
631
|
+
*/
|
|
632
|
+
if (!oldlines) {
|
|
633
|
+
prefix = 0;
|
|
634
|
+
origin = eof_for_origin(last_origin);
|
|
635
|
+
old_lineno = -1;
|
|
636
|
+
new_lineno = -1;
|
|
637
|
+
break;
|
|
638
|
+
}
|
|
639
|
+
/* fall through */
|
|
640
|
+
|
|
600
641
|
default:
|
|
601
642
|
error = git_parse_err("invalid patch hunk at line %"PRIuZ, ctx->parse_ctx.line_num);
|
|
602
643
|
goto done;
|
|
603
644
|
}
|
|
604
645
|
|
|
605
646
|
line = git_array_alloc(patch->base.lines);
|
|
606
|
-
|
|
647
|
+
GIT_ERROR_CHECK_ALLOC(line);
|
|
607
648
|
|
|
608
649
|
memset(line, 0x0, sizeof(git_diff_line));
|
|
609
650
|
|
|
610
|
-
line->content = ctx->parse_ctx.line + prefix;
|
|
611
651
|
line->content_len = ctx->parse_ctx.line_len - prefix;
|
|
652
|
+
line->content = git__strndup(ctx->parse_ctx.line + prefix, line->content_len);
|
|
653
|
+
GIT_ERROR_CHECK_ALLOC(line->content);
|
|
612
654
|
line->content_offset = ctx->parse_ctx.content_len - ctx->parse_ctx.remain_len;
|
|
613
655
|
line->origin = origin;
|
|
614
656
|
line->num_lines = 1;
|
|
@@ -616,6 +658,8 @@ static int parse_hunk_body(
|
|
|
616
658
|
line->new_lineno = new_lineno;
|
|
617
659
|
|
|
618
660
|
hunk->line_count++;
|
|
661
|
+
|
|
662
|
+
last_origin = origin;
|
|
619
663
|
}
|
|
620
664
|
|
|
621
665
|
if (oldlines || newlines) {
|
|
@@ -625,7 +669,8 @@ static int parse_hunk_body(
|
|
|
625
669
|
goto done;
|
|
626
670
|
}
|
|
627
671
|
|
|
628
|
-
/*
|
|
672
|
+
/*
|
|
673
|
+
* Handle "". Only expect the leading
|
|
629
674
|
* backslash, though, because the rest of the string could be
|
|
630
675
|
* localized. Because `diff` optimizes for the case where you
|
|
631
676
|
* want to apply the patch by hand.
|
|
@@ -636,11 +681,25 @@ static int parse_hunk_body(
|
|
|
636
681
|
line = git_array_get(patch->base.lines, git_array_size(patch->base.lines) - 1);
|
|
637
682
|
|
|
638
683
|
if (line->content_len < 1) {
|
|
639
|
-
error = git_parse_err("
|
|
684
|
+
error = git_parse_err("last line has no trailing newline");
|
|
640
685
|
goto done;
|
|
641
686
|
}
|
|
642
687
|
|
|
643
|
-
line->
|
|
688
|
+
line = git_array_alloc(patch->base.lines);
|
|
689
|
+
GIT_ERROR_CHECK_ALLOC(line);
|
|
690
|
+
|
|
691
|
+
memset(line, 0x0, sizeof(git_diff_line));
|
|
692
|
+
|
|
693
|
+
line->content_len = ctx->parse_ctx.line_len;
|
|
694
|
+
line->content = git__strndup(ctx->parse_ctx.line, line->content_len);
|
|
695
|
+
GIT_ERROR_CHECK_ALLOC(line->content);
|
|
696
|
+
line->content_offset = ctx->parse_ctx.content_len - ctx->parse_ctx.remain_len;
|
|
697
|
+
line->origin = eof_for_origin(last_origin);
|
|
698
|
+
line->num_lines = 1;
|
|
699
|
+
line->old_lineno = -1;
|
|
700
|
+
line->new_lineno = -1;
|
|
701
|
+
|
|
702
|
+
hunk->line_count++;
|
|
644
703
|
|
|
645
704
|
git_parse_advance_line(&ctx->parse_ctx);
|
|
646
705
|
}
|
|
@@ -670,7 +729,7 @@ static int parse_patch_header(
|
|
|
670
729
|
* noise, continue.
|
|
671
730
|
*/
|
|
672
731
|
if (parse_hunk_header(&hunk, ctx) < 0) {
|
|
673
|
-
|
|
732
|
+
git_error_clear();
|
|
674
733
|
continue;
|
|
675
734
|
}
|
|
676
735
|
|
|
@@ -693,7 +752,7 @@ static int parse_patch_header(
|
|
|
693
752
|
continue;
|
|
694
753
|
}
|
|
695
754
|
|
|
696
|
-
|
|
755
|
+
git_error_set(GIT_ERROR_PATCH, "no patch found");
|
|
697
756
|
error = GIT_ENOTFOUND;
|
|
698
757
|
|
|
699
758
|
done:
|
|
@@ -706,7 +765,7 @@ static int parse_patch_binary_side(
|
|
|
706
765
|
{
|
|
707
766
|
git_diff_binary_t type = GIT_DIFF_BINARY_NONE;
|
|
708
767
|
git_buf base85 = GIT_BUF_INIT, decoded = GIT_BUF_INIT;
|
|
709
|
-
|
|
768
|
+
int64_t len;
|
|
710
769
|
int error = 0;
|
|
711
770
|
|
|
712
771
|
if (git_parse_ctx_contains_s(&ctx->parse_ctx, "literal ")) {
|
|
@@ -749,7 +808,7 @@ static int parse_patch_binary_side(
|
|
|
749
808
|
|
|
750
809
|
encoded_len = ((decoded_len / 4) + !!(decoded_len % 4)) * 5;
|
|
751
810
|
|
|
752
|
-
if (encoded_len > ctx->parse_ctx.line_len - 1) {
|
|
811
|
+
if (!encoded_len || !ctx->parse_ctx.line_len || encoded_len > ctx->parse_ctx.line_len - 1) {
|
|
753
812
|
error = git_parse_err("truncated binary data at line %"PRIuZ, ctx->parse_ctx.line_num);
|
|
754
813
|
goto done;
|
|
755
814
|
}
|
|
@@ -819,12 +878,23 @@ static int parse_patch_binary_nodata(
|
|
|
819
878
|
git_patch_parsed *patch,
|
|
820
879
|
git_patch_parse_ctx *ctx)
|
|
821
880
|
{
|
|
881
|
+
const char *old = patch->old_path ? patch->old_path : patch->header_old_path;
|
|
882
|
+
const char *new = patch->new_path ? patch->new_path : patch->header_new_path;
|
|
883
|
+
|
|
884
|
+
if (!old || !new)
|
|
885
|
+
return git_parse_err("corrupt binary data without paths at line %"PRIuZ, ctx->parse_ctx.line_num);
|
|
886
|
+
|
|
887
|
+
if (patch->base.delta->status == GIT_DELTA_ADDED)
|
|
888
|
+
old = "/dev/null";
|
|
889
|
+
else if (patch->base.delta->status == GIT_DELTA_DELETED)
|
|
890
|
+
new = "/dev/null";
|
|
891
|
+
|
|
822
892
|
if (git_parse_advance_expected_str(&ctx->parse_ctx, "Binary files ") < 0 ||
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
|
|
893
|
+
git_parse_advance_expected_str(&ctx->parse_ctx, old) < 0 ||
|
|
894
|
+
git_parse_advance_expected_str(&ctx->parse_ctx, " and ") < 0 ||
|
|
895
|
+
git_parse_advance_expected_str(&ctx->parse_ctx, new) < 0 ||
|
|
896
|
+
git_parse_advance_expected_str(&ctx->parse_ctx, " differ") < 0 ||
|
|
897
|
+
git_parse_advance_nl(&ctx->parse_ctx) < 0)
|
|
828
898
|
return git_parse_err("corrupt git binary header at line %"PRIuZ, ctx->parse_ctx.line_num);
|
|
829
899
|
|
|
830
900
|
patch->base.binary.contains_data = 0;
|
|
@@ -841,7 +911,7 @@ static int parse_patch_hunks(
|
|
|
841
911
|
|
|
842
912
|
while (git_parse_ctx_contains_s(&ctx->parse_ctx, "@@ -")) {
|
|
843
913
|
hunk = git_array_alloc(patch->base.hunks);
|
|
844
|
-
|
|
914
|
+
GIT_ERROR_CHECK_ALLOC(hunk);
|
|
845
915
|
|
|
846
916
|
memset(hunk, 0, sizeof(git_patch_hunk));
|
|
847
917
|
|
|
@@ -941,21 +1011,15 @@ static int check_filenames(git_patch_parsed *patch)
|
|
|
941
1011
|
return git_parse_err("missing old path");
|
|
942
1012
|
|
|
943
1013
|
/* Ensure (non-renamed) paths match */
|
|
944
|
-
if (check_header_names(
|
|
945
|
-
|
|
946
|
-
check_header_names(
|
|
947
|
-
patch->header_new_path, patch->new_path, "new", deleted) < 0)
|
|
1014
|
+
if (check_header_names(patch->header_old_path, patch->old_path, "old", added) < 0 ||
|
|
1015
|
+
check_header_names(patch->header_new_path, patch->new_path, "new", deleted) < 0)
|
|
948
1016
|
return -1;
|
|
949
1017
|
|
|
950
|
-
prefixed_old = (!added && patch->old_path) ? patch->old_path :
|
|
951
|
-
|
|
952
|
-
prefixed_new = (!deleted && patch->new_path) ? patch->new_path :
|
|
953
|
-
patch->header_new_path;
|
|
1018
|
+
prefixed_old = (!added && patch->old_path) ? patch->old_path : patch->header_old_path;
|
|
1019
|
+
prefixed_new = (!deleted && patch->new_path) ? patch->new_path : patch->header_new_path;
|
|
954
1020
|
|
|
955
|
-
if (check_prefix(
|
|
956
|
-
|
|
957
|
-
check_prefix(
|
|
958
|
-
&patch->new_prefix, &new_prefixlen, patch, prefixed_new) < 0)
|
|
1021
|
+
if ((prefixed_old && check_prefix(&patch->old_prefix, &old_prefixlen, patch, prefixed_old) < 0) ||
|
|
1022
|
+
(prefixed_new && check_prefix(&patch->new_prefix, &new_prefixlen, patch, prefixed_new) < 0))
|
|
959
1023
|
return -1;
|
|
960
1024
|
|
|
961
1025
|
/* Prefer the rename filenames as they are unambiguous and unprefixed */
|
|
@@ -970,7 +1034,7 @@ static int check_filenames(git_patch_parsed *patch)
|
|
|
970
1034
|
patch->base.delta->new_file.path = prefixed_new + new_prefixlen;
|
|
971
1035
|
|
|
972
1036
|
if (!patch->base.delta->old_file.path &&
|
|
973
|
-
|
|
1037
|
+
!patch->base.delta->new_file.path)
|
|
974
1038
|
return git_parse_err("git diff header lacks old / new paths");
|
|
975
1039
|
|
|
976
1040
|
return 0;
|
|
@@ -984,14 +1048,14 @@ static int check_patch(git_patch_parsed *patch)
|
|
|
984
1048
|
return -1;
|
|
985
1049
|
|
|
986
1050
|
if (delta->old_file.path &&
|
|
987
|
-
|
|
988
|
-
|
|
1051
|
+
delta->status != GIT_DELTA_DELETED &&
|
|
1052
|
+
!delta->new_file.mode)
|
|
989
1053
|
delta->new_file.mode = delta->old_file.mode;
|
|
990
1054
|
|
|
991
1055
|
if (delta->status == GIT_DELTA_MODIFIED &&
|
|
992
|
-
|
|
993
|
-
|
|
994
|
-
|
|
1056
|
+
!(delta->flags & GIT_DIFF_FLAG_BINARY) &&
|
|
1057
|
+
delta->new_file.mode == delta->old_file.mode &&
|
|
1058
|
+
git_array_size(patch->base.hunks) == 0)
|
|
995
1059
|
return git_parse_err("patch with no hunks");
|
|
996
1060
|
|
|
997
1061
|
if (delta->status == GIT_DELTA_ADDED) {
|
|
@@ -1063,6 +1127,8 @@ int git_patch_parsed_from_diff(git_patch **out, git_diff *d, size_t idx)
|
|
|
1063
1127
|
static void patch_parsed__free(git_patch *p)
|
|
1064
1128
|
{
|
|
1065
1129
|
git_patch_parsed *patch = (git_patch_parsed *)p;
|
|
1130
|
+
git_diff_line *line;
|
|
1131
|
+
size_t i;
|
|
1066
1132
|
|
|
1067
1133
|
if (!patch)
|
|
1068
1134
|
return;
|
|
@@ -1072,6 +1138,8 @@ static void patch_parsed__free(git_patch *p)
|
|
|
1072
1138
|
git__free((char *)patch->base.binary.old_file.data);
|
|
1073
1139
|
git__free((char *)patch->base.binary.new_file.data);
|
|
1074
1140
|
git_array_clear(patch->base.hunks);
|
|
1141
|
+
git_array_foreach(patch->base.lines, i, line)
|
|
1142
|
+
git__free((char *) line->content);
|
|
1075
1143
|
git_array_clear(patch->base.lines);
|
|
1076
1144
|
git__free(patch->base.delta);
|
|
1077
1145
|
|
|
@@ -1099,7 +1167,7 @@ int git_patch_parse(
|
|
|
1099
1167
|
*out = NULL;
|
|
1100
1168
|
|
|
1101
1169
|
patch = git__calloc(1, sizeof(git_patch_parsed));
|
|
1102
|
-
|
|
1170
|
+
GIT_ERROR_CHECK_ALLOC(patch);
|
|
1103
1171
|
|
|
1104
1172
|
patch->ctx = ctx;
|
|
1105
1173
|
GIT_REFCOUNT_INC(patch->ctx);
|
|
@@ -1107,7 +1175,7 @@ int git_patch_parse(
|
|
|
1107
1175
|
patch->base.free_fn = patch_parsed__free;
|
|
1108
1176
|
|
|
1109
1177
|
patch->base.delta = git__calloc(1, sizeof(git_diff_delta));
|
|
1110
|
-
|
|
1178
|
+
GIT_ERROR_CHECK_ALLOC(patch->base.delta);
|
|
1111
1179
|
|
|
1112
1180
|
patch->base.delta->status = GIT_DELTA_MODIFIED;
|
|
1113
1181
|
patch->base.delta->nfiles = 2;
|
|
@@ -1146,7 +1214,7 @@ int git_patch_from_buffer(
|
|
|
1146
1214
|
int error;
|
|
1147
1215
|
|
|
1148
1216
|
ctx = git_patch_parse_ctx_init(content, content_len, opts);
|
|
1149
|
-
|
|
1217
|
+
GIT_ERROR_CHECK_ALLOC(ctx);
|
|
1150
1218
|
|
|
1151
1219
|
error = git_patch_parse(out, ctx);
|
|
1152
1220
|
|