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
|
@@ -42,20 +42,22 @@ struct git_indexer {
|
|
|
42
42
|
have_delta :1,
|
|
43
43
|
do_fsync :1,
|
|
44
44
|
do_verify :1;
|
|
45
|
+
git_oid_t oid_type;
|
|
45
46
|
struct git_pack_header hdr;
|
|
46
47
|
struct git_pack_file *pack;
|
|
47
48
|
unsigned int mode;
|
|
48
49
|
off64_t off;
|
|
49
50
|
off64_t entry_start;
|
|
50
51
|
git_object_t entry_type;
|
|
51
|
-
|
|
52
|
+
git_str entry_data;
|
|
52
53
|
git_packfile_stream stream;
|
|
53
54
|
size_t nr_objects;
|
|
54
55
|
git_vector objects;
|
|
55
56
|
git_vector deltas;
|
|
56
57
|
unsigned int fanout[256];
|
|
57
58
|
git_hash_ctx hash_ctx;
|
|
58
|
-
|
|
59
|
+
unsigned char checksum[GIT_HASH_MAX_SIZE];
|
|
60
|
+
char name[(GIT_HASH_MAX_SIZE * 2) + 1];
|
|
59
61
|
git_indexer_progress_cb progress_cb;
|
|
60
62
|
void *progress_payload;
|
|
61
63
|
char objbuf[8*1024];
|
|
@@ -67,7 +69,7 @@ struct git_indexer {
|
|
|
67
69
|
git_odb *odb;
|
|
68
70
|
|
|
69
71
|
/* Fields for calculating the packfile trailer (hash of everything before it) */
|
|
70
|
-
char inbuf[
|
|
72
|
+
char inbuf[GIT_HASH_MAX_SIZE];
|
|
71
73
|
size_t inbuf_len;
|
|
72
74
|
git_hash_ctx trailer;
|
|
73
75
|
};
|
|
@@ -76,9 +78,16 @@ struct delta_info {
|
|
|
76
78
|
off64_t delta_off;
|
|
77
79
|
};
|
|
78
80
|
|
|
81
|
+
#ifndef GIT_DEPRECATE_HARD
|
|
79
82
|
const git_oid *git_indexer_hash(const git_indexer *idx)
|
|
80
83
|
{
|
|
81
|
-
return
|
|
84
|
+
return (git_oid *)idx->checksum;
|
|
85
|
+
}
|
|
86
|
+
#endif
|
|
87
|
+
|
|
88
|
+
const char *git_indexer_name(const git_indexer *idx)
|
|
89
|
+
{
|
|
90
|
+
return idx->name;
|
|
82
91
|
}
|
|
83
92
|
|
|
84
93
|
static int parse_header(struct git_pack_header *hdr, struct git_pack_file *pack)
|
|
@@ -128,17 +137,33 @@ int git_indexer_init_options(git_indexer_options *opts, unsigned int version)
|
|
|
128
137
|
}
|
|
129
138
|
#endif
|
|
130
139
|
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
140
|
+
GIT_INLINE(git_hash_algorithm_t) indexer_hash_algorithm(git_indexer *idx)
|
|
141
|
+
{
|
|
142
|
+
switch (idx->oid_type) {
|
|
143
|
+
case GIT_OID_SHA1:
|
|
144
|
+
return GIT_HASH_ALGORITHM_SHA1;
|
|
145
|
+
#ifdef GIT_EXPERIMENTAL_SHA256
|
|
146
|
+
case GIT_OID_SHA256:
|
|
147
|
+
return GIT_HASH_ALGORITHM_SHA256;
|
|
148
|
+
#endif
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
return GIT_HASH_ALGORITHM_NONE;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
static int indexer_new(
|
|
155
|
+
git_indexer **out,
|
|
156
|
+
const char *prefix,
|
|
157
|
+
git_oid_t oid_type,
|
|
158
|
+
unsigned int mode,
|
|
159
|
+
git_odb *odb,
|
|
160
|
+
git_indexer_options *in_opts)
|
|
137
161
|
{
|
|
138
162
|
git_indexer_options opts = GIT_INDEXER_OPTIONS_INIT;
|
|
139
163
|
git_indexer *idx;
|
|
140
|
-
|
|
164
|
+
git_str path = GIT_STR_INIT, tmp_path = GIT_STR_INIT;
|
|
141
165
|
static const char suff[] = "/pack";
|
|
166
|
+
git_hash_algorithm_t checksum_type;
|
|
142
167
|
int error, fd = -1;
|
|
143
168
|
|
|
144
169
|
if (in_opts)
|
|
@@ -146,14 +171,17 @@ int git_indexer_new(
|
|
|
146
171
|
|
|
147
172
|
idx = git__calloc(1, sizeof(git_indexer));
|
|
148
173
|
GIT_ERROR_CHECK_ALLOC(idx);
|
|
174
|
+
idx->oid_type = oid_type;
|
|
149
175
|
idx->odb = odb;
|
|
150
176
|
idx->progress_cb = opts.progress_cb;
|
|
151
177
|
idx->progress_payload = opts.progress_cb_payload;
|
|
152
178
|
idx->mode = mode ? mode : GIT_PACK_FILE_MODE;
|
|
153
|
-
|
|
179
|
+
git_str_init(&idx->entry_data, 0);
|
|
180
|
+
|
|
181
|
+
checksum_type = indexer_hash_algorithm(idx);
|
|
154
182
|
|
|
155
|
-
if ((error = git_hash_ctx_init(&idx->hash_ctx)) < 0 ||
|
|
156
|
-
(error = git_hash_ctx_init(&idx->trailer)) < 0 ||
|
|
183
|
+
if ((error = git_hash_ctx_init(&idx->hash_ctx, checksum_type)) < 0 ||
|
|
184
|
+
(error = git_hash_ctx_init(&idx->trailer, checksum_type)) < 0 ||
|
|
157
185
|
(error = git_oidmap_new(&idx->expected_oids)) < 0)
|
|
158
186
|
goto cleanup;
|
|
159
187
|
|
|
@@ -162,17 +190,17 @@ int git_indexer_new(
|
|
|
162
190
|
if (git_repository__fsync_gitdir)
|
|
163
191
|
idx->do_fsync = 1;
|
|
164
192
|
|
|
165
|
-
error =
|
|
193
|
+
error = git_str_joinpath(&path, prefix, suff);
|
|
166
194
|
if (error < 0)
|
|
167
195
|
goto cleanup;
|
|
168
196
|
|
|
169
|
-
fd = git_futils_mktmp(&tmp_path,
|
|
170
|
-
|
|
197
|
+
fd = git_futils_mktmp(&tmp_path, git_str_cstr(&path), idx->mode);
|
|
198
|
+
git_str_dispose(&path);
|
|
171
199
|
if (fd < 0)
|
|
172
200
|
goto cleanup;
|
|
173
201
|
|
|
174
|
-
error = git_packfile_alloc(&idx->pack,
|
|
175
|
-
|
|
202
|
+
error = git_packfile_alloc(&idx->pack, git_str_cstr(&tmp_path), oid_type);
|
|
203
|
+
git_str_dispose(&tmp_path);
|
|
176
204
|
|
|
177
205
|
if (error < 0)
|
|
178
206
|
goto cleanup;
|
|
@@ -188,18 +216,45 @@ cleanup:
|
|
|
188
216
|
if (fd != -1)
|
|
189
217
|
p_close(fd);
|
|
190
218
|
|
|
191
|
-
if (
|
|
192
|
-
p_unlink(
|
|
219
|
+
if (git_str_len(&tmp_path) > 0)
|
|
220
|
+
p_unlink(git_str_cstr(&tmp_path));
|
|
193
221
|
|
|
194
222
|
if (idx->pack != NULL)
|
|
195
223
|
p_unlink(idx->pack->pack_name);
|
|
196
224
|
|
|
197
|
-
|
|
198
|
-
|
|
225
|
+
git_str_dispose(&path);
|
|
226
|
+
git_str_dispose(&tmp_path);
|
|
199
227
|
git__free(idx);
|
|
200
228
|
return -1;
|
|
201
229
|
}
|
|
202
230
|
|
|
231
|
+
#ifdef GIT_EXPERIMENTAL_SHA256
|
|
232
|
+
int git_indexer_new(
|
|
233
|
+
git_indexer **out,
|
|
234
|
+
const char *prefix,
|
|
235
|
+
git_oid_t oid_type,
|
|
236
|
+
git_indexer_options *opts)
|
|
237
|
+
{
|
|
238
|
+
return indexer_new(
|
|
239
|
+
out,
|
|
240
|
+
prefix,
|
|
241
|
+
oid_type,
|
|
242
|
+
opts ? opts->mode : 0,
|
|
243
|
+
opts ? opts->odb : NULL,
|
|
244
|
+
opts);
|
|
245
|
+
}
|
|
246
|
+
#else
|
|
247
|
+
int git_indexer_new(
|
|
248
|
+
git_indexer **out,
|
|
249
|
+
const char *prefix,
|
|
250
|
+
unsigned int mode,
|
|
251
|
+
git_odb *odb,
|
|
252
|
+
git_indexer_options *opts)
|
|
253
|
+
{
|
|
254
|
+
return indexer_new(out, prefix, GIT_OID_SHA1, mode, odb, opts);
|
|
255
|
+
}
|
|
256
|
+
#endif
|
|
257
|
+
|
|
203
258
|
void git_indexer__set_fsync(git_indexer *idx, int do_fsync)
|
|
204
259
|
{
|
|
205
260
|
idx->do_fsync = !!do_fsync;
|
|
@@ -245,7 +300,7 @@ static int hash_object_stream(git_indexer*idx, git_packfile_stream *stream)
|
|
|
245
300
|
break;
|
|
246
301
|
|
|
247
302
|
if (idx->do_verify)
|
|
248
|
-
|
|
303
|
+
git_str_put(&idx->entry_data, idx->objbuf, read);
|
|
249
304
|
|
|
250
305
|
git_hash_update(&idx->hash_ctx, idx->objbuf, read);
|
|
251
306
|
} while (read > 0);
|
|
@@ -264,7 +319,7 @@ static int advance_delta_offset(git_indexer *idx, git_object_t type)
|
|
|
264
319
|
GIT_ASSERT_ARG(type == GIT_OBJECT_REF_DELTA || type == GIT_OBJECT_OFS_DELTA);
|
|
265
320
|
|
|
266
321
|
if (type == GIT_OBJECT_REF_DELTA) {
|
|
267
|
-
idx->off +=
|
|
322
|
+
idx->off += git_oid_size(idx->oid_type);
|
|
268
323
|
} else {
|
|
269
324
|
off64_t base_off;
|
|
270
325
|
int error = get_delta_base(&base_off, idx->pack, &w, &idx->off, type, idx->entry_start);
|
|
@@ -340,7 +395,7 @@ static int check_object_connectivity(git_indexer *idx, const git_rawobj *obj)
|
|
|
340
395
|
{
|
|
341
396
|
git_object *object;
|
|
342
397
|
git_oid *expected;
|
|
343
|
-
int error;
|
|
398
|
+
int error = 0;
|
|
344
399
|
|
|
345
400
|
if (obj->type != GIT_OBJECT_BLOB &&
|
|
346
401
|
obj->type != GIT_OBJECT_TREE &&
|
|
@@ -348,8 +403,14 @@ static int check_object_connectivity(git_indexer *idx, const git_rawobj *obj)
|
|
|
348
403
|
obj->type != GIT_OBJECT_TAG)
|
|
349
404
|
return 0;
|
|
350
405
|
|
|
351
|
-
if (
|
|
406
|
+
if (git_object__from_raw(&object, obj->data, obj->len, obj->type, idx->oid_type) < 0) {
|
|
407
|
+
/*
|
|
408
|
+
* parse_raw returns EINVALID on invalid data; downgrade
|
|
409
|
+
* that to a normal -1 error code.
|
|
410
|
+
*/
|
|
411
|
+
error = -1;
|
|
352
412
|
goto out;
|
|
413
|
+
}
|
|
353
414
|
|
|
354
415
|
if ((expected = git_oidmap_get(idx->expected_oids, &object->cached.oid)) != NULL) {
|
|
355
416
|
git_oidmap_delete(idx->expected_oids, &object->cached.oid);
|
|
@@ -371,7 +432,7 @@ static int check_object_connectivity(git_indexer *idx, const git_rawobj *obj)
|
|
|
371
432
|
size_t i;
|
|
372
433
|
|
|
373
434
|
git_array_foreach(tree->entries, i, entry)
|
|
374
|
-
if (add_expected_oid(idx, entry->oid) < 0)
|
|
435
|
+
if (add_expected_oid(idx, &entry->oid) < 0)
|
|
375
436
|
goto out;
|
|
376
437
|
|
|
377
438
|
break;
|
|
@@ -426,10 +487,15 @@ static int store_object(git_indexer *idx)
|
|
|
426
487
|
pentry = git__calloc(1, sizeof(struct git_pack_entry));
|
|
427
488
|
GIT_ERROR_CHECK_ALLOC(pentry);
|
|
428
489
|
|
|
429
|
-
if (git_hash_final(
|
|
490
|
+
if (git_hash_final(oid.id, &idx->hash_ctx)) {
|
|
430
491
|
git__free(pentry);
|
|
431
492
|
goto on_error;
|
|
432
493
|
}
|
|
494
|
+
|
|
495
|
+
#ifdef GIT_EXPERIMENTAL_SHA256
|
|
496
|
+
oid.type = idx->oid_type;
|
|
497
|
+
#endif
|
|
498
|
+
|
|
433
499
|
entry_size = idx->off - entry_start;
|
|
434
500
|
if (entry_start > UINT31_MAX) {
|
|
435
501
|
entry->offset = UINT32_MAX;
|
|
@@ -449,16 +515,16 @@ static int store_object(git_indexer *idx)
|
|
|
449
515
|
goto on_error;
|
|
450
516
|
}
|
|
451
517
|
|
|
452
|
-
git_oid_cpy(&pentry->
|
|
518
|
+
git_oid_cpy(&pentry->id, &oid);
|
|
453
519
|
pentry->offset = entry_start;
|
|
454
520
|
|
|
455
|
-
if (git_oidmap_exists(idx->pack->idx_cache, &pentry->
|
|
456
|
-
git_error_set(GIT_ERROR_INDEXER, "duplicate object %s found in pack", git_oid_tostr_s(&pentry->
|
|
521
|
+
if (git_oidmap_exists(idx->pack->idx_cache, &pentry->id)) {
|
|
522
|
+
git_error_set(GIT_ERROR_INDEXER, "duplicate object %s found in pack", git_oid_tostr_s(&pentry->id));
|
|
457
523
|
git__free(pentry);
|
|
458
524
|
goto on_error;
|
|
459
525
|
}
|
|
460
526
|
|
|
461
|
-
if ((error = git_oidmap_set(idx->pack->idx_cache, &pentry->
|
|
527
|
+
if ((error = git_oidmap_set(idx->pack->idx_cache, &pentry->id, pentry)) < 0) {
|
|
462
528
|
git__free(pentry);
|
|
463
529
|
git_error_set_oom();
|
|
464
530
|
goto on_error;
|
|
@@ -503,8 +569,8 @@ static int save_entry(git_indexer *idx, struct entry *entry, struct git_pack_ent
|
|
|
503
569
|
|
|
504
570
|
pentry->offset = entry_start;
|
|
505
571
|
|
|
506
|
-
if (git_oidmap_exists(idx->pack->idx_cache, &pentry->
|
|
507
|
-
git_oidmap_set(idx->pack->idx_cache, &pentry->
|
|
572
|
+
if (git_oidmap_exists(idx->pack->idx_cache, &pentry->id) ||
|
|
573
|
+
git_oidmap_set(idx->pack->idx_cache, &pentry->id, pentry) < 0) {
|
|
508
574
|
git_error_set(GIT_ERROR_INDEXER, "cannot insert object into pack");
|
|
509
575
|
return -1;
|
|
510
576
|
}
|
|
@@ -530,7 +596,7 @@ static int hash_and_save(git_indexer *idx, git_rawobj *obj, off64_t entry_start)
|
|
|
530
596
|
entry = git__calloc(1, sizeof(*entry));
|
|
531
597
|
GIT_ERROR_CHECK_ALLOC(entry);
|
|
532
598
|
|
|
533
|
-
if (git_odb__hashobj(&oid, obj) < 0) {
|
|
599
|
+
if (git_odb__hashobj(&oid, obj, idx->oid_type) < 0) {
|
|
534
600
|
git_error_set(GIT_ERROR_INDEXER, "failed to hash object");
|
|
535
601
|
goto on_error;
|
|
536
602
|
}
|
|
@@ -538,7 +604,7 @@ static int hash_and_save(git_indexer *idx, git_rawobj *obj, off64_t entry_start)
|
|
|
538
604
|
pentry = git__calloc(1, sizeof(struct git_pack_entry));
|
|
539
605
|
GIT_ERROR_CHECK_ALLOC(pentry);
|
|
540
606
|
|
|
541
|
-
git_oid_cpy(&pentry->
|
|
607
|
+
git_oid_cpy(&pentry->id, &oid);
|
|
542
608
|
git_oid_cpy(&entry->oid, &oid);
|
|
543
609
|
entry->crc = crc32(0L, Z_NULL, 0);
|
|
544
610
|
|
|
@@ -564,34 +630,38 @@ static int do_progress_callback(git_indexer *idx, git_indexer_progress *stats)
|
|
|
564
630
|
return 0;
|
|
565
631
|
}
|
|
566
632
|
|
|
567
|
-
/* Hash everything but the
|
|
633
|
+
/* Hash everything but the checksum trailer */
|
|
568
634
|
static void hash_partially(git_indexer *idx, const uint8_t *data, size_t size)
|
|
569
635
|
{
|
|
570
636
|
size_t to_expell, to_keep;
|
|
637
|
+
size_t oid_size = git_oid_size(idx->oid_type);
|
|
571
638
|
|
|
572
639
|
if (size == 0)
|
|
573
640
|
return;
|
|
574
641
|
|
|
575
|
-
/*
|
|
576
|
-
|
|
642
|
+
/*
|
|
643
|
+
* Easy case, dump the buffer and the data minus the trailing
|
|
644
|
+
* checksum (SHA1 or SHA256).
|
|
645
|
+
*/
|
|
646
|
+
if (size >= oid_size) {
|
|
577
647
|
git_hash_update(&idx->trailer, idx->inbuf, idx->inbuf_len);
|
|
578
|
-
git_hash_update(&idx->trailer, data, size -
|
|
648
|
+
git_hash_update(&idx->trailer, data, size - oid_size);
|
|
579
649
|
|
|
580
|
-
data += size -
|
|
581
|
-
memcpy(idx->inbuf, data,
|
|
582
|
-
idx->inbuf_len =
|
|
650
|
+
data += size - oid_size;
|
|
651
|
+
memcpy(idx->inbuf, data, oid_size);
|
|
652
|
+
idx->inbuf_len = oid_size;
|
|
583
653
|
return;
|
|
584
654
|
}
|
|
585
655
|
|
|
586
656
|
/* We can just append */
|
|
587
|
-
if (idx->inbuf_len + size <=
|
|
657
|
+
if (idx->inbuf_len + size <= oid_size) {
|
|
588
658
|
memcpy(idx->inbuf + idx->inbuf_len, data, size);
|
|
589
659
|
idx->inbuf_len += size;
|
|
590
660
|
return;
|
|
591
661
|
}
|
|
592
662
|
|
|
593
663
|
/* We need to partially drain the buffer and then append */
|
|
594
|
-
to_keep =
|
|
664
|
+
to_keep = oid_size - size;
|
|
595
665
|
to_expell = idx->inbuf_len - to_keep;
|
|
596
666
|
|
|
597
667
|
git_hash_update(&idx->trailer, idx->inbuf, to_expell);
|
|
@@ -710,12 +780,14 @@ static int read_stream_object(git_indexer *idx, git_indexer_progress *stats)
|
|
|
710
780
|
{
|
|
711
781
|
git_packfile_stream *stream = &idx->stream;
|
|
712
782
|
off64_t entry_start = idx->off;
|
|
713
|
-
size_t entry_size;
|
|
783
|
+
size_t oid_size, entry_size;
|
|
714
784
|
git_object_t type;
|
|
715
785
|
git_mwindow *w = NULL;
|
|
716
786
|
int error;
|
|
717
787
|
|
|
718
|
-
|
|
788
|
+
oid_size = git_oid_size(idx->oid_type);
|
|
789
|
+
|
|
790
|
+
if (idx->pack->mwf.size <= idx->off + (long long)oid_size)
|
|
719
791
|
return GIT_EBUFS;
|
|
720
792
|
|
|
721
793
|
if (!idx->have_stream) {
|
|
@@ -730,7 +802,7 @@ static int read_stream_object(git_indexer *idx, git_indexer_progress *stats)
|
|
|
730
802
|
git_mwindow_close(&w);
|
|
731
803
|
idx->entry_start = entry_start;
|
|
732
804
|
git_hash_init(&idx->hash_ctx);
|
|
733
|
-
|
|
805
|
+
git_str_clear(&idx->entry_data);
|
|
734
806
|
|
|
735
807
|
if (type == GIT_OBJECT_REF_DELTA || type == GIT_OBJECT_OFS_DELTA) {
|
|
736
808
|
error = advance_delta_offset(idx, type);
|
|
@@ -876,7 +948,7 @@ on_error:
|
|
|
876
948
|
return error;
|
|
877
949
|
}
|
|
878
950
|
|
|
879
|
-
static int index_path(
|
|
951
|
+
static int index_path(git_str *path, git_indexer *idx, const char *suffix)
|
|
880
952
|
{
|
|
881
953
|
const char prefix[] = "pack-";
|
|
882
954
|
size_t slash = (size_t)path->size;
|
|
@@ -885,17 +957,16 @@ static int index_path(git_buf *path, git_indexer *idx, const char *suffix)
|
|
|
885
957
|
while (slash > 0 && path->ptr[slash - 1] != '/')
|
|
886
958
|
slash--;
|
|
887
959
|
|
|
888
|
-
if (
|
|
889
|
-
|
|
960
|
+
if (git_str_grow(path, slash + 1 + strlen(prefix) +
|
|
961
|
+
git_oid_hexsize(idx->oid_type) + strlen(suffix) + 1) < 0)
|
|
890
962
|
return -1;
|
|
891
963
|
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
path
|
|
896
|
-
git_buf_puts(path, suffix);
|
|
964
|
+
git_str_truncate(path, slash);
|
|
965
|
+
git_str_puts(path, prefix);
|
|
966
|
+
git_str_puts(path, idx->name);
|
|
967
|
+
git_str_puts(path, suffix);
|
|
897
968
|
|
|
898
|
-
return
|
|
969
|
+
return git_str_oom(path) ? -1 : 0;
|
|
899
970
|
}
|
|
900
971
|
|
|
901
972
|
/**
|
|
@@ -904,7 +975,7 @@ static int index_path(git_buf *path, git_indexer *idx, const char *suffix)
|
|
|
904
975
|
*/
|
|
905
976
|
static int seek_back_trailer(git_indexer *idx)
|
|
906
977
|
{
|
|
907
|
-
idx->pack->mwf.size -=
|
|
978
|
+
idx->pack->mwf.size -= git_oid_size(idx->oid_type);
|
|
908
979
|
return git_mwindow_free_all(&idx->pack->mwf);
|
|
909
980
|
}
|
|
910
981
|
|
|
@@ -913,14 +984,17 @@ static int inject_object(git_indexer *idx, git_oid *id)
|
|
|
913
984
|
git_odb_object *obj = NULL;
|
|
914
985
|
struct entry *entry = NULL;
|
|
915
986
|
struct git_pack_entry *pentry = NULL;
|
|
916
|
-
|
|
987
|
+
unsigned char empty_checksum[GIT_HASH_MAX_SIZE] = {0};
|
|
917
988
|
unsigned char hdr[64];
|
|
918
|
-
|
|
989
|
+
git_str buf = GIT_STR_INIT;
|
|
919
990
|
off64_t entry_start;
|
|
920
991
|
const void *data;
|
|
921
992
|
size_t len, hdr_len;
|
|
993
|
+
size_t checksum_size;
|
|
922
994
|
int error;
|
|
923
995
|
|
|
996
|
+
checksum_size = git_hash_size(indexer_hash_algorithm(idx));
|
|
997
|
+
|
|
924
998
|
if ((error = seek_back_trailer(idx)) < 0)
|
|
925
999
|
goto cleanup;
|
|
926
1000
|
|
|
@@ -956,19 +1030,19 @@ static int inject_object(git_indexer *idx, git_oid *id)
|
|
|
956
1030
|
|
|
957
1031
|
idx->pack->mwf.size += buf.size;
|
|
958
1032
|
entry->crc = htonl(crc32(entry->crc, (unsigned char *)buf.ptr, (uInt)buf.size));
|
|
959
|
-
|
|
1033
|
+
git_str_dispose(&buf);
|
|
960
1034
|
|
|
961
1035
|
/* Write a fake trailer so the pack functions play ball */
|
|
962
1036
|
|
|
963
|
-
if ((error = append_to_pack(idx,
|
|
1037
|
+
if ((error = append_to_pack(idx, empty_checksum, checksum_size)) < 0)
|
|
964
1038
|
goto cleanup;
|
|
965
1039
|
|
|
966
|
-
idx->pack->mwf.size +=
|
|
1040
|
+
idx->pack->mwf.size += git_oid_size(idx->oid_type);
|
|
967
1041
|
|
|
968
1042
|
pentry = git__calloc(1, sizeof(struct git_pack_entry));
|
|
969
1043
|
GIT_ERROR_CHECK_ALLOC(pentry);
|
|
970
1044
|
|
|
971
|
-
git_oid_cpy(&pentry->
|
|
1045
|
+
git_oid_cpy(&pentry->id, id);
|
|
972
1046
|
git_oid_cpy(&entry->oid, id);
|
|
973
1047
|
idx->off = entry_start + hdr_len + len;
|
|
974
1048
|
|
|
@@ -1026,13 +1100,13 @@ static int fix_thin_pack(git_indexer *idx, git_indexer_progress *stats)
|
|
|
1026
1100
|
}
|
|
1027
1101
|
|
|
1028
1102
|
/* curpos now points to the base information, which is an OID */
|
|
1029
|
-
base_info = git_mwindow_open(&idx->pack->mwf, &w, curpos,
|
|
1103
|
+
base_info = git_mwindow_open(&idx->pack->mwf, &w, curpos, git_oid_size(idx->oid_type), &left);
|
|
1030
1104
|
if (base_info == NULL) {
|
|
1031
1105
|
git_error_set(GIT_ERROR_INDEXER, "failed to map delta information");
|
|
1032
1106
|
return -1;
|
|
1033
1107
|
}
|
|
1034
1108
|
|
|
1035
|
-
|
|
1109
|
+
git_oid__fromraw(&base, base_info, idx->oid_type);
|
|
1036
1110
|
git_mwindow_close(&w);
|
|
1037
1111
|
|
|
1038
1112
|
if (has_entry(idx, &base))
|
|
@@ -1117,7 +1191,7 @@ static int update_header_and_rehash(git_indexer *idx, git_indexer_progress *stat
|
|
|
1117
1191
|
git_hash_init(&idx->trailer);
|
|
1118
1192
|
|
|
1119
1193
|
|
|
1120
|
-
/* Update the header to include the
|
|
1194
|
+
/* Update the header to include the number of local objects we injected */
|
|
1121
1195
|
idx->hdr.hdr_entries = htonl(stats->total_objects + stats->local_objects);
|
|
1122
1196
|
if (write_at(idx, &idx->hdr, 0, sizeof(struct git_pack_header)) < 0)
|
|
1123
1197
|
return -1;
|
|
@@ -1152,39 +1226,44 @@ int git_indexer_commit(git_indexer *idx, git_indexer_progress *stats)
|
|
|
1152
1226
|
unsigned int i, long_offsets = 0, left;
|
|
1153
1227
|
int error;
|
|
1154
1228
|
struct git_pack_idx_header hdr;
|
|
1155
|
-
|
|
1229
|
+
git_str filename = GIT_STR_INIT;
|
|
1156
1230
|
struct entry *entry;
|
|
1157
|
-
|
|
1231
|
+
unsigned char checksum[GIT_HASH_MAX_SIZE];
|
|
1158
1232
|
git_filebuf index_file = {0};
|
|
1159
1233
|
void *packfile_trailer;
|
|
1234
|
+
size_t checksum_size;
|
|
1235
|
+
bool mismatch;
|
|
1160
1236
|
|
|
1161
1237
|
if (!idx->parsed_header) {
|
|
1162
1238
|
git_error_set(GIT_ERROR_INDEXER, "incomplete pack header");
|
|
1163
1239
|
return -1;
|
|
1164
1240
|
}
|
|
1165
1241
|
|
|
1242
|
+
checksum_size = git_hash_size(indexer_hash_algorithm(idx));
|
|
1243
|
+
GIT_ASSERT(checksum_size);
|
|
1244
|
+
|
|
1166
1245
|
/* Test for this before resolve_deltas(), as it plays with idx->off */
|
|
1167
|
-
if (idx->off +
|
|
1246
|
+
if (idx->off + (ssize_t)checksum_size < idx->pack->mwf.size) {
|
|
1168
1247
|
git_error_set(GIT_ERROR_INDEXER, "unexpected data at the end of the pack");
|
|
1169
1248
|
return -1;
|
|
1170
1249
|
}
|
|
1171
|
-
if (idx->off +
|
|
1250
|
+
if (idx->off + (ssize_t)checksum_size > idx->pack->mwf.size) {
|
|
1172
1251
|
git_error_set(GIT_ERROR_INDEXER, "missing trailer at the end of the pack");
|
|
1173
1252
|
return -1;
|
|
1174
1253
|
}
|
|
1175
1254
|
|
|
1176
|
-
packfile_trailer = git_mwindow_open(&idx->pack->mwf, &w, idx->pack->mwf.size -
|
|
1255
|
+
packfile_trailer = git_mwindow_open(&idx->pack->mwf, &w, idx->pack->mwf.size - checksum_size, checksum_size, &left);
|
|
1177
1256
|
if (packfile_trailer == NULL) {
|
|
1178
1257
|
git_mwindow_close(&w);
|
|
1179
1258
|
goto on_error;
|
|
1180
1259
|
}
|
|
1181
1260
|
|
|
1182
1261
|
/* Compare the packfile trailer as it was sent to us and what we calculated */
|
|
1183
|
-
|
|
1262
|
+
git_hash_final(checksum, &idx->trailer);
|
|
1263
|
+
mismatch = !!memcmp(checksum, packfile_trailer, checksum_size);
|
|
1184
1264
|
git_mwindow_close(&w);
|
|
1185
1265
|
|
|
1186
|
-
|
|
1187
|
-
if (git_oid_cmp(&file_hash, &trailer_hash)) {
|
|
1266
|
+
if (mismatch) {
|
|
1188
1267
|
git_error_set(GIT_ERROR_INDEXER, "packfile trailer mismatch");
|
|
1189
1268
|
return -1;
|
|
1190
1269
|
}
|
|
@@ -1204,8 +1283,8 @@ int git_indexer_commit(git_indexer *idx, git_indexer_progress *stats)
|
|
|
1204
1283
|
if (update_header_and_rehash(idx, stats) < 0)
|
|
1205
1284
|
return -1;
|
|
1206
1285
|
|
|
1207
|
-
git_hash_final(
|
|
1208
|
-
write_at(idx,
|
|
1286
|
+
git_hash_final(checksum, &idx->trailer);
|
|
1287
|
+
write_at(idx, checksum, idx->pack->mwf.size - checksum_size, checksum_size);
|
|
1209
1288
|
}
|
|
1210
1289
|
|
|
1211
1290
|
/*
|
|
@@ -1224,12 +1303,14 @@ int git_indexer_commit(git_indexer *idx, git_indexer_progress *stats)
|
|
|
1224
1303
|
|
|
1225
1304
|
/* Use the trailer hash as the pack file name to ensure
|
|
1226
1305
|
* files with different contents have different names */
|
|
1227
|
-
|
|
1306
|
+
memcpy(idx->checksum, checksum, checksum_size);
|
|
1307
|
+
if (git_hash_fmt(idx->name, checksum, checksum_size) < 0)
|
|
1308
|
+
return -1;
|
|
1228
1309
|
|
|
1229
|
-
|
|
1230
|
-
|
|
1231
|
-
|
|
1232
|
-
if (
|
|
1310
|
+
git_str_sets(&filename, idx->pack->pack_name);
|
|
1311
|
+
git_str_shorten(&filename, strlen("pack"));
|
|
1312
|
+
git_str_puts(&filename, "idx");
|
|
1313
|
+
if (git_str_oom(&filename))
|
|
1233
1314
|
return -1;
|
|
1234
1315
|
|
|
1235
1316
|
if (git_filebuf_open(&index_file, filename.ptr,
|
|
@@ -1251,7 +1332,7 @@ int git_indexer_commit(git_indexer *idx, git_indexer_progress *stats)
|
|
|
1251
1332
|
|
|
1252
1333
|
/* Write out the object names (SHA-1 hashes) */
|
|
1253
1334
|
git_vector_foreach(&idx->objects, i, entry) {
|
|
1254
|
-
git_filebuf_write(&index_file, &entry->oid,
|
|
1335
|
+
git_filebuf_write(&index_file, &entry->oid.id, git_oid_size(idx->oid_type));
|
|
1255
1336
|
}
|
|
1256
1337
|
|
|
1257
1338
|
/* Write out the CRC32 values */
|
|
@@ -1285,14 +1366,14 @@ int git_indexer_commit(git_indexer *idx, git_indexer_progress *stats)
|
|
|
1285
1366
|
}
|
|
1286
1367
|
|
|
1287
1368
|
/* Write out the packfile trailer to the index */
|
|
1288
|
-
if (git_filebuf_write(&index_file,
|
|
1369
|
+
if (git_filebuf_write(&index_file, checksum, checksum_size) < 0)
|
|
1289
1370
|
goto on_error;
|
|
1290
1371
|
|
|
1291
1372
|
/* Write out the hash of the idx */
|
|
1292
|
-
if (git_filebuf_hash(
|
|
1373
|
+
if (git_filebuf_hash(checksum, &index_file) < 0)
|
|
1293
1374
|
goto on_error;
|
|
1294
1375
|
|
|
1295
|
-
git_filebuf_write(&index_file,
|
|
1376
|
+
git_filebuf_write(&index_file, checksum, checksum_size);
|
|
1296
1377
|
|
|
1297
1378
|
/* Figure out what the final name should be */
|
|
1298
1379
|
if (index_path(&filename, idx, ".idx") < 0)
|
|
@@ -1336,23 +1417,23 @@ int git_indexer_commit(git_indexer *idx, git_indexer_progress *stats)
|
|
|
1336
1417
|
goto on_error;
|
|
1337
1418
|
|
|
1338
1419
|
/* And don't forget to rename the packfile to its new place. */
|
|
1339
|
-
if (p_rename(idx->pack->pack_name,
|
|
1420
|
+
if (p_rename(idx->pack->pack_name, git_str_cstr(&filename)) < 0)
|
|
1340
1421
|
goto on_error;
|
|
1341
1422
|
|
|
1342
1423
|
/* And fsync the parent directory if we're asked to. */
|
|
1343
1424
|
if (idx->do_fsync &&
|
|
1344
|
-
git_futils_fsync_parent(
|
|
1425
|
+
git_futils_fsync_parent(git_str_cstr(&filename)) < 0)
|
|
1345
1426
|
goto on_error;
|
|
1346
1427
|
|
|
1347
1428
|
idx->pack_committed = 1;
|
|
1348
1429
|
|
|
1349
|
-
|
|
1430
|
+
git_str_dispose(&filename);
|
|
1350
1431
|
return 0;
|
|
1351
1432
|
|
|
1352
1433
|
on_error:
|
|
1353
1434
|
git_mwindow_free_all(&idx->pack->mwf);
|
|
1354
1435
|
git_filebuf_cleanup(&index_file);
|
|
1355
|
-
|
|
1436
|
+
git_str_dispose(&filename);
|
|
1356
1437
|
return -1;
|
|
1357
1438
|
}
|
|
1358
1439
|
|
|
@@ -1389,7 +1470,7 @@ void git_indexer_free(git_indexer *idx)
|
|
|
1389
1470
|
|
|
1390
1471
|
git_hash_ctx_cleanup(&idx->trailer);
|
|
1391
1472
|
git_hash_ctx_cleanup(&idx->hash_ctx);
|
|
1392
|
-
|
|
1473
|
+
git_str_dispose(&idx->entry_data);
|
|
1393
1474
|
git_oidmap_free(idx->expected_oids);
|
|
1394
1475
|
git__free(idx);
|
|
1395
1476
|
}
|