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/commit.c
CHANGED
|
@@ -20,6 +20,7 @@
|
|
|
20
20
|
#include "message.h"
|
|
21
21
|
#include "refs.h"
|
|
22
22
|
#include "object.h"
|
|
23
|
+
#include "array.h"
|
|
23
24
|
#include "oidarray.h"
|
|
24
25
|
|
|
25
26
|
void git_commit__free(void *_commit)
|
|
@@ -80,33 +81,33 @@ on_error:
|
|
|
80
81
|
}
|
|
81
82
|
|
|
82
83
|
static int validate_tree_and_parents(git_array_oid_t *parents, git_repository *repo, const git_oid *tree,
|
|
83
|
-
|
|
84
|
-
|
|
84
|
+
git_commit_parent_callback parent_cb, void *parent_payload,
|
|
85
|
+
const git_oid *current_id, bool validate)
|
|
85
86
|
{
|
|
86
87
|
size_t i;
|
|
87
88
|
int error;
|
|
88
89
|
git_oid *parent_cpy;
|
|
89
90
|
const git_oid *parent;
|
|
90
91
|
|
|
91
|
-
if (validate && !git_object__is_valid(repo, tree,
|
|
92
|
+
if (validate && !git_object__is_valid(repo, tree, GIT_OBJECT_TREE))
|
|
92
93
|
return -1;
|
|
93
94
|
|
|
94
95
|
i = 0;
|
|
95
96
|
while ((parent = parent_cb(i, parent_payload)) != NULL) {
|
|
96
|
-
if (validate && !git_object__is_valid(repo, parent,
|
|
97
|
+
if (validate && !git_object__is_valid(repo, parent, GIT_OBJECT_COMMIT)) {
|
|
97
98
|
error = -1;
|
|
98
99
|
goto on_error;
|
|
99
100
|
}
|
|
100
101
|
|
|
101
102
|
parent_cpy = git_array_alloc(*parents);
|
|
102
|
-
|
|
103
|
+
GIT_ERROR_CHECK_ALLOC(parent_cpy);
|
|
103
104
|
|
|
104
105
|
git_oid_cpy(parent_cpy, parent);
|
|
105
106
|
i++;
|
|
106
107
|
}
|
|
107
108
|
|
|
108
109
|
if (current_id && (parents->size == 0 || git_oid_cmp(current_id, git_array_get(*parents, 0)))) {
|
|
109
|
-
|
|
110
|
+
git_error_set(GIT_ERROR_OBJECT, "failed to create commit: current tip is not the first parent");
|
|
110
111
|
error = GIT_EMODIFIED;
|
|
111
112
|
goto on_error;
|
|
112
113
|
}
|
|
@@ -143,7 +144,7 @@ static int git_commit__create_internal(
|
|
|
143
144
|
if (error < 0 && error != GIT_ENOTFOUND)
|
|
144
145
|
return error;
|
|
145
146
|
}
|
|
146
|
-
|
|
147
|
+
git_error_clear();
|
|
147
148
|
|
|
148
149
|
if (ref)
|
|
149
150
|
current_id = git_reference_target(ref);
|
|
@@ -152,8 +153,8 @@ static int git_commit__create_internal(
|
|
|
152
153
|
goto cleanup;
|
|
153
154
|
|
|
154
155
|
error = git_commit__create_buffer_internal(&buf, author, committer,
|
|
155
|
-
|
|
156
|
-
|
|
156
|
+
message_encoding, message, tree,
|
|
157
|
+
&parents);
|
|
157
158
|
|
|
158
159
|
if (error < 0)
|
|
159
160
|
goto cleanup;
|
|
@@ -164,7 +165,7 @@ static int git_commit__create_internal(
|
|
|
164
165
|
if (git_odb__freshen(odb, tree) < 0)
|
|
165
166
|
goto cleanup;
|
|
166
167
|
|
|
167
|
-
if (git_odb_write(id, odb, buf.ptr, buf.size,
|
|
168
|
+
if (git_odb_write(id, odb, buf.ptr, buf.size, GIT_OBJECT_COMMIT) < 0)
|
|
168
169
|
goto cleanup;
|
|
169
170
|
|
|
170
171
|
|
|
@@ -351,7 +352,7 @@ int git_commit_amend(
|
|
|
351
352
|
|
|
352
353
|
if (!tree) {
|
|
353
354
|
git_tree *old_tree;
|
|
354
|
-
|
|
355
|
+
GIT_ERROR_CHECK_ERROR( git_commit_tree(&old_tree, commit_to_amend) );
|
|
355
356
|
git_oid_cpy(&tree_id, git_tree_id(old_tree));
|
|
356
357
|
git_tree_free(old_tree);
|
|
357
358
|
} else {
|
|
@@ -365,7 +366,7 @@ int git_commit_amend(
|
|
|
365
366
|
|
|
366
367
|
if (git_oid_cmp(git_commit_id(commit_to_amend), git_reference_target(ref))) {
|
|
367
368
|
git_reference_free(ref);
|
|
368
|
-
|
|
369
|
+
git_error_set(GIT_ERROR_REFERENCE, "commit to amend is not the tip of the given branch");
|
|
369
370
|
return -1;
|
|
370
371
|
}
|
|
371
372
|
}
|
|
@@ -383,24 +384,32 @@ int git_commit_amend(
|
|
|
383
384
|
return error;
|
|
384
385
|
}
|
|
385
386
|
|
|
386
|
-
int
|
|
387
|
+
static int commit_parse(git_commit *commit, const char *data, size_t size, unsigned int flags)
|
|
387
388
|
{
|
|
388
|
-
|
|
389
|
-
const char *
|
|
390
|
-
const char *buffer_end = buffer_start + git_odb_object_size(odb_obj);
|
|
389
|
+
const char *buffer_start = data, *buffer;
|
|
390
|
+
const char *buffer_end = buffer_start + size;
|
|
391
391
|
git_oid parent_id;
|
|
392
392
|
size_t header_len;
|
|
393
393
|
git_signature dummy_sig;
|
|
394
394
|
|
|
395
|
+
assert(commit && data);
|
|
396
|
+
|
|
395
397
|
buffer = buffer_start;
|
|
396
398
|
|
|
397
399
|
/* Allocate for one, which will allow not to realloc 90% of the time */
|
|
398
400
|
git_array_init_to_size(commit->parent_ids, 1);
|
|
399
|
-
|
|
401
|
+
GIT_ERROR_CHECK_ARRAY(commit->parent_ids);
|
|
400
402
|
|
|
401
403
|
/* The tree is always the first field */
|
|
402
|
-
if (
|
|
403
|
-
|
|
404
|
+
if (!(flags & GIT_COMMIT_PARSE_QUICK)) {
|
|
405
|
+
if (git_oid__parse(&commit->tree_id, &buffer, buffer_end, "tree ") < 0)
|
|
406
|
+
goto bad_buffer;
|
|
407
|
+
} else {
|
|
408
|
+
size_t tree_len = strlen("tree ") + GIT_OID_HEXSZ + 1;
|
|
409
|
+
if (buffer + tree_len > buffer_end)
|
|
410
|
+
goto bad_buffer;
|
|
411
|
+
buffer += tree_len;
|
|
412
|
+
}
|
|
404
413
|
|
|
405
414
|
/*
|
|
406
415
|
* TODO: commit grafts!
|
|
@@ -408,19 +417,21 @@ int git_commit__parse(void *_commit, git_odb_object *odb_obj)
|
|
|
408
417
|
|
|
409
418
|
while (git_oid__parse(&parent_id, &buffer, buffer_end, "parent ") == 0) {
|
|
410
419
|
git_oid *new_id = git_array_alloc(commit->parent_ids);
|
|
411
|
-
|
|
420
|
+
GIT_ERROR_CHECK_ALLOC(new_id);
|
|
412
421
|
|
|
413
422
|
git_oid_cpy(new_id, &parent_id);
|
|
414
423
|
}
|
|
415
424
|
|
|
416
|
-
|
|
417
|
-
|
|
425
|
+
if (!(flags & GIT_COMMIT_PARSE_QUICK)) {
|
|
426
|
+
commit->author = git__malloc(sizeof(git_signature));
|
|
427
|
+
GIT_ERROR_CHECK_ALLOC(commit->author);
|
|
418
428
|
|
|
419
|
-
|
|
420
|
-
|
|
429
|
+
if (git_signature__parse(commit->author, &buffer, buffer_end, "author ", '\n') < 0)
|
|
430
|
+
return -1;
|
|
431
|
+
}
|
|
421
432
|
|
|
422
433
|
/* Some tools create multiple author fields, ignore the extra ones */
|
|
423
|
-
while ((
|
|
434
|
+
while (!git__prefixncmp(buffer, buffer_end - buffer, "author ")) {
|
|
424
435
|
if (git_signature__parse(&dummy_sig, &buffer, buffer_end, "author ", '\n') < 0)
|
|
425
436
|
return -1;
|
|
426
437
|
|
|
@@ -430,11 +441,14 @@ int git_commit__parse(void *_commit, git_odb_object *odb_obj)
|
|
|
430
441
|
|
|
431
442
|
/* Always parse the committer; we need the commit time */
|
|
432
443
|
commit->committer = git__malloc(sizeof(git_signature));
|
|
433
|
-
|
|
444
|
+
GIT_ERROR_CHECK_ALLOC(commit->committer);
|
|
434
445
|
|
|
435
446
|
if (git_signature__parse(commit->committer, &buffer, buffer_end, "committer ", '\n') < 0)
|
|
436
447
|
return -1;
|
|
437
448
|
|
|
449
|
+
if (flags & GIT_COMMIT_PARSE_QUICK)
|
|
450
|
+
return 0;
|
|
451
|
+
|
|
438
452
|
/* Parse add'l header entries */
|
|
439
453
|
while (buffer < buffer_end) {
|
|
440
454
|
const char *eoln = buffer;
|
|
@@ -444,11 +458,11 @@ int git_commit__parse(void *_commit, git_odb_object *odb_obj)
|
|
|
444
458
|
while (eoln < buffer_end && *eoln != '\n')
|
|
445
459
|
++eoln;
|
|
446
460
|
|
|
447
|
-
if (
|
|
461
|
+
if (git__prefixncmp(buffer, buffer_end - buffer, "encoding ") == 0) {
|
|
448
462
|
buffer += strlen("encoding ");
|
|
449
463
|
|
|
450
464
|
commit->message_encoding = git__strndup(buffer, eoln - buffer);
|
|
451
|
-
|
|
465
|
+
GIT_ERROR_CHECK_ALLOC(commit->message_encoding);
|
|
452
466
|
}
|
|
453
467
|
|
|
454
468
|
if (eoln < buffer_end && *eoln == '\n')
|
|
@@ -458,7 +472,7 @@ int git_commit__parse(void *_commit, git_odb_object *odb_obj)
|
|
|
458
472
|
|
|
459
473
|
header_len = buffer - buffer_start;
|
|
460
474
|
commit->raw_header = git__strndup(buffer_start, header_len);
|
|
461
|
-
|
|
475
|
+
GIT_ERROR_CHECK_ALLOC(commit->raw_header);
|
|
462
476
|
|
|
463
477
|
/* point "buffer" to data after header, +1 for the final LF */
|
|
464
478
|
buffer = buffer_start + header_len + 1;
|
|
@@ -468,15 +482,30 @@ int git_commit__parse(void *_commit, git_odb_object *odb_obj)
|
|
|
468
482
|
commit->raw_message = git__strndup(buffer, buffer_end - buffer);
|
|
469
483
|
else
|
|
470
484
|
commit->raw_message = git__strdup("");
|
|
471
|
-
|
|
485
|
+
GIT_ERROR_CHECK_ALLOC(commit->raw_message);
|
|
472
486
|
|
|
473
487
|
return 0;
|
|
474
488
|
|
|
475
489
|
bad_buffer:
|
|
476
|
-
|
|
490
|
+
git_error_set(GIT_ERROR_OBJECT, "failed to parse bad commit object");
|
|
477
491
|
return -1;
|
|
478
492
|
}
|
|
479
493
|
|
|
494
|
+
int git_commit__parse_raw(void *commit, const char *data, size_t size)
|
|
495
|
+
{
|
|
496
|
+
return commit_parse(commit, data, size, 0);
|
|
497
|
+
}
|
|
498
|
+
|
|
499
|
+
int git_commit__parse_ext(git_commit *commit, git_odb_object *odb_obj, unsigned int flags)
|
|
500
|
+
{
|
|
501
|
+
return commit_parse(commit, git_odb_object_data(odb_obj), git_odb_object_size(odb_obj), flags);
|
|
502
|
+
}
|
|
503
|
+
|
|
504
|
+
int git_commit__parse(void *_commit, git_odb_object *odb_obj)
|
|
505
|
+
{
|
|
506
|
+
return git_commit__parse_ext(_commit, odb_obj, 0);
|
|
507
|
+
}
|
|
508
|
+
|
|
480
509
|
#define GIT_COMMIT_GETTER(_rvalue, _name, _return) \
|
|
481
510
|
_rvalue git_commit_##_name(const git_commit *commit) \
|
|
482
511
|
{\
|
|
@@ -575,7 +604,7 @@ const char *git_commit_body(git_commit *commit)
|
|
|
575
604
|
break;
|
|
576
605
|
|
|
577
606
|
if (*msg)
|
|
578
|
-
|
|
607
|
+
commit->body = git__strndup(msg, end - msg + 1);
|
|
579
608
|
}
|
|
580
609
|
|
|
581
610
|
return commit->body;
|
|
@@ -603,7 +632,7 @@ int git_commit_parent(
|
|
|
603
632
|
|
|
604
633
|
parent_id = git_commit_parent_id(commit, n);
|
|
605
634
|
if (parent_id == NULL) {
|
|
606
|
-
|
|
635
|
+
git_error_set(GIT_ERROR_INVALID, "parent %u does not exist", n);
|
|
607
636
|
return GIT_ENOTFOUND;
|
|
608
637
|
}
|
|
609
638
|
|
|
@@ -692,14 +721,14 @@ int git_commit_header_field(git_buf *out, const git_commit *commit, const char *
|
|
|
692
721
|
return 0;
|
|
693
722
|
}
|
|
694
723
|
|
|
695
|
-
|
|
724
|
+
git_error_set(GIT_ERROR_OBJECT, "no such field '%s'", field);
|
|
696
725
|
return GIT_ENOTFOUND;
|
|
697
726
|
|
|
698
727
|
malformed:
|
|
699
|
-
|
|
728
|
+
git_error_set(GIT_ERROR_OBJECT, "malformed header");
|
|
700
729
|
return -1;
|
|
701
730
|
oom:
|
|
702
|
-
|
|
731
|
+
git_error_set_oom();
|
|
703
732
|
return -1;
|
|
704
733
|
}
|
|
705
734
|
|
|
@@ -723,8 +752,8 @@ int git_commit_extract_signature(git_buf *signature, git_buf *signed_data, git_r
|
|
|
723
752
|
if ((error = git_odb_read(&obj, odb, commit_id)) < 0)
|
|
724
753
|
return error;
|
|
725
754
|
|
|
726
|
-
if (obj->cached.type !=
|
|
727
|
-
|
|
755
|
+
if (obj->cached.type != GIT_OBJECT_COMMIT) {
|
|
756
|
+
git_error_set(GIT_ERROR_INVALID, "the requested type does not match the type in ODB");
|
|
728
757
|
error = GIT_ENOTFOUND;
|
|
729
758
|
goto cleanup;
|
|
730
759
|
}
|
|
@@ -776,16 +805,16 @@ int git_commit_extract_signature(git_buf *signature, git_buf *signed_data, git_r
|
|
|
776
805
|
return error;
|
|
777
806
|
}
|
|
778
807
|
|
|
779
|
-
|
|
808
|
+
git_error_set(GIT_ERROR_OBJECT, "this commit is not signed");
|
|
780
809
|
error = GIT_ENOTFOUND;
|
|
781
810
|
goto cleanup;
|
|
782
811
|
|
|
783
812
|
malformed:
|
|
784
|
-
|
|
813
|
+
git_error_set(GIT_ERROR_OBJECT, "malformed header");
|
|
785
814
|
error = -1;
|
|
786
815
|
goto cleanup;
|
|
787
816
|
oom:
|
|
788
|
-
|
|
817
|
+
git_error_set_oom();
|
|
789
818
|
error = -1;
|
|
790
819
|
goto cleanup;
|
|
791
820
|
|
|
@@ -849,6 +878,14 @@ static void format_header_field(git_buf *out, const char *field, const char *con
|
|
|
849
878
|
git_buf_putc(out, '\n');
|
|
850
879
|
}
|
|
851
880
|
|
|
881
|
+
static const git_oid *commit_parent_from_commit(size_t n, void *payload)
|
|
882
|
+
{
|
|
883
|
+
const git_commit *commit = (const git_commit *) payload;
|
|
884
|
+
|
|
885
|
+
return git_array_get(commit->parent_ids, n);
|
|
886
|
+
|
|
887
|
+
}
|
|
888
|
+
|
|
852
889
|
int git_commit_create_with_signature(
|
|
853
890
|
git_oid *out,
|
|
854
891
|
git_repository *repo,
|
|
@@ -861,20 +898,37 @@ int git_commit_create_with_signature(
|
|
|
861
898
|
const char *field;
|
|
862
899
|
const char *header_end;
|
|
863
900
|
git_buf commit = GIT_BUF_INIT;
|
|
901
|
+
git_commit *parsed;
|
|
902
|
+
git_array_oid_t parents = GIT_ARRAY_INIT;
|
|
903
|
+
|
|
904
|
+
/* The first step is to verify that all the tree and parents exist */
|
|
905
|
+
parsed = git__calloc(1, sizeof(git_commit));
|
|
906
|
+
GIT_ERROR_CHECK_ALLOC(parsed);
|
|
907
|
+
if ((error = commit_parse(parsed, commit_content, strlen(commit_content), 0)) < 0)
|
|
908
|
+
goto cleanup;
|
|
864
909
|
|
|
865
|
-
|
|
910
|
+
if ((error = validate_tree_and_parents(&parents, repo, &parsed->tree_id, commit_parent_from_commit, parsed, NULL, true)) < 0)
|
|
911
|
+
goto cleanup;
|
|
912
|
+
|
|
913
|
+
git_array_clear(parents);
|
|
914
|
+
|
|
915
|
+
/* Then we start appending by identifying the end of the commit header */
|
|
866
916
|
header_end = strstr(commit_content, "\n\n");
|
|
867
917
|
if (!header_end) {
|
|
868
|
-
|
|
869
|
-
|
|
918
|
+
git_error_set(GIT_ERROR_INVALID, "malformed commit contents");
|
|
919
|
+
error = -1;
|
|
920
|
+
goto cleanup;
|
|
870
921
|
}
|
|
871
922
|
|
|
872
|
-
field = signature_field ? signature_field : "gpgsig";
|
|
873
|
-
|
|
874
923
|
/* The header ends after the first LF */
|
|
875
924
|
header_end++;
|
|
876
925
|
git_buf_put(&commit, commit_content, header_end - commit_content);
|
|
877
|
-
|
|
926
|
+
|
|
927
|
+
if (signature != NULL) {
|
|
928
|
+
field = signature_field ? signature_field : "gpgsig";
|
|
929
|
+
format_header_field(&commit, field, signature);
|
|
930
|
+
}
|
|
931
|
+
|
|
878
932
|
git_buf_puts(&commit, header_end);
|
|
879
933
|
|
|
880
934
|
if (git_buf_oom(&commit))
|
|
@@ -883,10 +937,11 @@ int git_commit_create_with_signature(
|
|
|
883
937
|
if ((error = git_repository_odb__weakptr(&odb, repo)) < 0)
|
|
884
938
|
goto cleanup;
|
|
885
939
|
|
|
886
|
-
if ((error = git_odb_write(out, odb, commit.ptr, commit.size,
|
|
940
|
+
if ((error = git_odb_write(out, odb, commit.ptr, commit.size, GIT_OBJECT_COMMIT)) < 0)
|
|
887
941
|
goto cleanup;
|
|
888
942
|
|
|
889
943
|
cleanup:
|
|
944
|
+
git_commit__free(parsed);
|
|
890
945
|
git_buf_dispose(&commit);
|
|
891
946
|
return error;
|
|
892
947
|
}
|
data/vendor/libgit2/src/commit.h
CHANGED
|
@@ -35,5 +35,12 @@ struct git_commit {
|
|
|
35
35
|
|
|
36
36
|
void git_commit__free(void *commit);
|
|
37
37
|
int git_commit__parse(void *commit, git_odb_object *obj);
|
|
38
|
+
int git_commit__parse_raw(void *commit, const char *data, size_t size);
|
|
39
|
+
|
|
40
|
+
typedef enum {
|
|
41
|
+
GIT_COMMIT_PARSE_QUICK = (1 << 0), /**< Only parse parents and committer info */
|
|
42
|
+
} git_commit__parse_flags;
|
|
43
|
+
|
|
44
|
+
int git_commit__parse_ext(git_commit *commit, git_odb_object *odb_obj, unsigned int flags);
|
|
38
45
|
|
|
39
46
|
#endif
|
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
#include "revwalk.h"
|
|
11
11
|
#include "pool.h"
|
|
12
12
|
#include "odb.h"
|
|
13
|
+
#include "commit.h"
|
|
13
14
|
|
|
14
15
|
int git_commit_list_time_cmp(const void *a, const void *b)
|
|
15
16
|
{
|
|
@@ -55,25 +56,18 @@ git_commit_list_node *git_commit_list_alloc_node(git_revwalk *walk)
|
|
|
55
56
|
return (git_commit_list_node *)git_pool_mallocz(&walk->commit_pool, 1);
|
|
56
57
|
}
|
|
57
58
|
|
|
58
|
-
static int commit_error(git_commit_list_node *commit, const char *msg)
|
|
59
|
-
{
|
|
60
|
-
char commit_oid[GIT_OID_HEXSZ + 1];
|
|
61
|
-
git_oid_fmt(commit_oid, &commit->oid);
|
|
62
|
-
commit_oid[GIT_OID_HEXSZ] = '\0';
|
|
63
|
-
|
|
64
|
-
giterr_set(GITERR_ODB, "failed to parse commit %s - %s", commit_oid, msg);
|
|
65
|
-
|
|
66
|
-
return -1;
|
|
67
|
-
}
|
|
68
|
-
|
|
69
59
|
static git_commit_list_node **alloc_parents(
|
|
70
60
|
git_revwalk *walk, git_commit_list_node *commit, size_t n_parents)
|
|
71
61
|
{
|
|
62
|
+
size_t bytes;
|
|
63
|
+
|
|
72
64
|
if (n_parents <= PARENTS_PER_COMMIT)
|
|
73
65
|
return (git_commit_list_node **)((char *)commit + sizeof(git_commit_list_node));
|
|
74
66
|
|
|
75
|
-
|
|
76
|
-
|
|
67
|
+
if (git__multiply_sizet_overflow(&bytes, n_parents, sizeof(git_commit_list_node *)))
|
|
68
|
+
return NULL;
|
|
69
|
+
|
|
70
|
+
return (git_commit_list_node **)git_pool_malloc(&walk->commit_pool, bytes);
|
|
77
71
|
}
|
|
78
72
|
|
|
79
73
|
|
|
@@ -107,75 +101,42 @@ git_commit_list_node *git_commit_list_pop(git_commit_list **stack)
|
|
|
107
101
|
|
|
108
102
|
static int commit_quick_parse(
|
|
109
103
|
git_revwalk *walk,
|
|
110
|
-
git_commit_list_node *
|
|
111
|
-
|
|
112
|
-
size_t buffer_len)
|
|
104
|
+
git_commit_list_node *node,
|
|
105
|
+
git_odb_object *obj)
|
|
113
106
|
{
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
int64_t commit_time;
|
|
119
|
-
|
|
120
|
-
buffer += strlen("tree ") + GIT_OID_HEXSZ + 1;
|
|
121
|
-
|
|
122
|
-
parents_start = buffer;
|
|
123
|
-
while (buffer + parent_len < buffer_end && memcmp(buffer, "parent ", strlen("parent ")) == 0) {
|
|
124
|
-
parents++;
|
|
125
|
-
buffer += parent_len;
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
commit->parents = alloc_parents(walk, commit, parents);
|
|
129
|
-
GITERR_CHECK_ALLOC(commit->parents);
|
|
130
|
-
|
|
131
|
-
buffer = parents_start;
|
|
132
|
-
for (i = 0; i < parents; ++i) {
|
|
133
|
-
git_oid oid;
|
|
134
|
-
|
|
135
|
-
if (git_oid_fromstr(&oid, (const char *)buffer + strlen("parent ")) < 0)
|
|
136
|
-
return -1;
|
|
107
|
+
git_oid *parent_oid;
|
|
108
|
+
git_commit *commit;
|
|
109
|
+
int error;
|
|
110
|
+
size_t i;
|
|
137
111
|
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
112
|
+
commit = git__calloc(1, sizeof(*commit));
|
|
113
|
+
GIT_ERROR_CHECK_ALLOC(commit);
|
|
114
|
+
commit->object.repo = walk->repo;
|
|
141
115
|
|
|
142
|
-
|
|
116
|
+
if ((error = git_commit__parse_ext(commit, obj, GIT_COMMIT_PARSE_QUICK)) < 0) {
|
|
117
|
+
git__free(commit);
|
|
118
|
+
return error;
|
|
143
119
|
}
|
|
144
120
|
|
|
145
|
-
commit->
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
return
|
|
149
|
-
|
|
150
|
-
buffer++;
|
|
151
|
-
|
|
152
|
-
if ((buffer = memchr(buffer, '\n', buffer_end - buffer)) == NULL)
|
|
153
|
-
return commit_error(commit, "object is corrupted");
|
|
154
|
-
|
|
155
|
-
/* Skip trailing spaces */
|
|
156
|
-
while (buffer > committer_start && git__isspace(*buffer))
|
|
157
|
-
buffer--;
|
|
158
|
-
|
|
159
|
-
/* Seek for the beginning of the pack of digits */
|
|
160
|
-
while (buffer > committer_start && git__isdigit(*buffer))
|
|
161
|
-
buffer--;
|
|
162
|
-
|
|
163
|
-
/* Skip potential timezone offset */
|
|
164
|
-
if ((buffer > committer_start) && (*buffer == '+' || *buffer == '-')) {
|
|
165
|
-
buffer--;
|
|
121
|
+
if (!git__is_uint16(git_array_size(commit->parent_ids))) {
|
|
122
|
+
git__free(commit);
|
|
123
|
+
git_error_set(GIT_ERROR_INVALID, "commit has more than 2^16 parents");
|
|
124
|
+
return -1;
|
|
125
|
+
}
|
|
166
126
|
|
|
167
|
-
|
|
168
|
-
|
|
127
|
+
node->time = commit->committer->when.time;
|
|
128
|
+
node->out_degree = (uint16_t) git_array_size(commit->parent_ids);
|
|
129
|
+
node->parents = alloc_parents(walk, node, node->out_degree);
|
|
130
|
+
GIT_ERROR_CHECK_ALLOC(node->parents);
|
|
169
131
|
|
|
170
|
-
|
|
171
|
-
|
|
132
|
+
git_array_foreach(commit->parent_ids, i, parent_oid) {
|
|
133
|
+
node->parents[i] = git_revwalk__commit_lookup(walk, parent_oid);
|
|
172
134
|
}
|
|
173
135
|
|
|
174
|
-
|
|
175
|
-
|
|
136
|
+
git_commit__free(commit);
|
|
137
|
+
|
|
138
|
+
node->parsed = 1;
|
|
176
139
|
|
|
177
|
-
commit->time = commit_time;
|
|
178
|
-
commit->parsed = 1;
|
|
179
140
|
return 0;
|
|
180
141
|
}
|
|
181
142
|
|
|
@@ -190,14 +151,11 @@ int git_commit_list_parse(git_revwalk *walk, git_commit_list_node *commit)
|
|
|
190
151
|
if ((error = git_odb_read(&obj, walk->odb, &commit->oid)) < 0)
|
|
191
152
|
return error;
|
|
192
153
|
|
|
193
|
-
if (obj->cached.type !=
|
|
194
|
-
|
|
154
|
+
if (obj->cached.type != GIT_OBJECT_COMMIT) {
|
|
155
|
+
git_error_set(GIT_ERROR_INVALID, "object is no commit object");
|
|
195
156
|
error = -1;
|
|
196
157
|
} else
|
|
197
|
-
error = commit_quick_parse(
|
|
198
|
-
walk, commit,
|
|
199
|
-
(const uint8_t *)git_odb_object_data(obj),
|
|
200
|
-
git_odb_object_size(obj));
|
|
158
|
+
error = commit_quick_parse(walk, commit, obj);
|
|
201
159
|
|
|
202
160
|
git_odb_object_free(obj);
|
|
203
161
|
return error;
|