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
|
@@ -16,6 +16,7 @@
|
|
|
16
16
|
#include "filter.h"
|
|
17
17
|
#include "repository.h"
|
|
18
18
|
#include "blob.h"
|
|
19
|
+
#include "oid.h"
|
|
19
20
|
|
|
20
21
|
#include "git2/odb_backend.h"
|
|
21
22
|
#include "git2/oid.h"
|
|
@@ -58,10 +59,7 @@ static int error_null_oid(int error, const char *message);
|
|
|
58
59
|
|
|
59
60
|
static git_object_t odb_hardcoded_type(const git_oid *id)
|
|
60
61
|
{
|
|
61
|
-
|
|
62
|
-
0xe5, 0x4b, 0xf8, 0xd6, 0x92, 0x88, 0xfb, 0xee, 0x49, 0x04 }};
|
|
63
|
-
|
|
64
|
-
if (!git_oid_cmp(id, &empty_tree))
|
|
62
|
+
if (!git_oid_cmp(id, &git_oid__empty_tree_sha1))
|
|
65
63
|
return GIT_OBJECT_TREE;
|
|
66
64
|
|
|
67
65
|
return GIT_OBJECT_INVALID;
|
|
@@ -107,11 +105,12 @@ int git_odb__format_object_header(
|
|
|
107
105
|
return 0;
|
|
108
106
|
}
|
|
109
107
|
|
|
110
|
-
int git_odb__hashobj(git_oid *id, git_rawobj *obj)
|
|
108
|
+
int git_odb__hashobj(git_oid *id, git_rawobj *obj, git_oid_t oid_type)
|
|
111
109
|
{
|
|
112
|
-
|
|
110
|
+
git_str_vec vec[2];
|
|
113
111
|
char header[64];
|
|
114
112
|
size_t hdrlen;
|
|
113
|
+
git_hash_algorithm_t algorithm;
|
|
115
114
|
int error;
|
|
116
115
|
|
|
117
116
|
GIT_ASSERT_ARG(id);
|
|
@@ -122,6 +121,11 @@ int git_odb__hashobj(git_oid *id, git_rawobj *obj)
|
|
|
122
121
|
return -1;
|
|
123
122
|
}
|
|
124
123
|
|
|
124
|
+
if (!(algorithm = git_oid_algorithm(oid_type))) {
|
|
125
|
+
git_error_set(GIT_ERROR_INVALID, "unknown oid type");
|
|
126
|
+
return -1;
|
|
127
|
+
}
|
|
128
|
+
|
|
125
129
|
if (!obj->data && obj->len != 0) {
|
|
126
130
|
git_error_set(GIT_ERROR_INVALID, "invalid object");
|
|
127
131
|
return -1;
|
|
@@ -136,7 +140,11 @@ int git_odb__hashobj(git_oid *id, git_rawobj *obj)
|
|
|
136
140
|
vec[1].data = obj->data;
|
|
137
141
|
vec[1].len = obj->len;
|
|
138
142
|
|
|
139
|
-
|
|
143
|
+
#ifdef GIT_EXPERIMENTAL_SHA256
|
|
144
|
+
id->type = oid_type;
|
|
145
|
+
#endif
|
|
146
|
+
|
|
147
|
+
return git_hash_vec(id->id, vec, 2, algorithm);
|
|
140
148
|
}
|
|
141
149
|
|
|
142
150
|
|
|
@@ -197,24 +205,35 @@ void git_odb_object_free(git_odb_object *object)
|
|
|
197
205
|
git_cached_obj_decref(object);
|
|
198
206
|
}
|
|
199
207
|
|
|
200
|
-
int git_odb__hashfd(
|
|
208
|
+
int git_odb__hashfd(
|
|
209
|
+
git_oid *out,
|
|
210
|
+
git_file fd,
|
|
211
|
+
size_t size,
|
|
212
|
+
git_object_t object_type,
|
|
213
|
+
git_oid_t oid_type)
|
|
201
214
|
{
|
|
202
215
|
size_t hdr_len;
|
|
203
|
-
char hdr[64], buffer[
|
|
216
|
+
char hdr[64], buffer[GIT_BUFSIZE_FILEIO];
|
|
204
217
|
git_hash_ctx ctx;
|
|
218
|
+
git_hash_algorithm_t algorithm;
|
|
205
219
|
ssize_t read_len = 0;
|
|
206
220
|
int error = 0;
|
|
207
221
|
|
|
208
|
-
if (!git_object_typeisloose(
|
|
222
|
+
if (!git_object_typeisloose(object_type)) {
|
|
209
223
|
git_error_set(GIT_ERROR_INVALID, "invalid object type for hash");
|
|
210
224
|
return -1;
|
|
211
225
|
}
|
|
212
226
|
|
|
213
|
-
if ((
|
|
227
|
+
if (!(algorithm = git_oid_algorithm(oid_type))) {
|
|
228
|
+
git_error_set(GIT_ERROR_INVALID, "unknown oid type");
|
|
229
|
+
return -1;
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
if ((error = git_hash_ctx_init(&ctx, algorithm)) < 0)
|
|
214
233
|
return error;
|
|
215
234
|
|
|
216
235
|
if ((error = git_odb__format_object_header(&hdr_len, hdr,
|
|
217
|
-
sizeof(hdr), size,
|
|
236
|
+
sizeof(hdr), size, object_type)) < 0)
|
|
218
237
|
goto done;
|
|
219
238
|
|
|
220
239
|
if ((error = git_hash_update(&ctx, hdr, hdr_len)) < 0)
|
|
@@ -237,7 +256,11 @@ int git_odb__hashfd(git_oid *out, git_file fd, size_t size, git_object_t type)
|
|
|
237
256
|
goto done;
|
|
238
257
|
}
|
|
239
258
|
|
|
240
|
-
error = git_hash_final(out, &ctx);
|
|
259
|
+
error = git_hash_final(out->id, &ctx);
|
|
260
|
+
|
|
261
|
+
#ifdef GIT_EXPERIMENTAL_SHA256
|
|
262
|
+
out->type = oid_type;
|
|
263
|
+
#endif
|
|
241
264
|
|
|
242
265
|
done:
|
|
243
266
|
git_hash_ctx_cleanup(&ctx);
|
|
@@ -245,39 +268,44 @@ done:
|
|
|
245
268
|
}
|
|
246
269
|
|
|
247
270
|
int git_odb__hashfd_filtered(
|
|
248
|
-
git_oid *out,
|
|
271
|
+
git_oid *out,
|
|
272
|
+
git_file fd,
|
|
273
|
+
size_t size,
|
|
274
|
+
git_object_t object_type,
|
|
275
|
+
git_oid_t oid_type,
|
|
276
|
+
git_filter_list *fl)
|
|
249
277
|
{
|
|
250
278
|
int error;
|
|
251
|
-
|
|
279
|
+
git_str raw = GIT_STR_INIT;
|
|
252
280
|
|
|
253
281
|
if (!fl)
|
|
254
|
-
return git_odb__hashfd(out, fd, size,
|
|
282
|
+
return git_odb__hashfd(out, fd, size, object_type, oid_type);
|
|
255
283
|
|
|
256
284
|
/* size of data is used in header, so we have to read the whole file
|
|
257
285
|
* into memory to apply filters before beginning to calculate the hash
|
|
258
286
|
*/
|
|
259
287
|
|
|
260
288
|
if (!(error = git_futils_readbuffer_fd(&raw, fd, size))) {
|
|
261
|
-
|
|
289
|
+
git_str post = GIT_STR_INIT;
|
|
262
290
|
|
|
263
291
|
error = git_filter_list__convert_buf(&post, fl, &raw);
|
|
264
292
|
|
|
265
293
|
if (!error)
|
|
266
|
-
error =
|
|
294
|
+
error = git_odb__hash(out, post.ptr, post.size, object_type, oid_type);
|
|
267
295
|
|
|
268
|
-
|
|
296
|
+
git_str_dispose(&post);
|
|
269
297
|
}
|
|
270
298
|
|
|
271
299
|
return error;
|
|
272
300
|
}
|
|
273
301
|
|
|
274
|
-
int git_odb__hashlink(git_oid *out, const char *path)
|
|
302
|
+
int git_odb__hashlink(git_oid *out, const char *path, git_oid_t oid_type)
|
|
275
303
|
{
|
|
276
304
|
struct stat st;
|
|
277
305
|
int size;
|
|
278
306
|
int result;
|
|
279
307
|
|
|
280
|
-
if (
|
|
308
|
+
if (git_fs_path_lstat(path, &st) < 0)
|
|
281
309
|
return -1;
|
|
282
310
|
|
|
283
311
|
if (!git__is_int(st.st_size) || (int)st.st_size < 0) {
|
|
@@ -305,20 +333,24 @@ int git_odb__hashlink(git_oid *out, const char *path)
|
|
|
305
333
|
GIT_ASSERT(read_len <= size);
|
|
306
334
|
link_data[read_len] = '\0';
|
|
307
335
|
|
|
308
|
-
result =
|
|
336
|
+
result = git_odb__hash(out, link_data, read_len, GIT_OBJECT_BLOB, oid_type);
|
|
309
337
|
git__free(link_data);
|
|
310
338
|
} else {
|
|
311
339
|
int fd = git_futils_open_ro(path);
|
|
312
340
|
if (fd < 0)
|
|
313
341
|
return -1;
|
|
314
|
-
result = git_odb__hashfd(out, fd, size, GIT_OBJECT_BLOB);
|
|
342
|
+
result = git_odb__hashfd(out, fd, size, GIT_OBJECT_BLOB, oid_type);
|
|
315
343
|
p_close(fd);
|
|
316
344
|
}
|
|
317
345
|
|
|
318
346
|
return result;
|
|
319
347
|
}
|
|
320
348
|
|
|
321
|
-
int
|
|
349
|
+
int git_odb__hashfile(
|
|
350
|
+
git_oid *out,
|
|
351
|
+
const char *path,
|
|
352
|
+
git_object_t object_type,
|
|
353
|
+
git_oid_t oid_type)
|
|
322
354
|
{
|
|
323
355
|
uint64_t size;
|
|
324
356
|
int fd, error = 0;
|
|
@@ -335,14 +367,38 @@ int git_odb_hashfile(git_oid *out, const char *path, git_object_t type)
|
|
|
335
367
|
goto done;
|
|
336
368
|
}
|
|
337
369
|
|
|
338
|
-
error = git_odb__hashfd(out, fd, (size_t)size,
|
|
370
|
+
error = git_odb__hashfd(out, fd, (size_t)size, object_type, oid_type);
|
|
339
371
|
|
|
340
372
|
done:
|
|
341
373
|
p_close(fd);
|
|
342
374
|
return error;
|
|
343
375
|
}
|
|
344
376
|
|
|
345
|
-
|
|
377
|
+
#ifdef GIT_EXPERIMENTAL_SHA256
|
|
378
|
+
int git_odb_hashfile(
|
|
379
|
+
git_oid *out,
|
|
380
|
+
const char *path,
|
|
381
|
+
git_object_t object_type,
|
|
382
|
+
git_oid_t oid_type)
|
|
383
|
+
{
|
|
384
|
+
return git_odb__hashfile(out, path, object_type, oid_type);
|
|
385
|
+
}
|
|
386
|
+
#else
|
|
387
|
+
int git_odb_hashfile(
|
|
388
|
+
git_oid *out,
|
|
389
|
+
const char *path,
|
|
390
|
+
git_object_t object_type)
|
|
391
|
+
{
|
|
392
|
+
return git_odb__hashfile(out, path, object_type, GIT_OID_SHA1);
|
|
393
|
+
}
|
|
394
|
+
#endif
|
|
395
|
+
|
|
396
|
+
int git_odb__hash(
|
|
397
|
+
git_oid *id,
|
|
398
|
+
const void *data,
|
|
399
|
+
size_t len,
|
|
400
|
+
git_object_t object_type,
|
|
401
|
+
git_oid_t oid_type)
|
|
346
402
|
{
|
|
347
403
|
git_rawobj raw;
|
|
348
404
|
|
|
@@ -350,10 +406,31 @@ int git_odb_hash(git_oid *id, const void *data, size_t len, git_object_t type)
|
|
|
350
406
|
|
|
351
407
|
raw.data = (void *)data;
|
|
352
408
|
raw.len = len;
|
|
353
|
-
raw.type =
|
|
409
|
+
raw.type = object_type;
|
|
410
|
+
|
|
411
|
+
return git_odb__hashobj(id, &raw, oid_type);
|
|
412
|
+
}
|
|
354
413
|
|
|
355
|
-
|
|
414
|
+
#ifdef GIT_EXPERIMENTAL_SHA256
|
|
415
|
+
int git_odb_hash(
|
|
416
|
+
git_oid *out,
|
|
417
|
+
const void *data,
|
|
418
|
+
size_t len,
|
|
419
|
+
git_object_t object_type,
|
|
420
|
+
git_oid_t oid_type)
|
|
421
|
+
{
|
|
422
|
+
return git_odb__hash(out, data, len, object_type, oid_type);
|
|
423
|
+
}
|
|
424
|
+
#else
|
|
425
|
+
int git_odb_hash(
|
|
426
|
+
git_oid *out,
|
|
427
|
+
const void *data,
|
|
428
|
+
size_t len,
|
|
429
|
+
git_object_t type)
|
|
430
|
+
{
|
|
431
|
+
return git_odb__hash(out, data, len, type, GIT_OID_SHA1);
|
|
356
432
|
}
|
|
433
|
+
#endif
|
|
357
434
|
|
|
358
435
|
/**
|
|
359
436
|
* FAKE WSTREAM
|
|
@@ -444,11 +521,28 @@ static int backend_sort_cmp(const void *a, const void *b)
|
|
|
444
521
|
return (backend_b->priority - backend_a->priority);
|
|
445
522
|
}
|
|
446
523
|
|
|
447
|
-
|
|
524
|
+
static void normalize_options(
|
|
525
|
+
git_odb_options *opts,
|
|
526
|
+
const git_odb_options *given_opts)
|
|
527
|
+
{
|
|
528
|
+
git_odb_options init = GIT_ODB_OPTIONS_INIT;
|
|
529
|
+
|
|
530
|
+
if (given_opts)
|
|
531
|
+
memcpy(opts, given_opts, sizeof(git_odb_options));
|
|
532
|
+
else
|
|
533
|
+
memcpy(opts, &init, sizeof(git_odb_options));
|
|
534
|
+
|
|
535
|
+
if (!opts->oid_type)
|
|
536
|
+
opts->oid_type = GIT_OID_DEFAULT;
|
|
537
|
+
}
|
|
538
|
+
|
|
539
|
+
int git_odb__new(git_odb **out, const git_odb_options *opts)
|
|
448
540
|
{
|
|
449
541
|
git_odb *db = git__calloc(1, sizeof(*db));
|
|
450
542
|
GIT_ERROR_CHECK_ALLOC(db);
|
|
451
543
|
|
|
544
|
+
normalize_options(&db->options, opts);
|
|
545
|
+
|
|
452
546
|
if (git_mutex_init(&db->lock) < 0) {
|
|
453
547
|
git__free(db);
|
|
454
548
|
return -1;
|
|
@@ -470,6 +564,18 @@ int git_odb_new(git_odb **out)
|
|
|
470
564
|
return 0;
|
|
471
565
|
}
|
|
472
566
|
|
|
567
|
+
#ifdef GIT_EXPERIMENTAL_SHA256
|
|
568
|
+
int git_odb_new(git_odb **out, const git_odb_options *opts)
|
|
569
|
+
{
|
|
570
|
+
return git_odb__new(out, opts);
|
|
571
|
+
}
|
|
572
|
+
#else
|
|
573
|
+
int git_odb_new(git_odb **out)
|
|
574
|
+
{
|
|
575
|
+
return git_odb__new(out, NULL);
|
|
576
|
+
}
|
|
577
|
+
#endif
|
|
578
|
+
|
|
473
579
|
static int add_backend_internal(
|
|
474
580
|
git_odb *odb, git_odb_backend *backend,
|
|
475
581
|
int priority, bool is_alternate, ino_t disk_inode)
|
|
@@ -577,6 +683,8 @@ int git_odb__add_default_backends(
|
|
|
577
683
|
struct stat st;
|
|
578
684
|
ino_t inode;
|
|
579
685
|
git_odb_backend *loose, *packed;
|
|
686
|
+
git_odb_backend_loose_options loose_opts = GIT_ODB_BACKEND_LOOSE_OPTIONS_INIT;
|
|
687
|
+
git_odb_backend_pack_options pack_opts = GIT_ODB_BACKEND_PACK_OPTIONS_INIT;
|
|
580
688
|
|
|
581
689
|
/* TODO: inodes are not really relevant on Win32, so we need to find
|
|
582
690
|
* a cross-platform workaround for this */
|
|
@@ -611,14 +719,29 @@ int git_odb__add_default_backends(
|
|
|
611
719
|
git_mutex_unlock(&db->lock);
|
|
612
720
|
#endif
|
|
613
721
|
|
|
722
|
+
if (db->do_fsync)
|
|
723
|
+
loose_opts.flags |= GIT_ODB_BACKEND_LOOSE_FSYNC;
|
|
724
|
+
|
|
725
|
+
loose_opts.oid_type = db->options.oid_type;
|
|
726
|
+
pack_opts.oid_type = db->options.oid_type;
|
|
727
|
+
|
|
614
728
|
/* add the loose object backend */
|
|
615
|
-
if (
|
|
729
|
+
if (git_odb__backend_loose(&loose, objects_dir, &loose_opts) < 0 ||
|
|
616
730
|
add_backend_internal(db, loose, git_odb__loose_priority, as_alternates, inode) < 0)
|
|
617
731
|
return -1;
|
|
618
732
|
|
|
619
733
|
/* add the packed file backend */
|
|
620
|
-
|
|
621
|
-
|
|
734
|
+
#ifdef GIT_EXPERIMENTAL_SHA256
|
|
735
|
+
if (git_odb_backend_pack(&packed, objects_dir, &pack_opts) < 0)
|
|
736
|
+
return -1;
|
|
737
|
+
#else
|
|
738
|
+
GIT_UNUSED(pack_opts);
|
|
739
|
+
|
|
740
|
+
if (git_odb_backend_pack(&packed, objects_dir) < 0)
|
|
741
|
+
return -1;
|
|
742
|
+
#endif
|
|
743
|
+
|
|
744
|
+
if (add_backend_internal(db, packed, git_odb__packed_priority, as_alternates, inode) < 0)
|
|
622
745
|
return -1;
|
|
623
746
|
|
|
624
747
|
if (git_mutex_lock(&db->lock) < 0) {
|
|
@@ -636,8 +759,8 @@ int git_odb__add_default_backends(
|
|
|
636
759
|
|
|
637
760
|
static int load_alternates(git_odb *odb, const char *objects_dir, int alternate_depth)
|
|
638
761
|
{
|
|
639
|
-
|
|
640
|
-
|
|
762
|
+
git_str alternates_path = GIT_STR_INIT;
|
|
763
|
+
git_str alternates_buf = GIT_STR_INIT;
|
|
641
764
|
char *buffer;
|
|
642
765
|
const char *alternate;
|
|
643
766
|
int result = 0;
|
|
@@ -646,16 +769,16 @@ static int load_alternates(git_odb *odb, const char *objects_dir, int alternate_
|
|
|
646
769
|
if (alternate_depth > GIT_ALTERNATES_MAX_DEPTH)
|
|
647
770
|
return 0;
|
|
648
771
|
|
|
649
|
-
if (
|
|
772
|
+
if (git_str_joinpath(&alternates_path, objects_dir, GIT_ALTERNATES_FILE) < 0)
|
|
650
773
|
return -1;
|
|
651
774
|
|
|
652
|
-
if (
|
|
653
|
-
|
|
775
|
+
if (git_fs_path_exists(alternates_path.ptr) == false) {
|
|
776
|
+
git_str_dispose(&alternates_path);
|
|
654
777
|
return 0;
|
|
655
778
|
}
|
|
656
779
|
|
|
657
780
|
if (git_futils_readbuffer(&alternates_buf, alternates_path.ptr) < 0) {
|
|
658
|
-
|
|
781
|
+
git_str_dispose(&alternates_path);
|
|
659
782
|
return -1;
|
|
660
783
|
}
|
|
661
784
|
|
|
@@ -672,17 +795,17 @@ static int load_alternates(git_odb *odb, const char *objects_dir, int alternate_
|
|
|
672
795
|
* the current repository.
|
|
673
796
|
*/
|
|
674
797
|
if (*alternate == '.' && !alternate_depth) {
|
|
675
|
-
if ((result =
|
|
798
|
+
if ((result = git_str_joinpath(&alternates_path, objects_dir, alternate)) < 0)
|
|
676
799
|
break;
|
|
677
|
-
alternate =
|
|
800
|
+
alternate = git_str_cstr(&alternates_path);
|
|
678
801
|
}
|
|
679
802
|
|
|
680
803
|
if ((result = git_odb__add_default_backends(odb, alternate, true, alternate_depth + 1)) < 0)
|
|
681
804
|
break;
|
|
682
805
|
}
|
|
683
806
|
|
|
684
|
-
|
|
685
|
-
|
|
807
|
+
git_str_dispose(&alternates_path);
|
|
808
|
+
git_str_dispose(&alternates_buf);
|
|
686
809
|
|
|
687
810
|
return result;
|
|
688
811
|
}
|
|
@@ -709,7 +832,10 @@ int git_odb_set_commit_graph(git_odb *odb, git_commit_graph *cgraph)
|
|
|
709
832
|
return error;
|
|
710
833
|
}
|
|
711
834
|
|
|
712
|
-
int
|
|
835
|
+
int git_odb__open(
|
|
836
|
+
git_odb **out,
|
|
837
|
+
const char *objects_dir,
|
|
838
|
+
const git_odb_options *opts)
|
|
713
839
|
{
|
|
714
840
|
git_odb *db;
|
|
715
841
|
|
|
@@ -718,7 +844,7 @@ int git_odb_open(git_odb **out, const char *objects_dir)
|
|
|
718
844
|
|
|
719
845
|
*out = NULL;
|
|
720
846
|
|
|
721
|
-
if (
|
|
847
|
+
if (git_odb__new(&db, opts) < 0)
|
|
722
848
|
return -1;
|
|
723
849
|
|
|
724
850
|
if (git_odb__add_default_backends(db, objects_dir, 0, 0) < 0) {
|
|
@@ -882,6 +1008,11 @@ int git_odb__freshen(git_odb *db, const git_oid *id)
|
|
|
882
1008
|
}
|
|
883
1009
|
|
|
884
1010
|
int git_odb_exists(git_odb *db, const git_oid *id)
|
|
1011
|
+
{
|
|
1012
|
+
return git_odb_exists_ext(db, id, 0);
|
|
1013
|
+
}
|
|
1014
|
+
|
|
1015
|
+
int git_odb_exists_ext(git_odb *db, const git_oid *id, unsigned int flags)
|
|
885
1016
|
{
|
|
886
1017
|
git_odb_object *object;
|
|
887
1018
|
|
|
@@ -899,7 +1030,7 @@ int git_odb_exists(git_odb *db, const git_oid *id)
|
|
|
899
1030
|
if (odb_exists_1(db, id, false))
|
|
900
1031
|
return 1;
|
|
901
1032
|
|
|
902
|
-
if (!git_odb_refresh(db))
|
|
1033
|
+
if (!(flags & GIT_ODB_LOOKUP_NO_REFRESH) && !git_odb_refresh(db))
|
|
903
1034
|
return odb_exists_1(db, id, true);
|
|
904
1035
|
|
|
905
1036
|
/* Failed to refresh, hence not found */
|
|
@@ -911,7 +1042,7 @@ static int odb_exists_prefix_1(git_oid *out, git_odb *db,
|
|
|
911
1042
|
{
|
|
912
1043
|
size_t i;
|
|
913
1044
|
int error = GIT_ENOTFOUND, num_found = 0;
|
|
914
|
-
git_oid last_found =
|
|
1045
|
+
git_oid last_found = GIT_OID_NONE, found;
|
|
915
1046
|
|
|
916
1047
|
if ((error = git_mutex_lock(&db->lock)) < 0) {
|
|
917
1048
|
git_error_set(GIT_ERROR_ODB, "failed to acquire the odb lock");
|
|
@@ -962,7 +1093,7 @@ int git_odb_exists_prefix(
|
|
|
962
1093
|
git_oid *out, git_odb *db, const git_oid *short_id, size_t len)
|
|
963
1094
|
{
|
|
964
1095
|
int error;
|
|
965
|
-
git_oid key =
|
|
1096
|
+
git_oid key = GIT_OID_NONE;
|
|
966
1097
|
|
|
967
1098
|
GIT_ASSERT_ARG(db);
|
|
968
1099
|
GIT_ASSERT_ARG(short_id);
|
|
@@ -970,7 +1101,7 @@ int git_odb_exists_prefix(
|
|
|
970
1101
|
if (len < GIT_OID_MINPREFIXLEN)
|
|
971
1102
|
return git_odb__error_ambiguous("prefix length too short");
|
|
972
1103
|
|
|
973
|
-
if (len >=
|
|
1104
|
+
if (len >= git_oid_hexsize(db->options.oid_type)) {
|
|
974
1105
|
if (git_odb_exists(db, short_id)) {
|
|
975
1106
|
if (out)
|
|
976
1107
|
git_oid_cpy(out, short_id);
|
|
@@ -999,11 +1130,13 @@ int git_odb_expand_ids(
|
|
|
999
1130
|
git_odb_expand_id *ids,
|
|
1000
1131
|
size_t count)
|
|
1001
1132
|
{
|
|
1002
|
-
size_t i;
|
|
1133
|
+
size_t hex_size, i;
|
|
1003
1134
|
|
|
1004
1135
|
GIT_ASSERT_ARG(db);
|
|
1005
1136
|
GIT_ASSERT_ARG(ids);
|
|
1006
1137
|
|
|
1138
|
+
hex_size = git_oid_hexsize(db->options.oid_type);
|
|
1139
|
+
|
|
1007
1140
|
for (i = 0; i < count; i++) {
|
|
1008
1141
|
git_odb_expand_id *query = &ids[i];
|
|
1009
1142
|
int error = GIT_EAMBIGUOUS;
|
|
@@ -1012,13 +1145,13 @@ int git_odb_expand_ids(
|
|
|
1012
1145
|
query->type = GIT_OBJECT_ANY;
|
|
1013
1146
|
|
|
1014
1147
|
/* if we have a short OID, expand it first */
|
|
1015
|
-
if (query->length >= GIT_OID_MINPREFIXLEN && query->length <
|
|
1148
|
+
if (query->length >= GIT_OID_MINPREFIXLEN && query->length < hex_size) {
|
|
1016
1149
|
git_oid actual_id;
|
|
1017
1150
|
|
|
1018
1151
|
error = odb_exists_prefix_1(&actual_id, db, &query->id, query->length, false);
|
|
1019
1152
|
if (!error) {
|
|
1020
1153
|
git_oid_cpy(&query->id, &actual_id);
|
|
1021
|
-
query->length =
|
|
1154
|
+
query->length = (unsigned short)hex_size;
|
|
1022
1155
|
}
|
|
1023
1156
|
}
|
|
1024
1157
|
|
|
@@ -1026,7 +1159,7 @@ int git_odb_expand_ids(
|
|
|
1026
1159
|
* now we ought to have a 40-char OID, either because we've expanded it
|
|
1027
1160
|
* or because the user passed a full OID. Ensure its type is right.
|
|
1028
1161
|
*/
|
|
1029
|
-
if (query->length >=
|
|
1162
|
+
if (query->length >= hex_size) {
|
|
1030
1163
|
git_object_t actual_type;
|
|
1031
1164
|
|
|
1032
1165
|
error = odb_otype_fast(&actual_type, db, &query->id);
|
|
@@ -1046,7 +1179,7 @@ int git_odb_expand_ids(
|
|
|
1046
1179
|
/* the object is missing or ambiguous */
|
|
1047
1180
|
case GIT_ENOTFOUND:
|
|
1048
1181
|
case GIT_EAMBIGUOUS:
|
|
1049
|
-
|
|
1182
|
+
git_oid_clear(&query->id, db->options.oid_type);
|
|
1050
1183
|
query->length = 0;
|
|
1051
1184
|
query->type = 0;
|
|
1052
1185
|
break;
|
|
@@ -1064,7 +1197,7 @@ int git_odb_expand_ids(
|
|
|
1064
1197
|
int git_odb_read_header(size_t *len_p, git_object_t *type_p, git_odb *db, const git_oid *id)
|
|
1065
1198
|
{
|
|
1066
1199
|
int error;
|
|
1067
|
-
git_odb_object *object;
|
|
1200
|
+
git_odb_object *object = NULL;
|
|
1068
1201
|
|
|
1069
1202
|
error = git_odb__read_header_or_object(&object, len_p, type_p, db, id);
|
|
1070
1203
|
|
|
@@ -1154,7 +1287,7 @@ int git_odb__read_header_or_object(
|
|
|
1154
1287
|
error = odb_read_header_1(len_p, type_p, db, id, true);
|
|
1155
1288
|
|
|
1156
1289
|
if (error == GIT_ENOTFOUND)
|
|
1157
|
-
return git_odb__error_notfound("cannot read header for", id,
|
|
1290
|
+
return git_odb__error_notfound("cannot read header for", id, git_oid_hexsize(db->options.oid_type));
|
|
1158
1291
|
|
|
1159
1292
|
/* we found the header; return early */
|
|
1160
1293
|
if (!error)
|
|
@@ -1176,8 +1309,11 @@ int git_odb__read_header_or_object(
|
|
|
1176
1309
|
return error;
|
|
1177
1310
|
}
|
|
1178
1311
|
|
|
1179
|
-
static int odb_read_1(
|
|
1180
|
-
|
|
1312
|
+
static int odb_read_1(
|
|
1313
|
+
git_odb_object **out,
|
|
1314
|
+
git_odb *db,
|
|
1315
|
+
const git_oid *id,
|
|
1316
|
+
bool only_refreshed)
|
|
1181
1317
|
{
|
|
1182
1318
|
size_t i;
|
|
1183
1319
|
git_rawobj raw;
|
|
@@ -1221,7 +1357,7 @@ static int odb_read_1(git_odb_object **out, git_odb *db, const git_oid *id,
|
|
|
1221
1357
|
return GIT_ENOTFOUND;
|
|
1222
1358
|
|
|
1223
1359
|
if (git_odb__strict_hash_verification) {
|
|
1224
|
-
if ((error =
|
|
1360
|
+
if ((error = git_odb__hash(&hashed, raw.data, raw.len, raw.type, db->options.oid_type)) < 0)
|
|
1225
1361
|
goto out;
|
|
1226
1362
|
|
|
1227
1363
|
if (!git_oid_equal(id, &hashed)) {
|
|
@@ -1265,7 +1401,7 @@ int git_odb_read(git_odb_object **out, git_odb *db, const git_oid *id)
|
|
|
1265
1401
|
error = odb_read_1(out, db, id, true);
|
|
1266
1402
|
|
|
1267
1403
|
if (error == GIT_ENOTFOUND)
|
|
1268
|
-
return git_odb__error_notfound("no match for id", id,
|
|
1404
|
+
return git_odb__error_notfound("no match for id", id, git_oid_hexsize(git_oid_type(id)));
|
|
1269
1405
|
|
|
1270
1406
|
return error;
|
|
1271
1407
|
}
|
|
@@ -1302,7 +1438,7 @@ static int read_prefix_1(git_odb_object **out, git_odb *db,
|
|
|
1302
1438
|
{
|
|
1303
1439
|
size_t i;
|
|
1304
1440
|
int error = 0;
|
|
1305
|
-
git_oid found_full_oid =
|
|
1441
|
+
git_oid found_full_oid = GIT_OID_NONE;
|
|
1306
1442
|
git_rawobj raw = {0};
|
|
1307
1443
|
void *data = NULL;
|
|
1308
1444
|
bool found = false;
|
|
@@ -1337,15 +1473,15 @@ static int read_prefix_1(git_odb_object **out, git_odb *db,
|
|
|
1337
1473
|
data = raw.data;
|
|
1338
1474
|
|
|
1339
1475
|
if (found && git_oid__cmp(&full_oid, &found_full_oid)) {
|
|
1340
|
-
|
|
1476
|
+
git_str buf = GIT_STR_INIT;
|
|
1341
1477
|
|
|
1342
|
-
|
|
1478
|
+
git_str_printf(&buf, "multiple matches for prefix: %s",
|
|
1343
1479
|
git_oid_tostr_s(&full_oid));
|
|
1344
|
-
|
|
1480
|
+
git_str_printf(&buf, " %s",
|
|
1345
1481
|
git_oid_tostr_s(&found_full_oid));
|
|
1346
1482
|
|
|
1347
1483
|
error = git_odb__error_ambiguous(buf.ptr);
|
|
1348
|
-
|
|
1484
|
+
git_str_dispose(&buf);
|
|
1349
1485
|
git_mutex_unlock(&db->lock);
|
|
1350
1486
|
goto out;
|
|
1351
1487
|
}
|
|
@@ -1362,7 +1498,7 @@ static int read_prefix_1(git_odb_object **out, git_odb *db,
|
|
|
1362
1498
|
if (git_odb__strict_hash_verification) {
|
|
1363
1499
|
git_oid hash;
|
|
1364
1500
|
|
|
1365
|
-
if ((error =
|
|
1501
|
+
if ((error = git_odb__hash(&hash, raw.data, raw.len, raw.type, db->options.oid_type)) < 0)
|
|
1366
1502
|
goto out;
|
|
1367
1503
|
|
|
1368
1504
|
if (!git_oid_equal(&found_full_oid, &hash)) {
|
|
@@ -1388,19 +1524,22 @@ out:
|
|
|
1388
1524
|
int git_odb_read_prefix(
|
|
1389
1525
|
git_odb_object **out, git_odb *db, const git_oid *short_id, size_t len)
|
|
1390
1526
|
{
|
|
1391
|
-
git_oid key =
|
|
1527
|
+
git_oid key = GIT_OID_NONE;
|
|
1528
|
+
size_t hex_size;
|
|
1392
1529
|
int error;
|
|
1393
1530
|
|
|
1394
1531
|
GIT_ASSERT_ARG(out);
|
|
1395
1532
|
GIT_ASSERT_ARG(db);
|
|
1396
1533
|
|
|
1534
|
+
hex_size = git_oid_hexsize(db->options.oid_type);
|
|
1535
|
+
|
|
1397
1536
|
if (len < GIT_OID_MINPREFIXLEN)
|
|
1398
1537
|
return git_odb__error_ambiguous("prefix length too short");
|
|
1399
1538
|
|
|
1400
|
-
if (len >
|
|
1401
|
-
len =
|
|
1539
|
+
if (len > hex_size)
|
|
1540
|
+
len = hex_size;
|
|
1402
1541
|
|
|
1403
|
-
if (len ==
|
|
1542
|
+
if (len == hex_size) {
|
|
1404
1543
|
*out = git_cache_get_raw(odb_cache(db), short_id);
|
|
1405
1544
|
if (*out != NULL)
|
|
1406
1545
|
return 0;
|
|
@@ -1460,7 +1599,7 @@ int git_odb_write(
|
|
|
1460
1599
|
GIT_ASSERT_ARG(oid);
|
|
1461
1600
|
GIT_ASSERT_ARG(db);
|
|
1462
1601
|
|
|
1463
|
-
if ((error =
|
|
1602
|
+
if ((error = git_odb__hash(oid, data, len, type, db->options.oid_type)) < 0)
|
|
1464
1603
|
return error;
|
|
1465
1604
|
|
|
1466
1605
|
if (git_oid_is_zero(oid))
|
|
@@ -1496,10 +1635,10 @@ int git_odb_write(
|
|
|
1496
1635
|
if ((error = git_odb_open_wstream(&stream, db, len, type)) != 0)
|
|
1497
1636
|
return error;
|
|
1498
1637
|
|
|
1499
|
-
stream->write(stream, data, len)
|
|
1500
|
-
|
|
1501
|
-
git_odb_stream_free(stream);
|
|
1638
|
+
if ((error = stream->write(stream, data, len)) == 0)
|
|
1639
|
+
error = stream->finalize_write(stream, oid);
|
|
1502
1640
|
|
|
1641
|
+
git_odb_stream_free(stream);
|
|
1503
1642
|
return error;
|
|
1504
1643
|
}
|
|
1505
1644
|
|
|
@@ -1561,10 +1700,13 @@ int git_odb_open_wstream(
|
|
|
1561
1700
|
ctx = git__malloc(sizeof(git_hash_ctx));
|
|
1562
1701
|
GIT_ERROR_CHECK_ALLOC(ctx);
|
|
1563
1702
|
|
|
1564
|
-
if ((error = git_hash_ctx_init(ctx)) < 0 ||
|
|
1565
|
-
|
|
1703
|
+
if ((error = git_hash_ctx_init(ctx, git_oid_algorithm(db->options.oid_type))) < 0 ||
|
|
1704
|
+
(error = hash_header(ctx, size, type)) < 0)
|
|
1566
1705
|
goto done;
|
|
1567
1706
|
|
|
1707
|
+
#ifdef GIT_EXPERIMENTAL_SHA256
|
|
1708
|
+
(*stream)->oid_type = db->options.oid_type;
|
|
1709
|
+
#endif
|
|
1568
1710
|
(*stream)->hash_ctx = ctx;
|
|
1569
1711
|
(*stream)->declared_size = size;
|
|
1570
1712
|
(*stream)->received_bytes = 0;
|
|
@@ -1607,7 +1749,11 @@ int git_odb_stream_finalize_write(git_oid *out, git_odb_stream *stream)
|
|
|
1607
1749
|
return git_odb_stream__invalid_length(stream,
|
|
1608
1750
|
"stream_finalize_write()");
|
|
1609
1751
|
|
|
1610
|
-
git_hash_final(out, stream->hash_ctx);
|
|
1752
|
+
git_hash_final(out->id, stream->hash_ctx);
|
|
1753
|
+
|
|
1754
|
+
#ifdef GIT_EXPERIMENTAL_SHA256
|
|
1755
|
+
out->type = stream->oid_type;
|
|
1756
|
+
#endif
|
|
1611
1757
|
|
|
1612
1758
|
if (git_odb__freshen(stream->backend->odb, out))
|
|
1613
1759
|
return 0;
|
|
@@ -1783,10 +1929,11 @@ int git_odb_refresh(struct git_odb *db)
|
|
|
1783
1929
|
|
|
1784
1930
|
int git_odb__error_mismatch(const git_oid *expected, const git_oid *actual)
|
|
1785
1931
|
{
|
|
1786
|
-
char expected_oid[
|
|
1932
|
+
char expected_oid[GIT_OID_MAX_HEXSIZE + 1],
|
|
1933
|
+
actual_oid[GIT_OID_MAX_HEXSIZE + 1];
|
|
1787
1934
|
|
|
1788
|
-
git_oid_tostr(expected_oid,
|
|
1789
|
-
git_oid_tostr(actual_oid,
|
|
1935
|
+
git_oid_tostr(expected_oid, git_oid_hexsize(git_oid_type(expected)) + 1, expected);
|
|
1936
|
+
git_oid_tostr(actual_oid, git_oid_hexsize(git_oid_type(actual)) + 1, actual);
|
|
1790
1937
|
|
|
1791
1938
|
git_error_set(GIT_ERROR_ODB, "object hash mismatch - expected %s but got %s",
|
|
1792
1939
|
expected_oid, actual_oid);
|
|
@@ -1798,7 +1945,7 @@ int git_odb__error_notfound(
|
|
|
1798
1945
|
const char *message, const git_oid *oid, size_t oid_len)
|
|
1799
1946
|
{
|
|
1800
1947
|
if (oid != NULL) {
|
|
1801
|
-
char oid_str[
|
|
1948
|
+
char oid_str[GIT_OID_MAX_HEXSIZE + 1];
|
|
1802
1949
|
git_oid_tostr(oid_str, oid_len+1, oid);
|
|
1803
1950
|
git_error_set(GIT_ERROR_ODB, "object not found - %s (%.*s)",
|
|
1804
1951
|
message, (int) oid_len, oid_str);
|
|
@@ -1816,7 +1963,7 @@ static int error_null_oid(int error, const char *message)
|
|
|
1816
1963
|
|
|
1817
1964
|
int git_odb__error_ambiguous(const char *message)
|
|
1818
1965
|
{
|
|
1819
|
-
git_error_set(GIT_ERROR_ODB, "ambiguous
|
|
1966
|
+
git_error_set(GIT_ERROR_ODB, "ambiguous OID prefix - %s", message);
|
|
1820
1967
|
return GIT_EAMBIGUOUS;
|
|
1821
1968
|
}
|
|
1822
1969
|
|