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
|
@@ -32,7 +32,7 @@ static int packfile_unpack_compressed(
|
|
|
32
32
|
* Throws GIT_EAMBIGUOUSOIDPREFIX if short oid
|
|
33
33
|
* is ambiguous within the pack.
|
|
34
34
|
* This method assumes that len is between
|
|
35
|
-
* GIT_OID_MINPREFIXLEN and
|
|
35
|
+
* GIT_OID_MINPREFIXLEN and the oid type's hexsize.
|
|
36
36
|
*/
|
|
37
37
|
static int pack_entry_find_offset(
|
|
38
38
|
off64_t *offset_out,
|
|
@@ -186,9 +186,9 @@ static int cache_add(
|
|
|
186
186
|
|
|
187
187
|
static void pack_index_free(struct git_pack_file *p)
|
|
188
188
|
{
|
|
189
|
-
if (p->
|
|
190
|
-
git__free(p->
|
|
191
|
-
p->
|
|
189
|
+
if (p->ids) {
|
|
190
|
+
git__free(p->ids);
|
|
191
|
+
p->ids = NULL;
|
|
192
192
|
}
|
|
193
193
|
if (p->index_map.data) {
|
|
194
194
|
git_futils_mmap_free(&p->index_map);
|
|
@@ -205,6 +205,7 @@ static int pack_index_check_locked(const char *path, struct git_pack_file *p)
|
|
|
205
205
|
size_t idx_size;
|
|
206
206
|
struct stat st;
|
|
207
207
|
int error;
|
|
208
|
+
|
|
208
209
|
/* TODO: properly open the file without access time using O_NOATIME */
|
|
209
210
|
git_file fd = git_futils_open_ro(path);
|
|
210
211
|
if (fd < 0)
|
|
@@ -218,8 +219,7 @@ static int pack_index_check_locked(const char *path, struct git_pack_file *p)
|
|
|
218
219
|
|
|
219
220
|
if (!S_ISREG(st.st_mode) ||
|
|
220
221
|
!git__is_sizet(st.st_size) ||
|
|
221
|
-
(idx_size = (size_t)st.st_size) < 4 * 256 +
|
|
222
|
-
{
|
|
222
|
+
(idx_size = (size_t)st.st_size) < (size_t)((4 * 256) + (p->oid_size * 2))) {
|
|
223
223
|
p_close(fd);
|
|
224
224
|
git_error_set(GIT_ERROR_ODB, "invalid pack index '%s'", path);
|
|
225
225
|
return -1;
|
|
@@ -242,8 +242,9 @@ static int pack_index_check_locked(const char *path, struct git_pack_file *p)
|
|
|
242
242
|
return packfile_error("unsupported index version");
|
|
243
243
|
}
|
|
244
244
|
|
|
245
|
-
} else
|
|
245
|
+
} else {
|
|
246
246
|
version = 1;
|
|
247
|
+
}
|
|
247
248
|
|
|
248
249
|
nr = 0;
|
|
249
250
|
index = idx_map;
|
|
@@ -264,11 +265,11 @@ static int pack_index_check_locked(const char *path, struct git_pack_file *p)
|
|
|
264
265
|
/*
|
|
265
266
|
* Total size:
|
|
266
267
|
* - 256 index entries 4 bytes each
|
|
267
|
-
* - 24-byte entries * nr (20
|
|
268
|
-
* - 20-byte
|
|
269
|
-
* - 20-byte
|
|
268
|
+
* - 24/36-byte entries * nr (20/32 byte SHA + 4-byte offset)
|
|
269
|
+
* - 20/32-byte SHA of the packfile
|
|
270
|
+
* - 20/32-byte SHA file checksum
|
|
270
271
|
*/
|
|
271
|
-
if (idx_size != 4*256 + nr *
|
|
272
|
+
if (idx_size != (4 * 256 + (nr * (p->oid_size + 4)) + (p->oid_size * 2))) {
|
|
272
273
|
git_futils_mmap_free(&p->index_map);
|
|
273
274
|
return packfile_error("index is corrupted");
|
|
274
275
|
}
|
|
@@ -277,16 +278,16 @@ static int pack_index_check_locked(const char *path, struct git_pack_file *p)
|
|
|
277
278
|
* Minimum size:
|
|
278
279
|
* - 8 bytes of header
|
|
279
280
|
* - 256 index entries 4 bytes each
|
|
280
|
-
* - 20-byte
|
|
281
|
+
* - 20/32-byte SHA entry * nr
|
|
281
282
|
* - 4-byte crc entry * nr
|
|
282
283
|
* - 4-byte offset entry * nr
|
|
283
|
-
* - 20-byte
|
|
284
|
-
* - 20-byte
|
|
284
|
+
* - 20/32-byte SHA of the packfile
|
|
285
|
+
* - 20/32-byte SHA file checksum
|
|
285
286
|
* And after the 4-byte offset table might be a
|
|
286
287
|
* variable sized table containing 8-byte entries
|
|
287
288
|
* for offsets larger than 2^31.
|
|
288
289
|
*/
|
|
289
|
-
unsigned long min_size = 8 + 4*256 + nr*(
|
|
290
|
+
unsigned long min_size = 8 + (4 * 256) + (nr * (p->oid_size + 4 + 4)) + (p->oid_size * 2);
|
|
290
291
|
unsigned long max_size = min_size;
|
|
291
292
|
|
|
292
293
|
if (nr)
|
|
@@ -308,7 +309,7 @@ static int pack_index_open_locked(struct git_pack_file *p)
|
|
|
308
309
|
{
|
|
309
310
|
int error = 0;
|
|
310
311
|
size_t name_len;
|
|
311
|
-
|
|
312
|
+
git_str idx_name = GIT_STR_INIT;
|
|
312
313
|
|
|
313
314
|
if (p->index_version > -1)
|
|
314
315
|
goto cleanup;
|
|
@@ -317,12 +318,12 @@ static int pack_index_open_locked(struct git_pack_file *p)
|
|
|
317
318
|
name_len = strlen(p->pack_name);
|
|
318
319
|
GIT_ASSERT(name_len > strlen(".pack"));
|
|
319
320
|
|
|
320
|
-
if ((error =
|
|
321
|
+
if ((error = git_str_init(&idx_name, name_len)) < 0)
|
|
321
322
|
goto cleanup;
|
|
322
323
|
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
if (
|
|
324
|
+
git_str_put(&idx_name, p->pack_name, name_len - strlen(".pack"));
|
|
325
|
+
git_str_puts(&idx_name, ".idx");
|
|
326
|
+
if (git_str_oom(&idx_name)) {
|
|
326
327
|
error = -1;
|
|
327
328
|
goto cleanup;
|
|
328
329
|
}
|
|
@@ -331,7 +332,7 @@ static int pack_index_open_locked(struct git_pack_file *p)
|
|
|
331
332
|
error = pack_index_check_locked(idx_name.ptr, p);
|
|
332
333
|
|
|
333
334
|
cleanup:
|
|
334
|
-
|
|
335
|
+
git_str_dispose(&idx_name);
|
|
335
336
|
|
|
336
337
|
return error;
|
|
337
338
|
}
|
|
@@ -365,12 +366,12 @@ static unsigned char *pack_window_open(
|
|
|
365
366
|
* Don't allow a negative offset, as that means we've wrapped
|
|
366
367
|
* around.
|
|
367
368
|
*/
|
|
368
|
-
if (offset > (p->mwf.size -
|
|
369
|
+
if (offset > (p->mwf.size - p->oid_size))
|
|
369
370
|
goto cleanup;
|
|
370
371
|
if (offset < 0)
|
|
371
372
|
goto cleanup;
|
|
372
373
|
|
|
373
|
-
pack_data = git_mwindow_open(&p->mwf, w_cursor, offset,
|
|
374
|
+
pack_data = git_mwindow_open(&p->mwf, w_cursor, offset, p->oid_size, left);
|
|
374
375
|
|
|
375
376
|
cleanup:
|
|
376
377
|
git_mutex_unlock(&p->mwf.lock);
|
|
@@ -473,13 +474,13 @@ int git_packfile_unpack_header(
|
|
|
473
474
|
return error;
|
|
474
475
|
}
|
|
475
476
|
|
|
476
|
-
/* pack_window_open() assures us we have [base, base +
|
|
477
|
-
* as a range that we can look at at. (
|
|
478
|
-
* size that is assured.) With our object header
|
|
479
|
-
* the maximum deflated object size is 2^137, which is
|
|
480
|
-
* insane, so we know won't exceed what we have been given.
|
|
477
|
+
/* pack_window_open() assures us we have [base, base + oid_size)
|
|
478
|
+
* available as a range that we can look at at. (It's actually
|
|
479
|
+
* the hash size that is assured.) With our object header
|
|
480
|
+
* encoding the maximum deflated object size is 2^137, which is
|
|
481
|
+
* just insane, so we know won't exceed what we have been given.
|
|
481
482
|
*/
|
|
482
|
-
base = git_mwindow_open(&p->mwf, w_curs, *curpos,
|
|
483
|
+
base = git_mwindow_open(&p->mwf, w_curs, *curpos, p->oid_size, &left);
|
|
483
484
|
git_mutex_unlock(&p->lock);
|
|
484
485
|
git_mutex_unlock(&p->mwf.lock);
|
|
485
486
|
if (base == NULL)
|
|
@@ -977,11 +978,12 @@ int get_delta_base(
|
|
|
977
978
|
/* Assumption: the only reason this would fail is because the file is too small */
|
|
978
979
|
if (base_info == NULL)
|
|
979
980
|
return GIT_EBUFS;
|
|
980
|
-
/* pack_window_open() assured us we have
|
|
981
|
-
* as a range that we can look
|
|
982
|
-
* end of the mapped window. Its
|
|
983
|
-
* that is assured. An OFS_DELTA longer
|
|
984
|
-
* is stupid, as then a REF_DELTA would be
|
|
981
|
+
/* pack_window_open() assured us we have
|
|
982
|
+
* [base_info, base_info + oid_size) as a range that we can look
|
|
983
|
+
* at without walking off the end of the mapped window. Its
|
|
984
|
+
* actually the hash size that is assured. An OFS_DELTA longer
|
|
985
|
+
* than the hash size is stupid, as then a REF_DELTA would be
|
|
986
|
+
* smaller to store.
|
|
985
987
|
*/
|
|
986
988
|
if (type == GIT_OBJECT_OFS_DELTA) {
|
|
987
989
|
unsigned used = 0;
|
|
@@ -1001,17 +1003,18 @@ int get_delta_base(
|
|
|
1001
1003
|
base_offset = delta_obj_offset - unsigned_base_offset;
|
|
1002
1004
|
*curpos += used;
|
|
1003
1005
|
} else if (type == GIT_OBJECT_REF_DELTA) {
|
|
1006
|
+
git_oid base_oid;
|
|
1007
|
+
git_oid__fromraw(&base_oid, base_info, p->oid_type);
|
|
1008
|
+
|
|
1004
1009
|
/* If we have the cooperative cache, search in it first */
|
|
1005
1010
|
if (p->has_cache) {
|
|
1006
1011
|
struct git_pack_entry *entry;
|
|
1007
|
-
git_oid oid;
|
|
1008
1012
|
|
|
1009
|
-
|
|
1010
|
-
if ((entry = git_oidmap_get(p->idx_cache, &oid)) != NULL) {
|
|
1013
|
+
if ((entry = git_oidmap_get(p->idx_cache, &base_oid)) != NULL) {
|
|
1011
1014
|
if (entry->offset == 0)
|
|
1012
1015
|
return packfile_error("delta offset is zero");
|
|
1013
1016
|
|
|
1014
|
-
*curpos +=
|
|
1017
|
+
*curpos += p->oid_size;
|
|
1015
1018
|
*delta_base_out = entry->offset;
|
|
1016
1019
|
return 0;
|
|
1017
1020
|
} else {
|
|
@@ -1024,9 +1027,9 @@ int get_delta_base(
|
|
|
1024
1027
|
}
|
|
1025
1028
|
|
|
1026
1029
|
/* The base entry _must_ be in the same pack */
|
|
1027
|
-
if (pack_entry_find_offset(&base_offset, &unused, p,
|
|
1030
|
+
if (pack_entry_find_offset(&base_offset, &unused, p, &base_oid, p->oid_hexsize) < 0)
|
|
1028
1031
|
return packfile_error("base entry delta is not in the same pack");
|
|
1029
|
-
*curpos +=
|
|
1032
|
+
*curpos += p->oid_size;
|
|
1030
1033
|
} else
|
|
1031
1034
|
return packfile_error("unknown object type");
|
|
1032
1035
|
|
|
@@ -1069,7 +1072,7 @@ void git_packfile_free(struct git_pack_file *p, bool unlink_packfile)
|
|
|
1069
1072
|
|
|
1070
1073
|
pack_index_free(p);
|
|
1071
1074
|
|
|
1072
|
-
git__free(p->
|
|
1075
|
+
git__free(p->bad_object_ids);
|
|
1073
1076
|
|
|
1074
1077
|
git_mutex_free(&p->bases.lock);
|
|
1075
1078
|
git_mutex_free(&p->mwf.lock);
|
|
@@ -1082,8 +1085,8 @@ static int packfile_open_locked(struct git_pack_file *p)
|
|
|
1082
1085
|
{
|
|
1083
1086
|
struct stat st;
|
|
1084
1087
|
struct git_pack_header hdr;
|
|
1085
|
-
|
|
1086
|
-
unsigned char *
|
|
1088
|
+
unsigned char checksum[GIT_OID_MAX_SIZE];
|
|
1089
|
+
unsigned char *idx_checksum;
|
|
1087
1090
|
|
|
1088
1091
|
if (pack_index_open_locked(p) < 0)
|
|
1089
1092
|
return git_odb__error_notfound("failed to open packfile", NULL, 0);
|
|
@@ -1130,12 +1133,13 @@ static int packfile_open_locked(struct git_pack_file *p)
|
|
|
1130
1133
|
|
|
1131
1134
|
/* Verify the pack matches its index. */
|
|
1132
1135
|
if (p->num_objects != ntohl(hdr.hdr_entries) ||
|
|
1133
|
-
|
|
1136
|
+
p_pread(p->mwf.fd, checksum, p->oid_size, p->mwf.size - p->oid_size) < 0)
|
|
1134
1137
|
goto cleanup;
|
|
1135
1138
|
|
|
1136
|
-
|
|
1139
|
+
idx_checksum = ((unsigned char *)p->index_map.data) +
|
|
1140
|
+
p->index_map.len - (p->oid_size * 2);
|
|
1137
1141
|
|
|
1138
|
-
if (
|
|
1142
|
+
if (git_oid_raw_cmp(checksum, idx_checksum, p->oid_size) != 0)
|
|
1139
1143
|
goto cleanup;
|
|
1140
1144
|
|
|
1141
1145
|
if (git_mwindow_file_register(&p->mwf) < 0)
|
|
@@ -1156,21 +1160,24 @@ cleanup:
|
|
|
1156
1160
|
int git_packfile__name(char **out, const char *path)
|
|
1157
1161
|
{
|
|
1158
1162
|
size_t path_len;
|
|
1159
|
-
|
|
1163
|
+
git_str buf = GIT_STR_INIT;
|
|
1160
1164
|
|
|
1161
1165
|
path_len = strlen(path);
|
|
1162
1166
|
|
|
1163
1167
|
if (path_len < strlen(".idx"))
|
|
1164
1168
|
return git_odb__error_notfound("invalid packfile path", NULL, 0);
|
|
1165
1169
|
|
|
1166
|
-
if (
|
|
1170
|
+
if (git_str_printf(&buf, "%.*s.pack", (int)(path_len - strlen(".idx")), path) < 0)
|
|
1167
1171
|
return -1;
|
|
1168
1172
|
|
|
1169
|
-
*out =
|
|
1173
|
+
*out = git_str_detach(&buf);
|
|
1170
1174
|
return 0;
|
|
1171
1175
|
}
|
|
1172
1176
|
|
|
1173
|
-
int git_packfile_alloc(
|
|
1177
|
+
int git_packfile_alloc(
|
|
1178
|
+
struct git_pack_file **pack_out,
|
|
1179
|
+
const char *path,
|
|
1180
|
+
git_oid_t oid_type)
|
|
1174
1181
|
{
|
|
1175
1182
|
struct stat st;
|
|
1176
1183
|
struct git_pack_file *p;
|
|
@@ -1198,7 +1205,7 @@ int git_packfile_alloc(struct git_pack_file **pack_out, const char *path)
|
|
|
1198
1205
|
|
|
1199
1206
|
if (!git_disable_pack_keep_file_checks) {
|
|
1200
1207
|
memcpy(p->pack_name + root_len, ".keep", sizeof(".keep"));
|
|
1201
|
-
if (
|
|
1208
|
+
if (git_fs_path_exists(p->pack_name) == true)
|
|
1202
1209
|
p->pack_keep = 1;
|
|
1203
1210
|
}
|
|
1204
1211
|
|
|
@@ -1218,6 +1225,9 @@ int git_packfile_alloc(struct git_pack_file **pack_out, const char *path)
|
|
|
1218
1225
|
p->pack_local = 1;
|
|
1219
1226
|
p->mtime = (git_time_t)st.st_mtime;
|
|
1220
1227
|
p->index_version = -1;
|
|
1228
|
+
p->oid_type = oid_type ? oid_type : GIT_OID_DEFAULT;
|
|
1229
|
+
p->oid_size = (unsigned int)git_oid_size(p->oid_type);
|
|
1230
|
+
p->oid_hexsize = (unsigned int)git_oid_hexsize(p->oid_type);
|
|
1221
1231
|
|
|
1222
1232
|
if (git_mutex_init(&p->lock) < 0) {
|
|
1223
1233
|
git_error_set(GIT_ERROR_OS, "failed to initialize packfile mutex");
|
|
@@ -1259,9 +1269,9 @@ static off64_t nth_packed_object_offset_locked(struct git_pack_file *p, uint32_t
|
|
|
1259
1269
|
end = index + p->index_map.len;
|
|
1260
1270
|
index += 4 * 256;
|
|
1261
1271
|
if (p->index_version == 1)
|
|
1262
|
-
return ntohl(*((uint32_t *)(index +
|
|
1272
|
+
return ntohl(*((uint32_t *)(index + (p->oid_size + 4) * n)));
|
|
1263
1273
|
|
|
1264
|
-
index += 8 + p->num_objects * (
|
|
1274
|
+
index += 8 + p->num_objects * (p->oid_size + 4);
|
|
1265
1275
|
off32 = ntohl(*((uint32_t *)(index + 4 * n)));
|
|
1266
1276
|
if (!(off32 & 0x80000000))
|
|
1267
1277
|
return off32;
|
|
@@ -1272,7 +1282,7 @@ static off64_t nth_packed_object_offset_locked(struct git_pack_file *p, uint32_t
|
|
|
1272
1282
|
return -1;
|
|
1273
1283
|
|
|
1274
1284
|
return (((uint64_t)ntohl(*((uint32_t *)(index + 0)))) << 32) |
|
|
1275
|
-
|
|
1285
|
+
ntohl(*((uint32_t *)(index + 4)));
|
|
1276
1286
|
}
|
|
1277
1287
|
|
|
1278
1288
|
static int git__memcmp4(const void *a, const void *b) {
|
|
@@ -1311,7 +1321,7 @@ int git_pack_foreach_entry(
|
|
|
1311
1321
|
|
|
1312
1322
|
index += 4 * 256;
|
|
1313
1323
|
|
|
1314
|
-
if (p->
|
|
1324
|
+
if (p->ids == NULL) {
|
|
1315
1325
|
git_vector offsets, oids;
|
|
1316
1326
|
|
|
1317
1327
|
if ((error = git_vector_init(&oids, p->num_objects, NULL))) {
|
|
@@ -1325,25 +1335,32 @@ int git_pack_foreach_entry(
|
|
|
1325
1335
|
}
|
|
1326
1336
|
|
|
1327
1337
|
if (p->index_version > 1) {
|
|
1328
|
-
const unsigned char *off = index +
|
|
1338
|
+
const unsigned char *off = index +
|
|
1339
|
+
(p->oid_size + 4) * p->num_objects;
|
|
1340
|
+
|
|
1329
1341
|
for (i = 0; i < p->num_objects; i++)
|
|
1330
1342
|
git_vector_insert(&offsets, (void*)&off[4 * i]);
|
|
1343
|
+
|
|
1331
1344
|
git_vector_sort(&offsets);
|
|
1332
1345
|
git_vector_foreach(&offsets, i, current)
|
|
1333
1346
|
git_vector_insert(&oids, (void*)&index[5 * (current - off)]);
|
|
1334
1347
|
} else {
|
|
1335
1348
|
for (i = 0; i < p->num_objects; i++)
|
|
1336
|
-
git_vector_insert(&offsets, (void*)&index[
|
|
1349
|
+
git_vector_insert(&offsets, (void*)&index[(p->oid_size + 4) * i]);
|
|
1337
1350
|
git_vector_sort(&offsets);
|
|
1338
1351
|
git_vector_foreach(&offsets, i, current)
|
|
1339
1352
|
git_vector_insert(&oids, (void*)¤t[4]);
|
|
1340
1353
|
}
|
|
1341
1354
|
|
|
1342
1355
|
git_vector_free(&offsets);
|
|
1343
|
-
p->
|
|
1356
|
+
p->ids = (unsigned char **)git_vector_detach(NULL, NULL, &oids);
|
|
1344
1357
|
}
|
|
1345
1358
|
|
|
1346
|
-
/*
|
|
1359
|
+
/*
|
|
1360
|
+
* We need to copy the OIDs to another array before we
|
|
1361
|
+
* relinquish the lock to avoid races. We can also take
|
|
1362
|
+
* this opportunity to put them into normal form.
|
|
1363
|
+
*/
|
|
1347
1364
|
git_array_init_to_size(oids, p->num_objects);
|
|
1348
1365
|
if (!oids.ptr) {
|
|
1349
1366
|
git_mutex_unlock(&p->lock);
|
|
@@ -1357,7 +1374,7 @@ int git_pack_foreach_entry(
|
|
|
1357
1374
|
git_array_clear(oids);
|
|
1358
1375
|
GIT_ERROR_CHECK_ALLOC(oid);
|
|
1359
1376
|
}
|
|
1360
|
-
|
|
1377
|
+
git_oid__fromraw(oid, p->ids[i], p->oid_type);
|
|
1361
1378
|
}
|
|
1362
1379
|
|
|
1363
1380
|
git_mutex_unlock(&p->lock);
|
|
@@ -1380,7 +1397,7 @@ int git_pack_foreach_entry_offset(
|
|
|
1380
1397
|
{
|
|
1381
1398
|
const unsigned char *index;
|
|
1382
1399
|
off64_t current_offset;
|
|
1383
|
-
|
|
1400
|
+
git_oid current_oid;
|
|
1384
1401
|
uint32_t i;
|
|
1385
1402
|
int error = 0;
|
|
1386
1403
|
|
|
@@ -1407,10 +1424,13 @@ int git_pack_foreach_entry_offset(
|
|
|
1407
1424
|
|
|
1408
1425
|
/* all offsets should have been validated by pack_index_check_locked */
|
|
1409
1426
|
if (p->index_version > 1) {
|
|
1410
|
-
const unsigned char *offsets = index +
|
|
1427
|
+
const unsigned char *offsets = index +
|
|
1428
|
+
(p->oid_size + 4) * p->num_objects;
|
|
1411
1429
|
const unsigned char *large_offset_ptr;
|
|
1412
|
-
const unsigned char *large_offsets = index +
|
|
1413
|
-
|
|
1430
|
+
const unsigned char *large_offsets = index +
|
|
1431
|
+
(p->oid_size + 8) * p->num_objects;
|
|
1432
|
+
const unsigned char *large_offsets_end = ((const unsigned char *)p->index_map.data) + p->index_map.len - p->oid_size;
|
|
1433
|
+
|
|
1414
1434
|
for (i = 0; i < p->num_objects; i++) {
|
|
1415
1435
|
current_offset = ntohl(*(const uint32_t *)(offsets + 4 * i));
|
|
1416
1436
|
if (current_offset & 0x80000000) {
|
|
@@ -1422,17 +1442,18 @@ int git_pack_foreach_entry_offset(
|
|
|
1422
1442
|
current_offset = (((off64_t)ntohl(*((uint32_t *)(large_offset_ptr + 0)))) << 32) |
|
|
1423
1443
|
ntohl(*((uint32_t *)(large_offset_ptr + 4)));
|
|
1424
1444
|
}
|
|
1425
|
-
|
|
1426
|
-
|
|
1445
|
+
|
|
1446
|
+
git_oid__fromraw(¤t_oid, (index + p->oid_size * i), p->oid_type);
|
|
1447
|
+
if ((error = cb(¤t_oid, current_offset, data)) != 0) {
|
|
1427
1448
|
error = git_error_set_after_callback(error);
|
|
1428
1449
|
goto cleanup;
|
|
1429
1450
|
}
|
|
1430
1451
|
}
|
|
1431
1452
|
} else {
|
|
1432
1453
|
for (i = 0; i < p->num_objects; i++) {
|
|
1433
|
-
current_offset = ntohl(*(const uint32_t *)(index +
|
|
1434
|
-
current_oid
|
|
1435
|
-
if ((error = cb(current_oid, current_offset, data)) != 0) {
|
|
1454
|
+
current_offset = ntohl(*(const uint32_t *)(index + (p->oid_size + 4) * i));
|
|
1455
|
+
git_oid__fromraw(¤t_oid, (index + (p->oid_size + 4) * i + 4), p->oid_type);
|
|
1456
|
+
if ((error = cb(¤t_oid, current_offset, data)) != 0) {
|
|
1436
1457
|
error = git_error_set_after_callback(error);
|
|
1437
1458
|
goto cleanup;
|
|
1438
1459
|
}
|
|
@@ -1444,14 +1465,20 @@ cleanup:
|
|
|
1444
1465
|
return error;
|
|
1445
1466
|
}
|
|
1446
1467
|
|
|
1447
|
-
int
|
|
1448
|
-
|
|
1468
|
+
int git_pack__lookup_id(
|
|
1469
|
+
const void *oid_lookup_table,
|
|
1470
|
+
size_t stride,
|
|
1471
|
+
unsigned lo,
|
|
1472
|
+
unsigned hi,
|
|
1473
|
+
const unsigned char *oid_prefix,
|
|
1474
|
+
const git_oid_t oid_type)
|
|
1449
1475
|
{
|
|
1450
1476
|
const unsigned char *base = oid_lookup_table;
|
|
1477
|
+
size_t oid_size = git_oid_size(oid_type);
|
|
1451
1478
|
|
|
1452
1479
|
while (lo < hi) {
|
|
1453
1480
|
unsigned mi = (lo + hi) / 2;
|
|
1454
|
-
int cmp =
|
|
1481
|
+
int cmp = git_oid_raw_cmp(base + mi * stride, oid_prefix, oid_size);
|
|
1455
1482
|
|
|
1456
1483
|
if (!cmp)
|
|
1457
1484
|
return mi;
|
|
@@ -1506,9 +1533,9 @@ static int pack_entry_find_offset(
|
|
|
1506
1533
|
lo = ((short_oid->id[0] == 0x0) ? 0 : ntohl(level1_ofs[(int)short_oid->id[0] - 1]));
|
|
1507
1534
|
|
|
1508
1535
|
if (p->index_version > 1) {
|
|
1509
|
-
stride =
|
|
1536
|
+
stride = p->oid_size;
|
|
1510
1537
|
} else {
|
|
1511
|
-
stride =
|
|
1538
|
+
stride = p->oid_size + 4;
|
|
1512
1539
|
index += 4;
|
|
1513
1540
|
}
|
|
1514
1541
|
|
|
@@ -1517,7 +1544,8 @@ static int pack_entry_find_offset(
|
|
|
1517
1544
|
short_oid->id[0], short_oid->id[1], short_oid->id[2], lo, hi, p->num_objects);
|
|
1518
1545
|
#endif
|
|
1519
1546
|
|
|
1520
|
-
pos =
|
|
1547
|
+
pos = git_pack__lookup_id(index, stride, lo, hi,
|
|
1548
|
+
short_oid->id, p->oid_type);
|
|
1521
1549
|
|
|
1522
1550
|
if (pos >= 0) {
|
|
1523
1551
|
/* An object matching exactly the oid was found */
|
|
@@ -1530,16 +1558,18 @@ static int pack_entry_find_offset(
|
|
|
1530
1558
|
if (pos < (int)p->num_objects) {
|
|
1531
1559
|
current = index + pos * stride;
|
|
1532
1560
|
|
|
1533
|
-
if (!
|
|
1561
|
+
if (!git_oid_raw_ncmp(short_oid->id, current, len))
|
|
1534
1562
|
found = 1;
|
|
1535
1563
|
}
|
|
1536
1564
|
}
|
|
1537
1565
|
|
|
1538
|
-
if (found &&
|
|
1566
|
+
if (found &&
|
|
1567
|
+
len != p->oid_hexsize &&
|
|
1568
|
+
pos + 1 < (int)p->num_objects) {
|
|
1539
1569
|
/* Check for ambiguousity */
|
|
1540
1570
|
const unsigned char *next = current + stride;
|
|
1541
1571
|
|
|
1542
|
-
if (!
|
|
1572
|
+
if (!git_oid_raw_ncmp(short_oid->id, next, len)) {
|
|
1543
1573
|
found = 2;
|
|
1544
1574
|
}
|
|
1545
1575
|
}
|
|
@@ -1560,13 +1590,13 @@ static int pack_entry_find_offset(
|
|
|
1560
1590
|
}
|
|
1561
1591
|
|
|
1562
1592
|
*offset_out = offset;
|
|
1563
|
-
|
|
1593
|
+
git_oid__fromraw(found_oid, current, p->oid_type);
|
|
1564
1594
|
|
|
1565
1595
|
#ifdef INDEX_DEBUG_LOOKUP
|
|
1566
1596
|
{
|
|
1567
|
-
|
|
1597
|
+
char hex_sha1[p->oid_hexsize + 1];
|
|
1568
1598
|
git_oid_fmt(hex_sha1, found_oid);
|
|
1569
|
-
hex_sha1[
|
|
1599
|
+
hex_sha1[p->oid_hexsize] = '\0';
|
|
1570
1600
|
printf("found lo=%d %s\n", lo, hex_sha1);
|
|
1571
1601
|
}
|
|
1572
1602
|
#endif
|
|
@@ -1588,10 +1618,10 @@ int git_pack_entry_find(
|
|
|
1588
1618
|
|
|
1589
1619
|
GIT_ASSERT_ARG(p);
|
|
1590
1620
|
|
|
1591
|
-
if (len ==
|
|
1621
|
+
if (len == p->oid_hexsize && p->num_bad_objects) {
|
|
1592
1622
|
unsigned i;
|
|
1593
1623
|
for (i = 0; i < p->num_bad_objects; i++)
|
|
1594
|
-
if (git_oid__cmp(short_oid, &p->
|
|
1624
|
+
if (git_oid__cmp(short_oid, &p->bad_object_ids[i]) == 0)
|
|
1595
1625
|
return packfile_error("bad object found in packfile");
|
|
1596
1626
|
}
|
|
1597
1627
|
|
|
@@ -1624,6 +1654,6 @@ int git_pack_entry_find(
|
|
|
1624
1654
|
e->offset = offset;
|
|
1625
1655
|
e->p = p;
|
|
1626
1656
|
|
|
1627
|
-
git_oid_cpy(&e->
|
|
1657
|
+
git_oid_cpy(&e->id, &found_oid);
|
|
1628
1658
|
return 0;
|
|
1629
1659
|
}
|
|
@@ -19,6 +19,7 @@
|
|
|
19
19
|
#include "offmap.h"
|
|
20
20
|
#include "oidmap.h"
|
|
21
21
|
#include "zstream.h"
|
|
22
|
+
#include "oid.h"
|
|
22
23
|
|
|
23
24
|
/**
|
|
24
25
|
* Function type for callbacks from git_pack_foreach_entry_offset.
|
|
@@ -32,7 +33,7 @@ typedef int git_pack_foreach_entry_offset_cb(
|
|
|
32
33
|
|
|
33
34
|
#define PACK_SIGNATURE 0x5041434b /* "PACK" */
|
|
34
35
|
#define PACK_VERSION 2
|
|
35
|
-
#define pack_version_ok(v) ((v) == htonl(2)
|
|
36
|
+
#define pack_version_ok(v) ((v) == htonl(2))
|
|
36
37
|
struct git_pack_header {
|
|
37
38
|
uint32_t hdr_signature;
|
|
38
39
|
uint32_t hdr_version;
|
|
@@ -98,13 +99,19 @@ struct git_pack_file {
|
|
|
98
99
|
|
|
99
100
|
uint32_t num_objects;
|
|
100
101
|
uint32_t num_bad_objects;
|
|
101
|
-
git_oid *
|
|
102
|
+
git_oid *bad_object_ids; /* array of git_oid */
|
|
103
|
+
|
|
104
|
+
git_oid_t oid_type;
|
|
105
|
+
unsigned oid_hexsize:7,
|
|
106
|
+
oid_size:6,
|
|
107
|
+
pack_local:1,
|
|
108
|
+
pack_keep:1,
|
|
109
|
+
has_cache:1;
|
|
102
110
|
|
|
103
111
|
int index_version;
|
|
104
112
|
git_time_t mtime;
|
|
105
|
-
unsigned pack_local:1, pack_keep:1, has_cache:1;
|
|
106
113
|
git_oidmap *idx_cache;
|
|
107
|
-
|
|
114
|
+
unsigned char **ids;
|
|
108
115
|
|
|
109
116
|
git_pack_cache bases; /* delta base cache */
|
|
110
117
|
|
|
@@ -115,21 +122,26 @@ struct git_pack_file {
|
|
|
115
122
|
};
|
|
116
123
|
|
|
117
124
|
/**
|
|
118
|
-
* Return the position where an OID (or a prefix) would be inserted within
|
|
119
|
-
* OID Lookup Table of an .idx file. This performs binary search
|
|
120
|
-
* and hi indices.
|
|
125
|
+
* Return the position where an OID (or a prefix) would be inserted within
|
|
126
|
+
* the OID Lookup Table of an .idx file. This performs binary search
|
|
127
|
+
* between the lo and hi indices.
|
|
121
128
|
*
|
|
122
|
-
* The stride parameter is provided because .idx files version 1 store the
|
|
123
|
-
* interleaved with the 4-byte file offsets of the objects within the
|
|
124
|
-
* file (stride =
|
|
125
|
-
* flat array (stride =
|
|
129
|
+
* The stride parameter is provided because .idx files version 1 store the
|
|
130
|
+
* OIDs interleaved with the 4-byte file offsets of the objects within the
|
|
131
|
+
* .pack file (stride = oid_size + 4), whereas files with version 2 store
|
|
132
|
+
* them in a contiguous flat array (stride = oid_size).
|
|
126
133
|
*/
|
|
127
|
-
int
|
|
128
|
-
|
|
134
|
+
int git_pack__lookup_id(
|
|
135
|
+
const void *id_lookup_table,
|
|
136
|
+
size_t stride,
|
|
137
|
+
unsigned lo,
|
|
138
|
+
unsigned hi,
|
|
139
|
+
const unsigned char *id_prefix,
|
|
140
|
+
const git_oid_t oid_type);
|
|
129
141
|
|
|
130
142
|
struct git_pack_entry {
|
|
131
143
|
off64_t offset;
|
|
132
|
-
git_oid
|
|
144
|
+
git_oid id;
|
|
133
145
|
struct git_pack_file *p;
|
|
134
146
|
};
|
|
135
147
|
|
|
@@ -173,12 +185,15 @@ int get_delta_base(
|
|
|
173
185
|
off64_t delta_obj_offset);
|
|
174
186
|
|
|
175
187
|
void git_packfile_free(struct git_pack_file *p, bool unlink_packfile);
|
|
176
|
-
int git_packfile_alloc(
|
|
188
|
+
int git_packfile_alloc(
|
|
189
|
+
struct git_pack_file **pack_out,
|
|
190
|
+
const char *path,
|
|
191
|
+
git_oid_t oid_type);
|
|
177
192
|
|
|
178
193
|
int git_pack_entry_find(
|
|
179
194
|
struct git_pack_entry *e,
|
|
180
195
|
struct git_pack_file *p,
|
|
181
|
-
const git_oid *
|
|
196
|
+
const git_oid *short_id,
|
|
182
197
|
size_t len);
|
|
183
198
|
int git_pack_foreach_entry(
|
|
184
199
|
struct git_pack_file *p,
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
* a Linking Exception. For full terms see the included COPYING file.
|
|
6
6
|
*/
|
|
7
7
|
#include "parse.h"
|
|
8
|
+
#include "oid.h"
|
|
8
9
|
|
|
9
10
|
int git_parse_ctx_init(git_parse_ctx *ctx, const char *content, size_t content_len)
|
|
10
11
|
{
|
|
@@ -103,11 +104,11 @@ int git_parse_advance_digit(int64_t *out, git_parse_ctx *ctx, int base)
|
|
|
103
104
|
|
|
104
105
|
int git_parse_advance_oid(git_oid *out, git_parse_ctx *ctx)
|
|
105
106
|
{
|
|
106
|
-
if (ctx->line_len <
|
|
107
|
+
if (ctx->line_len < GIT_OID_SHA1_HEXSIZE)
|
|
107
108
|
return -1;
|
|
108
|
-
if ((
|
|
109
|
+
if ((git_oid__fromstrn(out, ctx->line, GIT_OID_SHA1_HEXSIZE, GIT_OID_SHA1)) < 0)
|
|
109
110
|
return -1;
|
|
110
|
-
git_parse_advance_chars(ctx,
|
|
111
|
+
git_parse_advance_chars(ctx, GIT_OID_SHA1_HEXSIZE);
|
|
111
112
|
return 0;
|
|
112
113
|
}
|
|
113
114
|
|
|
@@ -76,15 +76,15 @@ size_t git_patch_size(
|
|
|
76
76
|
out += patch->header_size;
|
|
77
77
|
|
|
78
78
|
if (include_file_headers) {
|
|
79
|
-
|
|
79
|
+
git_str file_header = GIT_STR_INIT;
|
|
80
80
|
|
|
81
81
|
if (git_diff_delta__format_file_header(
|
|
82
82
|
&file_header, patch->delta, NULL, NULL, 0, true) < 0)
|
|
83
83
|
git_error_clear();
|
|
84
84
|
else
|
|
85
|
-
out +=
|
|
85
|
+
out += git_str_len(&file_header);
|
|
86
86
|
|
|
87
|
-
|
|
87
|
+
git_str_dispose(&file_header);
|
|
88
88
|
}
|
|
89
89
|
|
|
90
90
|
return out;
|