rugged 1.3.2 → 1.6.2
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/README.md +34 -2
- data/ext/rugged/extconf.rb +7 -4
- data/ext/rugged/rugged.c +16 -0
- data/ext/rugged/rugged.h +4 -0
- data/ext/rugged/rugged_blame.c +2 -0
- data/ext/rugged/rugged_blob.c +3 -0
- data/ext/rugged/rugged_commit.c +1 -0
- data/ext/rugged/rugged_config.c +9 -2
- data/ext/rugged/rugged_diff.c +1 -0
- data/ext/rugged/rugged_index.c +2 -0
- data/ext/rugged/rugged_patch.c +1 -0
- data/ext/rugged/rugged_rebase.c +1 -0
- data/ext/rugged/rugged_reference.c +1 -0
- data/ext/rugged/rugged_remote.c +28 -10
- data/ext/rugged/rugged_repo.c +7 -9
- data/ext/rugged/rugged_revwalk.c +5 -1
- data/ext/rugged/rugged_settings.c +5 -0
- data/ext/rugged/rugged_submodule.c +1 -0
- data/ext/rugged/rugged_tag.c +1 -0
- data/ext/rugged/rugged_tree.c +4 -0
- data/lib/rugged/index.rb +1 -1
- data/lib/rugged/tree.rb +5 -1
- data/lib/rugged/version.rb +1 -1
- data/vendor/libgit2/CMakeLists.txt +132 -288
- data/vendor/libgit2/COPYING +106 -19
- data/vendor/libgit2/cmake/AddCFlagIfSupported.cmake +21 -21
- data/vendor/libgit2/cmake/AddClarTest.cmake +7 -0
- data/vendor/libgit2/cmake/DefaultCFlags.cmake +154 -0
- data/vendor/libgit2/cmake/EnableWarnings.cmake +13 -13
- data/vendor/libgit2/cmake/ExperimentalFeatures.cmake +23 -0
- data/vendor/libgit2/cmake/FindCoreFoundation.cmake +13 -13
- data/vendor/libgit2/cmake/FindGSSAPI.cmake +171 -287
- data/vendor/libgit2/cmake/FindGSSFramework.cmake +13 -13
- data/vendor/libgit2/cmake/{FindHTTP_Parser.cmake → FindHTTPParser.cmake} +17 -17
- data/vendor/libgit2/cmake/FindIconv.cmake +27 -27
- data/vendor/libgit2/cmake/FindLibSSH2.cmake +5 -5
- data/vendor/libgit2/cmake/FindPCRE.cmake +12 -13
- data/vendor/libgit2/cmake/FindPCRE2.cmake +12 -12
- data/vendor/libgit2/cmake/FindPkgLibraries.cmake +19 -19
- data/vendor/libgit2/cmake/FindSecurity.cmake +14 -14
- data/vendor/libgit2/cmake/FindStatNsec.cmake +12 -18
- data/vendor/libgit2/cmake/Findfutimens.cmake +8 -8
- data/vendor/libgit2/cmake/FindmbedTLS.cmake +63 -70
- data/vendor/libgit2/cmake/IdeSplitSources.cmake +18 -18
- data/vendor/libgit2/cmake/PkgBuildConfig.cmake +60 -60
- data/vendor/libgit2/cmake/SanitizeBool.cmake +20 -20
- data/vendor/libgit2/cmake/SelectGSSAPI.cmake +37 -37
- data/vendor/libgit2/cmake/SelectHTTPParser.cmake +19 -0
- data/vendor/libgit2/cmake/SelectHTTPSBackend.cmake +100 -100
- data/vendor/libgit2/cmake/SelectHashes.cmake +91 -53
- data/vendor/libgit2/cmake/SelectRegex.cmake +51 -0
- data/vendor/libgit2/cmake/SelectSSH.cmake +41 -0
- data/vendor/libgit2/cmake/SelectWinHTTP.cmake +17 -0
- data/vendor/libgit2/cmake/SelectZlib.cmake +34 -0
- data/vendor/libgit2/deps/chromium-zlib/CMakeLists.txt +6 -6
- data/vendor/libgit2/deps/ntlmclient/CMakeLists.txt +33 -31
- data/vendor/libgit2/deps/ntlmclient/crypt_openssl.c +3 -1
- data/vendor/libgit2/deps/ntlmclient/ntlm.c +4 -4
- data/vendor/libgit2/deps/ntlmclient/ntlm.h +4 -4
- data/vendor/libgit2/deps/ntlmclient/ntlmclient.h +2 -2
- data/vendor/libgit2/deps/pcre/CMakeLists.txt +88 -88
- data/vendor/libgit2/deps/winhttp/CMakeLists.txt +14 -16
- data/vendor/libgit2/deps/zlib/adler32.c +7 -0
- data/vendor/libgit2/deps/zlib/crc32.c +975 -288
- data/vendor/libgit2/deps/zlib/crc32.h +9441 -436
- data/vendor/libgit2/deps/zlib/deflate.c +83 -31
- data/vendor/libgit2/deps/zlib/deflate.h +12 -15
- data/vendor/libgit2/deps/zlib/gzguts.h +3 -2
- data/vendor/libgit2/deps/zlib/infback.c +2 -1
- data/vendor/libgit2/deps/zlib/inffast.c +14 -14
- data/vendor/libgit2/deps/zlib/inflate.c +39 -8
- data/vendor/libgit2/deps/zlib/inflate.h +3 -2
- data/vendor/libgit2/deps/zlib/inftrees.c +3 -3
- data/vendor/libgit2/deps/zlib/trees.c +27 -48
- data/vendor/libgit2/deps/zlib/zlib.h +126 -100
- data/vendor/libgit2/deps/zlib/zutil.c +2 -2
- data/vendor/libgit2/deps/zlib/zutil.h +12 -9
- data/vendor/libgit2/include/git2/apply.h +16 -2
- data/vendor/libgit2/include/git2/attr.h +11 -2
- data/vendor/libgit2/include/git2/blame.h +4 -1
- data/vendor/libgit2/include/git2/blob.h +14 -1
- data/vendor/libgit2/include/git2/branch.h +4 -2
- data/vendor/libgit2/include/git2/buffer.h +18 -78
- data/vendor/libgit2/include/git2/cert.h +2 -2
- data/vendor/libgit2/include/git2/checkout.h +5 -2
- data/vendor/libgit2/include/git2/clone.h +3 -3
- data/vendor/libgit2/include/git2/commit.h +2 -0
- data/vendor/libgit2/include/git2/common.h +28 -7
- data/vendor/libgit2/include/git2/config.h +25 -9
- data/vendor/libgit2/include/git2/credential.h +2 -1
- data/vendor/libgit2/include/git2/credential_helpers.h +1 -0
- data/vendor/libgit2/include/git2/deprecated.h +9 -1
- data/vendor/libgit2/include/git2/describe.h +7 -2
- data/vendor/libgit2/include/git2/diff.h +18 -10
- data/vendor/libgit2/include/git2/email.h +1 -1
- data/vendor/libgit2/include/git2/errors.h +17 -3
- data/vendor/libgit2/include/git2/experimental.h +20 -0
- data/vendor/libgit2/include/git2/filter.h +7 -2
- data/vendor/libgit2/include/git2/graph.h +1 -0
- data/vendor/libgit2/include/git2/ignore.h +1 -1
- data/vendor/libgit2/include/git2/index.h +11 -5
- data/vendor/libgit2/include/git2/indexer.h +48 -0
- data/vendor/libgit2/include/git2/merge.h +24 -4
- data/vendor/libgit2/include/git2/message.h +2 -0
- data/vendor/libgit2/include/git2/object.h +49 -0
- data/vendor/libgit2/include/git2/odb.h +94 -13
- data/vendor/libgit2/include/git2/odb_backend.h +107 -19
- data/vendor/libgit2/include/git2/oid.h +115 -15
- data/vendor/libgit2/include/git2/pack.h +24 -8
- data/vendor/libgit2/include/git2/patch.h +8 -0
- data/vendor/libgit2/include/git2/pathspec.h +1 -1
- data/vendor/libgit2/include/git2/proxy.h +1 -1
- data/vendor/libgit2/include/git2/rebase.h +9 -1
- data/vendor/libgit2/include/git2/refdb.h +3 -0
- data/vendor/libgit2/include/git2/reflog.h +1 -1
- data/vendor/libgit2/include/git2/refs.h +2 -2
- data/vendor/libgit2/include/git2/remote.h +184 -37
- data/vendor/libgit2/include/git2/repository.h +34 -10
- data/vendor/libgit2/include/git2/reset.h +2 -2
- data/vendor/libgit2/include/git2/revparse.h +1 -1
- data/vendor/libgit2/include/git2/revwalk.h +4 -1
- data/vendor/libgit2/include/git2/signature.h +1 -1
- data/vendor/libgit2/include/git2/stash.h +61 -7
- data/vendor/libgit2/include/git2/status.h +14 -5
- data/vendor/libgit2/include/git2/strarray.h +0 -13
- data/vendor/libgit2/include/git2/submodule.h +7 -2
- data/vendor/libgit2/include/git2/sys/commit_graph.h +1 -1
- data/vendor/libgit2/include/git2/sys/odb_backend.h +3 -6
- data/vendor/libgit2/include/git2/sys/remote.h +46 -0
- data/vendor/libgit2/include/git2/sys/stream.h +1 -1
- data/vendor/libgit2/include/git2/sys/transport.h +46 -39
- data/vendor/libgit2/include/git2/tag.h +1 -0
- data/vendor/libgit2/include/git2/tree.h +4 -3
- data/vendor/libgit2/include/git2/types.h +7 -7
- data/vendor/libgit2/include/git2/version.h +27 -6
- data/vendor/libgit2/include/git2/worktree.h +12 -2
- data/vendor/libgit2/include/git2.h +1 -0
- data/vendor/libgit2/src/CMakeLists.txt +177 -419
- data/vendor/libgit2/src/README.md +12 -0
- data/vendor/libgit2/src/cli/CMakeLists.txt +57 -0
- data/vendor/libgit2/src/cli/README.md +26 -0
- data/vendor/libgit2/src/cli/cli.h +20 -0
- data/vendor/libgit2/src/cli/cmd.c +21 -0
- data/vendor/libgit2/src/cli/cmd.h +33 -0
- data/vendor/libgit2/src/cli/cmd_cat_file.c +204 -0
- data/vendor/libgit2/src/cli/cmd_clone.c +176 -0
- data/vendor/libgit2/src/cli/cmd_hash_object.c +154 -0
- data/vendor/libgit2/src/cli/cmd_help.c +86 -0
- data/vendor/libgit2/src/cli/error.h +51 -0
- data/vendor/libgit2/src/cli/main.c +106 -0
- data/vendor/libgit2/src/cli/opt.c +669 -0
- data/vendor/libgit2/src/cli/opt.h +349 -0
- data/vendor/libgit2/src/cli/opt_usage.c +194 -0
- data/vendor/libgit2/src/cli/opt_usage.h +35 -0
- data/vendor/libgit2/src/cli/progress.c +345 -0
- data/vendor/libgit2/src/cli/progress.h +117 -0
- data/vendor/libgit2/src/cli/sighandler.h +20 -0
- data/vendor/libgit2/src/cli/unix/sighandler.c +36 -0
- data/vendor/libgit2/src/cli/win32/precompiled.h +3 -0
- data/vendor/libgit2/src/cli/win32/sighandler.c +37 -0
- data/vendor/libgit2/src/libgit2/CMakeLists.txt +141 -0
- data/vendor/libgit2/src/{annotated_commit.c → libgit2/annotated_commit.c} +1 -1
- data/vendor/libgit2/src/{annotated_commit.h → libgit2/annotated_commit.h} +2 -2
- data/vendor/libgit2/src/{apply.c → libgit2/apply.c} +18 -18
- data/vendor/libgit2/src/{apply.h → libgit2/apply.h} +2 -2
- data/vendor/libgit2/src/{attr.c → libgit2/attr.c} +18 -18
- data/vendor/libgit2/src/{attr_file.c → libgit2/attr_file.c} +18 -18
- data/vendor/libgit2/src/{attr_file.h → libgit2/attr_file.h} +4 -4
- data/vendor/libgit2/src/{attrcache.c → libgit2/attrcache.c} +18 -13
- data/vendor/libgit2/src/{blame.c → libgit2/blame.c} +2 -0
- data/vendor/libgit2/src/{blame_git.c → libgit2/blame_git.c} +1 -1
- data/vendor/libgit2/src/{blob.c → libgit2/blob.c} +38 -29
- data/vendor/libgit2/src/{blob.h → libgit2/blob.h} +3 -3
- data/vendor/libgit2/src/{branch.c → libgit2/branch.c} +164 -118
- data/vendor/libgit2/src/{branch.h → libgit2/branch.h} +15 -3
- data/vendor/libgit2/src/libgit2/buf.c +126 -0
- data/vendor/libgit2/src/libgit2/buf.h +50 -0
- data/vendor/libgit2/src/{checkout.c → libgit2/checkout.c} +74 -68
- data/vendor/libgit2/src/{cherrypick.c → libgit2/cherrypick.c} +13 -13
- data/vendor/libgit2/src/{clone.c → libgit2/clone.c} +96 -67
- data/vendor/libgit2/src/{commit.c → libgit2/commit.c} +178 -73
- data/vendor/libgit2/src/libgit2/commit.h +87 -0
- data/vendor/libgit2/src/{commit_graph.c → libgit2/commit_graph.c} +122 -89
- data/vendor/libgit2/src/{commit_graph.h → libgit2/commit_graph.h} +14 -4
- data/vendor/libgit2/src/{commit_list.c → libgit2/commit_list.c} +7 -4
- data/vendor/libgit2/src/libgit2/common.h +55 -0
- data/vendor/libgit2/src/{config.c → libgit2/config.c} +101 -69
- data/vendor/libgit2/src/{config.h → libgit2/config.h} +15 -2
- data/vendor/libgit2/src/{config_file.c → libgit2/config_file.c} +105 -93
- data/vendor/libgit2/src/{config_mem.c → libgit2/config_mem.c} +9 -9
- data/vendor/libgit2/src/{config_parse.c → libgit2/config_parse.c} +27 -23
- data/vendor/libgit2/src/{crlf.c → libgit2/crlf.c} +24 -21
- data/vendor/libgit2/src/{describe.c → libgit2/describe.c} +35 -27
- data/vendor/libgit2/src/{diff.c → libgit2/diff.c} +30 -9
- data/vendor/libgit2/src/{diff.h → libgit2/diff.h} +2 -4
- data/vendor/libgit2/src/{diff_driver.c → libgit2/diff_driver.c} +34 -36
- data/vendor/libgit2/src/{diff_driver.h → libgit2/diff_driver.h} +3 -3
- data/vendor/libgit2/src/{diff_file.c → libgit2/diff_file.c} +44 -26
- data/vendor/libgit2/src/{diff_generate.c → libgit2/diff_generate.c} +47 -18
- data/vendor/libgit2/src/{diff_generate.h → libgit2/diff_generate.h} +5 -3
- data/vendor/libgit2/src/{diff_print.c → libgit2/diff_print.c} +112 -100
- data/vendor/libgit2/src/{diff_stats.c → libgit2/diff_stats.c} +40 -29
- data/vendor/libgit2/src/libgit2/diff_stats.h +18 -0
- data/vendor/libgit2/src/{diff_tform.c → libgit2/diff_tform.c} +13 -8
- data/vendor/libgit2/src/{diff_xdiff.c → libgit2/diff_xdiff.c} +4 -8
- data/vendor/libgit2/src/{email.c → libgit2/email.c} +55 -39
- data/vendor/libgit2/src/{email.h → libgit2/email.h} +1 -1
- data/vendor/libgit2/src/{errors.c → libgit2/errors.c} +18 -18
- data/vendor/libgit2/src/{errors.h → libgit2/errors.h} +1 -2
- data/vendor/libgit2/src/libgit2/experimental.h.in +13 -0
- data/vendor/libgit2/src/{fetch.c → libgit2/fetch.c} +72 -27
- data/vendor/libgit2/src/{fetch.h → libgit2/fetch.h} +1 -1
- data/vendor/libgit2/src/{fetchhead.c → libgit2/fetchhead.c} +23 -23
- data/vendor/libgit2/src/{filter.c → libgit2/filter.c} +127 -53
- data/vendor/libgit2/src/{filter.h → libgit2/filter.h} +26 -5
- data/vendor/libgit2/src/{ident.c → libgit2/ident.c} +20 -20
- data/vendor/libgit2/src/{ignore.c → libgit2/ignore.c} +35 -34
- data/vendor/libgit2/src/{ignore.h → libgit2/ignore.h} +2 -2
- data/vendor/libgit2/src/{index.c → libgit2/index.c} +91 -90
- data/vendor/libgit2/src/{index.h → libgit2/index.h} +6 -3
- data/vendor/libgit2/src/{indexer.c → libgit2/indexer.c} +173 -92
- data/vendor/libgit2/src/{iterator.c → libgit2/iterator.c} +71 -61
- data/vendor/libgit2/src/{iterator.h → libgit2/iterator.h} +5 -5
- data/vendor/libgit2/src/{libgit2.c → libgit2/libgit2.c} +46 -11
- data/vendor/libgit2/src/{mailmap.c → libgit2/mailmap.c} +38 -36
- data/vendor/libgit2/src/{merge.c → libgit2/merge.c} +30 -30
- data/vendor/libgit2/src/{merge.h → libgit2/merge.h} +1 -14
- data/vendor/libgit2/src/{merge_driver.c → libgit2/merge_driver.c} +2 -2
- data/vendor/libgit2/src/{merge_file.c → libgit2/merge_file.c} +13 -3
- data/vendor/libgit2/src/{message.c → libgit2/message.c} +21 -10
- data/vendor/libgit2/src/{midx.c → libgit2/midx.c} +112 -92
- data/vendor/libgit2/src/{midx.h → libgit2/midx.h} +5 -4
- data/vendor/libgit2/src/{mwindow.c → libgit2/mwindow.c} +15 -12
- data/vendor/libgit2/src/{mwindow.h → libgit2/mwindow.h} +5 -2
- data/vendor/libgit2/src/{netops.c → libgit2/netops.c} +1 -2
- data/vendor/libgit2/src/{netops.h → libgit2/netops.h} +1 -1
- data/vendor/libgit2/src/{notes.c → libgit2/notes.c} +25 -34
- data/vendor/libgit2/src/{object.c → libgit2/object.c} +135 -30
- data/vendor/libgit2/src/{object.h → libgit2/object.h} +12 -3
- data/vendor/libgit2/src/{odb.c → libgit2/odb.c} +228 -81
- data/vendor/libgit2/src/{odb.h → libgit2/odb.h} +44 -5
- data/vendor/libgit2/src/{odb_loose.c → libgit2/odb_loose.c} +192 -134
- data/vendor/libgit2/src/{odb_mempack.c → libgit2/odb_mempack.c} +18 -5
- data/vendor/libgit2/src/{odb_pack.c → libgit2/odb_pack.c} +137 -85
- data/vendor/libgit2/src/{oid.c → libgit2/oid.c} +136 -90
- data/vendor/libgit2/src/libgit2/oid.h +273 -0
- data/vendor/libgit2/src/{oidmap.c → libgit2/oidmap.c} +1 -1
- data/vendor/libgit2/src/{pack-objects.c → libgit2/pack-objects.c} +56 -30
- data/vendor/libgit2/src/{pack-objects.h → libgit2/pack-objects.h} +11 -6
- data/vendor/libgit2/src/{pack.c → libgit2/pack.c} +114 -84
- data/vendor/libgit2/src/{pack.h → libgit2/pack.h} +31 -16
- data/vendor/libgit2/src/{parse.c → libgit2/parse.c} +4 -3
- data/vendor/libgit2/src/{patch.c → libgit2/patch.c} +3 -3
- data/vendor/libgit2/src/{patch.h → libgit2/patch.h} +1 -0
- data/vendor/libgit2/src/{patch_generate.c → libgit2/patch_generate.c} +27 -11
- data/vendor/libgit2/src/{patch_generate.h → libgit2/patch_generate.h} +5 -5
- data/vendor/libgit2/src/{patch_parse.c → libgit2/patch_parse.c} +29 -29
- data/vendor/libgit2/src/libgit2/path.c +375 -0
- data/vendor/libgit2/src/libgit2/path.h +68 -0
- data/vendor/libgit2/src/{pathspec.c → libgit2/pathspec.c} +6 -6
- data/vendor/libgit2/src/{pathspec.h → libgit2/pathspec.h} +2 -2
- data/vendor/libgit2/src/{proxy.c → libgit2/proxy.c} +4 -1
- data/vendor/libgit2/src/{proxy.h → libgit2/proxy.h} +1 -1
- data/vendor/libgit2/src/{push.c → libgit2/push.c} +43 -38
- data/vendor/libgit2/src/{push.h → libgit2/push.h} +4 -16
- data/vendor/libgit2/src/{reader.c → libgit2/reader.c} +9 -9
- data/vendor/libgit2/src/{reader.h → libgit2/reader.h} +2 -2
- data/vendor/libgit2/src/{rebase.c → libgit2/rebase.c} +119 -107
- data/vendor/libgit2/src/{refdb_fs.c → libgit2/refdb_fs.c} +506 -197
- data/vendor/libgit2/src/{reflog.c → libgit2/reflog.c} +7 -5
- data/vendor/libgit2/src/{reflog.h → libgit2/reflog.h} +1 -2
- data/vendor/libgit2/src/{refs.c → libgit2/refs.c} +34 -32
- data/vendor/libgit2/src/{refs.h → libgit2/refs.h} +2 -2
- data/vendor/libgit2/src/{refspec.c → libgit2/refspec.c} +32 -37
- data/vendor/libgit2/src/{refspec.h → libgit2/refspec.h} +5 -2
- data/vendor/libgit2/src/{remote.c → libgit2/remote.c} +718 -420
- data/vendor/libgit2/src/libgit2/remote.h +100 -0
- data/vendor/libgit2/src/{repository.c → libgit2/repository.c} +629 -386
- data/vendor/libgit2/src/{repository.h → libgit2/repository.h} +20 -9
- data/vendor/libgit2/src/{reset.c → libgit2/reset.c} +8 -5
- data/vendor/libgit2/src/{revert.c → libgit2/revert.c} +14 -14
- data/vendor/libgit2/src/{revparse.c → libgit2/revparse.c} +71 -42
- data/vendor/libgit2/src/{revwalk.c → libgit2/revwalk.c} +12 -8
- data/vendor/libgit2/src/{signature.c → libgit2/signature.c} +12 -6
- data/vendor/libgit2/src/{signature.h → libgit2/signature.h} +1 -1
- data/vendor/libgit2/src/{stash.c → libgit2/stash.c} +235 -61
- data/vendor/libgit2/src/{status.c → libgit2/status.c} +4 -1
- data/vendor/libgit2/src/{strarray.c → libgit2/strarray.c} +1 -0
- data/vendor/libgit2/src/libgit2/strarray.h +25 -0
- data/vendor/libgit2/src/{streams → libgit2/streams}/mbedtls.c +8 -6
- data/vendor/libgit2/src/{streams → libgit2/streams}/openssl.c +1 -1
- data/vendor/libgit2/src/{streams → libgit2/streams}/openssl_dynamic.c +7 -3
- data/vendor/libgit2/src/{streams → libgit2/streams}/openssl_dynamic.h +3 -3
- data/vendor/libgit2/src/{streams → libgit2/streams}/socket.c +4 -1
- data/vendor/libgit2/src/{submodule.c → libgit2/submodule.c} +177 -161
- data/vendor/libgit2/src/{submodule.h → libgit2/submodule.h} +1 -1
- data/vendor/libgit2/src/libgit2/sysdir.c +650 -0
- data/vendor/libgit2/src/{sysdir.h → libgit2/sysdir.h} +53 -18
- data/vendor/libgit2/src/{tag.c → libgit2/tag.c} +73 -42
- data/vendor/libgit2/src/{tag.h → libgit2/tag.h} +2 -2
- data/vendor/libgit2/src/{threadstate.c → libgit2/threadstate.c} +3 -3
- data/vendor/libgit2/src/{threadstate.h → libgit2/threadstate.h} +2 -2
- data/vendor/libgit2/src/{trace.c → libgit2/trace.c} +1 -14
- data/vendor/libgit2/src/{trace.h → libgit2/trace.h} +5 -22
- data/vendor/libgit2/src/{trailer.c → libgit2/trailer.c} +1 -1
- data/vendor/libgit2/src/{transaction.c → libgit2/transaction.c} +1 -1
- data/vendor/libgit2/src/{transport.c → libgit2/transport.c} +10 -10
- data/vendor/libgit2/src/{transports → libgit2/transports}/auth.c +7 -9
- data/vendor/libgit2/src/{transports → libgit2/transports}/auth.h +2 -3
- data/vendor/libgit2/src/{transports → libgit2/transports}/auth_negotiate.c +12 -13
- data/vendor/libgit2/src/{transports → libgit2/transports}/auth_ntlm.c +10 -10
- data/vendor/libgit2/src/{transports → libgit2/transports}/auth_ntlm.h +0 -1
- data/vendor/libgit2/src/{transports → libgit2/transports}/git.c +9 -11
- data/vendor/libgit2/src/{transports → libgit2/transports}/http.c +41 -20
- data/vendor/libgit2/src/{transports → libgit2/transports}/http.h +2 -3
- data/vendor/libgit2/src/{transports → libgit2/transports}/httpclient.c +75 -66
- data/vendor/libgit2/src/{transports → libgit2/transports}/httpclient.h +10 -0
- data/vendor/libgit2/src/{transports → libgit2/transports}/local.c +138 -116
- data/vendor/libgit2/src/{transports → libgit2/transports}/smart.c +92 -133
- data/vendor/libgit2/src/{transports → libgit2/transports}/smart.h +35 -32
- data/vendor/libgit2/src/{transports → libgit2/transports}/smart_pkt.c +177 -65
- data/vendor/libgit2/src/{transports → libgit2/transports}/smart_protocol.c +97 -49
- data/vendor/libgit2/src/{transports → libgit2/transports}/ssh.c +365 -198
- data/vendor/libgit2/src/{transports → libgit2/transports}/winhttp.c +58 -59
- data/vendor/libgit2/src/{tree-cache.c → libgit2/tree-cache.c} +8 -8
- data/vendor/libgit2/src/{tree-cache.h → libgit2/tree-cache.h} +2 -2
- data/vendor/libgit2/src/{tree.c → libgit2/tree.c} +93 -83
- data/vendor/libgit2/src/{tree.h → libgit2/tree.h} +4 -4
- data/vendor/libgit2/src/{worktree.c → libgit2/worktree.c} +121 -94
- data/vendor/libgit2/src/{worktree.h → libgit2/worktree.h} +1 -1
- data/vendor/libgit2/src/libgit2/xdiff/git-xdiff.h +53 -0
- data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xdiff.h +15 -15
- data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xdiffi.c +134 -108
- data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xemit.c +23 -7
- data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xhistogram.c +87 -78
- data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xinclude.h +1 -12
- data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xmerge.c +104 -117
- data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xpatience.c +6 -17
- data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xprepare.c +15 -20
- data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xutils.c +18 -7
- data/vendor/libgit2/src/util/CMakeLists.txt +80 -0
- data/vendor/libgit2/src/{allocators → util/allocators}/failalloc.h +1 -1
- data/vendor/libgit2/src/{allocators → util/allocators}/stdalloc.h +1 -1
- data/vendor/libgit2/src/{allocators → util/allocators}/win32_leakcheck.h +1 -1
- data/vendor/libgit2/src/{array.h → util/array.h} +1 -1
- data/vendor/libgit2/src/{assert_safe.h → util/assert_safe.h} +16 -0
- data/vendor/libgit2/src/{cc-compat.h → util/cc-compat.h} +1 -1
- data/vendor/libgit2/src/{date.c → util/date.c} +14 -20
- data/vendor/libgit2/src/util/date.h +33 -0
- data/vendor/libgit2/src/{filebuf.c → util/filebuf.c} +29 -29
- data/vendor/libgit2/src/{filebuf.h → util/filebuf.h} +2 -2
- data/vendor/libgit2/src/{path.c → util/fs_path.c} +453 -647
- data/vendor/libgit2/src/{path.h → util/fs_path.h} +221 -188
- data/vendor/libgit2/src/{futils.c → util/futils.c} +135 -90
- data/vendor/libgit2/src/{futils.h → util/futils.h} +28 -15
- data/vendor/libgit2/src/{features.h.in → util/git2_features.h.in} +15 -1
- data/vendor/libgit2/src/{common.h → util/git2_util.h} +20 -59
- data/vendor/libgit2/src/util/hash/builtin.c +53 -0
- data/vendor/libgit2/src/{hash/sha1/openssl.h → util/hash/builtin.h} +6 -6
- data/vendor/libgit2/src/{hash/sha1 → util/hash}/collisiondetect.c +3 -3
- data/vendor/libgit2/src/{hash/sha1 → util/hash}/collisiondetect.h +3 -3
- data/vendor/libgit2/src/util/hash/common_crypto.c +112 -0
- data/vendor/libgit2/src/{hash/sha1 → util/hash}/common_crypto.h +11 -3
- data/vendor/libgit2/src/util/hash/mbedtls.c +92 -0
- data/vendor/libgit2/src/{hash/sha1 → util/hash}/mbedtls.h +14 -4
- data/vendor/libgit2/src/util/hash/openssl.c +195 -0
- data/vendor/libgit2/src/util/hash/openssl.h +45 -0
- data/vendor/libgit2/src/util/hash/rfc6234/sha.h +243 -0
- data/vendor/libgit2/src/util/hash/rfc6234/sha224-256.c +601 -0
- data/vendor/libgit2/src/util/hash/sha.h +70 -0
- data/vendor/libgit2/src/{hash/sha1 → util/hash}/sha1dc/sha1.c +1 -1
- data/vendor/libgit2/src/util/hash/win32.c +549 -0
- data/vendor/libgit2/src/util/hash/win32.h +60 -0
- data/vendor/libgit2/src/util/hash.c +158 -0
- data/vendor/libgit2/src/util/hash.h +61 -0
- data/vendor/libgit2/src/{khash.h → util/khash.h} +1 -1
- data/vendor/libgit2/src/{map.h → util/map.h} +1 -1
- data/vendor/libgit2/src/util/net.c +1003 -0
- data/vendor/libgit2/src/{net.h → util/net.h} +18 -4
- data/vendor/libgit2/src/{pool.h → util/pool.h} +1 -1
- data/vendor/libgit2/src/{posix.c → util/posix.c} +3 -3
- data/vendor/libgit2/src/{posix.h → util/posix.h} +4 -1
- data/vendor/libgit2/src/{pqueue.h → util/pqueue.h} +2 -2
- data/vendor/libgit2/src/util/rand.c +234 -0
- data/vendor/libgit2/src/util/rand.h +37 -0
- data/vendor/libgit2/src/{regexp.c → util/regexp.c} +4 -4
- data/vendor/libgit2/src/{regexp.h → util/regexp.h} +1 -1
- data/vendor/libgit2/src/{runtime.c → util/runtime.c} +1 -1
- data/vendor/libgit2/src/{runtime.h → util/runtime.h} +1 -1
- data/vendor/libgit2/src/{sortedcache.c → util/sortedcache.c} +1 -1
- data/vendor/libgit2/src/{sortedcache.h → util/sortedcache.h} +2 -2
- data/vendor/libgit2/src/{buffer.c → util/str.c} +157 -151
- data/vendor/libgit2/src/util/str.h +357 -0
- data/vendor/libgit2/src/{strmap.h → util/strmap.h} +1 -1
- data/vendor/libgit2/src/{thread.c → util/thread.c} +1 -1
- data/vendor/libgit2/src/{thread.h → util/thread.h} +23 -22
- data/vendor/libgit2/src/{tsort.c → util/tsort.c} +1 -1
- data/vendor/libgit2/src/{unix → util/unix}/map.c +1 -3
- data/vendor/libgit2/src/{unix → util/unix}/posix.h +1 -4
- data/vendor/libgit2/src/{unix → util/unix}/realpath.c +1 -3
- data/vendor/libgit2/src/{utf8.c → util/utf8.c} +1 -1
- data/vendor/libgit2/src/{utf8.h → util/utf8.h} +1 -1
- data/vendor/libgit2/src/{util.c → util/util.c} +15 -15
- data/vendor/libgit2/src/{util.h → util/util.h} +4 -29
- data/vendor/libgit2/src/{varint.h → util/varint.h} +1 -1
- data/vendor/libgit2/src/{vector.h → util/vector.h} +2 -2
- data/vendor/libgit2/src/{wildmatch.h → util/wildmatch.h} +1 -1
- data/vendor/libgit2/src/{win32 → util/win32}/dir.h +1 -1
- data/vendor/libgit2/src/{win32 → util/win32}/error.h +1 -1
- data/vendor/libgit2/src/{win32 → util/win32}/map.c +1 -1
- data/vendor/libgit2/src/{win32 → util/win32}/path_w32.c +140 -9
- data/vendor/libgit2/src/{win32 → util/win32}/path_w32.h +3 -1
- data/vendor/libgit2/src/{win32 → util/win32}/posix.h +1 -2
- data/vendor/libgit2/src/{win32 → util/win32}/posix_w32.c +12 -28
- data/vendor/libgit2/src/util/win32/precompiled.c +1 -0
- data/vendor/libgit2/src/{win32 → util/win32}/precompiled.h +1 -1
- data/vendor/libgit2/src/{win32 → util/win32}/thread.h +1 -1
- data/vendor/libgit2/src/{win32 → util/win32}/utf-conv.h +1 -1
- data/vendor/libgit2/src/{win32 → util/win32}/w32_buffer.c +2 -3
- data/vendor/libgit2/src/{win32 → util/win32}/w32_buffer.h +3 -4
- data/vendor/libgit2/src/{win32 → util/win32}/w32_leakcheck.c +1 -1
- data/vendor/libgit2/src/{win32 → util/win32}/w32_leakcheck.h +1 -1
- data/vendor/libgit2/src/{win32 → util/win32}/w32_util.h +1 -1
- data/vendor/libgit2/src/{zstream.c → util/zstream.c} +5 -5
- data/vendor/libgit2/src/{zstream.h → util/zstream.h} +5 -5
- metadata +402 -356
- data/vendor/libgit2/src/buffer.h +0 -374
- data/vendor/libgit2/src/commit.h +0 -46
- data/vendor/libgit2/src/hash/sha1/common_crypto.c +0 -57
- data/vendor/libgit2/src/hash/sha1/generic.c +0 -300
- data/vendor/libgit2/src/hash/sha1/generic.h +0 -19
- data/vendor/libgit2/src/hash/sha1/mbedtls.c +0 -46
- data/vendor/libgit2/src/hash/sha1/openssl.c +0 -59
- data/vendor/libgit2/src/hash/sha1/win32.c +0 -333
- data/vendor/libgit2/src/hash/sha1/win32.h +0 -128
- data/vendor/libgit2/src/hash/sha1.h +0 -38
- data/vendor/libgit2/src/hash.c +0 -110
- data/vendor/libgit2/src/hash.h +0 -46
- data/vendor/libgit2/src/message.h +0 -17
- data/vendor/libgit2/src/net.c +0 -540
- data/vendor/libgit2/src/oid.h +0 -51
- data/vendor/libgit2/src/remote.h +0 -55
- data/vendor/libgit2/src/sysdir.c +0 -347
- data/vendor/libgit2/src/win32/findfile.c +0 -230
- data/vendor/libgit2/src/win32/findfile.h +0 -19
- /data/vendor/libgit2/src/{win32 → cli/win32}/precompiled.c +0 -0
- /data/vendor/libgit2/src/{attr.h → libgit2/attr.h} +0 -0
- /data/vendor/libgit2/src/{attrcache.h → libgit2/attrcache.h} +0 -0
- /data/vendor/libgit2/src/{blame.h → libgit2/blame.h} +0 -0
- /data/vendor/libgit2/src/{blame_git.h → libgit2/blame_git.h} +0 -0
- /data/vendor/libgit2/src/{cache.c → libgit2/cache.c} +0 -0
- /data/vendor/libgit2/src/{cache.h → libgit2/cache.h} +0 -0
- /data/vendor/libgit2/src/{checkout.h → libgit2/checkout.h} +0 -0
- /data/vendor/libgit2/src/{clone.h → libgit2/clone.h} +0 -0
- /data/vendor/libgit2/src/{commit_list.h → libgit2/commit_list.h} +0 -0
- /data/vendor/libgit2/src/{config_backend.h → libgit2/config_backend.h} +0 -0
- /data/vendor/libgit2/src/{config_cache.c → libgit2/config_cache.c} +0 -0
- /data/vendor/libgit2/src/{config_entries.c → libgit2/config_entries.c} +0 -0
- /data/vendor/libgit2/src/{config_entries.h → libgit2/config_entries.h} +0 -0
- /data/vendor/libgit2/src/{config_parse.h → libgit2/config_parse.h} +0 -0
- /data/vendor/libgit2/src/{config_snapshot.c → libgit2/config_snapshot.c} +0 -0
- /data/vendor/libgit2/src/{delta.c → libgit2/delta.c} +0 -0
- /data/vendor/libgit2/src/{delta.h → libgit2/delta.h} +0 -0
- /data/vendor/libgit2/src/{diff_file.h → libgit2/diff_file.h} +0 -0
- /data/vendor/libgit2/src/{diff_parse.c → libgit2/diff_parse.c} +0 -0
- /data/vendor/libgit2/src/{diff_parse.h → libgit2/diff_parse.h} +0 -0
- /data/vendor/libgit2/src/{diff_tform.h → libgit2/diff_tform.h} +0 -0
- /data/vendor/libgit2/src/{diff_xdiff.h → libgit2/diff_xdiff.h} +0 -0
- /data/vendor/libgit2/src/{fetchhead.h → libgit2/fetchhead.h} +0 -0
- /data/vendor/libgit2/src/{win32 → libgit2}/git2.rc +0 -0
- /data/vendor/libgit2/src/{graph.c → libgit2/graph.c} +0 -0
- /data/vendor/libgit2/src/{hashsig.c → libgit2/hashsig.c} +0 -0
- /data/vendor/libgit2/src/{idxmap.c → libgit2/idxmap.c} +0 -0
- /data/vendor/libgit2/src/{idxmap.h → libgit2/idxmap.h} +0 -0
- /data/vendor/libgit2/src/{indexer.h → libgit2/indexer.h} +0 -0
- /data/vendor/libgit2/src/{libgit2.h → libgit2/libgit2.h} +0 -0
- /data/vendor/libgit2/src/{mailmap.h → libgit2/mailmap.h} +0 -0
- /data/vendor/libgit2/src/{merge_driver.h → libgit2/merge_driver.h} +0 -0
- /data/vendor/libgit2/src/{notes.h → libgit2/notes.h} +0 -0
- /data/vendor/libgit2/src/{object_api.c → libgit2/object_api.c} +0 -0
- /data/vendor/libgit2/src/{offmap.c → libgit2/offmap.c} +0 -0
- /data/vendor/libgit2/src/{offmap.h → libgit2/offmap.h} +0 -0
- /data/vendor/libgit2/src/{oidarray.c → libgit2/oidarray.c} +0 -0
- /data/vendor/libgit2/src/{oidarray.h → libgit2/oidarray.h} +0 -0
- /data/vendor/libgit2/src/{oidmap.h → libgit2/oidmap.h} +0 -0
- /data/vendor/libgit2/src/{parse.h → libgit2/parse.h} +0 -0
- /data/vendor/libgit2/src/{patch_parse.h → libgit2/patch_parse.h} +0 -0
- /data/vendor/libgit2/src/{refdb.c → libgit2/refdb.c} +0 -0
- /data/vendor/libgit2/src/{refdb.h → libgit2/refdb.h} +0 -0
- /data/vendor/libgit2/src/{repo_template.h → libgit2/repo_template.h} +0 -0
- /data/vendor/libgit2/src/{revwalk.h → libgit2/revwalk.h} +0 -0
- /data/vendor/libgit2/src/{settings.h → libgit2/settings.h} +0 -0
- /data/vendor/libgit2/src/{status.h → libgit2/status.h} +0 -0
- /data/vendor/libgit2/src/{stream.h → libgit2/stream.h} +0 -0
- /data/vendor/libgit2/src/{streams → libgit2/streams}/mbedtls.h +0 -0
- /data/vendor/libgit2/src/{streams → libgit2/streams}/openssl.h +0 -0
- /data/vendor/libgit2/src/{streams → libgit2/streams}/openssl_legacy.c +0 -0
- /data/vendor/libgit2/src/{streams → libgit2/streams}/openssl_legacy.h +0 -0
- /data/vendor/libgit2/src/{streams → libgit2/streams}/registry.c +0 -0
- /data/vendor/libgit2/src/{streams → libgit2/streams}/registry.h +0 -0
- /data/vendor/libgit2/src/{streams → libgit2/streams}/socket.h +0 -0
- /data/vendor/libgit2/src/{streams → libgit2/streams}/stransport.c +0 -0
- /data/vendor/libgit2/src/{streams → libgit2/streams}/stransport.h +0 -0
- /data/vendor/libgit2/src/{streams → libgit2/streams}/tls.c +0 -0
- /data/vendor/libgit2/src/{streams → libgit2/streams}/tls.h +0 -0
- /data/vendor/libgit2/src/{transaction.h → libgit2/transaction.h} +0 -0
- /data/vendor/libgit2/src/{transports → libgit2/transports}/auth_negotiate.h +0 -0
- /data/vendor/libgit2/src/{transports → libgit2/transports}/credential.c +0 -0
- /data/vendor/libgit2/src/{transports → libgit2/transports}/credential_helpers.c +0 -0
- /data/vendor/libgit2/src/{transports → libgit2/transports}/ssh.h +0 -0
- /data/vendor/libgit2/src/{userdiff.h → libgit2/userdiff.h} +0 -0
- /data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xdiffi.h +0 -0
- /data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xemit.h +0 -0
- /data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xmacros.h +0 -0
- /data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xprepare.h +0 -0
- /data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xtypes.h +0 -0
- /data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xutils.h +0 -0
- /data/vendor/libgit2/src/{alloc.c → util/alloc.c} +0 -0
- /data/vendor/libgit2/src/{alloc.h → util/alloc.h} +0 -0
- /data/vendor/libgit2/src/{allocators → util/allocators}/failalloc.c +0 -0
- /data/vendor/libgit2/src/{allocators → util/allocators}/stdalloc.c +0 -0
- /data/vendor/libgit2/src/{allocators → util/allocators}/win32_leakcheck.c +0 -0
- /data/vendor/libgit2/src/{bitvec.h → util/bitvec.h} +0 -0
- /data/vendor/libgit2/src/{hash/sha1 → util/hash}/sha1dc/sha1.h +0 -0
- /data/vendor/libgit2/src/{hash/sha1 → util/hash}/sha1dc/ubc_check.c +0 -0
- /data/vendor/libgit2/src/{hash/sha1 → util/hash}/sha1dc/ubc_check.h +0 -0
- /data/vendor/libgit2/src/{integer.h → util/integer.h} +0 -0
- /data/vendor/libgit2/src/{pool.c → util/pool.c} +0 -0
- /data/vendor/libgit2/src/{pqueue.c → util/pqueue.c} +0 -0
- /data/vendor/libgit2/src/{strmap.c → util/strmap.c} +0 -0
- /data/vendor/libgit2/src/{strnlen.h → util/strnlen.h} +0 -0
- /data/vendor/libgit2/src/{unix → util/unix}/pthread.h +0 -0
- /data/vendor/libgit2/src/{varint.c → util/varint.c} +0 -0
- /data/vendor/libgit2/src/{vector.c → util/vector.c} +0 -0
- /data/vendor/libgit2/src/{wildmatch.c → util/wildmatch.c} +0 -0
- /data/vendor/libgit2/src/{win32 → util/win32}/dir.c +0 -0
- /data/vendor/libgit2/src/{win32 → util/win32}/error.c +0 -0
- /data/vendor/libgit2/src/{win32 → util/win32}/mingw-compat.h +0 -0
- /data/vendor/libgit2/src/{win32 → util/win32}/msvc-compat.h +0 -0
- /data/vendor/libgit2/src/{win32 → util/win32}/reparse.h +0 -0
- /data/vendor/libgit2/src/{win32 → util/win32}/thread.c +0 -0
- /data/vendor/libgit2/src/{win32 → util/win32}/utf-conv.c +0 -0
- /data/vendor/libgit2/src/{win32 → util/win32}/version.h +0 -0
- /data/vendor/libgit2/src/{win32 → util/win32}/w32_common.h +0 -0
- /data/vendor/libgit2/src/{win32 → util/win32}/w32_util.c +0 -0
- /data/vendor/libgit2/src/{win32 → util/win32}/win32-compat.h +0 -0
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
#include "commit_graph.h"
|
|
9
9
|
|
|
10
10
|
#include "array.h"
|
|
11
|
+
#include "buf.h"
|
|
11
12
|
#include "filebuf.h"
|
|
12
13
|
#include "futils.h"
|
|
13
14
|
#include "hash.h"
|
|
@@ -137,19 +138,19 @@ static int commit_graph_parse_oid_lookup(
|
|
|
137
138
|
struct git_commit_graph_chunk *chunk_oid_lookup)
|
|
138
139
|
{
|
|
139
140
|
uint32_t i;
|
|
140
|
-
|
|
141
|
+
unsigned char *oid, *prev_oid, zero_oid[GIT_OID_SHA1_SIZE] = {0};
|
|
141
142
|
|
|
142
143
|
if (chunk_oid_lookup->offset == 0)
|
|
143
144
|
return commit_graph_error("missing OID Lookup chunk");
|
|
144
145
|
if (chunk_oid_lookup->length == 0)
|
|
145
146
|
return commit_graph_error("empty OID Lookup chunk");
|
|
146
|
-
if (chunk_oid_lookup->length != file->num_commits *
|
|
147
|
+
if (chunk_oid_lookup->length != file->num_commits * GIT_OID_SHA1_SIZE)
|
|
147
148
|
return commit_graph_error("OID Lookup chunk has wrong length");
|
|
148
149
|
|
|
149
|
-
file->oid_lookup = oid = (
|
|
150
|
-
prev_oid =
|
|
151
|
-
for (i = 0; i < file->num_commits; ++i,
|
|
152
|
-
if (
|
|
150
|
+
file->oid_lookup = oid = (unsigned char *)(data + chunk_oid_lookup->offset);
|
|
151
|
+
prev_oid = zero_oid;
|
|
152
|
+
for (i = 0; i < file->num_commits; ++i, oid += GIT_OID_SHA1_SIZE) {
|
|
153
|
+
if (git_oid_raw_cmp(prev_oid, oid, GIT_OID_SHA1_SIZE) >= 0)
|
|
153
154
|
return commit_graph_error("OID Lookup index is non-monotonic");
|
|
154
155
|
prev_oid = oid;
|
|
155
156
|
}
|
|
@@ -166,7 +167,7 @@ static int commit_graph_parse_commit_data(
|
|
|
166
167
|
return commit_graph_error("missing Commit Data chunk");
|
|
167
168
|
if (chunk_commit_data->length == 0)
|
|
168
169
|
return commit_graph_error("empty Commit Data chunk");
|
|
169
|
-
if (chunk_commit_data->length != file->num_commits * (
|
|
170
|
+
if (chunk_commit_data->length != file->num_commits * (GIT_OID_SHA1_SIZE + 16))
|
|
170
171
|
return commit_graph_error("Commit Data chunk has wrong length");
|
|
171
172
|
|
|
172
173
|
file->commit_data = data + chunk_commit_data->offset;
|
|
@@ -199,8 +200,8 @@ int git_commit_graph_file_parse(
|
|
|
199
200
|
const unsigned char *chunk_hdr;
|
|
200
201
|
struct git_commit_graph_chunk *last_chunk;
|
|
201
202
|
uint32_t i;
|
|
202
|
-
|
|
203
|
-
|
|
203
|
+
uint64_t last_chunk_offset, chunk_offset, trailer_offset;
|
|
204
|
+
size_t checksum_size;
|
|
204
205
|
int error;
|
|
205
206
|
struct git_commit_graph_chunk chunk_oid_fanout = {0}, chunk_oid_lookup = {0},
|
|
206
207
|
chunk_commit_data = {0}, chunk_extra_edge_list = {0},
|
|
@@ -208,7 +209,7 @@ int git_commit_graph_file_parse(
|
|
|
208
209
|
|
|
209
210
|
GIT_ASSERT_ARG(file);
|
|
210
211
|
|
|
211
|
-
if (size < sizeof(struct git_commit_graph_header) +
|
|
212
|
+
if (size < sizeof(struct git_commit_graph_header) + GIT_OID_SHA1_SIZE)
|
|
212
213
|
return commit_graph_error("commit-graph is too short");
|
|
213
214
|
|
|
214
215
|
hdr = ((struct git_commit_graph_header *)data);
|
|
@@ -225,21 +226,18 @@ int git_commit_graph_file_parse(
|
|
|
225
226
|
* headers, and a special zero chunk.
|
|
226
227
|
*/
|
|
227
228
|
last_chunk_offset = sizeof(struct git_commit_graph_header) + (1 + hdr->chunks) * 12;
|
|
228
|
-
trailer_offset = size -
|
|
229
|
+
trailer_offset = size - GIT_OID_SHA1_SIZE;
|
|
230
|
+
checksum_size = GIT_HASH_SHA1_SIZE;
|
|
231
|
+
|
|
229
232
|
if (trailer_offset < last_chunk_offset)
|
|
230
233
|
return commit_graph_error("wrong commit-graph size");
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
if (git_hash_buf(&cgraph_checksum, data, (size_t)trailer_offset) < 0)
|
|
234
|
-
return commit_graph_error("could not calculate signature");
|
|
235
|
-
if (!git_oid_equal(&cgraph_checksum, &file->checksum))
|
|
236
|
-
return commit_graph_error("index signature mismatch");
|
|
234
|
+
memcpy(file->checksum, (data + trailer_offset), checksum_size);
|
|
237
235
|
|
|
238
236
|
chunk_hdr = data + sizeof(struct git_commit_graph_header);
|
|
239
237
|
last_chunk = NULL;
|
|
240
238
|
for (i = 0; i < hdr->chunks; ++i, chunk_hdr += 12) {
|
|
241
|
-
chunk_offset = ((
|
|
242
|
-
| ((
|
|
239
|
+
chunk_offset = ((uint64_t)ntohl(*((uint32_t *)(chunk_hdr + 4)))) << 32
|
|
240
|
+
| ((uint64_t)ntohl(*((uint32_t *)(chunk_hdr + 8))));
|
|
243
241
|
if (chunk_offset < last_chunk_offset)
|
|
244
242
|
return commit_graph_error("chunks are non-monotonic");
|
|
245
243
|
if (chunk_offset >= trailer_offset)
|
|
@@ -308,12 +306,12 @@ int git_commit_graph_new(git_commit_graph **cgraph_out, const char *objects_dir,
|
|
|
308
306
|
cgraph = git__calloc(1, sizeof(git_commit_graph));
|
|
309
307
|
GIT_ERROR_CHECK_ALLOC(cgraph);
|
|
310
308
|
|
|
311
|
-
error =
|
|
309
|
+
error = git_str_joinpath(&cgraph->filename, objects_dir, "info/commit-graph");
|
|
312
310
|
if (error < 0)
|
|
313
311
|
goto error;
|
|
314
312
|
|
|
315
313
|
if (open_file) {
|
|
316
|
-
error = git_commit_graph_file_open(&cgraph->file,
|
|
314
|
+
error = git_commit_graph_file_open(&cgraph->file, git_str_cstr(&cgraph->filename));
|
|
317
315
|
if (error < 0)
|
|
318
316
|
goto error;
|
|
319
317
|
cgraph->checked = 1;
|
|
@@ -327,9 +325,29 @@ error:
|
|
|
327
325
|
return error;
|
|
328
326
|
}
|
|
329
327
|
|
|
328
|
+
int git_commit_graph_validate(git_commit_graph *cgraph) {
|
|
329
|
+
unsigned char checksum[GIT_HASH_SHA1_SIZE];
|
|
330
|
+
size_t checksum_size = GIT_HASH_SHA1_SIZE;
|
|
331
|
+
size_t trailer_offset = cgraph->file->graph_map.len - checksum_size;
|
|
332
|
+
|
|
333
|
+
if (cgraph->file->graph_map.len < checksum_size)
|
|
334
|
+
return commit_graph_error("map length too small");
|
|
335
|
+
|
|
336
|
+
if (git_hash_buf(checksum, cgraph->file->graph_map.data, trailer_offset, GIT_HASH_ALGORITHM_SHA1) < 0)
|
|
337
|
+
return commit_graph_error("could not calculate signature");
|
|
338
|
+
if (memcmp(checksum, cgraph->file->checksum, checksum_size) != 0)
|
|
339
|
+
return commit_graph_error("index signature mismatch");
|
|
340
|
+
|
|
341
|
+
return 0;
|
|
342
|
+
}
|
|
343
|
+
|
|
330
344
|
int git_commit_graph_open(git_commit_graph **cgraph_out, const char *objects_dir)
|
|
331
345
|
{
|
|
332
|
-
|
|
346
|
+
int error = git_commit_graph_new(cgraph_out, objects_dir, true);
|
|
347
|
+
if (!error) {
|
|
348
|
+
return git_commit_graph_validate(*cgraph_out);
|
|
349
|
+
}
|
|
350
|
+
return error;
|
|
333
351
|
}
|
|
334
352
|
|
|
335
353
|
int git_commit_graph_file_open(git_commit_graph_file **file_out, const char *path)
|
|
@@ -387,7 +405,7 @@ int git_commit_graph_get_file(git_commit_graph_file **file_out, git_commit_graph
|
|
|
387
405
|
cgraph->checked = 1;
|
|
388
406
|
|
|
389
407
|
/* Best effort */
|
|
390
|
-
error = git_commit_graph_file_open(&result,
|
|
408
|
+
error = git_commit_graph_file_open(&result, git_str_cstr(&cgraph->filename));
|
|
391
409
|
|
|
392
410
|
if (error < 0)
|
|
393
411
|
return error;
|
|
@@ -407,7 +425,7 @@ void git_commit_graph_refresh(git_commit_graph *cgraph)
|
|
|
407
425
|
return;
|
|
408
426
|
|
|
409
427
|
if (cgraph->file
|
|
410
|
-
&& git_commit_graph_file_needs_refresh(cgraph->file,
|
|
428
|
+
&& git_commit_graph_file_needs_refresh(cgraph->file, git_str_cstr(&cgraph->filename))) {
|
|
411
429
|
/* We just free the commit graph. The next time it is requested, it will be
|
|
412
430
|
* re-loaded. */
|
|
413
431
|
git_commit_graph_file_free(cgraph->file);
|
|
@@ -432,15 +450,15 @@ static int git_commit_graph_entry_get_byindex(
|
|
|
432
450
|
return GIT_ENOTFOUND;
|
|
433
451
|
}
|
|
434
452
|
|
|
435
|
-
commit_data = file->commit_data + pos * (
|
|
436
|
-
|
|
437
|
-
e->parent_indices[0] = ntohl(*((uint32_t *)(commit_data +
|
|
453
|
+
commit_data = file->commit_data + pos * (GIT_OID_SHA1_SIZE + 4 * sizeof(uint32_t));
|
|
454
|
+
git_oid__fromraw(&e->tree_oid, commit_data, GIT_OID_SHA1);
|
|
455
|
+
e->parent_indices[0] = ntohl(*((uint32_t *)(commit_data + GIT_OID_SHA1_SIZE)));
|
|
438
456
|
e->parent_indices[1] = ntohl(
|
|
439
|
-
*((uint32_t *)(commit_data +
|
|
457
|
+
*((uint32_t *)(commit_data + GIT_OID_SHA1_SIZE + sizeof(uint32_t))));
|
|
440
458
|
e->parent_count = (e->parent_indices[0] != GIT_COMMIT_GRAPH_MISSING_PARENT)
|
|
441
459
|
+ (e->parent_indices[1] != GIT_COMMIT_GRAPH_MISSING_PARENT);
|
|
442
|
-
e->generation = ntohl(*((uint32_t *)(commit_data +
|
|
443
|
-
e->commit_time = ntohl(*((uint32_t *)(commit_data +
|
|
460
|
+
e->generation = ntohl(*((uint32_t *)(commit_data + GIT_OID_SHA1_SIZE + 2 * sizeof(uint32_t))));
|
|
461
|
+
e->commit_time = ntohl(*((uint32_t *)(commit_data + GIT_OID_SHA1_SIZE + 3 * sizeof(uint32_t))));
|
|
444
462
|
|
|
445
463
|
e->commit_time |= (e->generation & UINT64_C(0x3)) << UINT64_C(32);
|
|
446
464
|
e->generation >>= 2u;
|
|
@@ -466,7 +484,8 @@ static int git_commit_graph_entry_get_byindex(
|
|
|
466
484
|
e->parent_count++;
|
|
467
485
|
}
|
|
468
486
|
}
|
|
469
|
-
|
|
487
|
+
|
|
488
|
+
git_oid__fromraw(&e->sha1, &file->oid_lookup[pos * GIT_OID_SHA1_SIZE], GIT_OID_SHA1);
|
|
470
489
|
return 0;
|
|
471
490
|
}
|
|
472
491
|
|
|
@@ -475,7 +494,8 @@ bool git_commit_graph_file_needs_refresh(const git_commit_graph_file *file, cons
|
|
|
475
494
|
git_file fd = -1;
|
|
476
495
|
struct stat st;
|
|
477
496
|
ssize_t bytes_read;
|
|
478
|
-
|
|
497
|
+
unsigned char checksum[GIT_HASH_SHA1_SIZE];
|
|
498
|
+
size_t checksum_size = GIT_HASH_SHA1_SIZE;
|
|
479
499
|
|
|
480
500
|
/* TODO: properly open the file without access time using O_NOATIME */
|
|
481
501
|
fd = git_futils_open_ro(path);
|
|
@@ -493,12 +513,12 @@ bool git_commit_graph_file_needs_refresh(const git_commit_graph_file *file, cons
|
|
|
493
513
|
return true;
|
|
494
514
|
}
|
|
495
515
|
|
|
496
|
-
bytes_read = p_pread(fd,
|
|
516
|
+
bytes_read = p_pread(fd, checksum, checksum_size, st.st_size - checksum_size);
|
|
497
517
|
p_close(fd);
|
|
498
|
-
if (bytes_read !=
|
|
518
|
+
if (bytes_read != (ssize_t)checksum_size)
|
|
499
519
|
return true;
|
|
500
520
|
|
|
501
|
-
return
|
|
521
|
+
return (memcmp(checksum, file->checksum, checksum_size) != 0);
|
|
502
522
|
}
|
|
503
523
|
|
|
504
524
|
int git_commit_graph_entry_find(
|
|
@@ -509,7 +529,7 @@ int git_commit_graph_entry_find(
|
|
|
509
529
|
{
|
|
510
530
|
int pos, found = 0;
|
|
511
531
|
uint32_t hi, lo;
|
|
512
|
-
const
|
|
532
|
+
const unsigned char *current = NULL;
|
|
513
533
|
|
|
514
534
|
GIT_ASSERT_ARG(e);
|
|
515
535
|
GIT_ASSERT_ARG(file);
|
|
@@ -518,31 +538,30 @@ int git_commit_graph_entry_find(
|
|
|
518
538
|
hi = ntohl(file->oid_fanout[(int)short_oid->id[0]]);
|
|
519
539
|
lo = ((short_oid->id[0] == 0x0) ? 0 : ntohl(file->oid_fanout[(int)short_oid->id[0] - 1]));
|
|
520
540
|
|
|
521
|
-
pos =
|
|
541
|
+
pos = git_pack__lookup_id(file->oid_lookup, GIT_OID_SHA1_SIZE, lo, hi, short_oid->id, GIT_OID_SHA1);
|
|
522
542
|
|
|
523
543
|
if (pos >= 0) {
|
|
524
544
|
/* An object matching exactly the oid was found */
|
|
525
545
|
found = 1;
|
|
526
|
-
current = file->oid_lookup + pos;
|
|
546
|
+
current = file->oid_lookup + (pos * GIT_OID_SHA1_SIZE);
|
|
527
547
|
} else {
|
|
528
548
|
/* No object was found */
|
|
529
549
|
/* pos refers to the object with the "closest" oid to short_oid */
|
|
530
550
|
pos = -1 - pos;
|
|
531
551
|
if (pos < (int)file->num_commits) {
|
|
532
|
-
current = file->oid_lookup + pos;
|
|
552
|
+
current = file->oid_lookup + (pos * GIT_OID_SHA1_SIZE);
|
|
533
553
|
|
|
534
|
-
if (!
|
|
554
|
+
if (!git_oid_raw_ncmp(short_oid->id, current, len))
|
|
535
555
|
found = 1;
|
|
536
556
|
}
|
|
537
557
|
}
|
|
538
558
|
|
|
539
|
-
if (found && len !=
|
|
559
|
+
if (found && len != GIT_OID_SHA1_HEXSIZE && pos + 1 < (int)file->num_commits) {
|
|
540
560
|
/* Check for ambiguousity */
|
|
541
|
-
const
|
|
561
|
+
const unsigned char *next = current + GIT_OID_SHA1_SIZE;
|
|
542
562
|
|
|
543
|
-
if (!
|
|
563
|
+
if (!git_oid_raw_ncmp(short_oid->id, next, len))
|
|
544
564
|
found = 2;
|
|
545
|
-
}
|
|
546
565
|
}
|
|
547
566
|
|
|
548
567
|
if (!found)
|
|
@@ -597,7 +616,7 @@ void git_commit_graph_free(git_commit_graph *cgraph)
|
|
|
597
616
|
if (!cgraph)
|
|
598
617
|
return;
|
|
599
618
|
|
|
600
|
-
|
|
619
|
+
git_str_dispose(&cgraph->filename);
|
|
601
620
|
git_commit_graph_file_free(cgraph->file);
|
|
602
621
|
git__free(cgraph);
|
|
603
622
|
}
|
|
@@ -623,13 +642,13 @@ int git_commit_graph_writer_new(git_commit_graph_writer **out, const char *objec
|
|
|
623
642
|
git_commit_graph_writer *w = git__calloc(1, sizeof(git_commit_graph_writer));
|
|
624
643
|
GIT_ERROR_CHECK_ALLOC(w);
|
|
625
644
|
|
|
626
|
-
if (
|
|
645
|
+
if (git_str_sets(&w->objects_info_dir, objects_info_dir) < 0) {
|
|
627
646
|
git__free(w);
|
|
628
647
|
return -1;
|
|
629
648
|
}
|
|
630
649
|
|
|
631
650
|
if (git_vector_init(&w->commits, 0, packed_commit__cmp) < 0) {
|
|
632
|
-
|
|
651
|
+
git_str_dispose(&w->objects_info_dir);
|
|
633
652
|
git__free(w);
|
|
634
653
|
return -1;
|
|
635
654
|
}
|
|
@@ -649,7 +668,7 @@ void git_commit_graph_writer_free(git_commit_graph_writer *w)
|
|
|
649
668
|
git_vector_foreach (&w->commits, i, packed_commit)
|
|
650
669
|
packed_commit_free(packed_commit);
|
|
651
670
|
git_vector_free(&w->commits);
|
|
652
|
-
|
|
671
|
+
git_str_dispose(&w->objects_info_dir);
|
|
653
672
|
git__free(w);
|
|
654
673
|
}
|
|
655
674
|
|
|
@@ -707,7 +726,8 @@ int git_commit_graph_writer_add_index_file(
|
|
|
707
726
|
if (error < 0)
|
|
708
727
|
goto cleanup;
|
|
709
728
|
|
|
710
|
-
|
|
729
|
+
/* TODO: SHA256 */
|
|
730
|
+
error = git_mwindow_get_pack(&p, idx_path, 0);
|
|
711
731
|
if (error < 0)
|
|
712
732
|
goto cleanup;
|
|
713
733
|
|
|
@@ -753,7 +773,7 @@ enum generation_number_commit_state {
|
|
|
753
773
|
GENERATION_NUMBER_COMMIT_STATE_UNVISITED = 0,
|
|
754
774
|
GENERATION_NUMBER_COMMIT_STATE_ADDED = 1,
|
|
755
775
|
GENERATION_NUMBER_COMMIT_STATE_EXPANDED = 2,
|
|
756
|
-
GENERATION_NUMBER_COMMIT_STATE_VISITED = 3
|
|
776
|
+
GENERATION_NUMBER_COMMIT_STATE_VISITED = 3
|
|
757
777
|
};
|
|
758
778
|
|
|
759
779
|
static int compute_generation_numbers(git_vector *commits)
|
|
@@ -931,8 +951,8 @@ static int write_chunk_header(
|
|
|
931
951
|
|
|
932
952
|
static int commit_graph_write_buf(const char *buf, size_t size, void *data)
|
|
933
953
|
{
|
|
934
|
-
|
|
935
|
-
return
|
|
954
|
+
git_str *b = (git_str *)data;
|
|
955
|
+
return git_str_put(b, buf, size);
|
|
936
956
|
}
|
|
937
957
|
|
|
938
958
|
struct commit_graph_write_hash_context {
|
|
@@ -971,9 +991,10 @@ static int commit_graph_write(
|
|
|
971
991
|
uint32_t extra_edge_list_count;
|
|
972
992
|
uint32_t oid_fanout[256];
|
|
973
993
|
off64_t offset;
|
|
974
|
-
|
|
975
|
-
extra_edge_list =
|
|
976
|
-
|
|
994
|
+
git_str oid_lookup = GIT_STR_INIT, commit_data = GIT_STR_INIT,
|
|
995
|
+
extra_edge_list = GIT_STR_INIT;
|
|
996
|
+
unsigned char checksum[GIT_HASH_SHA1_SIZE];
|
|
997
|
+
size_t checksum_size;
|
|
977
998
|
git_hash_ctx ctx;
|
|
978
999
|
struct commit_graph_write_hash_context hash_cb_data = {0};
|
|
979
1000
|
|
|
@@ -986,7 +1007,8 @@ static int commit_graph_write(
|
|
|
986
1007
|
hash_cb_data.cb_data = cb_data;
|
|
987
1008
|
hash_cb_data.ctx = &ctx;
|
|
988
1009
|
|
|
989
|
-
|
|
1010
|
+
checksum_size = GIT_HASH_SHA1_SIZE;
|
|
1011
|
+
error = git_hash_ctx_init(&ctx, GIT_HASH_ALGORITHM_SHA1);
|
|
990
1012
|
if (error < 0)
|
|
991
1013
|
return error;
|
|
992
1014
|
cb_data = &hash_cb_data;
|
|
@@ -1011,8 +1033,10 @@ static int commit_graph_write(
|
|
|
1011
1033
|
|
|
1012
1034
|
/* Fill the OID Lookup table. */
|
|
1013
1035
|
git_vector_foreach (&w->commits, i, packed_commit) {
|
|
1014
|
-
error =
|
|
1015
|
-
(const char *)&packed_commit->sha1,
|
|
1036
|
+
error = git_str_put(&oid_lookup,
|
|
1037
|
+
(const char *)&packed_commit->sha1.id,
|
|
1038
|
+
GIT_OID_SHA1_SIZE);
|
|
1039
|
+
|
|
1016
1040
|
if (error < 0)
|
|
1017
1041
|
goto cleanup;
|
|
1018
1042
|
}
|
|
@@ -1026,9 +1050,10 @@ static int commit_graph_write(
|
|
|
1026
1050
|
size_t *packed_index;
|
|
1027
1051
|
unsigned int parentcount = (unsigned int)git_array_size(packed_commit->parents);
|
|
1028
1052
|
|
|
1029
|
-
error =
|
|
1030
|
-
|
|
1031
|
-
|
|
1053
|
+
error = git_str_put(&commit_data,
|
|
1054
|
+
(const char *)&packed_commit->tree_oid.id,
|
|
1055
|
+
GIT_OID_SHA1_SIZE);
|
|
1056
|
+
|
|
1032
1057
|
if (error < 0)
|
|
1033
1058
|
goto cleanup;
|
|
1034
1059
|
|
|
@@ -1038,7 +1063,7 @@ static int commit_graph_write(
|
|
|
1038
1063
|
packed_index = git_array_get(packed_commit->parent_indices, 0);
|
|
1039
1064
|
word = htonl((uint32_t)*packed_index);
|
|
1040
1065
|
}
|
|
1041
|
-
error =
|
|
1066
|
+
error = git_str_put(&commit_data, (const char *)&word, sizeof(word));
|
|
1042
1067
|
if (error < 0)
|
|
1043
1068
|
goto cleanup;
|
|
1044
1069
|
|
|
@@ -1050,7 +1075,7 @@ static int commit_graph_write(
|
|
|
1050
1075
|
} else {
|
|
1051
1076
|
word = htonl(0x80000000u | extra_edge_list_count);
|
|
1052
1077
|
}
|
|
1053
|
-
error =
|
|
1078
|
+
error = git_str_put(&commit_data, (const char *)&word, sizeof(word));
|
|
1054
1079
|
if (error < 0)
|
|
1055
1080
|
goto cleanup;
|
|
1056
1081
|
|
|
@@ -1061,7 +1086,7 @@ static int commit_graph_write(
|
|
|
1061
1086
|
packed_commit->parent_indices, parent_i);
|
|
1062
1087
|
word = htonl((uint32_t)(*packed_index | (parent_i + 1 == parentcount ? 0x80000000u : 0)));
|
|
1063
1088
|
|
|
1064
|
-
error =
|
|
1089
|
+
error = git_str_put(&extra_edge_list,
|
|
1065
1090
|
(const char *)&word,
|
|
1066
1091
|
sizeof(word));
|
|
1067
1092
|
if (error < 0)
|
|
@@ -1074,19 +1099,19 @@ static int commit_graph_write(
|
|
|
1074
1099
|
commit_time = (uint64_t)packed_commit->commit_time;
|
|
1075
1100
|
if (generation > GIT_COMMIT_GRAPH_GENERATION_NUMBER_MAX)
|
|
1076
1101
|
generation = GIT_COMMIT_GRAPH_GENERATION_NUMBER_MAX;
|
|
1077
|
-
word = ntohl((uint32_t)((generation << 2) | ((commit_time >>
|
|
1078
|
-
error =
|
|
1102
|
+
word = ntohl((uint32_t)((generation << 2) | (((uint32_t)(commit_time >> 32)) & 0x3) ));
|
|
1103
|
+
error = git_str_put(&commit_data, (const char *)&word, sizeof(word));
|
|
1079
1104
|
if (error < 0)
|
|
1080
1105
|
goto cleanup;
|
|
1081
|
-
word = ntohl((uint32_t)(commit_time &
|
|
1082
|
-
error =
|
|
1106
|
+
word = ntohl((uint32_t)(commit_time & 0xfffffffful));
|
|
1107
|
+
error = git_str_put(&commit_data, (const char *)&word, sizeof(word));
|
|
1083
1108
|
if (error < 0)
|
|
1084
1109
|
goto cleanup;
|
|
1085
1110
|
}
|
|
1086
1111
|
|
|
1087
1112
|
/* Write the header. */
|
|
1088
1113
|
hdr.chunks = 3;
|
|
1089
|
-
if (
|
|
1114
|
+
if (git_str_len(&extra_edge_list) > 0)
|
|
1090
1115
|
hdr.chunks++;
|
|
1091
1116
|
error = write_cb((const char *)&hdr, sizeof(hdr), cb_data);
|
|
1092
1117
|
if (error < 0)
|
|
@@ -1101,17 +1126,17 @@ static int commit_graph_write(
|
|
|
1101
1126
|
error = write_chunk_header(COMMIT_GRAPH_OID_LOOKUP_ID, offset, write_cb, cb_data);
|
|
1102
1127
|
if (error < 0)
|
|
1103
1128
|
goto cleanup;
|
|
1104
|
-
offset +=
|
|
1129
|
+
offset += git_str_len(&oid_lookup);
|
|
1105
1130
|
error = write_chunk_header(COMMIT_GRAPH_COMMIT_DATA_ID, offset, write_cb, cb_data);
|
|
1106
1131
|
if (error < 0)
|
|
1107
1132
|
goto cleanup;
|
|
1108
|
-
offset +=
|
|
1109
|
-
if (
|
|
1133
|
+
offset += git_str_len(&commit_data);
|
|
1134
|
+
if (git_str_len(&extra_edge_list) > 0) {
|
|
1110
1135
|
error = write_chunk_header(
|
|
1111
1136
|
COMMIT_GRAPH_EXTRA_EDGE_LIST_ID, offset, write_cb, cb_data);
|
|
1112
1137
|
if (error < 0)
|
|
1113
1138
|
goto cleanup;
|
|
1114
|
-
offset +=
|
|
1139
|
+
offset += git_str_len(&extra_edge_list);
|
|
1115
1140
|
}
|
|
1116
1141
|
error = write_chunk_header(0, offset, write_cb, cb_data);
|
|
1117
1142
|
if (error < 0)
|
|
@@ -1121,28 +1146,28 @@ static int commit_graph_write(
|
|
|
1121
1146
|
error = write_cb((const char *)oid_fanout, sizeof(oid_fanout), cb_data);
|
|
1122
1147
|
if (error < 0)
|
|
1123
1148
|
goto cleanup;
|
|
1124
|
-
error = write_cb(
|
|
1149
|
+
error = write_cb(git_str_cstr(&oid_lookup), git_str_len(&oid_lookup), cb_data);
|
|
1125
1150
|
if (error < 0)
|
|
1126
1151
|
goto cleanup;
|
|
1127
|
-
error = write_cb(
|
|
1152
|
+
error = write_cb(git_str_cstr(&commit_data), git_str_len(&commit_data), cb_data);
|
|
1128
1153
|
if (error < 0)
|
|
1129
1154
|
goto cleanup;
|
|
1130
|
-
error = write_cb(
|
|
1155
|
+
error = write_cb(git_str_cstr(&extra_edge_list), git_str_len(&extra_edge_list), cb_data);
|
|
1131
1156
|
if (error < 0)
|
|
1132
1157
|
goto cleanup;
|
|
1133
1158
|
|
|
1134
1159
|
/* Finalize the checksum and write the trailer. */
|
|
1135
|
-
error = git_hash_final(
|
|
1160
|
+
error = git_hash_final(checksum, &ctx);
|
|
1136
1161
|
if (error < 0)
|
|
1137
1162
|
goto cleanup;
|
|
1138
|
-
error = write_cb((
|
|
1163
|
+
error = write_cb((char *)checksum, checksum_size, cb_data);
|
|
1139
1164
|
if (error < 0)
|
|
1140
1165
|
goto cleanup;
|
|
1141
1166
|
|
|
1142
1167
|
cleanup:
|
|
1143
|
-
|
|
1144
|
-
|
|
1145
|
-
|
|
1168
|
+
git_str_dispose(&oid_lookup);
|
|
1169
|
+
git_str_dispose(&commit_data);
|
|
1170
|
+
git_str_dispose(&extra_edge_list);
|
|
1146
1171
|
git_hash_ctx_cleanup(&ctx);
|
|
1147
1172
|
return error;
|
|
1148
1173
|
}
|
|
@@ -1171,21 +1196,21 @@ int git_commit_graph_writer_commit(
|
|
|
1171
1196
|
{
|
|
1172
1197
|
int error;
|
|
1173
1198
|
int filebuf_flags = GIT_FILEBUF_DO_NOT_BUFFER;
|
|
1174
|
-
|
|
1199
|
+
git_str commit_graph_path = GIT_STR_INIT;
|
|
1175
1200
|
git_filebuf output = GIT_FILEBUF_INIT;
|
|
1176
1201
|
|
|
1177
1202
|
/* TODO: support options and fill in defaults. */
|
|
1178
1203
|
GIT_UNUSED(opts);
|
|
1179
1204
|
|
|
1180
|
-
error =
|
|
1181
|
-
&commit_graph_path,
|
|
1205
|
+
error = git_str_joinpath(
|
|
1206
|
+
&commit_graph_path, git_str_cstr(&w->objects_info_dir), "commit-graph");
|
|
1182
1207
|
if (error < 0)
|
|
1183
1208
|
return error;
|
|
1184
1209
|
|
|
1185
1210
|
if (git_repository__fsync_gitdir)
|
|
1186
1211
|
filebuf_flags |= GIT_FILEBUF_FSYNC;
|
|
1187
|
-
error = git_filebuf_open(&output,
|
|
1188
|
-
|
|
1212
|
+
error = git_filebuf_open(&output, git_str_cstr(&commit_graph_path), filebuf_flags, 0644);
|
|
1213
|
+
git_str_dispose(&commit_graph_path);
|
|
1189
1214
|
if (error < 0)
|
|
1190
1215
|
return error;
|
|
1191
1216
|
|
|
@@ -1199,9 +1224,17 @@ int git_commit_graph_writer_commit(
|
|
|
1199
1224
|
}
|
|
1200
1225
|
|
|
1201
1226
|
int git_commit_graph_writer_dump(
|
|
1202
|
-
|
|
1203
|
-
|
|
1204
|
-
|
|
1227
|
+
git_buf *cgraph,
|
|
1228
|
+
git_commit_graph_writer *w,
|
|
1229
|
+
git_commit_graph_writer_options *opts)
|
|
1230
|
+
{
|
|
1231
|
+
GIT_BUF_WRAP_PRIVATE(cgraph, git_commit_graph__writer_dump, w, opts);
|
|
1232
|
+
}
|
|
1233
|
+
|
|
1234
|
+
int git_commit_graph__writer_dump(
|
|
1235
|
+
git_str *cgraph,
|
|
1236
|
+
git_commit_graph_writer *w,
|
|
1237
|
+
git_commit_graph_writer_options *opts)
|
|
1205
1238
|
{
|
|
1206
1239
|
/* TODO: support options. */
|
|
1207
1240
|
GIT_UNUSED(opts);
|
|
@@ -15,6 +15,8 @@
|
|
|
15
15
|
|
|
16
16
|
#include "map.h"
|
|
17
17
|
#include "vector.h"
|
|
18
|
+
#include "oid.h"
|
|
19
|
+
#include "hash.h"
|
|
18
20
|
|
|
19
21
|
/**
|
|
20
22
|
* A commit-graph file.
|
|
@@ -34,7 +36,7 @@ typedef struct git_commit_graph_file {
|
|
|
34
36
|
uint32_t num_commits;
|
|
35
37
|
|
|
36
38
|
/* The OID Lookup table. */
|
|
37
|
-
|
|
39
|
+
unsigned char *oid_lookup;
|
|
38
40
|
|
|
39
41
|
/*
|
|
40
42
|
* The Commit Data table. Each entry contains the OID of the commit followed
|
|
@@ -55,7 +57,7 @@ typedef struct git_commit_graph_file {
|
|
|
55
57
|
size_t num_extra_edge_list;
|
|
56
58
|
|
|
57
59
|
/* The trailer of the file. Contains the SHA1-checksum of the whole file. */
|
|
58
|
-
|
|
60
|
+
unsigned char checksum[GIT_HASH_SHA1_SIZE];
|
|
59
61
|
} git_commit_graph_file;
|
|
60
62
|
|
|
61
63
|
/**
|
|
@@ -92,7 +94,7 @@ typedef struct git_commit_graph_entry {
|
|
|
92
94
|
/* A wrapper for git_commit_graph_file to enable lazy loading in the ODB. */
|
|
93
95
|
struct git_commit_graph {
|
|
94
96
|
/* The path to the commit-graph file. Something like ".git/objects/info/commit-graph". */
|
|
95
|
-
|
|
97
|
+
git_str filename;
|
|
96
98
|
|
|
97
99
|
/* The underlying commit-graph file. */
|
|
98
100
|
git_commit_graph_file *file;
|
|
@@ -104,6 +106,9 @@ struct git_commit_graph {
|
|
|
104
106
|
/** Create a new commit-graph, optionally opening the underlying file. */
|
|
105
107
|
int git_commit_graph_new(git_commit_graph **cgraph_out, const char *objects_dir, bool open_file);
|
|
106
108
|
|
|
109
|
+
/** Validate the checksum of a commit graph */
|
|
110
|
+
int git_commit_graph_validate(git_commit_graph *cgraph);
|
|
111
|
+
|
|
107
112
|
/** Open and validate a commit-graph file. */
|
|
108
113
|
int git_commit_graph_file_open(git_commit_graph_file **file_out, const char *path);
|
|
109
114
|
|
|
@@ -127,12 +132,17 @@ struct git_commit_graph_writer {
|
|
|
127
132
|
* The path of the `objects/info` directory where the `commit-graph` will be
|
|
128
133
|
* stored.
|
|
129
134
|
*/
|
|
130
|
-
|
|
135
|
+
git_str objects_info_dir;
|
|
131
136
|
|
|
132
137
|
/* The list of packed commits. */
|
|
133
138
|
git_vector commits;
|
|
134
139
|
};
|
|
135
140
|
|
|
141
|
+
int git_commit_graph__writer_dump(
|
|
142
|
+
git_str *cgraph,
|
|
143
|
+
git_commit_graph_writer *w,
|
|
144
|
+
git_commit_graph_writer_options *opts);
|
|
145
|
+
|
|
136
146
|
/*
|
|
137
147
|
* Returns whether the git_commit_graph_file needs to be reloaded since the
|
|
138
148
|
* contents of the commit-graph file have changed on disk.
|
|
@@ -124,16 +124,19 @@ static int commit_quick_parse(
|
|
|
124
124
|
{
|
|
125
125
|
git_oid *parent_oid;
|
|
126
126
|
git_commit *commit;
|
|
127
|
-
|
|
127
|
+
git_commit__parse_options parse_opts = {
|
|
128
|
+
GIT_OID_SHA1,
|
|
129
|
+
GIT_COMMIT_PARSE_QUICK
|
|
130
|
+
};
|
|
128
131
|
size_t i;
|
|
129
132
|
|
|
130
133
|
commit = git__calloc(1, sizeof(*commit));
|
|
131
134
|
GIT_ERROR_CHECK_ALLOC(commit);
|
|
132
135
|
commit->object.repo = walk->repo;
|
|
133
136
|
|
|
134
|
-
if (
|
|
137
|
+
if (git_commit__parse_ext(commit, obj, &parse_opts) < 0) {
|
|
135
138
|
git__free(commit);
|
|
136
|
-
return
|
|
139
|
+
return -1;
|
|
137
140
|
}
|
|
138
141
|
|
|
139
142
|
if (!git__is_uint16(git_array_size(commit->parent_ids))) {
|
|
@@ -173,7 +176,7 @@ int git_commit_list_parse(git_revwalk *walk, git_commit_list_node *commit)
|
|
|
173
176
|
if (cgraph_file) {
|
|
174
177
|
git_commit_graph_entry e;
|
|
175
178
|
|
|
176
|
-
error = git_commit_graph_entry_find(&e, cgraph_file, &commit->oid,
|
|
179
|
+
error = git_commit_graph_entry_find(&e, cgraph_file, &commit->oid, GIT_OID_SHA1_SIZE);
|
|
177
180
|
if (error == 0 && git__is_uint16(e.parent_count)) {
|
|
178
181
|
size_t i;
|
|
179
182
|
commit->generation = (uint32_t)e.generation;
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (C) the libgit2 contributors. All rights reserved.
|
|
3
|
+
*
|
|
4
|
+
* This file is part of libgit2, distributed under the GNU GPL v2 with
|
|
5
|
+
* a Linking Exception. For full terms see the included COPYING file.
|
|
6
|
+
*/
|
|
7
|
+
#ifndef INCLUDE_common_h__
|
|
8
|
+
#define INCLUDE_common_h__
|
|
9
|
+
|
|
10
|
+
#include "git2_util.h"
|
|
11
|
+
#include "errors.h"
|
|
12
|
+
|
|
13
|
+
/*
|
|
14
|
+
* Include the declarations for deprecated functions; this ensures
|
|
15
|
+
* that they're decorated with the proper extern/visibility attributes.
|
|
16
|
+
*/
|
|
17
|
+
#include "git2/deprecated.h"
|
|
18
|
+
|
|
19
|
+
#include "posix.h"
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Initialize a structure with a version.
|
|
23
|
+
*/
|
|
24
|
+
GIT_INLINE(void) git__init_structure(void *structure, size_t len, unsigned int version)
|
|
25
|
+
{
|
|
26
|
+
memset(structure, 0, len);
|
|
27
|
+
*((int*)structure) = version;
|
|
28
|
+
}
|
|
29
|
+
#define GIT_INIT_STRUCTURE(S,V) git__init_structure(S, sizeof(*S), V)
|
|
30
|
+
|
|
31
|
+
#define GIT_INIT_STRUCTURE_FROM_TEMPLATE(PTR,VERSION,TYPE,TPL) do { \
|
|
32
|
+
TYPE _tmpl = TPL; \
|
|
33
|
+
GIT_ERROR_CHECK_VERSION(&(VERSION), _tmpl.version, #TYPE); \
|
|
34
|
+
memcpy((PTR), &_tmpl, sizeof(_tmpl)); } while (0)
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Check a versioned structure for validity
|
|
38
|
+
*/
|
|
39
|
+
GIT_INLINE(int) git_error__check_version(const void *structure, unsigned int expected_max, const char *name)
|
|
40
|
+
{
|
|
41
|
+
unsigned int actual;
|
|
42
|
+
|
|
43
|
+
if (!structure)
|
|
44
|
+
return 0;
|
|
45
|
+
|
|
46
|
+
actual = *(const unsigned int*)structure;
|
|
47
|
+
if (actual > 0 && actual <= expected_max)
|
|
48
|
+
return 0;
|
|
49
|
+
|
|
50
|
+
git_error_set(GIT_ERROR_INVALID, "invalid version %d on %s", actual, name);
|
|
51
|
+
return -1;
|
|
52
|
+
}
|
|
53
|
+
#define GIT_ERROR_CHECK_VERSION(S,V,N) if (git_error__check_version(S,V,N) < 0) return -1
|
|
54
|
+
|
|
55
|
+
#endif
|