rugged 1.6.3 → 1.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/ext/rugged/rugged_allocator.c +0 -54
- data/lib/rugged/version.rb +1 -1
- data/vendor/libgit2/AUTHORS +1 -0
- data/vendor/libgit2/CMakeLists.txt +25 -17
- data/vendor/libgit2/COPYING +195 -1
- data/vendor/libgit2/cmake/CheckPrototypeDefinitionSafe.cmake +16 -0
- data/vendor/libgit2/cmake/{FindIconv.cmake → FindIntlIconv.cmake} +6 -0
- data/vendor/libgit2/cmake/FindLLHTTP.cmake +39 -0
- data/vendor/libgit2/cmake/SelectGSSAPI.cmake +4 -4
- data/vendor/libgit2/cmake/SelectHTTPParser.cmake +23 -8
- data/vendor/libgit2/cmake/SelectHTTPSBackend.cmake +34 -6
- data/vendor/libgit2/cmake/SelectHashes.cmake +32 -11
- data/vendor/libgit2/cmake/SelectRegex.cmake +6 -1
- data/vendor/libgit2/cmake/SelectSSH.cmake +22 -17
- data/vendor/libgit2/cmake/SelectXdiff.cmake +9 -0
- data/vendor/libgit2/cmake/SelectZlib.cmake +4 -0
- data/vendor/libgit2/deps/llhttp/CMakeLists.txt +8 -0
- data/vendor/libgit2/deps/llhttp/LICENSE-MIT +22 -0
- data/vendor/libgit2/deps/llhttp/api.c +510 -0
- data/vendor/libgit2/deps/llhttp/http.c +170 -0
- data/vendor/libgit2/deps/llhttp/llhttp.c +10168 -0
- data/vendor/libgit2/deps/llhttp/llhttp.h +897 -0
- data/vendor/libgit2/deps/ntlmclient/CMakeLists.txt +1 -1
- data/vendor/libgit2/deps/ntlmclient/crypt_builtin_md4.c +311 -0
- data/vendor/libgit2/deps/ntlmclient/crypt_commoncrypto.c +2 -1
- data/vendor/libgit2/deps/ntlmclient/crypt_mbedtls.c +0 -20
- data/vendor/libgit2/deps/ntlmclient/crypt_openssl.c +4 -4
- data/vendor/libgit2/deps/ntlmclient/ntlm.c +21 -21
- data/vendor/libgit2/deps/ntlmclient/unicode_builtin.c +5 -4
- data/vendor/libgit2/deps/ntlmclient/unicode_iconv.c +2 -1
- data/vendor/libgit2/deps/ntlmclient/utf8.h +1176 -721
- data/vendor/libgit2/deps/ntlmclient/util.h +11 -0
- data/vendor/libgit2/deps/pcre/CMakeLists.txt +1 -0
- data/vendor/libgit2/deps/pcre/LICENCE +5 -5
- data/vendor/libgit2/deps/pcre/pcre.h +2 -2
- data/vendor/libgit2/deps/pcre/pcre_compile.c +6 -3
- data/vendor/libgit2/deps/pcre/pcre_exec.c +2 -2
- data/vendor/libgit2/deps/xdiff/CMakeLists.txt +28 -0
- data/vendor/libgit2/{src/libgit2 → deps}/xdiff/git-xdiff.h +4 -1
- data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xdiffi.c +19 -18
- data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xdiffi.h +2 -4
- data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xemit.c +3 -3
- data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xhistogram.c +7 -18
- data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xmacros.h +18 -1
- data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xmerge.c +22 -20
- data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xpatience.c +21 -30
- data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xprepare.c +13 -30
- data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xutils.c +18 -1
- data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xutils.h +2 -1
- data/vendor/libgit2/deps/zlib/CMakeLists.txt +6 -1
- data/vendor/libgit2/deps/zlib/LICENSE +22 -0
- data/vendor/libgit2/deps/zlib/adler32.c +5 -27
- data/vendor/libgit2/deps/zlib/crc32.c +94 -167
- data/vendor/libgit2/deps/zlib/deflate.c +358 -435
- data/vendor/libgit2/deps/zlib/deflate.h +41 -10
- data/vendor/libgit2/deps/zlib/gzguts.h +13 -18
- data/vendor/libgit2/deps/zlib/infback.c +17 -30
- data/vendor/libgit2/deps/zlib/inffast.c +1 -4
- data/vendor/libgit2/deps/zlib/inffast.h +1 -1
- data/vendor/libgit2/deps/zlib/inflate.c +36 -102
- data/vendor/libgit2/deps/zlib/inftrees.c +6 -11
- data/vendor/libgit2/deps/zlib/inftrees.h +6 -6
- data/vendor/libgit2/deps/zlib/trees.c +287 -352
- data/vendor/libgit2/deps/zlib/zconf.h +23 -14
- data/vendor/libgit2/deps/zlib/zlib.h +202 -202
- data/vendor/libgit2/deps/zlib/zutil.c +18 -44
- data/vendor/libgit2/deps/zlib/zutil.h +13 -33
- data/vendor/libgit2/include/git2/annotated_commit.h +12 -5
- data/vendor/libgit2/include/git2/apply.h +27 -6
- data/vendor/libgit2/include/git2/attr.h +17 -4
- data/vendor/libgit2/include/git2/blame.h +133 -28
- data/vendor/libgit2/include/git2/blob.h +71 -28
- data/vendor/libgit2/include/git2/branch.h +22 -15
- data/vendor/libgit2/include/git2/buffer.h +6 -4
- data/vendor/libgit2/include/git2/cert.h +2 -1
- data/vendor/libgit2/include/git2/checkout.h +83 -32
- data/vendor/libgit2/include/git2/cherrypick.h +10 -3
- data/vendor/libgit2/include/git2/clone.h +25 -9
- data/vendor/libgit2/include/git2/commit.h +132 -3
- data/vendor/libgit2/include/git2/common.h +138 -56
- data/vendor/libgit2/include/git2/config.h +93 -23
- data/vendor/libgit2/include/git2/credential.h +30 -2
- data/vendor/libgit2/include/git2/credential_helpers.h +1 -0
- data/vendor/libgit2/include/git2/deprecated.h +133 -3
- data/vendor/libgit2/include/git2/describe.h +13 -1
- data/vendor/libgit2/include/git2/diff.h +77 -9
- data/vendor/libgit2/include/git2/email.h +9 -29
- data/vendor/libgit2/include/git2/errors.h +49 -74
- data/vendor/libgit2/include/git2/filter.h +14 -7
- data/vendor/libgit2/include/git2/global.h +8 -1
- data/vendor/libgit2/include/git2/graph.h +3 -2
- data/vendor/libgit2/include/git2/ignore.h +10 -0
- data/vendor/libgit2/include/git2/index.h +100 -6
- data/vendor/libgit2/include/git2/indexer.h +21 -4
- data/vendor/libgit2/include/git2/mailmap.h +7 -1
- data/vendor/libgit2/include/git2/merge.h +46 -1
- data/vendor/libgit2/include/git2/message.h +2 -2
- data/vendor/libgit2/include/git2/net.h +3 -1
- data/vendor/libgit2/include/git2/notes.h +9 -6
- data/vendor/libgit2/include/git2/object.h +9 -8
- data/vendor/libgit2/include/git2/odb.h +91 -49
- data/vendor/libgit2/include/git2/odb_backend.h +80 -52
- data/vendor/libgit2/include/git2/oid.h +24 -25
- data/vendor/libgit2/include/git2/oidarray.h +7 -1
- data/vendor/libgit2/include/git2/pack.h +13 -1
- data/vendor/libgit2/include/git2/patch.h +2 -3
- data/vendor/libgit2/include/git2/pathspec.h +9 -0
- data/vendor/libgit2/include/git2/proxy.h +10 -0
- data/vendor/libgit2/include/git2/rebase.h +9 -6
- data/vendor/libgit2/include/git2/refdb.h +2 -2
- data/vendor/libgit2/include/git2/reflog.h +3 -2
- data/vendor/libgit2/include/git2/refs.h +9 -6
- data/vendor/libgit2/include/git2/refspec.h +14 -4
- data/vendor/libgit2/include/git2/remote.h +112 -18
- data/vendor/libgit2/include/git2/repository.h +61 -15
- data/vendor/libgit2/include/git2/reset.h +16 -3
- data/vendor/libgit2/include/git2/revert.h +9 -4
- data/vendor/libgit2/include/git2/revparse.h +3 -3
- data/vendor/libgit2/include/git2/revwalk.h +3 -2
- data/vendor/libgit2/include/git2/signature.h +46 -1
- data/vendor/libgit2/include/git2/stash.h +17 -3
- data/vendor/libgit2/include/git2/status.h +10 -6
- data/vendor/libgit2/include/git2/stdint.h +87 -85
- data/vendor/libgit2/include/git2/strarray.h +2 -3
- data/vendor/libgit2/include/git2/submodule.h +20 -9
- data/vendor/libgit2/include/git2/sys/alloc.h +12 -34
- data/vendor/libgit2/include/git2/sys/commit.h +77 -3
- data/vendor/libgit2/include/git2/sys/commit_graph.h +109 -58
- data/vendor/libgit2/include/git2/sys/config.h +80 -4
- data/vendor/libgit2/include/git2/sys/credential.h +4 -3
- data/vendor/libgit2/include/git2/sys/diff.h +21 -1
- data/vendor/libgit2/include/git2/sys/email.h +7 -0
- data/vendor/libgit2/include/git2/sys/errors.h +76 -0
- data/vendor/libgit2/include/git2/sys/filter.h +66 -3
- data/vendor/libgit2/include/git2/sys/hashsig.h +11 -0
- data/vendor/libgit2/include/git2/sys/index.h +3 -2
- data/vendor/libgit2/include/git2/sys/mempack.h +32 -2
- data/vendor/libgit2/include/git2/sys/merge.h +55 -7
- data/vendor/libgit2/include/git2/sys/midx.h +47 -4
- data/vendor/libgit2/include/git2/sys/odb_backend.h +7 -3
- data/vendor/libgit2/include/git2/sys/openssl.h +8 -1
- data/vendor/libgit2/include/git2/sys/path.h +12 -1
- data/vendor/libgit2/include/git2/sys/refdb_backend.h +40 -36
- data/vendor/libgit2/include/git2/sys/refs.h +3 -2
- data/vendor/libgit2/include/git2/sys/remote.h +8 -1
- data/vendor/libgit2/include/git2/sys/repository.h +63 -3
- data/vendor/libgit2/include/git2/sys/stream.h +25 -2
- data/vendor/libgit2/include/git2/sys/transport.h +44 -5
- data/vendor/libgit2/include/git2/tag.h +3 -1
- data/vendor/libgit2/include/git2/trace.h +9 -3
- data/vendor/libgit2/include/git2/transaction.h +3 -2
- data/vendor/libgit2/include/git2/transport.h +11 -3
- data/vendor/libgit2/include/git2/tree.h +16 -5
- data/vendor/libgit2/include/git2/types.h +19 -3
- data/vendor/libgit2/include/git2/version.h +44 -8
- data/vendor/libgit2/include/git2/worktree.h +19 -7
- data/vendor/libgit2/src/CMakeLists.txt +40 -15
- data/vendor/libgit2/src/cli/CMakeLists.txt +2 -2
- data/vendor/libgit2/src/cli/cmd.c +1 -1
- data/vendor/libgit2/src/cli/cmd.h +4 -0
- data/vendor/libgit2/src/cli/cmd_blame.c +287 -0
- data/vendor/libgit2/src/cli/cmd_cat_file.c +6 -8
- data/vendor/libgit2/src/cli/cmd_clone.c +27 -13
- data/vendor/libgit2/src/cli/cmd_config.c +241 -0
- data/vendor/libgit2/src/cli/cmd_hash_object.c +6 -8
- data/vendor/libgit2/src/cli/cmd_help.c +6 -7
- data/vendor/libgit2/src/cli/cmd_index_pack.c +114 -0
- data/vendor/libgit2/src/cli/cmd_init.c +102 -0
- data/vendor/libgit2/src/cli/common.c +168 -0
- data/vendor/libgit2/src/cli/common.h +63 -0
- data/vendor/libgit2/src/cli/error.h +1 -1
- data/vendor/libgit2/src/cli/main.c +52 -24
- data/vendor/libgit2/src/cli/opt.c +29 -3
- data/vendor/libgit2/src/cli/opt.h +21 -3
- data/vendor/libgit2/src/cli/opt_usage.c +102 -33
- data/vendor/libgit2/src/cli/opt_usage.h +6 -1
- data/vendor/libgit2/src/cli/progress.c +60 -10
- data/vendor/libgit2/src/cli/progress.h +16 -4
- data/vendor/libgit2/src/cli/unix/sighandler.c +2 -1
- data/vendor/libgit2/src/cli/win32/precompiled.h +1 -1
- data/vendor/libgit2/src/cli/win32/sighandler.c +1 -1
- data/vendor/libgit2/src/libgit2/CMakeLists.txt +27 -27
- data/vendor/libgit2/src/libgit2/annotated_commit.c +2 -2
- data/vendor/libgit2/src/libgit2/annotated_commit.h +1 -1
- data/vendor/libgit2/src/libgit2/apply.c +14 -16
- data/vendor/libgit2/src/libgit2/attr.c +30 -13
- data/vendor/libgit2/src/libgit2/attr_file.c +7 -2
- data/vendor/libgit2/src/libgit2/attr_file.h +2 -0
- data/vendor/libgit2/src/libgit2/attrcache.c +69 -33
- data/vendor/libgit2/src/libgit2/attrcache.h +5 -9
- data/vendor/libgit2/src/libgit2/blame.c +152 -59
- data/vendor/libgit2/src/libgit2/blame.h +1 -0
- data/vendor/libgit2/src/libgit2/blame_git.c +0 -1
- data/vendor/libgit2/src/libgit2/branch.c +2 -2
- data/vendor/libgit2/src/libgit2/cache.c +22 -17
- data/vendor/libgit2/src/libgit2/cache.h +7 -9
- data/vendor/libgit2/src/libgit2/checkout.c +34 -24
- data/vendor/libgit2/src/libgit2/checkout.h +0 -2
- data/vendor/libgit2/src/libgit2/cherrypick.c +4 -5
- data/vendor/libgit2/src/libgit2/clone.c +186 -164
- data/vendor/libgit2/src/libgit2/clone.h +4 -1
- data/vendor/libgit2/src/libgit2/commit.c +123 -9
- data/vendor/libgit2/src/libgit2/commit_graph.c +166 -88
- data/vendor/libgit2/src/libgit2/commit_graph.h +21 -6
- data/vendor/libgit2/src/libgit2/commit_list.c +12 -5
- data/vendor/libgit2/src/libgit2/commit_list.h +1 -0
- data/vendor/libgit2/src/libgit2/config.c +394 -300
- data/vendor/libgit2/src/libgit2/config.cmake.in +3 -0
- data/vendor/libgit2/src/libgit2/config.h +9 -4
- data/vendor/libgit2/src/libgit2/config_backend.h +8 -10
- data/vendor/libgit2/src/libgit2/config_cache.c +4 -5
- data/vendor/libgit2/src/libgit2/config_file.c +113 -96
- data/vendor/libgit2/src/libgit2/config_list.c +285 -0
- data/vendor/libgit2/src/libgit2/config_list.h +32 -0
- data/vendor/libgit2/src/libgit2/config_mem.c +194 -40
- data/vendor/libgit2/src/libgit2/config_parse.c +10 -9
- data/vendor/libgit2/src/libgit2/config_snapshot.c +24 -31
- data/vendor/libgit2/src/libgit2/describe.c +34 -31
- data/vendor/libgit2/src/libgit2/diff.c +17 -8
- data/vendor/libgit2/src/libgit2/diff.h +6 -6
- data/vendor/libgit2/src/libgit2/diff_driver.c +12 -19
- data/vendor/libgit2/src/libgit2/diff_driver.h +2 -2
- data/vendor/libgit2/src/libgit2/diff_file.c +7 -7
- data/vendor/libgit2/src/libgit2/diff_generate.c +39 -18
- data/vendor/libgit2/src/libgit2/diff_parse.c +22 -6
- data/vendor/libgit2/src/libgit2/diff_print.c +88 -13
- data/vendor/libgit2/src/libgit2/diff_tform.c +40 -12
- data/vendor/libgit2/src/libgit2/diff_xdiff.h +1 -1
- data/vendor/libgit2/src/libgit2/email.c +5 -3
- data/vendor/libgit2/src/libgit2/fetch.c +39 -9
- data/vendor/libgit2/src/libgit2/fetch.h +0 -2
- data/vendor/libgit2/src/libgit2/fetchhead.c +11 -9
- data/vendor/libgit2/src/libgit2/filter.c +5 -5
- data/vendor/libgit2/src/libgit2/git2.rc +3 -3
- data/vendor/libgit2/src/libgit2/grafts.c +270 -0
- data/vendor/libgit2/src/libgit2/grafts.h +35 -0
- data/vendor/libgit2/src/libgit2/graph.c +1 -1
- data/vendor/libgit2/src/libgit2/hashmap_oid.h +30 -0
- data/vendor/libgit2/src/libgit2/ident.c +3 -3
- data/vendor/libgit2/src/libgit2/ignore.c +9 -5
- data/vendor/libgit2/src/libgit2/index.c +392 -208
- data/vendor/libgit2/src/libgit2/index.h +16 -3
- data/vendor/libgit2/src/libgit2/index_map.c +95 -0
- data/vendor/libgit2/src/libgit2/index_map.h +28 -0
- data/vendor/libgit2/src/libgit2/indexer.c +44 -41
- data/vendor/libgit2/src/libgit2/iterator.c +34 -13
- data/vendor/libgit2/src/libgit2/iterator.h +3 -0
- data/vendor/libgit2/src/libgit2/libgit2.c +155 -331
- data/vendor/libgit2/src/libgit2/mailmap.c +1 -1
- data/vendor/libgit2/src/libgit2/merge.c +56 -46
- data/vendor/libgit2/src/libgit2/merge_driver.c +2 -2
- data/vendor/libgit2/src/libgit2/merge_file.c +0 -2
- data/vendor/libgit2/src/libgit2/midx.c +86 -44
- data/vendor/libgit2/src/libgit2/midx.h +13 -3
- data/vendor/libgit2/src/libgit2/mwindow.c +38 -45
- data/vendor/libgit2/src/libgit2/mwindow.h +4 -0
- data/vendor/libgit2/src/libgit2/notes.c +9 -8
- data/vendor/libgit2/src/libgit2/object.c +42 -16
- data/vendor/libgit2/src/libgit2/object.h +6 -0
- data/vendor/libgit2/src/libgit2/odb.c +16 -9
- data/vendor/libgit2/src/libgit2/odb_mempack.c +49 -17
- data/vendor/libgit2/src/libgit2/odb_pack.c +28 -7
- data/vendor/libgit2/src/libgit2/oid.c +35 -2
- data/vendor/libgit2/src/libgit2/oid.h +11 -0
- data/vendor/libgit2/src/libgit2/oidarray.c +49 -3
- data/vendor/libgit2/src/libgit2/oidarray.h +5 -1
- data/vendor/libgit2/src/libgit2/pack-objects.c +77 -43
- data/vendor/libgit2/src/libgit2/pack-objects.h +17 -6
- data/vendor/libgit2/src/libgit2/pack.c +33 -27
- data/vendor/libgit2/src/libgit2/pack.h +15 -10
- data/vendor/libgit2/src/libgit2/parse.c +7 -4
- data/vendor/libgit2/src/libgit2/parse.h +1 -1
- data/vendor/libgit2/src/libgit2/patch.h +7 -1
- data/vendor/libgit2/src/libgit2/patch_generate.c +24 -5
- data/vendor/libgit2/src/libgit2/patch_parse.c +18 -10
- data/vendor/libgit2/src/libgit2/path.c +1 -1
- data/vendor/libgit2/src/libgit2/pathspec.c +1 -1
- data/vendor/libgit2/src/libgit2/push.c +81 -30
- data/vendor/libgit2/src/libgit2/push.h +1 -0
- data/vendor/libgit2/src/libgit2/reader.c +1 -1
- data/vendor/libgit2/src/libgit2/rebase.c +72 -84
- data/vendor/libgit2/src/libgit2/refdb_fs.c +146 -70
- data/vendor/libgit2/src/libgit2/reflog.c +1 -2
- data/vendor/libgit2/src/libgit2/reflog.h +2 -0
- data/vendor/libgit2/src/libgit2/refs.c +34 -8
- data/vendor/libgit2/src/libgit2/refs.h +6 -1
- data/vendor/libgit2/src/libgit2/refspec.c +28 -1
- data/vendor/libgit2/src/libgit2/refspec.h +8 -0
- data/vendor/libgit2/src/libgit2/remote.c +136 -67
- data/vendor/libgit2/src/libgit2/remote.h +1 -0
- data/vendor/libgit2/src/libgit2/repository.c +789 -330
- data/vendor/libgit2/src/libgit2/repository.h +22 -3
- data/vendor/libgit2/src/libgit2/reset.c +2 -2
- data/vendor/libgit2/src/libgit2/revert.c +9 -13
- data/vendor/libgit2/src/libgit2/revparse.c +6 -3
- data/vendor/libgit2/src/libgit2/revwalk.c +36 -11
- data/vendor/libgit2/src/libgit2/revwalk.h +3 -3
- data/vendor/libgit2/src/libgit2/settings.c +468 -0
- data/vendor/libgit2/src/libgit2/settings.h +6 -2
- data/vendor/libgit2/src/libgit2/signature.c +132 -15
- data/vendor/libgit2/src/libgit2/signature.h +0 -1
- data/vendor/libgit2/src/libgit2/stash.c +9 -8
- data/vendor/libgit2/src/libgit2/status.c +1 -1
- data/vendor/libgit2/src/libgit2/streams/mbedtls.c +54 -61
- data/vendor/libgit2/src/libgit2/streams/openssl.c +40 -23
- data/vendor/libgit2/src/libgit2/streams/openssl.h +2 -0
- data/vendor/libgit2/src/libgit2/streams/openssl_dynamic.c +4 -0
- data/vendor/libgit2/src/libgit2/streams/openssl_dynamic.h +3 -0
- data/vendor/libgit2/src/libgit2/streams/schannel.c +715 -0
- data/vendor/libgit2/src/libgit2/streams/schannel.h +28 -0
- data/vendor/libgit2/src/libgit2/streams/socket.c +237 -51
- data/vendor/libgit2/src/libgit2/streams/socket.h +3 -1
- data/vendor/libgit2/src/libgit2/streams/stransport.c +79 -19
- data/vendor/libgit2/src/libgit2/streams/tls.c +5 -0
- data/vendor/libgit2/src/libgit2/submodule.c +106 -63
- data/vendor/libgit2/src/libgit2/submodule.h +9 -10
- data/vendor/libgit2/src/libgit2/tag.c +1 -1
- data/vendor/libgit2/src/libgit2/trailer.c +6 -6
- data/vendor/libgit2/src/libgit2/transaction.c +26 -20
- data/vendor/libgit2/src/libgit2/transaction.h +4 -1
- data/vendor/libgit2/src/libgit2/transport.c +4 -1
- data/vendor/libgit2/src/libgit2/transports/auth.h +1 -2
- data/vendor/libgit2/src/libgit2/transports/{auth_negotiate.c → auth_gssapi.c} +32 -32
- data/vendor/libgit2/src/libgit2/transports/auth_negotiate.h +1 -1
- data/vendor/libgit2/src/libgit2/transports/auth_ntlm.h +1 -1
- data/vendor/libgit2/src/libgit2/transports/{auth_ntlm.c → auth_ntlmclient.c} +12 -12
- data/vendor/libgit2/src/libgit2/transports/auth_sspi.c +341 -0
- data/vendor/libgit2/src/libgit2/transports/credential.c +1 -1
- data/vendor/libgit2/src/libgit2/transports/git.c +7 -8
- data/vendor/libgit2/src/libgit2/transports/http.c +8 -4
- data/vendor/libgit2/src/libgit2/transports/http.h +0 -10
- data/vendor/libgit2/src/libgit2/transports/httpclient.c +117 -72
- data/vendor/libgit2/src/libgit2/transports/httpparser.c +128 -0
- data/vendor/libgit2/src/libgit2/transports/httpparser.h +99 -0
- data/vendor/libgit2/src/libgit2/transports/local.c +21 -11
- data/vendor/libgit2/src/libgit2/transports/smart.c +50 -32
- data/vendor/libgit2/src/libgit2/transports/smart.h +26 -9
- data/vendor/libgit2/src/libgit2/transports/smart_pkt.c +139 -18
- data/vendor/libgit2/src/libgit2/transports/smart_protocol.c +209 -57
- data/vendor/libgit2/src/libgit2/transports/ssh.c +41 -1103
- data/vendor/libgit2/src/libgit2/transports/ssh_exec.c +347 -0
- data/vendor/libgit2/src/libgit2/transports/ssh_exec.h +26 -0
- data/vendor/libgit2/src/libgit2/transports/ssh_libssh2.c +1126 -0
- data/vendor/libgit2/src/libgit2/transports/ssh_libssh2.h +28 -0
- data/vendor/libgit2/src/libgit2/transports/winhttp.c +48 -21
- data/vendor/libgit2/src/libgit2/tree-cache.c +26 -16
- data/vendor/libgit2/src/libgit2/tree-cache.h +5 -3
- data/vendor/libgit2/src/libgit2/tree.c +35 -27
- data/vendor/libgit2/src/libgit2/tree.h +3 -2
- data/vendor/libgit2/src/libgit2/worktree.c +39 -27
- data/vendor/libgit2/src/util/CMakeLists.txt +4 -6
- data/vendor/libgit2/src/util/alloc.c +69 -7
- data/vendor/libgit2/src/util/alloc.h +34 -9
- data/vendor/libgit2/src/util/allocators/debugalloc.c +73 -0
- data/vendor/libgit2/src/{cli/cli.h → util/allocators/debugalloc.h} +6 -9
- data/vendor/libgit2/src/util/allocators/failalloc.c +0 -60
- data/vendor/libgit2/src/util/allocators/failalloc.h +0 -6
- data/vendor/libgit2/src/util/allocators/stdalloc.c +2 -115
- data/vendor/libgit2/src/util/allocators/win32_leakcheck.c +0 -68
- data/vendor/libgit2/src/util/array.h +24 -18
- data/vendor/libgit2/src/util/cc-compat.h +4 -0
- data/vendor/libgit2/src/util/ctype_compat.h +70 -0
- data/vendor/libgit2/src/util/date.c +22 -14
- data/vendor/libgit2/src/util/date.h +12 -0
- data/vendor/libgit2/src/util/errors.c +401 -0
- data/vendor/libgit2/src/{libgit2 → util}/errors.h +21 -17
- data/vendor/libgit2/src/util/filebuf.c +6 -1
- data/vendor/libgit2/src/util/filebuf.h +19 -6
- data/vendor/libgit2/src/util/fs_path.c +16 -5
- data/vendor/libgit2/src/util/fs_path.h +23 -0
- data/vendor/libgit2/src/util/futils.c +14 -10
- data/vendor/libgit2/src/util/futils.h +13 -4
- data/vendor/libgit2/src/util/git2_features.h.in +21 -4
- data/vendor/libgit2/src/util/git2_util.h +6 -0
- data/vendor/libgit2/src/util/hash/openssl.c +152 -0
- data/vendor/libgit2/src/util/hash/openssl.h +17 -1
- data/vendor/libgit2/src/util/hash/sha.h +4 -1
- data/vendor/libgit2/src/util/hashmap.h +424 -0
- data/vendor/libgit2/src/util/hashmap_str.h +43 -0
- data/vendor/libgit2/src/util/integer.h +3 -1
- data/vendor/libgit2/src/util/net.c +318 -161
- data/vendor/libgit2/src/util/net.h +27 -0
- data/vendor/libgit2/src/util/pool.c +1 -1
- data/vendor/libgit2/src/util/pool.h +5 -0
- data/vendor/libgit2/src/util/posix.c +54 -0
- data/vendor/libgit2/src/util/posix.h +22 -0
- data/vendor/libgit2/src/util/pqueue.h +1 -1
- data/vendor/libgit2/src/util/process.h +222 -0
- data/vendor/libgit2/src/util/rand.c +6 -10
- data/vendor/libgit2/src/util/regexp.c +1 -1
- data/vendor/libgit2/src/util/sortedcache.c +14 -13
- data/vendor/libgit2/src/util/sortedcache.h +3 -3
- data/vendor/libgit2/src/util/staticstr.h +66 -0
- data/vendor/libgit2/src/util/str.c +2 -2
- data/vendor/libgit2/src/util/strlist.c +108 -0
- data/vendor/libgit2/src/util/strlist.h +36 -0
- data/vendor/libgit2/src/util/unix/posix.h +0 -2
- data/vendor/libgit2/src/util/unix/process.c +629 -0
- data/vendor/libgit2/src/util/unix/realpath.c +23 -5
- data/vendor/libgit2/src/util/util.c +17 -12
- data/vendor/libgit2/src/util/util.h +28 -54
- data/vendor/libgit2/src/util/vector.c +3 -3
- data/vendor/libgit2/src/util/vector.h +2 -2
- data/vendor/libgit2/src/util/win32/error.c +1 -1
- data/vendor/libgit2/src/util/win32/path_w32.c +8 -8
- data/vendor/libgit2/src/util/win32/posix_w32.c +30 -7
- data/vendor/libgit2/src/util/win32/process.c +506 -0
- data/vendor/libgit2/src/util/win32/utf-conv.c +73 -75
- data/vendor/libgit2/src/util/win32/utf-conv.h +81 -14
- data/vendor/libgit2/src/util/win32/w32_util.c +1 -1
- metadata +72 -49
- data/vendor/libgit2/cmake/SelectWinHTTP.cmake +0 -17
- data/vendor/libgit2/deps/http-parser/CMakeLists.txt +0 -6
- data/vendor/libgit2/deps/http-parser/COPYING +0 -23
- data/vendor/libgit2/deps/http-parser/http_parser.c +0 -2182
- data/vendor/libgit2/deps/http-parser/http_parser.h +0 -305
- data/vendor/libgit2/deps/zlib/COPYING +0 -27
- data/vendor/libgit2/include/git2/sys/reflog.h +0 -21
- data/vendor/libgit2/src/libgit2/config_entries.c +0 -237
- data/vendor/libgit2/src/libgit2/config_entries.h +0 -24
- data/vendor/libgit2/src/libgit2/errors.c +0 -238
- data/vendor/libgit2/src/libgit2/idxmap.c +0 -157
- data/vendor/libgit2/src/libgit2/idxmap.h +0 -177
- data/vendor/libgit2/src/libgit2/libgit2.h +0 -15
- data/vendor/libgit2/src/libgit2/netops.c +0 -124
- data/vendor/libgit2/src/libgit2/netops.h +0 -68
- data/vendor/libgit2/src/libgit2/offmap.c +0 -101
- data/vendor/libgit2/src/libgit2/offmap.h +0 -133
- data/vendor/libgit2/src/libgit2/oidmap.c +0 -107
- data/vendor/libgit2/src/libgit2/oidmap.h +0 -128
- data/vendor/libgit2/src/libgit2/threadstate.c +0 -84
- data/vendor/libgit2/src/libgit2/threadstate.h +0 -24
- data/vendor/libgit2/src/libgit2/transports/ssh.h +0 -14
- data/vendor/libgit2/src/util/khash.h +0 -615
- data/vendor/libgit2/src/util/strmap.c +0 -100
- data/vendor/libgit2/src/util/strmap.h +0 -131
- /data/vendor/libgit2/cmake/{FindHTTPParser.cmake → FindHTTP_Parser.cmake} +0 -0
- /data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xdiff.h +0 -0
- /data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xemit.h +0 -0
- /data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xinclude.h +0 -0
- /data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xprepare.h +0 -0
- /data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xtypes.h +0 -0
@@ -13,7 +13,6 @@
|
|
13
13
|
#include "futils.h"
|
14
14
|
#include "hash.h"
|
15
15
|
#include "oidarray.h"
|
16
|
-
#include "oidmap.h"
|
17
16
|
#include "pack.h"
|
18
17
|
#include "repository.h"
|
19
18
|
#include "revwalk.h"
|
@@ -25,6 +24,7 @@
|
|
25
24
|
#define COMMIT_GRAPH_SIGNATURE 0x43475048 /* "CGPH" */
|
26
25
|
#define COMMIT_GRAPH_VERSION 1
|
27
26
|
#define COMMIT_GRAPH_OBJECT_ID_VERSION 1
|
27
|
+
|
28
28
|
struct git_commit_graph_header {
|
29
29
|
uint32_t signature;
|
30
30
|
uint8_t version;
|
@@ -138,19 +138,22 @@ static int commit_graph_parse_oid_lookup(
|
|
138
138
|
struct git_commit_graph_chunk *chunk_oid_lookup)
|
139
139
|
{
|
140
140
|
uint32_t i;
|
141
|
-
unsigned char *oid, *prev_oid, zero_oid[
|
141
|
+
unsigned char *oid, *prev_oid, zero_oid[GIT_OID_MAX_SIZE] = {0};
|
142
|
+
size_t oid_size;
|
143
|
+
|
144
|
+
oid_size = git_oid_size(file->oid_type);
|
142
145
|
|
143
146
|
if (chunk_oid_lookup->offset == 0)
|
144
147
|
return commit_graph_error("missing OID Lookup chunk");
|
145
148
|
if (chunk_oid_lookup->length == 0)
|
146
149
|
return commit_graph_error("empty OID Lookup chunk");
|
147
|
-
if (chunk_oid_lookup->length != file->num_commits *
|
150
|
+
if (chunk_oid_lookup->length != file->num_commits * oid_size)
|
148
151
|
return commit_graph_error("OID Lookup chunk has wrong length");
|
149
152
|
|
150
153
|
file->oid_lookup = oid = (unsigned char *)(data + chunk_oid_lookup->offset);
|
151
154
|
prev_oid = zero_oid;
|
152
|
-
for (i = 0; i < file->num_commits; ++i, oid +=
|
153
|
-
if (git_oid_raw_cmp(prev_oid, oid,
|
155
|
+
for (i = 0; i < file->num_commits; ++i, oid += oid_size) {
|
156
|
+
if (git_oid_raw_cmp(prev_oid, oid, oid_size) >= 0)
|
154
157
|
return commit_graph_error("OID Lookup index is non-monotonic");
|
155
158
|
prev_oid = oid;
|
156
159
|
}
|
@@ -163,11 +166,13 @@ static int commit_graph_parse_commit_data(
|
|
163
166
|
const unsigned char *data,
|
164
167
|
struct git_commit_graph_chunk *chunk_commit_data)
|
165
168
|
{
|
169
|
+
size_t oid_size = git_oid_size(file->oid_type);
|
170
|
+
|
166
171
|
if (chunk_commit_data->offset == 0)
|
167
172
|
return commit_graph_error("missing Commit Data chunk");
|
168
173
|
if (chunk_commit_data->length == 0)
|
169
174
|
return commit_graph_error("empty Commit Data chunk");
|
170
|
-
if (chunk_commit_data->length != file->num_commits * (
|
175
|
+
if (chunk_commit_data->length != file->num_commits * (oid_size + 16))
|
171
176
|
return commit_graph_error("Commit Data chunk has wrong length");
|
172
177
|
|
173
178
|
file->commit_data = data + chunk_commit_data->offset;
|
@@ -209,7 +214,9 @@ int git_commit_graph_file_parse(
|
|
209
214
|
|
210
215
|
GIT_ASSERT_ARG(file);
|
211
216
|
|
212
|
-
|
217
|
+
checksum_size = git_oid_size(file->oid_type);
|
218
|
+
|
219
|
+
if (size < sizeof(struct git_commit_graph_header) + checksum_size)
|
213
220
|
return commit_graph_error("commit-graph is too short");
|
214
221
|
|
215
222
|
hdr = ((struct git_commit_graph_header *)data);
|
@@ -226,8 +233,7 @@ int git_commit_graph_file_parse(
|
|
226
233
|
* headers, and a special zero chunk.
|
227
234
|
*/
|
228
235
|
last_chunk_offset = sizeof(struct git_commit_graph_header) + (1 + hdr->chunks) * 12;
|
229
|
-
trailer_offset = size -
|
230
|
-
checksum_size = GIT_HASH_SHA1_SIZE;
|
236
|
+
trailer_offset = size - checksum_size;
|
231
237
|
|
232
238
|
if (trailer_offset < last_chunk_offset)
|
233
239
|
return commit_graph_error("wrong commit-graph size");
|
@@ -295,25 +301,35 @@ int git_commit_graph_file_parse(
|
|
295
301
|
return 0;
|
296
302
|
}
|
297
303
|
|
298
|
-
int git_commit_graph_new(
|
304
|
+
int git_commit_graph_new(
|
305
|
+
git_commit_graph **cgraph_out,
|
306
|
+
const char *objects_dir,
|
307
|
+
bool open_file,
|
308
|
+
git_oid_t oid_type)
|
299
309
|
{
|
300
310
|
git_commit_graph *cgraph = NULL;
|
301
311
|
int error = 0;
|
302
312
|
|
303
313
|
GIT_ASSERT_ARG(cgraph_out);
|
304
314
|
GIT_ASSERT_ARG(objects_dir);
|
315
|
+
GIT_ASSERT_ARG(oid_type);
|
305
316
|
|
306
317
|
cgraph = git__calloc(1, sizeof(git_commit_graph));
|
307
318
|
GIT_ERROR_CHECK_ALLOC(cgraph);
|
308
319
|
|
320
|
+
cgraph->oid_type = oid_type;
|
321
|
+
|
309
322
|
error = git_str_joinpath(&cgraph->filename, objects_dir, "info/commit-graph");
|
310
323
|
if (error < 0)
|
311
324
|
goto error;
|
312
325
|
|
313
326
|
if (open_file) {
|
314
|
-
error = git_commit_graph_file_open(&cgraph->file,
|
327
|
+
error = git_commit_graph_file_open(&cgraph->file,
|
328
|
+
git_str_cstr(&cgraph->filename), oid_type);
|
329
|
+
|
315
330
|
if (error < 0)
|
316
331
|
goto error;
|
332
|
+
|
317
333
|
cgraph->checked = 1;
|
318
334
|
}
|
319
335
|
|
@@ -326,14 +342,18 @@ error:
|
|
326
342
|
}
|
327
343
|
|
328
344
|
int git_commit_graph_validate(git_commit_graph *cgraph) {
|
329
|
-
unsigned char checksum[
|
330
|
-
|
331
|
-
size_t trailer_offset
|
345
|
+
unsigned char checksum[GIT_HASH_MAX_SIZE];
|
346
|
+
git_hash_algorithm_t checksum_type;
|
347
|
+
size_t checksum_size, trailer_offset;
|
348
|
+
|
349
|
+
checksum_type = git_oid_algorithm(cgraph->oid_type);
|
350
|
+
checksum_size = git_hash_size(checksum_type);
|
351
|
+
trailer_offset = cgraph->file->graph_map.len - checksum_size;
|
332
352
|
|
333
353
|
if (cgraph->file->graph_map.len < checksum_size)
|
334
354
|
return commit_graph_error("map length too small");
|
335
355
|
|
336
|
-
if (git_hash_buf(checksum, cgraph->file->graph_map.data, trailer_offset,
|
356
|
+
if (git_hash_buf(checksum, cgraph->file->graph_map.data, trailer_offset, checksum_type) < 0)
|
337
357
|
return commit_graph_error("could not calculate signature");
|
338
358
|
if (memcmp(checksum, cgraph->file->checksum, checksum_size) != 0)
|
339
359
|
return commit_graph_error("index signature mismatch");
|
@@ -341,16 +361,41 @@ int git_commit_graph_validate(git_commit_graph *cgraph) {
|
|
341
361
|
return 0;
|
342
362
|
}
|
343
363
|
|
344
|
-
int git_commit_graph_open(
|
364
|
+
int git_commit_graph_open(
|
365
|
+
git_commit_graph **cgraph_out,
|
366
|
+
const char *objects_dir
|
367
|
+
#ifdef GIT_EXPERIMENTAL_SHA256
|
368
|
+
, const git_commit_graph_open_options *opts
|
369
|
+
#endif
|
370
|
+
)
|
345
371
|
{
|
346
|
-
|
347
|
-
|
372
|
+
git_oid_t oid_type;
|
373
|
+
int error;
|
374
|
+
|
375
|
+
#ifdef GIT_EXPERIMENTAL_SHA256
|
376
|
+
GIT_ERROR_CHECK_VERSION(opts,
|
377
|
+
GIT_COMMIT_GRAPH_OPEN_OPTIONS_VERSION,
|
378
|
+
"git_commit_graph_open_options");
|
379
|
+
|
380
|
+
oid_type = opts && opts->oid_type ? opts->oid_type : GIT_OID_DEFAULT;
|
381
|
+
GIT_ASSERT_ARG(git_oid_type_is_valid(oid_type));
|
382
|
+
#else
|
383
|
+
oid_type = GIT_OID_SHA1;
|
384
|
+
#endif
|
385
|
+
|
386
|
+
error = git_commit_graph_new(cgraph_out, objects_dir, true,
|
387
|
+
oid_type);
|
388
|
+
|
389
|
+
if (!error)
|
348
390
|
return git_commit_graph_validate(*cgraph_out);
|
349
|
-
|
391
|
+
|
350
392
|
return error;
|
351
393
|
}
|
352
394
|
|
353
|
-
int git_commit_graph_file_open(
|
395
|
+
int git_commit_graph_file_open(
|
396
|
+
git_commit_graph_file **file_out,
|
397
|
+
const char *path,
|
398
|
+
git_oid_t oid_type)
|
354
399
|
{
|
355
400
|
git_commit_graph_file *file;
|
356
401
|
git_file fd = -1;
|
@@ -379,6 +424,8 @@ int git_commit_graph_file_open(git_commit_graph_file **file_out, const char *pat
|
|
379
424
|
file = git__calloc(1, sizeof(git_commit_graph_file));
|
380
425
|
GIT_ERROR_CHECK_ALLOC(file);
|
381
426
|
|
427
|
+
file->oid_type = oid_type;
|
428
|
+
|
382
429
|
error = git_futils_mmap_ro(&file->graph_map, fd, 0, cgraph_size);
|
383
430
|
p_close(fd);
|
384
431
|
if (error < 0) {
|
@@ -395,7 +442,9 @@ int git_commit_graph_file_open(git_commit_graph_file **file_out, const char *pat
|
|
395
442
|
return 0;
|
396
443
|
}
|
397
444
|
|
398
|
-
int git_commit_graph_get_file(
|
445
|
+
int git_commit_graph_get_file(
|
446
|
+
git_commit_graph_file **file_out,
|
447
|
+
git_commit_graph *cgraph)
|
399
448
|
{
|
400
449
|
if (!cgraph->checked) {
|
401
450
|
int error = 0;
|
@@ -405,7 +454,8 @@ int git_commit_graph_get_file(git_commit_graph_file **file_out, git_commit_graph
|
|
405
454
|
cgraph->checked = 1;
|
406
455
|
|
407
456
|
/* Best effort */
|
408
|
-
error = git_commit_graph_file_open(&result,
|
457
|
+
error = git_commit_graph_file_open(&result,
|
458
|
+
git_str_cstr(&cgraph->filename), cgraph->oid_type);
|
409
459
|
|
410
460
|
if (error < 0)
|
411
461
|
return error;
|
@@ -441,6 +491,7 @@ static int git_commit_graph_entry_get_byindex(
|
|
441
491
|
size_t pos)
|
442
492
|
{
|
443
493
|
const unsigned char *commit_data;
|
494
|
+
size_t oid_size = git_oid_size(file->oid_type);
|
444
495
|
|
445
496
|
GIT_ASSERT_ARG(e);
|
446
497
|
GIT_ASSERT_ARG(file);
|
@@ -450,15 +501,15 @@ static int git_commit_graph_entry_get_byindex(
|
|
450
501
|
return GIT_ENOTFOUND;
|
451
502
|
}
|
452
503
|
|
453
|
-
commit_data = file->commit_data + pos * (
|
454
|
-
git_oid__fromraw(&e->tree_oid, commit_data,
|
455
|
-
e->parent_indices[0] = ntohl(*((uint32_t *)(commit_data +
|
504
|
+
commit_data = file->commit_data + pos * (oid_size + 4 * sizeof(uint32_t));
|
505
|
+
git_oid__fromraw(&e->tree_oid, commit_data, file->oid_type);
|
506
|
+
e->parent_indices[0] = ntohl(*((uint32_t *)(commit_data + oid_size)));
|
456
507
|
e->parent_indices[1] = ntohl(
|
457
|
-
*((uint32_t *)(commit_data +
|
508
|
+
*((uint32_t *)(commit_data + oid_size + sizeof(uint32_t))));
|
458
509
|
e->parent_count = (e->parent_indices[0] != GIT_COMMIT_GRAPH_MISSING_PARENT)
|
459
510
|
+ (e->parent_indices[1] != GIT_COMMIT_GRAPH_MISSING_PARENT);
|
460
|
-
e->generation = ntohl(*((uint32_t *)(commit_data +
|
461
|
-
e->commit_time = ntohl(*((uint32_t *)(commit_data +
|
511
|
+
e->generation = ntohl(*((uint32_t *)(commit_data + oid_size + 2 * sizeof(uint32_t))));
|
512
|
+
e->commit_time = ntohl(*((uint32_t *)(commit_data + oid_size + 3 * sizeof(uint32_t))));
|
462
513
|
|
463
514
|
e->commit_time |= (e->generation & UINT64_C(0x3)) << UINT64_C(32);
|
464
515
|
e->generation >>= 2u;
|
@@ -485,7 +536,7 @@ static int git_commit_graph_entry_get_byindex(
|
|
485
536
|
}
|
486
537
|
}
|
487
538
|
|
488
|
-
git_oid__fromraw(&e->sha1, &file->oid_lookup[pos *
|
539
|
+
git_oid__fromraw(&e->sha1, &file->oid_lookup[pos * oid_size], file->oid_type);
|
489
540
|
return 0;
|
490
541
|
}
|
491
542
|
|
@@ -494,8 +545,8 @@ bool git_commit_graph_file_needs_refresh(const git_commit_graph_file *file, cons
|
|
494
545
|
git_file fd = -1;
|
495
546
|
struct stat st;
|
496
547
|
ssize_t bytes_read;
|
497
|
-
unsigned char checksum[
|
498
|
-
size_t checksum_size =
|
548
|
+
unsigned char checksum[GIT_HASH_MAX_SIZE];
|
549
|
+
size_t checksum_size = git_oid_size(file->oid_type);
|
499
550
|
|
500
551
|
/* TODO: properly open the file without access time using O_NOATIME */
|
501
552
|
fd = git_futils_open_ro(path);
|
@@ -530,35 +581,40 @@ int git_commit_graph_entry_find(
|
|
530
581
|
int pos, found = 0;
|
531
582
|
uint32_t hi, lo;
|
532
583
|
const unsigned char *current = NULL;
|
584
|
+
size_t oid_size, oid_hexsize;
|
533
585
|
|
534
586
|
GIT_ASSERT_ARG(e);
|
535
587
|
GIT_ASSERT_ARG(file);
|
536
588
|
GIT_ASSERT_ARG(short_oid);
|
537
589
|
|
590
|
+
oid_size = git_oid_size(file->oid_type);
|
591
|
+
oid_hexsize = git_oid_hexsize(file->oid_type);
|
592
|
+
|
538
593
|
hi = ntohl(file->oid_fanout[(int)short_oid->id[0]]);
|
539
594
|
lo = ((short_oid->id[0] == 0x0) ? 0 : ntohl(file->oid_fanout[(int)short_oid->id[0] - 1]));
|
540
595
|
|
541
|
-
pos = git_pack__lookup_id(file->oid_lookup,
|
596
|
+
pos = git_pack__lookup_id(file->oid_lookup, oid_size, lo, hi,
|
597
|
+
short_oid->id, file->oid_type);
|
542
598
|
|
543
599
|
if (pos >= 0) {
|
544
600
|
/* An object matching exactly the oid was found */
|
545
601
|
found = 1;
|
546
|
-
current = file->oid_lookup + (pos *
|
602
|
+
current = file->oid_lookup + (pos * oid_size);
|
547
603
|
} else {
|
548
604
|
/* No object was found */
|
549
605
|
/* pos refers to the object with the "closest" oid to short_oid */
|
550
606
|
pos = -1 - pos;
|
551
607
|
if (pos < (int)file->num_commits) {
|
552
|
-
current = file->oid_lookup + (pos *
|
608
|
+
current = file->oid_lookup + (pos * oid_size);
|
553
609
|
|
554
610
|
if (!git_oid_raw_ncmp(short_oid->id, current, len))
|
555
611
|
found = 1;
|
556
612
|
}
|
557
613
|
}
|
558
614
|
|
559
|
-
if (found && len !=
|
615
|
+
if (found && len != oid_hexsize && pos + 1 < (int)file->num_commits) {
|
560
616
|
/* Check for ambiguousity */
|
561
|
-
const unsigned char *next = current +
|
617
|
+
const unsigned char *next = current + oid_size;
|
562
618
|
|
563
619
|
if (!git_oid_raw_ncmp(short_oid->id, next, len))
|
564
620
|
found = 2;
|
@@ -637,11 +693,46 @@ static int packed_commit__cmp(const void *a_, const void *b_)
|
|
637
693
|
return git_oid_cmp(&a->sha1, &b->sha1);
|
638
694
|
}
|
639
695
|
|
640
|
-
int
|
696
|
+
int git_commit_graph_writer_options_init(
|
697
|
+
git_commit_graph_writer_options *opts,
|
698
|
+
unsigned int version)
|
641
699
|
{
|
642
|
-
|
700
|
+
GIT_INIT_STRUCTURE_FROM_TEMPLATE(
|
701
|
+
opts,
|
702
|
+
version,
|
703
|
+
git_commit_graph_writer_options,
|
704
|
+
GIT_COMMIT_GRAPH_WRITER_OPTIONS_INIT);
|
705
|
+
return 0;
|
706
|
+
}
|
707
|
+
|
708
|
+
int git_commit_graph_writer_new(
|
709
|
+
git_commit_graph_writer **out,
|
710
|
+
const char *objects_info_dir,
|
711
|
+
const git_commit_graph_writer_options *opts
|
712
|
+
)
|
713
|
+
{
|
714
|
+
git_commit_graph_writer *w;
|
715
|
+
git_oid_t oid_type;
|
716
|
+
|
717
|
+
#ifdef GIT_EXPERIMENTAL_SHA256
|
718
|
+
GIT_ERROR_CHECK_VERSION(opts,
|
719
|
+
GIT_COMMIT_GRAPH_WRITER_OPTIONS_VERSION,
|
720
|
+
"git_commit_graph_writer_options");
|
721
|
+
|
722
|
+
oid_type = opts && opts->oid_type ? opts->oid_type : GIT_OID_DEFAULT;
|
723
|
+
GIT_ASSERT_ARG(git_oid_type_is_valid(oid_type));
|
724
|
+
#else
|
725
|
+
GIT_UNUSED(opts);
|
726
|
+
oid_type = GIT_OID_SHA1;
|
727
|
+
#endif
|
728
|
+
|
729
|
+
GIT_ASSERT_ARG(out && objects_info_dir);
|
730
|
+
|
731
|
+
w = git__calloc(1, sizeof(git_commit_graph_writer));
|
643
732
|
GIT_ERROR_CHECK_ALLOC(w);
|
644
733
|
|
734
|
+
w->oid_type = oid_type;
|
735
|
+
|
645
736
|
if (git_str_sets(&w->objects_info_dir, objects_info_dir) < 0) {
|
646
737
|
git__free(w);
|
647
738
|
return -1;
|
@@ -667,7 +758,7 @@ void git_commit_graph_writer_free(git_commit_graph_writer *w)
|
|
667
758
|
|
668
759
|
git_vector_foreach (&w->commits, i, packed_commit)
|
669
760
|
packed_commit_free(packed_commit);
|
670
|
-
|
761
|
+
git_vector_dispose(&w->commits);
|
671
762
|
git_str_dispose(&w->objects_info_dir);
|
672
763
|
git__free(w);
|
673
764
|
}
|
@@ -712,9 +803,9 @@ static int object_entry__cb(const git_oid *id, void *data)
|
|
712
803
|
}
|
713
804
|
|
714
805
|
int git_commit_graph_writer_add_index_file(
|
715
|
-
|
716
|
-
|
717
|
-
|
806
|
+
git_commit_graph_writer *w,
|
807
|
+
git_repository *repo,
|
808
|
+
const char *idx_path)
|
718
809
|
{
|
719
810
|
int error;
|
720
811
|
struct git_pack_file *p = NULL;
|
@@ -776,6 +867,8 @@ enum generation_number_commit_state {
|
|
776
867
|
GENERATION_NUMBER_COMMIT_STATE_VISITED = 3
|
777
868
|
};
|
778
869
|
|
870
|
+
GIT_HASHMAP_OID_SETUP(git_commit_graph_oidmap, struct packed_commit *);
|
871
|
+
|
779
872
|
static int compute_generation_numbers(git_vector *commits)
|
780
873
|
{
|
781
874
|
git_array_t(size_t) index_stack = GIT_ARRAY_INIT;
|
@@ -783,17 +876,14 @@ static int compute_generation_numbers(git_vector *commits)
|
|
783
876
|
size_t *parent_idx;
|
784
877
|
enum generation_number_commit_state *commit_states = NULL;
|
785
878
|
struct packed_commit *child_packed_commit;
|
786
|
-
|
879
|
+
git_commit_graph_oidmap packed_commit_map = GIT_HASHMAP_INIT;
|
787
880
|
int error = 0;
|
788
881
|
|
789
882
|
/* First populate the parent indices fields */
|
790
|
-
error = git_oidmap_new(&packed_commit_map);
|
791
|
-
if (error < 0)
|
792
|
-
goto cleanup;
|
793
883
|
git_vector_foreach (commits, i, child_packed_commit) {
|
794
884
|
child_packed_commit->index = i;
|
795
|
-
error =
|
796
|
-
|
885
|
+
error = git_commit_graph_oidmap_put(&packed_commit_map,
|
886
|
+
&child_packed_commit->sha1, child_packed_commit);
|
797
887
|
if (error < 0)
|
798
888
|
goto cleanup;
|
799
889
|
}
|
@@ -811,8 +901,7 @@ static int compute_generation_numbers(git_vector *commits)
|
|
811
901
|
goto cleanup;
|
812
902
|
}
|
813
903
|
git_array_foreach (child_packed_commit->parents, parent_i, parent_id) {
|
814
|
-
parent_packed_commit
|
815
|
-
if (!parent_packed_commit) {
|
904
|
+
if (git_commit_graph_oidmap_get(&parent_packed_commit, &packed_commit_map, parent_id) != 0) {
|
816
905
|
git_error_set(GIT_ERROR_ODB,
|
817
906
|
"parent commit %s not found in commit graph",
|
818
907
|
git_oid_tostr_s(parent_id));
|
@@ -912,7 +1001,7 @@ static int compute_generation_numbers(git_vector *commits)
|
|
912
1001
|
}
|
913
1002
|
|
914
1003
|
cleanup:
|
915
|
-
|
1004
|
+
git_commit_graph_oidmap_dispose(&packed_commit_map);
|
916
1005
|
git__free(commit_states);
|
917
1006
|
git_array_clear(index_stack);
|
918
1007
|
|
@@ -966,9 +1055,12 @@ static int commit_graph_write_hash(const char *buf, size_t size, void *data)
|
|
966
1055
|
struct commit_graph_write_hash_context *ctx = data;
|
967
1056
|
int error;
|
968
1057
|
|
969
|
-
|
970
|
-
|
971
|
-
|
1058
|
+
if (ctx->ctx) {
|
1059
|
+
error = git_hash_update(ctx->ctx, buf, size);
|
1060
|
+
|
1061
|
+
if (error < 0)
|
1062
|
+
return error;
|
1063
|
+
}
|
972
1064
|
|
973
1065
|
return ctx->write_cb(buf, size, ctx->cb_data);
|
974
1066
|
}
|
@@ -979,9 +1071,9 @@ static void packed_commit_free_dup(void *packed_commit)
|
|
979
1071
|
}
|
980
1072
|
|
981
1073
|
static int commit_graph_write(
|
982
|
-
|
983
|
-
|
984
|
-
|
1074
|
+
git_commit_graph_writer *w,
|
1075
|
+
commit_graph_write_cb write_cb,
|
1076
|
+
void *cb_data)
|
985
1077
|
{
|
986
1078
|
int error = 0;
|
987
1079
|
size_t i;
|
@@ -993,8 +1085,9 @@ static int commit_graph_write(
|
|
993
1085
|
off64_t offset;
|
994
1086
|
git_str oid_lookup = GIT_STR_INIT, commit_data = GIT_STR_INIT,
|
995
1087
|
extra_edge_list = GIT_STR_INIT;
|
996
|
-
unsigned char checksum[
|
997
|
-
|
1088
|
+
unsigned char checksum[GIT_HASH_MAX_SIZE];
|
1089
|
+
git_hash_algorithm_t checksum_type;
|
1090
|
+
size_t checksum_size, oid_size;
|
998
1091
|
git_hash_ctx ctx;
|
999
1092
|
struct commit_graph_write_hash_context hash_cb_data = {0};
|
1000
1093
|
|
@@ -1007,8 +1100,11 @@ static int commit_graph_write(
|
|
1007
1100
|
hash_cb_data.cb_data = cb_data;
|
1008
1101
|
hash_cb_data.ctx = &ctx;
|
1009
1102
|
|
1010
|
-
|
1011
|
-
|
1103
|
+
oid_size = git_oid_size(w->oid_type);
|
1104
|
+
checksum_type = git_oid_algorithm(w->oid_type);
|
1105
|
+
checksum_size = git_hash_size(checksum_type);
|
1106
|
+
|
1107
|
+
error = git_hash_ctx_init(&ctx, checksum_type);
|
1012
1108
|
if (error < 0)
|
1013
1109
|
return error;
|
1014
1110
|
cb_data = &hash_cb_data;
|
@@ -1035,7 +1131,7 @@ static int commit_graph_write(
|
|
1035
1131
|
git_vector_foreach (&w->commits, i, packed_commit) {
|
1036
1132
|
error = git_str_put(&oid_lookup,
|
1037
1133
|
(const char *)&packed_commit->sha1.id,
|
1038
|
-
|
1134
|
+
oid_size);
|
1039
1135
|
|
1040
1136
|
if (error < 0)
|
1041
1137
|
goto cleanup;
|
@@ -1052,7 +1148,7 @@ static int commit_graph_write(
|
|
1052
1148
|
|
1053
1149
|
error = git_str_put(&commit_data,
|
1054
1150
|
(const char *)&packed_commit->tree_oid.id,
|
1055
|
-
|
1151
|
+
oid_size);
|
1056
1152
|
|
1057
1153
|
if (error < 0)
|
1058
1154
|
goto cleanup;
|
@@ -1160,6 +1256,9 @@ static int commit_graph_write(
|
|
1160
1256
|
error = git_hash_final(checksum, &ctx);
|
1161
1257
|
if (error < 0)
|
1162
1258
|
goto cleanup;
|
1259
|
+
|
1260
|
+
hash_cb_data.ctx = NULL;
|
1261
|
+
|
1163
1262
|
error = write_cb((char *)checksum, checksum_size, cb_data);
|
1164
1263
|
if (error < 0)
|
1165
1264
|
goto cleanup;
|
@@ -1178,30 +1277,13 @@ static int commit_graph_write_filebuf(const char *buf, size_t size, void *data)
|
|
1178
1277
|
return git_filebuf_write(f, buf, size);
|
1179
1278
|
}
|
1180
1279
|
|
1181
|
-
int
|
1182
|
-
git_commit_graph_writer_options *opts,
|
1183
|
-
unsigned int version)
|
1184
|
-
{
|
1185
|
-
GIT_INIT_STRUCTURE_FROM_TEMPLATE(
|
1186
|
-
opts,
|
1187
|
-
version,
|
1188
|
-
git_commit_graph_writer_options,
|
1189
|
-
GIT_COMMIT_GRAPH_WRITER_OPTIONS_INIT);
|
1190
|
-
return 0;
|
1191
|
-
}
|
1192
|
-
|
1193
|
-
int git_commit_graph_writer_commit(
|
1194
|
-
git_commit_graph_writer *w,
|
1195
|
-
git_commit_graph_writer_options *opts)
|
1280
|
+
int git_commit_graph_writer_commit(git_commit_graph_writer *w)
|
1196
1281
|
{
|
1197
1282
|
int error;
|
1198
1283
|
int filebuf_flags = GIT_FILEBUF_DO_NOT_BUFFER;
|
1199
1284
|
git_str commit_graph_path = GIT_STR_INIT;
|
1200
1285
|
git_filebuf output = GIT_FILEBUF_INIT;
|
1201
1286
|
|
1202
|
-
/* TODO: support options and fill in defaults. */
|
1203
|
-
GIT_UNUSED(opts);
|
1204
|
-
|
1205
1287
|
error = git_str_joinpath(
|
1206
1288
|
&commit_graph_path, git_str_cstr(&w->objects_info_dir), "commit-graph");
|
1207
1289
|
if (error < 0)
|
@@ -1225,18 +1307,14 @@ int git_commit_graph_writer_commit(
|
|
1225
1307
|
|
1226
1308
|
int git_commit_graph_writer_dump(
|
1227
1309
|
git_buf *cgraph,
|
1228
|
-
git_commit_graph_writer *w
|
1229
|
-
git_commit_graph_writer_options *opts)
|
1310
|
+
git_commit_graph_writer *w)
|
1230
1311
|
{
|
1231
|
-
GIT_BUF_WRAP_PRIVATE(cgraph, git_commit_graph__writer_dump, w
|
1312
|
+
GIT_BUF_WRAP_PRIVATE(cgraph, git_commit_graph__writer_dump, w);
|
1232
1313
|
}
|
1233
1314
|
|
1234
1315
|
int git_commit_graph__writer_dump(
|
1235
1316
|
git_str *cgraph,
|
1236
|
-
git_commit_graph_writer *w
|
1237
|
-
git_commit_graph_writer_options *opts)
|
1317
|
+
git_commit_graph_writer *w)
|
1238
1318
|
{
|
1239
|
-
/* TODO: support options. */
|
1240
|
-
GIT_UNUSED(opts);
|
1241
1319
|
return commit_graph_write(w, commit_graph_write_buf, cgraph);
|
1242
1320
|
}
|
@@ -30,6 +30,9 @@
|
|
30
30
|
typedef struct git_commit_graph_file {
|
31
31
|
git_map graph_map;
|
32
32
|
|
33
|
+
/* The type of object IDs in the commit graph file. */
|
34
|
+
git_oid_t oid_type;
|
35
|
+
|
33
36
|
/* The OID Fanout table. */
|
34
37
|
const uint32_t *oid_fanout;
|
35
38
|
/* The total number of commits in the graph. */
|
@@ -84,10 +87,10 @@ typedef struct git_commit_graph_entry {
|
|
84
87
|
/* The index within the Extra Edge List of any parent after the first two. */
|
85
88
|
size_t extra_parents_index;
|
86
89
|
|
87
|
-
/* The
|
90
|
+
/* The object ID of the root tree of the commit. */
|
88
91
|
git_oid tree_oid;
|
89
92
|
|
90
|
-
/* The
|
93
|
+
/* The object ID hash of the requested commit. */
|
91
94
|
git_oid sha1;
|
92
95
|
} git_commit_graph_entry;
|
93
96
|
|
@@ -99,18 +102,28 @@ struct git_commit_graph {
|
|
99
102
|
/* The underlying commit-graph file. */
|
100
103
|
git_commit_graph_file *file;
|
101
104
|
|
105
|
+
/* The object ID types in the commit graph. */
|
106
|
+
git_oid_t oid_type;
|
107
|
+
|
102
108
|
/* Whether the commit-graph file was already checked for validity. */
|
103
109
|
bool checked;
|
104
110
|
};
|
105
111
|
|
106
112
|
/** Create a new commit-graph, optionally opening the underlying file. */
|
107
|
-
int git_commit_graph_new(
|
113
|
+
int git_commit_graph_new(
|
114
|
+
git_commit_graph **cgraph_out,
|
115
|
+
const char *objects_dir,
|
116
|
+
bool open_file,
|
117
|
+
git_oid_t oid_type);
|
108
118
|
|
109
119
|
/** Validate the checksum of a commit graph */
|
110
120
|
int git_commit_graph_validate(git_commit_graph *cgraph);
|
111
121
|
|
112
122
|
/** Open and validate a commit-graph file. */
|
113
|
-
int git_commit_graph_file_open(
|
123
|
+
int git_commit_graph_file_open(
|
124
|
+
git_commit_graph_file **file_out,
|
125
|
+
const char *path,
|
126
|
+
git_oid_t oid_type);
|
114
127
|
|
115
128
|
/*
|
116
129
|
* Attempt to get the git_commit_graph's commit-graph file. This object is
|
@@ -134,14 +147,16 @@ struct git_commit_graph_writer {
|
|
134
147
|
*/
|
135
148
|
git_str objects_info_dir;
|
136
149
|
|
150
|
+
/* The object ID type of the commit graph. */
|
151
|
+
git_oid_t oid_type;
|
152
|
+
|
137
153
|
/* The list of packed commits. */
|
138
154
|
git_vector commits;
|
139
155
|
};
|
140
156
|
|
141
157
|
int git_commit_graph__writer_dump(
|
142
158
|
git_str *cgraph,
|
143
|
-
git_commit_graph_writer *w
|
144
|
-
git_commit_graph_writer_options *opts);
|
159
|
+
git_commit_graph_writer *w);
|
145
160
|
|
146
161
|
/*
|
147
162
|
* Returns whether the git_commit_graph_file needs to be reloaded since the
|
@@ -43,13 +43,18 @@ int git_commit_list_time_cmp(const void *a, const void *b)
|
|
43
43
|
return 0;
|
44
44
|
}
|
45
45
|
|
46
|
-
git_commit_list *
|
47
|
-
{
|
46
|
+
git_commit_list *git_commit_list_create(git_commit_list_node *item, git_commit_list *next) {
|
48
47
|
git_commit_list *new_list = git__malloc(sizeof(git_commit_list));
|
49
48
|
if (new_list != NULL) {
|
50
49
|
new_list->item = item;
|
51
|
-
new_list->next =
|
50
|
+
new_list->next = next;
|
52
51
|
}
|
52
|
+
return new_list;
|
53
|
+
}
|
54
|
+
|
55
|
+
git_commit_list *git_commit_list_insert(git_commit_list_node *item, git_commit_list **list_p)
|
56
|
+
{
|
57
|
+
git_commit_list *new_list = git_commit_list_create(item, *list_p);
|
53
58
|
*list_p = new_list;
|
54
59
|
return new_list;
|
55
60
|
}
|
@@ -125,7 +130,7 @@ static int commit_quick_parse(
|
|
125
130
|
git_oid *parent_oid;
|
126
131
|
git_commit *commit;
|
127
132
|
git_commit__parse_options parse_opts = {
|
128
|
-
|
133
|
+
walk->repo->oid_type,
|
129
134
|
GIT_COMMIT_PARSE_QUICK
|
130
135
|
};
|
131
136
|
size_t i;
|
@@ -176,7 +181,9 @@ int git_commit_list_parse(git_revwalk *walk, git_commit_list_node *commit)
|
|
176
181
|
if (cgraph_file) {
|
177
182
|
git_commit_graph_entry e;
|
178
183
|
|
179
|
-
error = git_commit_graph_entry_find(&e, cgraph_file,
|
184
|
+
error = git_commit_graph_entry_find(&e, cgraph_file,
|
185
|
+
&commit->oid, git_oid_size(walk->repo->oid_type));
|
186
|
+
|
180
187
|
if (error == 0 && git__is_uint16(e.parent_count)) {
|
181
188
|
size_t i;
|
182
189
|
commit->generation = (uint32_t)e.generation;
|
@@ -49,6 +49,7 @@ git_commit_list_node *git_commit_list_alloc_node(git_revwalk *walk);
|
|
49
49
|
int git_commit_list_generation_cmp(const void *a, const void *b);
|
50
50
|
int git_commit_list_time_cmp(const void *a, const void *b);
|
51
51
|
void git_commit_list_free(git_commit_list **list_p);
|
52
|
+
git_commit_list *git_commit_list_create(git_commit_list_node *item, git_commit_list *next);
|
52
53
|
git_commit_list *git_commit_list_insert(git_commit_list_node *item, git_commit_list **list_p);
|
53
54
|
git_commit_list *git_commit_list_insert_by_date(git_commit_list_node *item, git_commit_list **list_p);
|
54
55
|
int git_commit_list_parse(git_revwalk *walk, git_commit_list_node *commit);
|