rugged 1.3.2.3 → 1.4.2
Sign up to get free protection for your applications and to get access to all the features.
- 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
data/vendor/libgit2/src/index.c
CHANGED
@@ -20,6 +20,7 @@
|
|
20
20
|
#include "idxmap.h"
|
21
21
|
#include "diff.h"
|
22
22
|
#include "varint.h"
|
23
|
+
#include "path.h"
|
23
24
|
|
24
25
|
#include "git2/odb.h"
|
25
26
|
#include "git2/oid.h"
|
@@ -33,7 +34,6 @@ static int index_apply_to_wd_diff(git_index *index, int action, const git_strarr
|
|
33
34
|
|
34
35
|
#define minimal_entry_size (offsetof(struct entry_short, path))
|
35
36
|
|
36
|
-
static const size_t INDEX_FOOTER_SIZE = GIT_OID_RAWSZ;
|
37
37
|
static const size_t INDEX_HEADER_SIZE = 12;
|
38
38
|
|
39
39
|
static const unsigned int INDEX_VERSION_NUMBER_DEFAULT = 2;
|
@@ -120,7 +120,7 @@ static int read_header(struct index_header *dest, const void *buffer);
|
|
120
120
|
|
121
121
|
static int parse_index(git_index *index, const char *buffer, size_t buffer_size);
|
122
122
|
static bool is_index_extended(git_index *index);
|
123
|
-
static int write_index(
|
123
|
+
static int write_index(unsigned char checksum[GIT_HASH_SHA1_SIZE], size_t *checksum_size, git_index *index, git_filebuf *file);
|
124
124
|
|
125
125
|
static void index_entry_free(git_index_entry *entry);
|
126
126
|
static void index_entry_reuc_free(git_index_reuc_entry *reuc);
|
@@ -420,7 +420,7 @@ int git_index_open(git_index **index_out, const char *index_path)
|
|
420
420
|
goto fail;
|
421
421
|
|
422
422
|
/* Check if index file is stored on disk already */
|
423
|
-
if (
|
423
|
+
if (git_fs_path_exists(index->index_file_path) == true)
|
424
424
|
index->on_disk = 1;
|
425
425
|
}
|
426
426
|
|
@@ -606,10 +606,12 @@ int git_index_caps(const git_index *index)
|
|
606
606
|
(index->no_symlinks ? GIT_INDEX_CAPABILITY_NO_SYMLINKS : 0));
|
607
607
|
}
|
608
608
|
|
609
|
+
#ifndef GIT_DEPRECATE_HARD
|
609
610
|
const git_oid *git_index_checksum(git_index *index)
|
610
611
|
{
|
611
|
-
return
|
612
|
+
return (git_oid *)index->checksum;
|
612
613
|
}
|
614
|
+
#endif
|
613
615
|
|
614
616
|
/**
|
615
617
|
* Returns 1 for changed, 0 for not changed and <0 for errors
|
@@ -618,37 +620,38 @@ static int compare_checksum(git_index *index)
|
|
618
620
|
{
|
619
621
|
int fd;
|
620
622
|
ssize_t bytes_read;
|
621
|
-
|
623
|
+
unsigned char checksum[GIT_HASH_SHA1_SIZE];
|
624
|
+
size_t checksum_size = GIT_HASH_SHA1_SIZE;
|
622
625
|
|
623
626
|
if ((fd = p_open(index->index_file_path, O_RDONLY)) < 0)
|
624
627
|
return fd;
|
625
628
|
|
626
|
-
if (p_lseek(fd, -
|
629
|
+
if (p_lseek(fd, (0 - (ssize_t)checksum_size), SEEK_END) < 0) {
|
627
630
|
p_close(fd);
|
628
631
|
git_error_set(GIT_ERROR_OS, "failed to seek to end of file");
|
629
632
|
return -1;
|
630
633
|
}
|
631
634
|
|
632
|
-
bytes_read = p_read(fd,
|
635
|
+
bytes_read = p_read(fd, checksum, checksum_size);
|
633
636
|
p_close(fd);
|
634
637
|
|
635
|
-
if (bytes_read <
|
638
|
+
if (bytes_read < (ssize_t)checksum_size)
|
636
639
|
return -1;
|
637
640
|
|
638
|
-
return !!
|
641
|
+
return !!memcmp(checksum, index->checksum, checksum_size);
|
639
642
|
}
|
640
643
|
|
641
644
|
int git_index_read(git_index *index, int force)
|
642
645
|
{
|
643
646
|
int error = 0, updated;
|
644
|
-
|
647
|
+
git_str buffer = GIT_STR_INIT;
|
645
648
|
git_futils_filestamp stamp = index->stamp;
|
646
649
|
|
647
650
|
if (!index->index_file_path)
|
648
651
|
return create_index_error(-1,
|
649
652
|
"failed to read index: The index is in-memory only");
|
650
653
|
|
651
|
-
index->on_disk =
|
654
|
+
index->on_disk = git_fs_path_exists(index->index_file_path);
|
652
655
|
|
653
656
|
if (!index->on_disk) {
|
654
657
|
if (force && (error = git_index_clear(index)) < 0)
|
@@ -687,7 +690,7 @@ int git_index_read(git_index *index, int force)
|
|
687
690
|
index->dirty = 0;
|
688
691
|
}
|
689
692
|
|
690
|
-
|
693
|
+
git_str_dispose(&buffer);
|
691
694
|
return error;
|
692
695
|
}
|
693
696
|
|
@@ -702,16 +705,6 @@ int git_index_read_safely(git_index *index)
|
|
702
705
|
return git_index_read(index, false);
|
703
706
|
}
|
704
707
|
|
705
|
-
int git_index__changed_relative_to(
|
706
|
-
git_index *index, const git_oid *checksum)
|
707
|
-
{
|
708
|
-
/* attempt to update index (ignoring errors) */
|
709
|
-
if (git_index_read(index, false) < 0)
|
710
|
-
git_error_clear();
|
711
|
-
|
712
|
-
return !!git_oid_cmp(&index->checksum, checksum);
|
713
|
-
}
|
714
|
-
|
715
708
|
static bool is_racy_entry(git_index *index, const git_index_entry *entry)
|
716
709
|
{
|
717
710
|
/* Git special-cases submodules in the check */
|
@@ -944,7 +937,7 @@ static int index_entry_create(
|
|
944
937
|
if (st)
|
945
938
|
mode = st->st_mode;
|
946
939
|
|
947
|
-
if (!
|
940
|
+
if (!git_path_is_valid(repo, path, mode, path_valid_flags)) {
|
948
941
|
git_error_set(GIT_ERROR_INDEX, "invalid path: '%s'", path);
|
949
942
|
return -1;
|
950
943
|
}
|
@@ -969,7 +962,7 @@ static int index_entry_init(
|
|
969
962
|
{
|
970
963
|
int error = 0;
|
971
964
|
git_index_entry *entry = NULL;
|
972
|
-
|
965
|
+
git_str path = GIT_STR_INIT;
|
973
966
|
struct stat st;
|
974
967
|
git_oid oid;
|
975
968
|
git_repository *repo;
|
@@ -991,8 +984,8 @@ static int index_entry_init(
|
|
991
984
|
if (git_repository_workdir_path(&path, repo, rel_path) < 0)
|
992
985
|
return -1;
|
993
986
|
|
994
|
-
error =
|
995
|
-
|
987
|
+
error = git_fs_path_lstat(path.ptr, &st);
|
988
|
+
git_str_dispose(&path);
|
996
989
|
|
997
990
|
if (error < 0)
|
998
991
|
return error;
|
@@ -1525,7 +1518,7 @@ int git_index_add_from_buffer(
|
|
1525
1518
|
static int add_repo_as_submodule(git_index_entry **out, git_index *index, const char *path)
|
1526
1519
|
{
|
1527
1520
|
git_repository *sub;
|
1528
|
-
|
1521
|
+
git_str abspath = GIT_STR_INIT;
|
1529
1522
|
git_repository *repo = INDEX_OWNER(index);
|
1530
1523
|
git_reference *head;
|
1531
1524
|
git_index_entry *entry;
|
@@ -1556,7 +1549,7 @@ static int add_repo_as_submodule(git_index_entry **out, git_index *index, const
|
|
1556
1549
|
|
1557
1550
|
git_reference_free(head);
|
1558
1551
|
git_repository_free(sub);
|
1559
|
-
|
1552
|
+
git_str_dispose(&abspath);
|
1560
1553
|
|
1561
1554
|
*out = entry;
|
1562
1555
|
return 0;
|
@@ -1722,13 +1715,13 @@ int git_index_remove(git_index *index, const char *path, int stage)
|
|
1722
1715
|
|
1723
1716
|
int git_index_remove_directory(git_index *index, const char *dir, int stage)
|
1724
1717
|
{
|
1725
|
-
|
1718
|
+
git_str pfx = GIT_STR_INIT;
|
1726
1719
|
int error = 0;
|
1727
1720
|
size_t pos;
|
1728
1721
|
git_index_entry *entry;
|
1729
1722
|
|
1730
|
-
if (!(error =
|
1731
|
-
!(error =
|
1723
|
+
if (!(error = git_str_sets(&pfx, dir)) &&
|
1724
|
+
!(error = git_fs_path_to_dir(&pfx)))
|
1732
1725
|
index_find(&pos, index, pfx.ptr, pfx.size, GIT_INDEX_STAGE_ANY);
|
1733
1726
|
|
1734
1727
|
while (!error) {
|
@@ -1746,7 +1739,7 @@ int git_index_remove_directory(git_index *index, const char *dir, int stage)
|
|
1746
1739
|
/* removed entry at 'pos' so we don't need to increment */
|
1747
1740
|
}
|
1748
1741
|
|
1749
|
-
|
1742
|
+
git_str_dispose(&pfx);
|
1750
1743
|
|
1751
1744
|
return error;
|
1752
1745
|
}
|
@@ -2469,8 +2462,9 @@ static int read_entry(
|
|
2469
2462
|
git_index_entry entry = {{0}};
|
2470
2463
|
bool compressed = index->version >= INDEX_VERSION_NUMBER_COMP;
|
2471
2464
|
char *tmp_path = NULL;
|
2465
|
+
size_t checksum_size = GIT_HASH_SHA1_SIZE;
|
2472
2466
|
|
2473
|
-
if (
|
2467
|
+
if (checksum_size + minimal_entry_size > buffer_size)
|
2474
2468
|
return -1;
|
2475
2469
|
|
2476
2470
|
/* buffer is not guaranteed to be aligned */
|
@@ -2551,7 +2545,7 @@ static int read_entry(
|
|
2551
2545
|
if (entry_size == 0)
|
2552
2546
|
return -1;
|
2553
2547
|
|
2554
|
-
if (
|
2548
|
+
if (checksum_size + entry_size > buffer_size)
|
2555
2549
|
return -1;
|
2556
2550
|
|
2557
2551
|
if (index_entry_dup(out, index, &entry) < 0) {
|
@@ -2585,6 +2579,7 @@ static int read_extension(size_t *read_len, git_index *index, const char *buffer
|
|
2585
2579
|
{
|
2586
2580
|
struct index_extension dest;
|
2587
2581
|
size_t total_size;
|
2582
|
+
size_t checksum_size = GIT_HASH_SHA1_SIZE;
|
2588
2583
|
|
2589
2584
|
/* buffer is not guaranteed to be aligned */
|
2590
2585
|
memcpy(&dest, buffer, sizeof(struct index_extension));
|
@@ -2594,7 +2589,7 @@ static int read_extension(size_t *read_len, git_index *index, const char *buffer
|
|
2594
2589
|
|
2595
2590
|
if (dest.extension_size > total_size ||
|
2596
2591
|
buffer_size < total_size ||
|
2597
|
-
buffer_size - total_size <
|
2592
|
+
buffer_size - total_size < checksum_size) {
|
2598
2593
|
index_error_invalid("extension is truncated");
|
2599
2594
|
return -1;
|
2600
2595
|
}
|
@@ -2631,7 +2626,8 @@ static int parse_index(git_index *index, const char *buffer, size_t buffer_size)
|
|
2631
2626
|
int error = 0;
|
2632
2627
|
unsigned int i;
|
2633
2628
|
struct index_header header = { 0 };
|
2634
|
-
|
2629
|
+
unsigned char checksum[GIT_HASH_SHA1_SIZE];
|
2630
|
+
size_t checksum_size = GIT_HASH_SHA1_SIZE;
|
2635
2631
|
const char *last = NULL;
|
2636
2632
|
const char *empty = "";
|
2637
2633
|
|
@@ -2643,12 +2639,12 @@ static int parse_index(git_index *index, const char *buffer, size_t buffer_size)
|
|
2643
2639
|
buffer_size -= _increase;\
|
2644
2640
|
}
|
2645
2641
|
|
2646
|
-
if (buffer_size < INDEX_HEADER_SIZE +
|
2642
|
+
if (buffer_size < INDEX_HEADER_SIZE + checksum_size)
|
2647
2643
|
return index_error_invalid("insufficient buffer space");
|
2648
2644
|
|
2649
2645
|
/* Precalculate the SHA1 of the files's contents -- we'll match it to
|
2650
2646
|
* the provided SHA1 in the footer */
|
2651
|
-
git_hash_buf(
|
2647
|
+
git_hash_buf(checksum, buffer, buffer_size - checksum_size, GIT_HASH_ALGORITHM_SHA1);
|
2652
2648
|
|
2653
2649
|
/* Parse header */
|
2654
2650
|
if ((error = read_header(&header, buffer)) < 0)
|
@@ -2666,7 +2662,7 @@ static int parse_index(git_index *index, const char *buffer, size_t buffer_size)
|
|
2666
2662
|
return error;
|
2667
2663
|
|
2668
2664
|
/* Parse all the entries */
|
2669
|
-
for (i = 0; i < header.entry_count && buffer_size >
|
2665
|
+
for (i = 0; i < header.entry_count && buffer_size > checksum_size; ++i) {
|
2670
2666
|
git_index_entry *entry = NULL;
|
2671
2667
|
size_t entry_size;
|
2672
2668
|
|
@@ -2698,7 +2694,7 @@ static int parse_index(git_index *index, const char *buffer, size_t buffer_size)
|
|
2698
2694
|
}
|
2699
2695
|
|
2700
2696
|
/* There's still space for some extensions! */
|
2701
|
-
while (buffer_size >
|
2697
|
+
while (buffer_size > checksum_size) {
|
2702
2698
|
size_t extension_size;
|
2703
2699
|
|
2704
2700
|
if ((error = read_extension(&extension_size, index, buffer, buffer_size)) < 0) {
|
@@ -2708,22 +2704,20 @@ static int parse_index(git_index *index, const char *buffer, size_t buffer_size)
|
|
2708
2704
|
seek_forward(extension_size);
|
2709
2705
|
}
|
2710
2706
|
|
2711
|
-
if (buffer_size !=
|
2707
|
+
if (buffer_size != checksum_size) {
|
2712
2708
|
error = index_error_invalid(
|
2713
2709
|
"buffer size does not match index footer size");
|
2714
2710
|
goto done;
|
2715
2711
|
}
|
2716
2712
|
|
2717
2713
|
/* 160-bit SHA-1 over the content of the index file before this checksum. */
|
2718
|
-
|
2719
|
-
|
2720
|
-
if (git_oid__cmp(&checksum_calculated, &checksum_expected) != 0) {
|
2714
|
+
if (memcmp(checksum, buffer, checksum_size) != 0) {
|
2721
2715
|
error = index_error_invalid(
|
2722
2716
|
"calculated checksum does not match expected");
|
2723
2717
|
goto done;
|
2724
2718
|
}
|
2725
2719
|
|
2726
|
-
|
2720
|
+
memcpy(index->checksum, checksum, checksum_size);
|
2727
2721
|
|
2728
2722
|
#undef seek_forward
|
2729
2723
|
|
@@ -2892,7 +2886,7 @@ done:
|
|
2892
2886
|
return error;
|
2893
2887
|
}
|
2894
2888
|
|
2895
|
-
static int write_extension(git_filebuf *file, struct index_extension *header,
|
2889
|
+
static int write_extension(git_filebuf *file, struct index_extension *header, git_str *data)
|
2896
2890
|
{
|
2897
2891
|
struct index_extension ondisk;
|
2898
2892
|
|
@@ -2904,30 +2898,30 @@ static int write_extension(git_filebuf *file, struct index_extension *header, gi
|
|
2904
2898
|
return git_filebuf_write(file, data->ptr, data->size);
|
2905
2899
|
}
|
2906
2900
|
|
2907
|
-
static int create_name_extension_data(
|
2901
|
+
static int create_name_extension_data(git_str *name_buf, git_index_name_entry *conflict_name)
|
2908
2902
|
{
|
2909
2903
|
int error = 0;
|
2910
2904
|
|
2911
2905
|
if (conflict_name->ancestor == NULL)
|
2912
|
-
error =
|
2906
|
+
error = git_str_put(name_buf, "\0", 1);
|
2913
2907
|
else
|
2914
|
-
error =
|
2908
|
+
error = git_str_put(name_buf, conflict_name->ancestor, strlen(conflict_name->ancestor) + 1);
|
2915
2909
|
|
2916
2910
|
if (error != 0)
|
2917
2911
|
goto on_error;
|
2918
2912
|
|
2919
2913
|
if (conflict_name->ours == NULL)
|
2920
|
-
error =
|
2914
|
+
error = git_str_put(name_buf, "\0", 1);
|
2921
2915
|
else
|
2922
|
-
error =
|
2916
|
+
error = git_str_put(name_buf, conflict_name->ours, strlen(conflict_name->ours) + 1);
|
2923
2917
|
|
2924
2918
|
if (error != 0)
|
2925
2919
|
goto on_error;
|
2926
2920
|
|
2927
2921
|
if (conflict_name->theirs == NULL)
|
2928
|
-
error =
|
2922
|
+
error = git_str_put(name_buf, "\0", 1);
|
2929
2923
|
else
|
2930
|
-
error =
|
2924
|
+
error = git_str_put(name_buf, conflict_name->theirs, strlen(conflict_name->theirs) + 1);
|
2931
2925
|
|
2932
2926
|
on_error:
|
2933
2927
|
return error;
|
@@ -2935,7 +2929,7 @@ on_error:
|
|
2935
2929
|
|
2936
2930
|
static int write_name_extension(git_index *index, git_filebuf *file)
|
2937
2931
|
{
|
2938
|
-
|
2932
|
+
git_str name_buf = GIT_STR_INIT;
|
2939
2933
|
git_vector *out = &index->names;
|
2940
2934
|
git_index_name_entry *conflict_name;
|
2941
2935
|
struct index_extension extension;
|
@@ -2953,28 +2947,28 @@ static int write_name_extension(git_index *index, git_filebuf *file)
|
|
2953
2947
|
|
2954
2948
|
error = write_extension(file, &extension, &name_buf);
|
2955
2949
|
|
2956
|
-
|
2950
|
+
git_str_dispose(&name_buf);
|
2957
2951
|
|
2958
2952
|
done:
|
2959
2953
|
return error;
|
2960
2954
|
}
|
2961
2955
|
|
2962
|
-
static int create_reuc_extension_data(
|
2956
|
+
static int create_reuc_extension_data(git_str *reuc_buf, git_index_reuc_entry *reuc)
|
2963
2957
|
{
|
2964
2958
|
int i;
|
2965
2959
|
int error = 0;
|
2966
2960
|
|
2967
|
-
if ((error =
|
2961
|
+
if ((error = git_str_put(reuc_buf, reuc->path, strlen(reuc->path) + 1)) < 0)
|
2968
2962
|
return error;
|
2969
2963
|
|
2970
2964
|
for (i = 0; i < 3; i++) {
|
2971
|
-
if ((error =
|
2972
|
-
(error =
|
2965
|
+
if ((error = git_str_printf(reuc_buf, "%o", reuc->mode[i])) < 0 ||
|
2966
|
+
(error = git_str_put(reuc_buf, "\0", 1)) < 0)
|
2973
2967
|
return error;
|
2974
2968
|
}
|
2975
2969
|
|
2976
2970
|
for (i = 0; i < 3; i++) {
|
2977
|
-
if (reuc->mode[i] && (error =
|
2971
|
+
if (reuc->mode[i] && (error = git_str_put(reuc_buf, (char *)&reuc->oid[i].id, GIT_OID_RAWSZ)) < 0)
|
2978
2972
|
return error;
|
2979
2973
|
}
|
2980
2974
|
|
@@ -2983,7 +2977,7 @@ static int create_reuc_extension_data(git_buf *reuc_buf, git_index_reuc_entry *r
|
|
2983
2977
|
|
2984
2978
|
static int write_reuc_extension(git_index *index, git_filebuf *file)
|
2985
2979
|
{
|
2986
|
-
|
2980
|
+
git_str reuc_buf = GIT_STR_INIT;
|
2987
2981
|
git_vector *out = &index->reuc;
|
2988
2982
|
git_index_reuc_entry *reuc;
|
2989
2983
|
struct index_extension extension;
|
@@ -3001,7 +2995,7 @@ static int write_reuc_extension(git_index *index, git_filebuf *file)
|
|
3001
2995
|
|
3002
2996
|
error = write_extension(file, &extension, &reuc_buf);
|
3003
2997
|
|
3004
|
-
|
2998
|
+
git_str_dispose(&reuc_buf);
|
3005
2999
|
|
3006
3000
|
done:
|
3007
3001
|
return error;
|
@@ -3010,7 +3004,7 @@ done:
|
|
3010
3004
|
static int write_tree_extension(git_index *index, git_filebuf *file)
|
3011
3005
|
{
|
3012
3006
|
struct index_extension extension;
|
3013
|
-
|
3007
|
+
git_str buf = GIT_STR_INIT;
|
3014
3008
|
int error;
|
3015
3009
|
|
3016
3010
|
if (index->tree == NULL)
|
@@ -3025,7 +3019,7 @@ static int write_tree_extension(git_index *index, git_filebuf *file)
|
|
3025
3019
|
|
3026
3020
|
error = write_extension(file, &extension, &buf);
|
3027
3021
|
|
3028
|
-
|
3022
|
+
git_str_dispose(&buf);
|
3029
3023
|
|
3030
3024
|
return error;
|
3031
3025
|
}
|
@@ -3039,9 +3033,12 @@ static void clear_uptodate(git_index *index)
|
|
3039
3033
|
entry->flags_extended &= ~GIT_INDEX_ENTRY_UPTODATE;
|
3040
3034
|
}
|
3041
3035
|
|
3042
|
-
static int write_index(
|
3036
|
+
static int write_index(
|
3037
|
+
unsigned char checksum[GIT_HASH_SHA1_SIZE],
|
3038
|
+
size_t *checksum_size,
|
3039
|
+
git_index *index,
|
3040
|
+
git_filebuf *file)
|
3043
3041
|
{
|
3044
|
-
git_oid hash_final;
|
3045
3042
|
struct index_header header;
|
3046
3043
|
bool is_extended;
|
3047
3044
|
uint32_t index_version_number;
|
@@ -3049,6 +3046,8 @@ static int write_index(git_oid *checksum, git_index *index, git_filebuf *file)
|
|
3049
3046
|
GIT_ASSERT_ARG(index);
|
3050
3047
|
GIT_ASSERT_ARG(file);
|
3051
3048
|
|
3049
|
+
*checksum_size = GIT_HASH_SHA1_SIZE;
|
3050
|
+
|
3052
3051
|
if (index->version <= INDEX_VERSION_NUMBER_EXT) {
|
3053
3052
|
is_extended = is_index_extended(index);
|
3054
3053
|
index_version_number = is_extended ? INDEX_VERSION_NUMBER_EXT : INDEX_VERSION_NUMBER_LB;
|
@@ -3079,11 +3078,10 @@ static int write_index(git_oid *checksum, git_index *index, git_filebuf *file)
|
|
3079
3078
|
return -1;
|
3080
3079
|
|
3081
3080
|
/* get out the hash for all the contents we've appended to the file */
|
3082
|
-
git_filebuf_hash(
|
3083
|
-
git_oid_cpy(checksum, &hash_final);
|
3081
|
+
git_filebuf_hash(checksum, file);
|
3084
3082
|
|
3085
3083
|
/* write it at the end of the file */
|
3086
|
-
if (git_filebuf_write(file,
|
3084
|
+
if (git_filebuf_write(file, checksum, *checksum_size) < 0)
|
3087
3085
|
return -1;
|
3088
3086
|
|
3089
3087
|
/* file entries are no longer up to date */
|
@@ -3115,13 +3113,13 @@ static int read_tree_cb(
|
|
3115
3113
|
{
|
3116
3114
|
read_tree_data *data = payload;
|
3117
3115
|
git_index_entry *entry = NULL, *old_entry;
|
3118
|
-
|
3116
|
+
git_str path = GIT_STR_INIT;
|
3119
3117
|
size_t pos;
|
3120
3118
|
|
3121
3119
|
if (git_tree_entry__is_tree(tentry))
|
3122
3120
|
return 0;
|
3123
3121
|
|
3124
|
-
if (
|
3122
|
+
if (git_str_joinpath(&path, root, tentry->filename) < 0)
|
3125
3123
|
return -1;
|
3126
3124
|
|
3127
3125
|
if (index_entry_create(&entry, INDEX_OWNER(data->index), path.ptr, NULL, false) < 0)
|
@@ -3143,7 +3141,7 @@ static int read_tree_cb(
|
|
3143
3141
|
}
|
3144
3142
|
|
3145
3143
|
index_entry_adjust_namemask(entry, path.size);
|
3146
|
-
|
3144
|
+
git_str_dispose(&path);
|
3147
3145
|
|
3148
3146
|
if (git_vector_insert(data->new_entries, entry) < 0) {
|
3149
3147
|
index_entry_free(entry);
|
@@ -3385,7 +3383,7 @@ enum {
|
|
3385
3383
|
INDEX_ACTION_NONE = 0,
|
3386
3384
|
INDEX_ACTION_UPDATE = 1,
|
3387
3385
|
INDEX_ACTION_REMOVE = 2,
|
3388
|
-
INDEX_ACTION_ADDALL = 3
|
3386
|
+
INDEX_ACTION_ADDALL = 3
|
3389
3387
|
};
|
3390
3388
|
|
3391
3389
|
int git_index_add_all(
|
@@ -3498,7 +3496,7 @@ static int index_apply_to_wd_diff(git_index *index, int action, const git_strarr
|
|
3498
3496
|
}
|
3499
3497
|
|
3500
3498
|
/*
|
3501
|
-
* We do the matching ourselves
|
3499
|
+
* We do the matching ourselves instead of passing the list to
|
3502
3500
|
* diff because we want to tell the callback which one
|
3503
3501
|
* matched, which we do not know if we ask diff to filter for us.
|
3504
3502
|
*/
|
@@ -3540,7 +3538,7 @@ static int index_apply_to_all(
|
|
3540
3538
|
size_t i;
|
3541
3539
|
git_pathspec ps;
|
3542
3540
|
const char *match;
|
3543
|
-
|
3541
|
+
git_str path = GIT_STR_INIT;
|
3544
3542
|
|
3545
3543
|
GIT_ASSERT_ARG(index);
|
3546
3544
|
|
@@ -3569,7 +3567,7 @@ static int index_apply_to_all(
|
|
3569
3567
|
}
|
3570
3568
|
|
3571
3569
|
/* index manipulation may alter entry, so don't depend on it */
|
3572
|
-
if ((error =
|
3570
|
+
if ((error = git_str_sets(&path, entry->path)) < 0)
|
3573
3571
|
break;
|
3574
3572
|
|
3575
3573
|
switch (action) {
|
@@ -3598,7 +3596,7 @@ static int index_apply_to_all(
|
|
3598
3596
|
}
|
3599
3597
|
}
|
3600
3598
|
|
3601
|
-
|
3599
|
+
git_str_dispose(&path);
|
3602
3600
|
git_pathspec__clear(&ps);
|
3603
3601
|
|
3604
3602
|
return error;
|
@@ -3713,8 +3711,9 @@ int git_indexwriter_init_for_operation(
|
|
3713
3711
|
|
3714
3712
|
int git_indexwriter_commit(git_indexwriter *writer)
|
3715
3713
|
{
|
3714
|
+
unsigned char checksum[GIT_HASH_SHA1_SIZE];
|
3715
|
+
size_t checksum_size;
|
3716
3716
|
int error;
|
3717
|
-
git_oid checksum = {{ 0 }};
|
3718
3717
|
|
3719
3718
|
if (!writer->should_write)
|
3720
3719
|
return 0;
|
@@ -3722,7 +3721,7 @@ int git_indexwriter_commit(git_indexwriter *writer)
|
|
3722
3721
|
git_vector_sort(&writer->index->entries);
|
3723
3722
|
git_vector_sort(&writer->index->reuc);
|
3724
3723
|
|
3725
|
-
if ((error = write_index(
|
3724
|
+
if ((error = write_index(checksum, &checksum_size, writer->index, &writer->file)) < 0) {
|
3726
3725
|
git_indexwriter_cleanup(writer);
|
3727
3726
|
return error;
|
3728
3727
|
}
|
@@ -3738,7 +3737,7 @@ int git_indexwriter_commit(git_indexwriter *writer)
|
|
3738
3737
|
|
3739
3738
|
writer->index->dirty = 0;
|
3740
3739
|
writer->index->on_disk = 1;
|
3741
|
-
|
3740
|
+
memcpy(writer->index->checksum, checksum, checksum_size);
|
3742
3741
|
|
3743
3742
|
git_index_free(writer->index);
|
3744
3743
|
writer->index = NULL;
|
data/vendor/libgit2/src/index.h
CHANGED
@@ -27,7 +27,7 @@ struct git_index {
|
|
27
27
|
|
28
28
|
char *index_file_path;
|
29
29
|
git_futils_filestamp stamp;
|
30
|
-
|
30
|
+
unsigned char checksum[GIT_HASH_SHA1_SIZE];
|
31
31
|
|
32
32
|
git_vector entries;
|
33
33
|
git_idxmap *entries_map;
|
@@ -133,10 +133,13 @@ extern unsigned int git_index__create_mode(unsigned int mode);
|
|
133
133
|
|
134
134
|
GIT_INLINE(const git_futils_filestamp *) git_index__filestamp(git_index *index)
|
135
135
|
{
|
136
|
-
|
136
|
+
return &index->stamp;
|
137
137
|
}
|
138
138
|
|
139
|
-
|
139
|
+
GIT_INLINE(unsigned char *) git_index__checksum(git_index *index)
|
140
|
+
{
|
141
|
+
return index->checksum;
|
142
|
+
}
|
140
143
|
|
141
144
|
/* Copy the current entries vector *and* increment the index refcount.
|
142
145
|
* Call `git_index__release_snapshot` when done.
|