rugged 1.3.2.3 → 1.4.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/ext/rugged/extconf.rb +1 -1
- data/ext/rugged/rugged_config.c +7 -2
- data/ext/rugged/rugged_remote.c +17 -0
- data/lib/rugged/version.rb +1 -1
- data/vendor/libgit2/CMakeLists.txt +103 -276
- data/vendor/libgit2/COPYING +36 -19
- data/vendor/libgit2/cmake/AddCFlagIfSupported.cmake +21 -21
- data/vendor/libgit2/cmake/DefaultCFlags.cmake +154 -0
- data/vendor/libgit2/cmake/EnableWarnings.cmake +13 -13
- 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 +13 -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 +39 -49
- 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 +31 -31
- data/vendor/libgit2/deps/ntlmclient/crypt_openssl.c +1 -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 +0 -7
- data/vendor/libgit2/deps/zlib/crc32.c +288 -975
- data/vendor/libgit2/deps/zlib/crc32.h +436 -9441
- data/vendor/libgit2/deps/zlib/deflate.c +31 -83
- data/vendor/libgit2/deps/zlib/deflate.h +15 -12
- data/vendor/libgit2/deps/zlib/gzguts.h +2 -3
- data/vendor/libgit2/deps/zlib/infback.c +1 -2
- data/vendor/libgit2/deps/zlib/inffast.c +14 -14
- data/vendor/libgit2/deps/zlib/inflate.c +8 -39
- data/vendor/libgit2/deps/zlib/inflate.h +2 -3
- data/vendor/libgit2/deps/zlib/inftrees.c +3 -3
- data/vendor/libgit2/deps/zlib/trees.c +48 -27
- data/vendor/libgit2/deps/zlib/zlib.h +100 -126
- data/vendor/libgit2/deps/zlib/zutil.c +2 -2
- data/vendor/libgit2/deps/zlib/zutil.h +9 -12
- 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 +2 -0
- 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 +5 -12
- data/vendor/libgit2/include/git2/config.h +19 -3
- 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 +1 -1
- data/vendor/libgit2/include/git2/describe.h +7 -2
- data/vendor/libgit2/include/git2/diff.h +17 -9
- data/vendor/libgit2/include/git2/email.h +1 -1
- data/vendor/libgit2/include/git2/errors.h +1 -2
- 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 +19 -0
- data/vendor/libgit2/include/git2/merge.h +23 -3
- data/vendor/libgit2/include/git2/message.h +2 -0
- data/vendor/libgit2/include/git2/object.h +23 -0
- data/vendor/libgit2/include/git2/odb.h +37 -7
- data/vendor/libgit2/include/git2/odb_backend.h +1 -1
- 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 +14 -9
- 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 +3 -3
- data/vendor/libgit2/include/git2/status.h +9 -3
- 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 +2 -5
- data/vendor/libgit2/include/git2/sys/remote.h +31 -0
- data/vendor/libgit2/include/git2/sys/stream.h +1 -1
- data/vendor/libgit2/include/git2/sys/transport.h +25 -34
- 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 +3 -3
- data/vendor/libgit2/include/git2/worktree.h +12 -2
- data/vendor/libgit2/src/CMakeLists.txt +189 -315
- data/vendor/libgit2/src/annotated_commit.h +1 -1
- data/vendor/libgit2/src/apply.c +18 -18
- data/vendor/libgit2/src/apply.h +2 -2
- data/vendor/libgit2/src/attr.c +18 -18
- data/vendor/libgit2/src/attr_file.c +17 -17
- data/vendor/libgit2/src/attr_file.h +4 -4
- data/vendor/libgit2/src/attrcache.c +17 -12
- data/vendor/libgit2/src/blame_git.c +1 -1
- data/vendor/libgit2/src/blob.c +33 -26
- data/vendor/libgit2/src/blob.h +1 -1
- data/vendor/libgit2/src/branch.c +150 -109
- data/vendor/libgit2/src/branch.h +15 -3
- data/vendor/libgit2/src/buf.c +126 -0
- data/vendor/libgit2/src/buf.h +50 -0
- data/vendor/libgit2/src/cc-compat.h +1 -1
- data/vendor/libgit2/src/checkout.c +74 -68
- data/vendor/libgit2/src/cherrypick.c +10 -10
- data/vendor/libgit2/src/clone.c +66 -66
- data/vendor/libgit2/src/commit.c +128 -58
- data/vendor/libgit2/src/commit.h +24 -1
- data/vendor/libgit2/src/commit_graph.c +68 -53
- data/vendor/libgit2/src/commit_graph.h +10 -3
- data/vendor/libgit2/src/commit_list.c +2 -3
- data/vendor/libgit2/src/common.h +10 -3
- data/vendor/libgit2/src/config.c +99 -77
- data/vendor/libgit2/src/config.h +15 -2
- data/vendor/libgit2/src/config_file.c +103 -91
- data/vendor/libgit2/src/config_mem.c +9 -9
- data/vendor/libgit2/src/config_parse.c +27 -23
- data/vendor/libgit2/src/crlf.c +24 -21
- data/vendor/libgit2/src/date.c +10 -17
- data/vendor/libgit2/src/date.h +33 -0
- data/vendor/libgit2/src/describe.c +27 -19
- data/vendor/libgit2/src/diff.c +25 -8
- data/vendor/libgit2/src/diff.h +2 -4
- data/vendor/libgit2/src/diff_driver.c +34 -36
- data/vendor/libgit2/src/diff_driver.h +3 -3
- data/vendor/libgit2/src/diff_file.c +29 -20
- data/vendor/libgit2/src/diff_generate.c +30 -6
- data/vendor/libgit2/src/diff_generate.h +5 -3
- data/vendor/libgit2/src/diff_print.c +102 -95
- data/vendor/libgit2/src/diff_stats.c +40 -29
- data/vendor/libgit2/src/{message.h → diff_stats.h} +7 -6
- data/vendor/libgit2/src/diff_tform.c +9 -8
- data/vendor/libgit2/src/diff_xdiff.c +3 -8
- data/vendor/libgit2/src/email.c +54 -38
- data/vendor/libgit2/src/email.h +1 -1
- data/vendor/libgit2/src/errors.c +18 -18
- data/vendor/libgit2/src/features.h.in +6 -1
- data/vendor/libgit2/src/fetch.c +69 -24
- data/vendor/libgit2/src/fetch.h +1 -1
- data/vendor/libgit2/src/fetchhead.c +19 -19
- data/vendor/libgit2/src/filebuf.c +28 -28
- data/vendor/libgit2/src/filebuf.h +1 -1
- data/vendor/libgit2/src/filter.c +96 -52
- data/vendor/libgit2/src/filter.h +26 -5
- data/vendor/libgit2/src/fs_path.c +1912 -0
- data/vendor/libgit2/src/fs_path.h +752 -0
- data/vendor/libgit2/src/futils.c +91 -85
- data/vendor/libgit2/src/futils.h +26 -14
- data/vendor/libgit2/src/hash/sha1/collisiondetect.c +2 -2
- data/vendor/libgit2/src/hash/sha1/common_crypto.c +2 -2
- data/vendor/libgit2/src/hash/sha1/generic.c +2 -2
- data/vendor/libgit2/src/hash/sha1/mbedtls.c +2 -2
- data/vendor/libgit2/src/hash/sha1/openssl.c +2 -2
- data/vendor/libgit2/src/hash/sha1/sha1dc/sha1.c +1 -1
- data/vendor/libgit2/src/hash/sha1/win32.c +6 -6
- data/vendor/libgit2/src/hash/sha1.h +3 -1
- data/vendor/libgit2/src/hash.c +67 -35
- data/vendor/libgit2/src/hash.h +12 -12
- data/vendor/libgit2/src/ident.c +18 -18
- data/vendor/libgit2/src/ignore.c +35 -34
- data/vendor/libgit2/src/ignore.h +2 -2
- data/vendor/libgit2/src/index.c +79 -80
- data/vendor/libgit2/src/index.h +6 -3
- data/vendor/libgit2/src/indexer.c +75 -57
- data/vendor/libgit2/src/iterator.c +64 -56
- data/vendor/libgit2/src/iterator.h +5 -5
- data/vendor/libgit2/src/khash.h +1 -1
- data/vendor/libgit2/src/libgit2.c +22 -19
- data/vendor/libgit2/src/mailmap.c +38 -36
- data/vendor/libgit2/src/merge.c +27 -27
- data/vendor/libgit2/src/merge.h +1 -14
- data/vendor/libgit2/src/merge_driver.c +2 -2
- data/vendor/libgit2/src/merge_file.c +13 -3
- data/vendor/libgit2/src/message.c +21 -10
- data/vendor/libgit2/src/midx.c +83 -66
- data/vendor/libgit2/src/midx.h +3 -3
- data/vendor/libgit2/src/mwindow.c +1 -1
- data/vendor/libgit2/src/net.c +278 -68
- data/vendor/libgit2/src/net.h +10 -3
- data/vendor/libgit2/src/netops.c +1 -1
- data/vendor/libgit2/src/netops.h +1 -1
- data/vendor/libgit2/src/notes.c +20 -29
- data/vendor/libgit2/src/object.c +49 -9
- data/vendor/libgit2/src/object.h +1 -1
- data/vendor/libgit2/src/odb.c +35 -32
- data/vendor/libgit2/src/odb.h +1 -1
- data/vendor/libgit2/src/odb_loose.c +68 -68
- data/vendor/libgit2/src/odb_mempack.c +18 -5
- data/vendor/libgit2/src/odb_pack.c +43 -43
- data/vendor/libgit2/src/oid.c +11 -4
- data/vendor/libgit2/src/oid.h +15 -0
- data/vendor/libgit2/src/pack-objects.c +41 -26
- data/vendor/libgit2/src/pack-objects.h +11 -6
- data/vendor/libgit2/src/pack.c +10 -10
- data/vendor/libgit2/src/patch.c +3 -3
- data/vendor/libgit2/src/patch.h +1 -0
- data/vendor/libgit2/src/patch_generate.c +27 -11
- data/vendor/libgit2/src/patch_generate.h +5 -5
- data/vendor/libgit2/src/patch_parse.c +24 -24
- data/vendor/libgit2/src/path.c +76 -1951
- data/vendor/libgit2/src/path.h +34 -741
- data/vendor/libgit2/src/pathspec.c +6 -6
- data/vendor/libgit2/src/pathspec.h +2 -2
- data/vendor/libgit2/src/posix.c +3 -3
- data/vendor/libgit2/src/posix.h +1 -0
- data/vendor/libgit2/src/pqueue.h +1 -1
- data/vendor/libgit2/src/proxy.c +4 -1
- data/vendor/libgit2/src/proxy.h +1 -1
- data/vendor/libgit2/src/push.c +30 -35
- data/vendor/libgit2/src/push.h +4 -16
- data/vendor/libgit2/src/rand.c +226 -0
- data/vendor/libgit2/src/rand.h +37 -0
- data/vendor/libgit2/src/reader.c +8 -8
- data/vendor/libgit2/src/reader.h +2 -2
- data/vendor/libgit2/src/rebase.c +89 -88
- data/vendor/libgit2/src/refdb_fs.c +447 -173
- data/vendor/libgit2/src/refs.c +32 -32
- data/vendor/libgit2/src/refs.h +2 -2
- data/vendor/libgit2/src/refspec.c +32 -37
- data/vendor/libgit2/src/refspec.h +5 -2
- data/vendor/libgit2/src/regexp.c +1 -1
- data/vendor/libgit2/src/remote.c +713 -419
- data/vendor/libgit2/src/remote.h +15 -10
- data/vendor/libgit2/src/repository.c +350 -467
- data/vendor/libgit2/src/repository.h +11 -10
- data/vendor/libgit2/src/reset.c +8 -5
- data/vendor/libgit2/src/revert.c +10 -10
- data/vendor/libgit2/src/revparse.c +48 -35
- data/vendor/libgit2/src/revwalk.c +7 -7
- data/vendor/libgit2/src/signature.c +12 -6
- data/vendor/libgit2/src/signature.h +1 -1
- data/vendor/libgit2/src/sortedcache.c +1 -1
- data/vendor/libgit2/src/sortedcache.h +1 -1
- data/vendor/libgit2/src/stash.c +36 -37
- data/vendor/libgit2/src/status.c +4 -1
- data/vendor/libgit2/src/{buffer.c → str.c} +157 -151
- data/vendor/libgit2/src/str.h +357 -0
- data/vendor/libgit2/src/streams/mbedtls.c +8 -6
- data/vendor/libgit2/src/streams/openssl_dynamic.h +3 -3
- data/vendor/libgit2/src/submodule.c +171 -159
- data/vendor/libgit2/src/submodule.h +1 -1
- data/vendor/libgit2/src/sysdir.c +68 -52
- data/vendor/libgit2/src/sysdir.h +15 -10
- data/vendor/libgit2/src/tag.c +29 -27
- data/vendor/libgit2/src/thread.h +3 -3
- data/vendor/libgit2/src/threadstate.c +3 -3
- data/vendor/libgit2/src/threadstate.h +1 -1
- data/vendor/libgit2/src/trace.c +1 -14
- data/vendor/libgit2/src/trace.h +5 -22
- data/vendor/libgit2/src/trailer.c +1 -1
- data/vendor/libgit2/src/transaction.c +1 -1
- data/vendor/libgit2/src/transport.c +10 -10
- data/vendor/libgit2/src/transports/auth.c +7 -9
- data/vendor/libgit2/src/transports/auth.h +2 -3
- data/vendor/libgit2/src/transports/auth_negotiate.c +12 -13
- data/vendor/libgit2/src/transports/auth_ntlm.c +10 -10
- data/vendor/libgit2/src/transports/auth_ntlm.h +0 -1
- data/vendor/libgit2/src/transports/git.c +9 -11
- data/vendor/libgit2/src/transports/http.c +37 -17
- data/vendor/libgit2/src/transports/http.h +2 -3
- data/vendor/libgit2/src/transports/httpclient.c +65 -65
- data/vendor/libgit2/src/transports/local.c +124 -116
- data/vendor/libgit2/src/transports/smart.c +51 -139
- data/vendor/libgit2/src/transports/smart.h +25 -31
- data/vendor/libgit2/src/transports/smart_pkt.c +33 -33
- data/vendor/libgit2/src/transports/smart_protocol.c +57 -39
- data/vendor/libgit2/src/transports/ssh.c +47 -112
- data/vendor/libgit2/src/transports/winhttp.c +50 -56
- data/vendor/libgit2/src/tree-cache.c +5 -5
- data/vendor/libgit2/src/tree-cache.h +2 -2
- data/vendor/libgit2/src/tree.c +59 -48
- data/vendor/libgit2/src/tree.h +1 -1
- data/vendor/libgit2/src/unix/map.c +0 -2
- data/vendor/libgit2/src/unix/posix.h +1 -4
- data/vendor/libgit2/src/unix/realpath.c +0 -2
- data/vendor/libgit2/src/util.c +14 -14
- data/vendor/libgit2/src/util.h +2 -28
- data/vendor/libgit2/src/vector.h +1 -1
- data/vendor/libgit2/src/win32/findfile.c +172 -116
- data/vendor/libgit2/src/win32/findfile.h +7 -4
- data/vendor/libgit2/src/win32/path_w32.c +140 -9
- data/vendor/libgit2/src/win32/path_w32.h +2 -0
- data/vendor/libgit2/src/win32/posix.h +0 -1
- data/vendor/libgit2/src/win32/posix_w32.c +11 -27
- data/vendor/libgit2/src/win32/w32_buffer.c +2 -3
- data/vendor/libgit2/src/win32/w32_buffer.h +2 -3
- data/vendor/libgit2/src/win32/w32_leakcheck.c +1 -1
- data/vendor/libgit2/src/worktree.c +116 -94
- data/vendor/libgit2/src/worktree.h +1 -1
- data/vendor/libgit2/src/xdiff/git-xdiff.h +53 -0
- data/vendor/libgit2/src/xdiff/xdiff.h +15 -15
- data/vendor/libgit2/src/xdiff/xdiffi.c +134 -108
- data/vendor/libgit2/src/xdiff/xemit.c +23 -7
- data/vendor/libgit2/src/xdiff/xhistogram.c +87 -78
- data/vendor/libgit2/src/xdiff/xinclude.h +1 -12
- data/vendor/libgit2/src/xdiff/xmerge.c +104 -117
- data/vendor/libgit2/src/xdiff/xpatience.c +6 -17
- data/vendor/libgit2/src/xdiff/xprepare.c +15 -20
- data/vendor/libgit2/src/xdiff/xutils.c +18 -7
- data/vendor/libgit2/src/zstream.c +5 -5
- data/vendor/libgit2/src/zstream.h +4 -4
- metadata +25 -10
- data/vendor/libgit2/src/buffer.h +0 -374
|
@@ -48,14 +48,15 @@ struct git_indexer {
|
|
|
48
48
|
off64_t off;
|
|
49
49
|
off64_t entry_start;
|
|
50
50
|
git_object_t entry_type;
|
|
51
|
-
|
|
51
|
+
git_str entry_data;
|
|
52
52
|
git_packfile_stream stream;
|
|
53
53
|
size_t nr_objects;
|
|
54
54
|
git_vector objects;
|
|
55
55
|
git_vector deltas;
|
|
56
56
|
unsigned int fanout[256];
|
|
57
57
|
git_hash_ctx hash_ctx;
|
|
58
|
-
|
|
58
|
+
unsigned char checksum[GIT_HASH_SHA1_SIZE];
|
|
59
|
+
char name[(GIT_HASH_SHA1_SIZE * 2) + 1];
|
|
59
60
|
git_indexer_progress_cb progress_cb;
|
|
60
61
|
void *progress_payload;
|
|
61
62
|
char objbuf[8*1024];
|
|
@@ -76,9 +77,16 @@ struct delta_info {
|
|
|
76
77
|
off64_t delta_off;
|
|
77
78
|
};
|
|
78
79
|
|
|
80
|
+
#ifndef GIT_DEPRECATE_HARD
|
|
79
81
|
const git_oid *git_indexer_hash(const git_indexer *idx)
|
|
80
82
|
{
|
|
81
|
-
return
|
|
83
|
+
return (git_oid *)idx->checksum;
|
|
84
|
+
}
|
|
85
|
+
#endif
|
|
86
|
+
|
|
87
|
+
const char *git_indexer_name(const git_indexer *idx)
|
|
88
|
+
{
|
|
89
|
+
return idx->name;
|
|
82
90
|
}
|
|
83
91
|
|
|
84
92
|
static int parse_header(struct git_pack_header *hdr, struct git_pack_file *pack)
|
|
@@ -137,7 +145,7 @@ int git_indexer_new(
|
|
|
137
145
|
{
|
|
138
146
|
git_indexer_options opts = GIT_INDEXER_OPTIONS_INIT;
|
|
139
147
|
git_indexer *idx;
|
|
140
|
-
|
|
148
|
+
git_str path = GIT_STR_INIT, tmp_path = GIT_STR_INIT;
|
|
141
149
|
static const char suff[] = "/pack";
|
|
142
150
|
int error, fd = -1;
|
|
143
151
|
|
|
@@ -150,10 +158,10 @@ int git_indexer_new(
|
|
|
150
158
|
idx->progress_cb = opts.progress_cb;
|
|
151
159
|
idx->progress_payload = opts.progress_cb_payload;
|
|
152
160
|
idx->mode = mode ? mode : GIT_PACK_FILE_MODE;
|
|
153
|
-
|
|
161
|
+
git_str_init(&idx->entry_data, 0);
|
|
154
162
|
|
|
155
|
-
if ((error = git_hash_ctx_init(&idx->hash_ctx)) < 0 ||
|
|
156
|
-
(error = git_hash_ctx_init(&idx->trailer)) < 0 ||
|
|
163
|
+
if ((error = git_hash_ctx_init(&idx->hash_ctx, GIT_HASH_ALGORITHM_SHA1)) < 0 ||
|
|
164
|
+
(error = git_hash_ctx_init(&idx->trailer, GIT_HASH_ALGORITHM_SHA1)) < 0 ||
|
|
157
165
|
(error = git_oidmap_new(&idx->expected_oids)) < 0)
|
|
158
166
|
goto cleanup;
|
|
159
167
|
|
|
@@ -162,17 +170,17 @@ int git_indexer_new(
|
|
|
162
170
|
if (git_repository__fsync_gitdir)
|
|
163
171
|
idx->do_fsync = 1;
|
|
164
172
|
|
|
165
|
-
error =
|
|
173
|
+
error = git_str_joinpath(&path, prefix, suff);
|
|
166
174
|
if (error < 0)
|
|
167
175
|
goto cleanup;
|
|
168
176
|
|
|
169
|
-
fd = git_futils_mktmp(&tmp_path,
|
|
170
|
-
|
|
177
|
+
fd = git_futils_mktmp(&tmp_path, git_str_cstr(&path), idx->mode);
|
|
178
|
+
git_str_dispose(&path);
|
|
171
179
|
if (fd < 0)
|
|
172
180
|
goto cleanup;
|
|
173
181
|
|
|
174
|
-
error = git_packfile_alloc(&idx->pack,
|
|
175
|
-
|
|
182
|
+
error = git_packfile_alloc(&idx->pack, git_str_cstr(&tmp_path));
|
|
183
|
+
git_str_dispose(&tmp_path);
|
|
176
184
|
|
|
177
185
|
if (error < 0)
|
|
178
186
|
goto cleanup;
|
|
@@ -188,14 +196,14 @@ cleanup:
|
|
|
188
196
|
if (fd != -1)
|
|
189
197
|
p_close(fd);
|
|
190
198
|
|
|
191
|
-
if (
|
|
192
|
-
p_unlink(
|
|
199
|
+
if (git_str_len(&tmp_path) > 0)
|
|
200
|
+
p_unlink(git_str_cstr(&tmp_path));
|
|
193
201
|
|
|
194
202
|
if (idx->pack != NULL)
|
|
195
203
|
p_unlink(idx->pack->pack_name);
|
|
196
204
|
|
|
197
|
-
|
|
198
|
-
|
|
205
|
+
git_str_dispose(&path);
|
|
206
|
+
git_str_dispose(&tmp_path);
|
|
199
207
|
git__free(idx);
|
|
200
208
|
return -1;
|
|
201
209
|
}
|
|
@@ -245,7 +253,7 @@ static int hash_object_stream(git_indexer*idx, git_packfile_stream *stream)
|
|
|
245
253
|
break;
|
|
246
254
|
|
|
247
255
|
if (idx->do_verify)
|
|
248
|
-
|
|
256
|
+
git_str_put(&idx->entry_data, idx->objbuf, read);
|
|
249
257
|
|
|
250
258
|
git_hash_update(&idx->hash_ctx, idx->objbuf, read);
|
|
251
259
|
} while (read > 0);
|
|
@@ -340,7 +348,7 @@ static int check_object_connectivity(git_indexer *idx, const git_rawobj *obj)
|
|
|
340
348
|
{
|
|
341
349
|
git_object *object;
|
|
342
350
|
git_oid *expected;
|
|
343
|
-
int error;
|
|
351
|
+
int error = 0;
|
|
344
352
|
|
|
345
353
|
if (obj->type != GIT_OBJECT_BLOB &&
|
|
346
354
|
obj->type != GIT_OBJECT_TREE &&
|
|
@@ -348,8 +356,14 @@ static int check_object_connectivity(git_indexer *idx, const git_rawobj *obj)
|
|
|
348
356
|
obj->type != GIT_OBJECT_TAG)
|
|
349
357
|
return 0;
|
|
350
358
|
|
|
351
|
-
if (
|
|
359
|
+
if (git_object__from_raw(&object, obj->data, obj->len, obj->type) < 0) {
|
|
360
|
+
/*
|
|
361
|
+
* parse_raw returns EINVALID on invalid data; downgrade
|
|
362
|
+
* that to a normal -1 error code.
|
|
363
|
+
*/
|
|
364
|
+
error = -1;
|
|
352
365
|
goto out;
|
|
366
|
+
}
|
|
353
367
|
|
|
354
368
|
if ((expected = git_oidmap_get(idx->expected_oids, &object->cached.oid)) != NULL) {
|
|
355
369
|
git_oidmap_delete(idx->expected_oids, &object->cached.oid);
|
|
@@ -426,7 +440,7 @@ static int store_object(git_indexer *idx)
|
|
|
426
440
|
pentry = git__calloc(1, sizeof(struct git_pack_entry));
|
|
427
441
|
GIT_ERROR_CHECK_ALLOC(pentry);
|
|
428
442
|
|
|
429
|
-
if (git_hash_final(
|
|
443
|
+
if (git_hash_final(oid.id, &idx->hash_ctx)) {
|
|
430
444
|
git__free(pentry);
|
|
431
445
|
goto on_error;
|
|
432
446
|
}
|
|
@@ -730,7 +744,7 @@ static int read_stream_object(git_indexer *idx, git_indexer_progress *stats)
|
|
|
730
744
|
git_mwindow_close(&w);
|
|
731
745
|
idx->entry_start = entry_start;
|
|
732
746
|
git_hash_init(&idx->hash_ctx);
|
|
733
|
-
|
|
747
|
+
git_str_clear(&idx->entry_data);
|
|
734
748
|
|
|
735
749
|
if (type == GIT_OBJECT_REF_DELTA || type == GIT_OBJECT_OFS_DELTA) {
|
|
736
750
|
error = advance_delta_offset(idx, type);
|
|
@@ -876,7 +890,7 @@ on_error:
|
|
|
876
890
|
return error;
|
|
877
891
|
}
|
|
878
892
|
|
|
879
|
-
static int index_path(
|
|
893
|
+
static int index_path(git_str *path, git_indexer *idx, const char *suffix)
|
|
880
894
|
{
|
|
881
895
|
const char prefix[] = "pack-";
|
|
882
896
|
size_t slash = (size_t)path->size;
|
|
@@ -885,17 +899,16 @@ static int index_path(git_buf *path, git_indexer *idx, const char *suffix)
|
|
|
885
899
|
while (slash > 0 && path->ptr[slash - 1] != '/')
|
|
886
900
|
slash--;
|
|
887
901
|
|
|
888
|
-
if (
|
|
902
|
+
if (git_str_grow(path, slash + 1 + strlen(prefix) +
|
|
889
903
|
GIT_OID_HEXSZ + strlen(suffix) + 1) < 0)
|
|
890
904
|
return -1;
|
|
891
905
|
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
path
|
|
896
|
-
git_buf_puts(path, suffix);
|
|
906
|
+
git_str_truncate(path, slash);
|
|
907
|
+
git_str_puts(path, prefix);
|
|
908
|
+
git_str_puts(path, idx->name);
|
|
909
|
+
git_str_puts(path, suffix);
|
|
897
910
|
|
|
898
|
-
return
|
|
911
|
+
return git_str_oom(path) ? -1 : 0;
|
|
899
912
|
}
|
|
900
913
|
|
|
901
914
|
/**
|
|
@@ -913,12 +926,13 @@ static int inject_object(git_indexer *idx, git_oid *id)
|
|
|
913
926
|
git_odb_object *obj = NULL;
|
|
914
927
|
struct entry *entry = NULL;
|
|
915
928
|
struct git_pack_entry *pentry = NULL;
|
|
916
|
-
|
|
929
|
+
unsigned char empty_checksum[GIT_HASH_SHA1_SIZE] = {0};
|
|
917
930
|
unsigned char hdr[64];
|
|
918
|
-
|
|
931
|
+
git_str buf = GIT_STR_INIT;
|
|
919
932
|
off64_t entry_start;
|
|
920
933
|
const void *data;
|
|
921
934
|
size_t len, hdr_len;
|
|
935
|
+
size_t checksum_size = GIT_HASH_SHA1_SIZE;
|
|
922
936
|
int error;
|
|
923
937
|
|
|
924
938
|
if ((error = seek_back_trailer(idx)) < 0)
|
|
@@ -956,11 +970,11 @@ static int inject_object(git_indexer *idx, git_oid *id)
|
|
|
956
970
|
|
|
957
971
|
idx->pack->mwf.size += buf.size;
|
|
958
972
|
entry->crc = htonl(crc32(entry->crc, (unsigned char *)buf.ptr, (uInt)buf.size));
|
|
959
|
-
|
|
973
|
+
git_str_dispose(&buf);
|
|
960
974
|
|
|
961
975
|
/* Write a fake trailer so the pack functions play ball */
|
|
962
976
|
|
|
963
|
-
if ((error = append_to_pack(idx,
|
|
977
|
+
if ((error = append_to_pack(idx, empty_checksum, checksum_size)) < 0)
|
|
964
978
|
goto cleanup;
|
|
965
979
|
|
|
966
980
|
idx->pack->mwf.size += GIT_OID_RAWSZ;
|
|
@@ -1117,7 +1131,7 @@ static int update_header_and_rehash(git_indexer *idx, git_indexer_progress *stat
|
|
|
1117
1131
|
git_hash_init(&idx->trailer);
|
|
1118
1132
|
|
|
1119
1133
|
|
|
1120
|
-
/* Update the header to include the
|
|
1134
|
+
/* Update the header to include the number of local objects we injected */
|
|
1121
1135
|
idx->hdr.hdr_entries = htonl(stats->total_objects + stats->local_objects);
|
|
1122
1136
|
if (write_at(idx, &idx->hdr, 0, sizeof(struct git_pack_header)) < 0)
|
|
1123
1137
|
return -1;
|
|
@@ -1152,11 +1166,13 @@ int git_indexer_commit(git_indexer *idx, git_indexer_progress *stats)
|
|
|
1152
1166
|
unsigned int i, long_offsets = 0, left;
|
|
1153
1167
|
int error;
|
|
1154
1168
|
struct git_pack_idx_header hdr;
|
|
1155
|
-
|
|
1169
|
+
git_str filename = GIT_STR_INIT;
|
|
1156
1170
|
struct entry *entry;
|
|
1157
|
-
|
|
1171
|
+
unsigned char checksum[GIT_HASH_SHA1_SIZE];
|
|
1158
1172
|
git_filebuf index_file = {0};
|
|
1159
1173
|
void *packfile_trailer;
|
|
1174
|
+
size_t checksum_size = GIT_HASH_SHA1_SIZE;
|
|
1175
|
+
bool mismatch;
|
|
1160
1176
|
|
|
1161
1177
|
if (!idx->parsed_header) {
|
|
1162
1178
|
git_error_set(GIT_ERROR_INDEXER, "incomplete pack header");
|
|
@@ -1164,27 +1180,27 @@ int git_indexer_commit(git_indexer *idx, git_indexer_progress *stats)
|
|
|
1164
1180
|
}
|
|
1165
1181
|
|
|
1166
1182
|
/* Test for this before resolve_deltas(), as it plays with idx->off */
|
|
1167
|
-
if (idx->off +
|
|
1183
|
+
if (idx->off + (ssize_t)checksum_size < idx->pack->mwf.size) {
|
|
1168
1184
|
git_error_set(GIT_ERROR_INDEXER, "unexpected data at the end of the pack");
|
|
1169
1185
|
return -1;
|
|
1170
1186
|
}
|
|
1171
|
-
if (idx->off +
|
|
1187
|
+
if (idx->off + (ssize_t)checksum_size > idx->pack->mwf.size) {
|
|
1172
1188
|
git_error_set(GIT_ERROR_INDEXER, "missing trailer at the end of the pack");
|
|
1173
1189
|
return -1;
|
|
1174
1190
|
}
|
|
1175
1191
|
|
|
1176
|
-
packfile_trailer = git_mwindow_open(&idx->pack->mwf, &w, idx->pack->mwf.size -
|
|
1192
|
+
packfile_trailer = git_mwindow_open(&idx->pack->mwf, &w, idx->pack->mwf.size - checksum_size, checksum_size, &left);
|
|
1177
1193
|
if (packfile_trailer == NULL) {
|
|
1178
1194
|
git_mwindow_close(&w);
|
|
1179
1195
|
goto on_error;
|
|
1180
1196
|
}
|
|
1181
1197
|
|
|
1182
1198
|
/* Compare the packfile trailer as it was sent to us and what we calculated */
|
|
1183
|
-
|
|
1199
|
+
git_hash_final(checksum, &idx->trailer);
|
|
1200
|
+
mismatch = !!memcmp(checksum, packfile_trailer, checksum_size);
|
|
1184
1201
|
git_mwindow_close(&w);
|
|
1185
1202
|
|
|
1186
|
-
|
|
1187
|
-
if (git_oid_cmp(&file_hash, &trailer_hash)) {
|
|
1203
|
+
if (mismatch) {
|
|
1188
1204
|
git_error_set(GIT_ERROR_INDEXER, "packfile trailer mismatch");
|
|
1189
1205
|
return -1;
|
|
1190
1206
|
}
|
|
@@ -1204,8 +1220,8 @@ int git_indexer_commit(git_indexer *idx, git_indexer_progress *stats)
|
|
|
1204
1220
|
if (update_header_and_rehash(idx, stats) < 0)
|
|
1205
1221
|
return -1;
|
|
1206
1222
|
|
|
1207
|
-
git_hash_final(
|
|
1208
|
-
write_at(idx,
|
|
1223
|
+
git_hash_final(checksum, &idx->trailer);
|
|
1224
|
+
write_at(idx, checksum, idx->pack->mwf.size - checksum_size, checksum_size);
|
|
1209
1225
|
}
|
|
1210
1226
|
|
|
1211
1227
|
/*
|
|
@@ -1224,12 +1240,14 @@ int git_indexer_commit(git_indexer *idx, git_indexer_progress *stats)
|
|
|
1224
1240
|
|
|
1225
1241
|
/* Use the trailer hash as the pack file name to ensure
|
|
1226
1242
|
* files with different contents have different names */
|
|
1227
|
-
|
|
1243
|
+
memcpy(idx->checksum, checksum, checksum_size);
|
|
1244
|
+
if (git_hash_fmt(idx->name, checksum, checksum_size) < 0)
|
|
1245
|
+
return -1;
|
|
1228
1246
|
|
|
1229
|
-
|
|
1230
|
-
|
|
1231
|
-
|
|
1232
|
-
if (
|
|
1247
|
+
git_str_sets(&filename, idx->pack->pack_name);
|
|
1248
|
+
git_str_shorten(&filename, strlen("pack"));
|
|
1249
|
+
git_str_puts(&filename, "idx");
|
|
1250
|
+
if (git_str_oom(&filename))
|
|
1233
1251
|
return -1;
|
|
1234
1252
|
|
|
1235
1253
|
if (git_filebuf_open(&index_file, filename.ptr,
|
|
@@ -1285,14 +1303,14 @@ int git_indexer_commit(git_indexer *idx, git_indexer_progress *stats)
|
|
|
1285
1303
|
}
|
|
1286
1304
|
|
|
1287
1305
|
/* Write out the packfile trailer to the index */
|
|
1288
|
-
if (git_filebuf_write(&index_file,
|
|
1306
|
+
if (git_filebuf_write(&index_file, checksum, checksum_size) < 0)
|
|
1289
1307
|
goto on_error;
|
|
1290
1308
|
|
|
1291
1309
|
/* Write out the hash of the idx */
|
|
1292
|
-
if (git_filebuf_hash(
|
|
1310
|
+
if (git_filebuf_hash(checksum, &index_file) < 0)
|
|
1293
1311
|
goto on_error;
|
|
1294
1312
|
|
|
1295
|
-
git_filebuf_write(&index_file,
|
|
1313
|
+
git_filebuf_write(&index_file, checksum, checksum_size);
|
|
1296
1314
|
|
|
1297
1315
|
/* Figure out what the final name should be */
|
|
1298
1316
|
if (index_path(&filename, idx, ".idx") < 0)
|
|
@@ -1336,23 +1354,23 @@ int git_indexer_commit(git_indexer *idx, git_indexer_progress *stats)
|
|
|
1336
1354
|
goto on_error;
|
|
1337
1355
|
|
|
1338
1356
|
/* And don't forget to rename the packfile to its new place. */
|
|
1339
|
-
if (p_rename(idx->pack->pack_name,
|
|
1357
|
+
if (p_rename(idx->pack->pack_name, git_str_cstr(&filename)) < 0)
|
|
1340
1358
|
goto on_error;
|
|
1341
1359
|
|
|
1342
1360
|
/* And fsync the parent directory if we're asked to. */
|
|
1343
1361
|
if (idx->do_fsync &&
|
|
1344
|
-
git_futils_fsync_parent(
|
|
1362
|
+
git_futils_fsync_parent(git_str_cstr(&filename)) < 0)
|
|
1345
1363
|
goto on_error;
|
|
1346
1364
|
|
|
1347
1365
|
idx->pack_committed = 1;
|
|
1348
1366
|
|
|
1349
|
-
|
|
1367
|
+
git_str_dispose(&filename);
|
|
1350
1368
|
return 0;
|
|
1351
1369
|
|
|
1352
1370
|
on_error:
|
|
1353
1371
|
git_mwindow_free_all(&idx->pack->mwf);
|
|
1354
1372
|
git_filebuf_cleanup(&index_file);
|
|
1355
|
-
|
|
1373
|
+
git_str_dispose(&filename);
|
|
1356
1374
|
return -1;
|
|
1357
1375
|
}
|
|
1358
1376
|
|
|
@@ -1389,7 +1407,7 @@ void git_indexer_free(git_indexer *idx)
|
|
|
1389
1407
|
|
|
1390
1408
|
git_hash_ctx_cleanup(&idx->trailer);
|
|
1391
1409
|
git_hash_ctx_cleanup(&idx->hash_ctx);
|
|
1392
|
-
|
|
1410
|
+
git_str_dispose(&idx->entry_data);
|
|
1393
1411
|
git_oidmap_free(idx->expected_oids);
|
|
1394
1412
|
git__free(idx);
|
|
1395
1413
|
}
|