rugged 1.0.0 → 1.2.0
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/LICENSE +1 -0
- data/README.md +3 -3
- data/ext/rugged/rugged.c +7 -4
- data/ext/rugged/rugged_commit.c +1 -1
- data/ext/rugged/rugged_config.c +1 -1
- data/ext/rugged/rugged_object.c +1 -1
- data/ext/rugged/rugged_remote.c +32 -2
- data/ext/rugged/rugged_repo.c +13 -3
- data/lib/rugged/commit.rb +17 -4
- data/lib/rugged/repository.rb +7 -8
- data/lib/rugged/submodule_collection.rb +4 -4
- data/lib/rugged/version.rb +1 -1
- data/vendor/libgit2/CMakeLists.txt +41 -74
- data/vendor/libgit2/COPYING +109 -1
- data/vendor/libgit2/cmake/{Modules/AddCFlagIfSupported.cmake → AddCFlagIfSupported.cmake} +0 -0
- data/vendor/libgit2/cmake/{Modules/EnableWarnings.cmake → EnableWarnings.cmake} +0 -0
- data/vendor/libgit2/cmake/{Modules/FindCoreFoundation.cmake → FindCoreFoundation.cmake} +0 -0
- data/vendor/libgit2/cmake/{Modules/FindGSSAPI.cmake → FindGSSAPI.cmake} +0 -0
- data/vendor/libgit2/cmake/{Modules/FindGSSFramework.cmake → FindGSSFramework.cmake} +0 -0
- data/vendor/libgit2/cmake/{Modules/FindHTTP_Parser.cmake → FindHTTP_Parser.cmake} +0 -0
- data/vendor/libgit2/cmake/{Modules/FindIconv.cmake → FindIconv.cmake} +0 -0
- data/vendor/libgit2/cmake/{Modules/FindPCRE.cmake → FindPCRE.cmake} +0 -0
- data/vendor/libgit2/cmake/{Modules/FindPCRE2.cmake → FindPCRE2.cmake} +0 -0
- data/vendor/libgit2/cmake/{Modules/FindPkgLibraries.cmake → FindPkgLibraries.cmake} +0 -0
- data/vendor/libgit2/cmake/{Modules/FindSecurity.cmake → FindSecurity.cmake} +0 -0
- data/vendor/libgit2/cmake/{Modules/FindStatNsec.cmake → FindStatNsec.cmake} +0 -0
- data/vendor/libgit2/cmake/Findfutimens.cmake +14 -0
- data/vendor/libgit2/cmake/{Modules/FindmbedTLS.cmake → FindmbedTLS.cmake} +0 -0
- data/vendor/libgit2/cmake/{Modules/IdeSplitSources.cmake → IdeSplitSources.cmake} +0 -0
- data/vendor/libgit2/cmake/{Modules/PkgBuildConfig.cmake → PkgBuildConfig.cmake} +0 -0
- data/vendor/libgit2/cmake/{Modules/SanitizeBool.cmake → SanitizeBool.cmake} +0 -0
- data/vendor/libgit2/cmake/{Modules/SelectGSSAPI.cmake → SelectGSSAPI.cmake} +18 -26
- data/vendor/libgit2/cmake/{Modules/SelectHTTPSBackend.cmake → SelectHTTPSBackend.cmake} +29 -32
- data/vendor/libgit2/cmake/{Modules/SelectHashes.cmake → SelectHashes.cmake} +21 -28
- data/vendor/libgit2/deps/chromium-zlib/CMakeLists.txt +101 -0
- data/vendor/libgit2/deps/http-parser/CMakeLists.txt +4 -3
- data/vendor/libgit2/deps/ntlmclient/CMakeLists.txt +24 -10
- data/vendor/libgit2/deps/ntlmclient/compat.h +0 -27
- data/vendor/libgit2/deps/ntlmclient/crypt.h +14 -9
- data/vendor/libgit2/deps/ntlmclient/crypt_commoncrypto.c +20 -20
- data/vendor/libgit2/deps/ntlmclient/crypt_commoncrypto.h +3 -3
- data/vendor/libgit2/deps/ntlmclient/crypt_mbedtls.c +37 -36
- data/vendor/libgit2/deps/ntlmclient/crypt_mbedtls.h +4 -3
- data/vendor/libgit2/deps/ntlmclient/crypt_openssl.c +178 -51
- data/vendor/libgit2/deps/ntlmclient/crypt_openssl.h +74 -5
- data/vendor/libgit2/deps/ntlmclient/ntlm.c +164 -135
- data/vendor/libgit2/deps/ntlmclient/ntlm.h +13 -9
- data/vendor/libgit2/deps/ntlmclient/ntlmclient.h +16 -3
- data/vendor/libgit2/deps/ntlmclient/unicode.h +10 -4
- data/vendor/libgit2/deps/ntlmclient/unicode_builtin.c +16 -27
- data/vendor/libgit2/deps/ntlmclient/unicode_builtin.h +20 -0
- data/vendor/libgit2/deps/ntlmclient/unicode_iconv.c +28 -52
- data/vendor/libgit2/deps/ntlmclient/unicode_iconv.h +22 -0
- data/vendor/libgit2/deps/ntlmclient/util.c +15 -1
- data/vendor/libgit2/deps/ntlmclient/util.h +2 -1
- data/vendor/libgit2/deps/pcre/LICENCE +93 -0
- data/vendor/libgit2/deps/pcre/pcre.h +2 -2
- data/vendor/libgit2/deps/pcre/pcre_compile.c +29 -17
- data/vendor/libgit2/deps/pcre/pcre_jit_compile.c +4 -4
- data/vendor/libgit2/deps/pcre/pcreposix.c +2 -3
- data/vendor/libgit2/deps/zlib/CMakeLists.txt +6 -5
- data/vendor/libgit2/deps/zlib/deflate.c +1 -0
- data/vendor/libgit2/include/git2/annotated_commit.h +1 -1
- data/vendor/libgit2/include/git2/apply.h +2 -0
- data/vendor/libgit2/include/git2/attr.h +89 -0
- data/vendor/libgit2/include/git2/blame.h +95 -42
- data/vendor/libgit2/include/git2/blob.h +31 -3
- data/vendor/libgit2/include/git2/branch.h +25 -0
- data/vendor/libgit2/include/git2/cert.h +42 -5
- data/vendor/libgit2/include/git2/checkout.h +28 -12
- data/vendor/libgit2/include/git2/commit.h +35 -19
- data/vendor/libgit2/include/git2/common.h +33 -6
- data/vendor/libgit2/include/git2/config.h +1 -1
- data/vendor/libgit2/include/git2/deprecated.h +248 -8
- data/vendor/libgit2/include/git2/diff.h +35 -20
- data/vendor/libgit2/include/git2/errors.h +8 -7
- data/vendor/libgit2/include/git2/filter.h +57 -17
- data/vendor/libgit2/include/git2/graph.h +20 -2
- data/vendor/libgit2/include/git2/index.h +4 -5
- data/vendor/libgit2/include/git2/indexer.h +2 -1
- data/vendor/libgit2/include/git2/odb.h +44 -20
- data/vendor/libgit2/include/git2/pack.h +1 -1
- data/vendor/libgit2/include/git2/patch.h +8 -0
- data/vendor/libgit2/include/git2/rebase.h +25 -1
- data/vendor/libgit2/include/git2/refs.h +9 -5
- data/vendor/libgit2/include/git2/remote.h +59 -6
- data/vendor/libgit2/include/git2/repository.h +95 -52
- data/vendor/libgit2/include/git2/revparse.h +5 -5
- data/vendor/libgit2/include/git2/status.h +115 -59
- data/vendor/libgit2/include/git2/strarray.h +6 -10
- data/vendor/libgit2/include/git2/submodule.h +9 -0
- data/vendor/libgit2/include/git2/sys/commit_graph.h +174 -0
- data/vendor/libgit2/include/git2/sys/filter.h +49 -28
- data/vendor/libgit2/include/git2/sys/midx.h +74 -0
- data/vendor/libgit2/include/git2/sys/odb_backend.h +7 -0
- data/vendor/libgit2/include/git2/sys/transport.h +1 -0
- data/vendor/libgit2/include/git2/tag.h +12 -0
- data/vendor/libgit2/include/git2/transport.h +1 -1
- data/vendor/libgit2/include/git2/tree.h +2 -14
- data/vendor/libgit2/include/git2/types.h +9 -0
- data/vendor/libgit2/include/git2/version.h +3 -3
- data/vendor/libgit2/include/git2/worktree.h +1 -0
- data/vendor/libgit2/src/CMakeLists.txt +77 -44
- data/vendor/libgit2/src/alloc.c +21 -8
- data/vendor/libgit2/src/allocators/failalloc.c +92 -0
- data/vendor/libgit2/src/allocators/failalloc.h +23 -0
- data/vendor/libgit2/src/allocators/stdalloc.c +41 -10
- data/vendor/libgit2/src/allocators/win32_leakcheck.c +118 -0
- data/vendor/libgit2/src/allocators/{win32_crtdbg.h → win32_leakcheck.h} +3 -3
- data/vendor/libgit2/src/annotated_commit.c +21 -9
- data/vendor/libgit2/src/apply.c +21 -8
- data/vendor/libgit2/src/array.h +11 -11
- data/vendor/libgit2/src/assert_safe.h +58 -0
- data/vendor/libgit2/src/attr.c +181 -74
- data/vendor/libgit2/src/attr_file.c +92 -42
- data/vendor/libgit2/src/attr_file.h +32 -11
- data/vendor/libgit2/src/attrcache.c +44 -40
- data/vendor/libgit2/src/attrcache.h +4 -5
- data/vendor/libgit2/src/blame.c +28 -15
- data/vendor/libgit2/src/blame_git.c +6 -3
- data/vendor/libgit2/src/blob.c +46 -24
- data/vendor/libgit2/src/branch.c +87 -37
- data/vendor/libgit2/src/buffer.c +339 -27
- data/vendor/libgit2/src/buffer.h +153 -2
- data/vendor/libgit2/src/cache.c +3 -24
- data/vendor/libgit2/src/cache.h +7 -7
- data/vendor/libgit2/src/cc-compat.h +10 -2
- data/vendor/libgit2/src/checkout.c +97 -98
- data/vendor/libgit2/src/cherrypick.c +8 -2
- data/vendor/libgit2/src/clone.c +104 -29
- data/vendor/libgit2/src/commit.c +41 -28
- data/vendor/libgit2/src/commit_graph.c +1209 -0
- data/vendor/libgit2/src/commit_graph.h +162 -0
- data/vendor/libgit2/src/commit_list.c +46 -0
- data/vendor/libgit2/src/commit_list.h +2 -0
- data/vendor/libgit2/src/common.h +26 -2
- data/vendor/libgit2/src/config.c +40 -22
- data/vendor/libgit2/src/config_cache.c +9 -4
- data/vendor/libgit2/src/config_entries.c +35 -27
- data/vendor/libgit2/src/config_file.c +25 -8
- data/vendor/libgit2/src/config_parse.c +5 -7
- data/vendor/libgit2/src/config_snapshot.c +2 -1
- data/vendor/libgit2/src/crlf.c +16 -6
- data/vendor/libgit2/src/date.c +4 -3
- data/vendor/libgit2/src/delta.c +1 -1
- data/vendor/libgit2/src/describe.c +11 -4
- data/vendor/libgit2/src/diff.c +23 -19
- data/vendor/libgit2/src/diff_driver.c +21 -17
- data/vendor/libgit2/src/diff_file.c +5 -7
- data/vendor/libgit2/src/diff_generate.c +56 -28
- data/vendor/libgit2/src/diff_parse.c +2 -3
- data/vendor/libgit2/src/diff_print.c +81 -65
- data/vendor/libgit2/src/diff_stats.c +19 -16
- data/vendor/libgit2/src/diff_tform.c +13 -13
- data/vendor/libgit2/src/diff_xdiff.c +4 -2
- data/vendor/libgit2/src/diff_xdiff.h +1 -1
- data/vendor/libgit2/src/errors.c +26 -19
- data/vendor/libgit2/src/features.h.in +5 -1
- data/vendor/libgit2/src/fetch.c +7 -2
- data/vendor/libgit2/src/fetchhead.c +8 -4
- data/vendor/libgit2/src/filebuf.c +9 -7
- data/vendor/libgit2/src/filter.c +209 -113
- data/vendor/libgit2/src/filter.h +24 -5
- data/vendor/libgit2/src/futils.c +8 -8
- data/vendor/libgit2/src/futils.h +4 -4
- data/vendor/libgit2/src/graph.c +64 -9
- data/vendor/libgit2/src/hash/sha1/collisiondetect.c +3 -3
- data/vendor/libgit2/src/hash/sha1/common_crypto.c +3 -3
- data/vendor/libgit2/src/hash/sha1/generic.h +1 -1
- data/vendor/libgit2/src/hash/sha1/mbedtls.c +12 -12
- data/vendor/libgit2/src/hash/sha1/openssl.c +3 -3
- data/vendor/libgit2/src/hash/sha1/sha1dc/sha1.c +0 -2
- data/vendor/libgit2/src/hash/sha1/win32.c +15 -11
- data/vendor/libgit2/src/hash.c +16 -13
- data/vendor/libgit2/src/hash.h +1 -1
- data/vendor/libgit2/src/hashsig.c +23 -10
- data/vendor/libgit2/src/ident.c +13 -3
- data/vendor/libgit2/src/idxmap.c +0 -22
- data/vendor/libgit2/src/ignore.c +35 -19
- data/vendor/libgit2/src/index.c +126 -84
- data/vendor/libgit2/src/index.h +1 -1
- data/vendor/libgit2/src/indexer.c +60 -36
- data/vendor/libgit2/src/integer.h +79 -2
- data/vendor/libgit2/src/iterator.c +40 -28
- data/vendor/libgit2/src/iterator.h +1 -1
- data/vendor/libgit2/src/khash.h +2 -11
- data/vendor/libgit2/src/{settings.c → libgit2.c} +125 -49
- data/vendor/libgit2/src/libgit2.h +15 -0
- data/vendor/libgit2/src/mailmap.c +23 -10
- data/vendor/libgit2/src/map.h +3 -3
- data/vendor/libgit2/src/merge.c +108 -46
- data/vendor/libgit2/src/merge.h +2 -1
- data/vendor/libgit2/src/merge_driver.c +19 -13
- data/vendor/libgit2/src/merge_file.c +15 -9
- data/vendor/libgit2/src/message.c +3 -1
- data/vendor/libgit2/src/midx.c +879 -0
- data/vendor/libgit2/src/midx.h +110 -0
- data/vendor/libgit2/src/mwindow.c +214 -95
- data/vendor/libgit2/src/mwindow.h +3 -3
- data/vendor/libgit2/src/net.c +133 -4
- data/vendor/libgit2/src/net.h +16 -2
- data/vendor/libgit2/src/netops.c +6 -4
- data/vendor/libgit2/src/netops.h +2 -2
- data/vendor/libgit2/src/notes.c +10 -10
- data/vendor/libgit2/src/object.c +24 -15
- data/vendor/libgit2/src/odb.c +298 -57
- data/vendor/libgit2/src/odb.h +16 -2
- data/vendor/libgit2/src/odb_loose.c +31 -21
- data/vendor/libgit2/src/odb_mempack.c +3 -1
- data/vendor/libgit2/src/odb_pack.c +391 -114
- data/vendor/libgit2/src/oid.c +7 -4
- data/vendor/libgit2/src/pack-objects.c +83 -69
- data/vendor/libgit2/src/pack.c +383 -150
- data/vendor/libgit2/src/pack.h +44 -9
- data/vendor/libgit2/src/patch.c +14 -7
- data/vendor/libgit2/src/patch_generate.c +3 -5
- data/vendor/libgit2/src/patch_parse.c +6 -3
- data/vendor/libgit2/src/path.c +102 -57
- data/vendor/libgit2/src/path.h +79 -6
- data/vendor/libgit2/src/pathspec.c +12 -11
- data/vendor/libgit2/src/pool.c +34 -22
- data/vendor/libgit2/src/pool.h +9 -1
- data/vendor/libgit2/src/posix.c +43 -12
- data/vendor/libgit2/src/posix.h +9 -0
- data/vendor/libgit2/src/proxy.c +2 -0
- data/vendor/libgit2/src/push.c +2 -0
- data/vendor/libgit2/src/reader.c +10 -6
- data/vendor/libgit2/src/rebase.c +95 -49
- data/vendor/libgit2/src/refdb.c +165 -13
- data/vendor/libgit2/src/refdb.h +69 -0
- data/vendor/libgit2/src/refdb_fs.c +144 -152
- data/vendor/libgit2/src/reflog.c +21 -20
- data/vendor/libgit2/src/refs.c +151 -231
- data/vendor/libgit2/src/refs.h +2 -20
- data/vendor/libgit2/src/refspec.c +80 -44
- data/vendor/libgit2/src/regexp.c +2 -2
- data/vendor/libgit2/src/remote.c +312 -121
- data/vendor/libgit2/src/remote.h +2 -1
- data/vendor/libgit2/src/repository.c +351 -189
- data/vendor/libgit2/src/repository.h +23 -29
- data/vendor/libgit2/src/reset.c +7 -6
- data/vendor/libgit2/src/revert.c +8 -2
- data/vendor/libgit2/src/revparse.c +19 -13
- data/vendor/libgit2/src/revwalk.c +35 -20
- data/vendor/libgit2/src/runtime.c +162 -0
- data/vendor/libgit2/src/runtime.h +62 -0
- data/vendor/libgit2/src/{refdb_fs.h → settings.h} +3 -11
- data/vendor/libgit2/src/signature.c +6 -5
- data/vendor/libgit2/src/sortedcache.c +2 -3
- data/vendor/libgit2/src/sortedcache.h +10 -8
- data/vendor/libgit2/src/stash.c +7 -3
- data/vendor/libgit2/src/status.c +9 -4
- data/vendor/libgit2/src/strarray.c +64 -0
- data/vendor/libgit2/src/streams/mbedtls.c +14 -17
- data/vendor/libgit2/src/streams/mbedtls.h +1 -1
- data/vendor/libgit2/src/streams/openssl.c +113 -207
- data/vendor/libgit2/src/streams/openssl.h +9 -1
- data/vendor/libgit2/src/streams/openssl_dynamic.c +309 -0
- data/vendor/libgit2/src/streams/openssl_dynamic.h +348 -0
- data/vendor/libgit2/src/streams/openssl_legacy.c +203 -0
- data/vendor/libgit2/src/streams/openssl_legacy.h +63 -0
- data/vendor/libgit2/src/streams/registry.c +10 -9
- data/vendor/libgit2/src/streams/socket.c +6 -2
- data/vendor/libgit2/src/streams/stransport.c +6 -3
- data/vendor/libgit2/src/streams/tls.c +5 -3
- data/vendor/libgit2/src/submodule.c +134 -66
- data/vendor/libgit2/src/submodule.h +9 -9
- data/vendor/libgit2/src/sysdir.c +8 -26
- data/vendor/libgit2/src/sysdir.h +0 -11
- data/vendor/libgit2/src/tag.c +49 -11
- data/vendor/libgit2/src/thread.c +140 -0
- data/vendor/libgit2/src/thread.h +479 -0
- data/vendor/libgit2/src/threadstate.c +83 -0
- data/vendor/libgit2/src/threadstate.h +24 -0
- data/vendor/libgit2/src/trace.c +2 -2
- data/vendor/libgit2/src/trace.h +17 -13
- data/vendor/libgit2/src/transaction.c +21 -9
- data/vendor/libgit2/src/transport.c +3 -3
- data/vendor/libgit2/src/transports/auth.c +1 -1
- data/vendor/libgit2/src/transports/auth_negotiate.c +11 -4
- data/vendor/libgit2/src/transports/auth_ntlm.c +10 -6
- data/vendor/libgit2/src/transports/credential.c +17 -7
- data/vendor/libgit2/src/transports/credential_helpers.c +2 -0
- data/vendor/libgit2/src/transports/git.c +1 -3
- data/vendor/libgit2/src/transports/http.c +19 -17
- data/vendor/libgit2/src/transports/http.h +1 -0
- data/vendor/libgit2/src/transports/httpclient.c +84 -42
- data/vendor/libgit2/src/transports/httpclient.h +1 -1
- data/vendor/libgit2/src/transports/local.c +5 -5
- data/vendor/libgit2/src/transports/smart.c +14 -9
- data/vendor/libgit2/src/transports/smart.h +1 -1
- data/vendor/libgit2/src/transports/smart_protocol.c +11 -5
- data/vendor/libgit2/src/transports/ssh.c +51 -17
- data/vendor/libgit2/src/transports/winhttp.c +156 -88
- data/vendor/libgit2/src/tree.c +100 -77
- data/vendor/libgit2/src/tree.h +1 -0
- data/vendor/libgit2/src/tsort.c +0 -2
- data/vendor/libgit2/src/unix/map.c +3 -1
- data/vendor/libgit2/src/unix/posix.h +16 -1
- data/vendor/libgit2/src/unix/pthread.h +2 -1
- data/vendor/libgit2/src/utf8.c +150 -0
- data/vendor/libgit2/src/utf8.h +52 -0
- data/vendor/libgit2/src/util.c +74 -183
- data/vendor/libgit2/src/util.h +33 -39
- data/vendor/libgit2/src/vector.c +23 -19
- data/vendor/libgit2/src/vector.h +4 -2
- data/vendor/libgit2/src/win32/findfile.c +4 -2
- data/vendor/libgit2/src/win32/git2.rc +18 -3
- data/vendor/libgit2/src/win32/map.c +1 -1
- data/vendor/libgit2/src/win32/msvc-compat.h +9 -1
- data/vendor/libgit2/src/win32/path_w32.c +23 -25
- data/vendor/libgit2/src/win32/path_w32.h +0 -1
- data/vendor/libgit2/src/win32/posix_w32.c +77 -1
- data/vendor/libgit2/src/win32/precompiled.h +0 -1
- data/vendor/libgit2/src/win32/reparse.h +4 -4
- data/vendor/libgit2/src/win32/thread.c +24 -15
- data/vendor/libgit2/src/win32/thread.h +1 -1
- data/vendor/libgit2/src/win32/w32_buffer.c +3 -3
- data/vendor/libgit2/src/win32/w32_common.h +18 -9
- data/vendor/libgit2/src/win32/{w32_crtdbg_stacktrace.c → w32_leakcheck.c} +269 -33
- data/vendor/libgit2/src/win32/w32_leakcheck.h +222 -0
- data/vendor/libgit2/src/win32/w32_util.h +6 -6
- data/vendor/libgit2/src/worktree.c +37 -15
- data/vendor/libgit2/src/zstream.c +1 -1
- metadata +56 -38
- data/vendor/libgit2/cmake/Modules/CheckPrototypeDefinition.c.in +0 -29
- data/vendor/libgit2/cmake/Modules/CheckPrototypeDefinition.cmake +0 -96
- data/vendor/libgit2/src/allocators/win32_crtdbg.c +0 -118
- data/vendor/libgit2/src/buf_text.c +0 -316
- data/vendor/libgit2/src/buf_text.h +0 -122
- data/vendor/libgit2/src/global.c +0 -361
- data/vendor/libgit2/src/global.h +0 -41
- data/vendor/libgit2/src/thread-utils.c +0 -58
- data/vendor/libgit2/src/thread-utils.h +0 -246
- data/vendor/libgit2/src/win32/w32_crtdbg_stacktrace.h +0 -127
- data/vendor/libgit2/src/win32/w32_stack.c +0 -188
- data/vendor/libgit2/src/win32/w32_stack.h +0 -140
data/vendor/libgit2/src/hash.c
CHANGED
|
@@ -16,7 +16,7 @@ int git_hash_ctx_init(git_hash_ctx *ctx)
|
|
|
16
16
|
{
|
|
17
17
|
int error;
|
|
18
18
|
|
|
19
|
-
if ((error = git_hash_sha1_ctx_init(&ctx->sha1)) < 0)
|
|
19
|
+
if ((error = git_hash_sha1_ctx_init(&ctx->ctx.sha1)) < 0)
|
|
20
20
|
return error;
|
|
21
21
|
|
|
22
22
|
ctx->algo = GIT_HASH_ALGO_SHA1;
|
|
@@ -28,10 +28,10 @@ void git_hash_ctx_cleanup(git_hash_ctx *ctx)
|
|
|
28
28
|
{
|
|
29
29
|
switch (ctx->algo) {
|
|
30
30
|
case GIT_HASH_ALGO_SHA1:
|
|
31
|
-
git_hash_sha1_ctx_cleanup(&ctx->sha1);
|
|
31
|
+
git_hash_sha1_ctx_cleanup(&ctx->ctx.sha1);
|
|
32
32
|
return;
|
|
33
33
|
default:
|
|
34
|
-
|
|
34
|
+
/* unreachable */ ;
|
|
35
35
|
}
|
|
36
36
|
}
|
|
37
37
|
|
|
@@ -39,33 +39,36 @@ int git_hash_init(git_hash_ctx *ctx)
|
|
|
39
39
|
{
|
|
40
40
|
switch (ctx->algo) {
|
|
41
41
|
case GIT_HASH_ALGO_SHA1:
|
|
42
|
-
return git_hash_sha1_init(&ctx->sha1);
|
|
42
|
+
return git_hash_sha1_init(&ctx->ctx.sha1);
|
|
43
43
|
default:
|
|
44
|
-
|
|
45
|
-
return -1;
|
|
44
|
+
/* unreachable */ ;
|
|
46
45
|
}
|
|
46
|
+
GIT_ASSERT(0);
|
|
47
|
+
return -1;
|
|
47
48
|
}
|
|
48
49
|
|
|
49
50
|
int git_hash_update(git_hash_ctx *ctx, const void *data, size_t len)
|
|
50
51
|
{
|
|
51
52
|
switch (ctx->algo) {
|
|
52
53
|
case GIT_HASH_ALGO_SHA1:
|
|
53
|
-
return git_hash_sha1_update(&ctx->sha1, data, len);
|
|
54
|
+
return git_hash_sha1_update(&ctx->ctx.sha1, data, len);
|
|
54
55
|
default:
|
|
55
|
-
|
|
56
|
-
return -1;
|
|
56
|
+
/* unreachable */ ;
|
|
57
57
|
}
|
|
58
|
+
GIT_ASSERT(0);
|
|
59
|
+
return -1;
|
|
58
60
|
}
|
|
59
61
|
|
|
60
62
|
int git_hash_final(git_oid *out, git_hash_ctx *ctx)
|
|
61
63
|
{
|
|
62
64
|
switch (ctx->algo) {
|
|
63
65
|
case GIT_HASH_ALGO_SHA1:
|
|
64
|
-
return git_hash_sha1_final(out, &ctx->sha1);
|
|
66
|
+
return git_hash_sha1_final(out, &ctx->ctx.sha1);
|
|
65
67
|
default:
|
|
66
|
-
|
|
67
|
-
return -1;
|
|
68
|
+
/* unreachable */ ;
|
|
68
69
|
}
|
|
70
|
+
GIT_ASSERT(0);
|
|
71
|
+
return -1;
|
|
69
72
|
}
|
|
70
73
|
|
|
71
74
|
int git_hash_buf(git_oid *out, const void *data, size_t len)
|
|
@@ -80,7 +83,7 @@ int git_hash_buf(git_oid *out, const void *data, size_t len)
|
|
|
80
83
|
error = git_hash_final(out, &ctx);
|
|
81
84
|
|
|
82
85
|
git_hash_ctx_cleanup(&ctx);
|
|
83
|
-
|
|
86
|
+
|
|
84
87
|
return error;
|
|
85
88
|
}
|
|
86
89
|
|
data/vendor/libgit2/src/hash.h
CHANGED
|
@@ -17,7 +17,7 @@ typedef uint64_t hashsig_state;
|
|
|
17
17
|
#define HASHSIG_SCALE 100
|
|
18
18
|
|
|
19
19
|
#define HASHSIG_MAX_RUN 80
|
|
20
|
-
#define HASHSIG_HASH_START
|
|
20
|
+
#define HASHSIG_HASH_START INT64_C(0x012345678ABCDEF0)
|
|
21
21
|
#define HASHSIG_HASH_SHIFT 5
|
|
22
22
|
|
|
23
23
|
#define HASHSIG_HASH_MIX(S,CH) \
|
|
@@ -133,13 +133,13 @@ typedef struct {
|
|
|
133
133
|
uint8_t ignore_ch[256];
|
|
134
134
|
} hashsig_in_progress;
|
|
135
135
|
|
|
136
|
-
static
|
|
136
|
+
static int hashsig_in_progress_init(
|
|
137
137
|
hashsig_in_progress *prog, git_hashsig *sig)
|
|
138
138
|
{
|
|
139
139
|
int i;
|
|
140
140
|
|
|
141
141
|
/* no more than one can be set */
|
|
142
|
-
|
|
142
|
+
GIT_ASSERT(!(sig->opt & GIT_HASHSIG_IGNORE_WHITESPACE) ||
|
|
143
143
|
!(sig->opt & GIT_HASHSIG_SMART_WHITESPACE));
|
|
144
144
|
|
|
145
145
|
if (sig->opt & GIT_HASHSIG_IGNORE_WHITESPACE) {
|
|
@@ -153,6 +153,8 @@ static void hashsig_in_progress_init(
|
|
|
153
153
|
} else {
|
|
154
154
|
memset(prog, 0, sizeof(*prog));
|
|
155
155
|
}
|
|
156
|
+
|
|
157
|
+
return 0;
|
|
156
158
|
}
|
|
157
159
|
|
|
158
160
|
static int hashsig_add_hashes(
|
|
@@ -251,7 +253,8 @@ int git_hashsig_create(
|
|
|
251
253
|
git_hashsig *sig = hashsig_alloc(opts);
|
|
252
254
|
GIT_ERROR_CHECK_ALLOC(sig);
|
|
253
255
|
|
|
254
|
-
hashsig_in_progress_init(&prog, sig)
|
|
256
|
+
if ((error = hashsig_in_progress_init(&prog, sig)) < 0)
|
|
257
|
+
return error;
|
|
255
258
|
|
|
256
259
|
error = hashsig_add_hashes(sig, (const uint8_t *)buf, buflen, &prog);
|
|
257
260
|
|
|
@@ -283,7 +286,10 @@ int git_hashsig_create_fromfile(
|
|
|
283
286
|
return fd;
|
|
284
287
|
}
|
|
285
288
|
|
|
286
|
-
hashsig_in_progress_init(&prog, sig)
|
|
289
|
+
if ((error = hashsig_in_progress_init(&prog, sig)) < 0) {
|
|
290
|
+
p_close(fd);
|
|
291
|
+
return error;
|
|
292
|
+
}
|
|
287
293
|
|
|
288
294
|
while (!error) {
|
|
289
295
|
if ((buflen = p_read(fd, buf, sizeof(buf))) <= 0) {
|
|
@@ -318,7 +324,7 @@ static int hashsig_heap_compare(const hashsig_heap *a, const hashsig_heap *b)
|
|
|
318
324
|
{
|
|
319
325
|
int matches = 0, i, j, cmp;
|
|
320
326
|
|
|
321
|
-
|
|
327
|
+
GIT_ASSERT_WITH_RETVAL(a->cmp == b->cmp, 0);
|
|
322
328
|
|
|
323
329
|
/* hash heaps are sorted - just look for overlap vs total */
|
|
324
330
|
|
|
@@ -354,9 +360,16 @@ int git_hashsig_compare(const git_hashsig *a, const git_hashsig *b)
|
|
|
354
360
|
/* if we have fewer than the maximum number of elements, then just use
|
|
355
361
|
* one array since the two arrays will be the same
|
|
356
362
|
*/
|
|
357
|
-
if (a->mins.size < HASHSIG_HEAP_SIZE)
|
|
363
|
+
if (a->mins.size < HASHSIG_HEAP_SIZE) {
|
|
358
364
|
return hashsig_heap_compare(&a->mins, &b->mins);
|
|
359
|
-
else
|
|
360
|
-
|
|
361
|
-
|
|
365
|
+
} else {
|
|
366
|
+
int mins, maxs;
|
|
367
|
+
|
|
368
|
+
if ((mins = hashsig_heap_compare(&a->mins, &b->mins)) < 0)
|
|
369
|
+
return mins;
|
|
370
|
+
if ((maxs = hashsig_heap_compare(&a->maxs, &b->maxs)) < 0)
|
|
371
|
+
return maxs;
|
|
372
|
+
|
|
373
|
+
return (mins + maxs) / 2;
|
|
374
|
+
}
|
|
362
375
|
}
|
data/vendor/libgit2/src/ident.c
CHANGED
|
@@ -10,7 +10,6 @@
|
|
|
10
10
|
#include "git2/sys/filter.h"
|
|
11
11
|
#include "filter.h"
|
|
12
12
|
#include "buffer.h"
|
|
13
|
-
#include "buf_text.h"
|
|
14
13
|
|
|
15
14
|
static int ident_find_id(
|
|
16
15
|
const char **id_start, const char **id_end, const char *start, size_t len)
|
|
@@ -105,7 +104,7 @@ static int ident_apply(
|
|
|
105
104
|
GIT_UNUSED(self); GIT_UNUSED(payload);
|
|
106
105
|
|
|
107
106
|
/* Don't filter binary files */
|
|
108
|
-
if (
|
|
107
|
+
if (git_buf_is_binary(from))
|
|
109
108
|
return GIT_PASSTHROUGH;
|
|
110
109
|
|
|
111
110
|
if (git_filter_source_mode(src) == GIT_FILTER_SMUDGE)
|
|
@@ -114,6 +113,17 @@ static int ident_apply(
|
|
|
114
113
|
return ident_remove_id(to, from);
|
|
115
114
|
}
|
|
116
115
|
|
|
116
|
+
static int ident_stream(
|
|
117
|
+
git_writestream **out,
|
|
118
|
+
git_filter *self,
|
|
119
|
+
void **payload,
|
|
120
|
+
const git_filter_source *src,
|
|
121
|
+
git_writestream *next)
|
|
122
|
+
{
|
|
123
|
+
return git_filter_buffered_stream_new(out,
|
|
124
|
+
self, ident_apply, NULL, payload, src, next);
|
|
125
|
+
}
|
|
126
|
+
|
|
117
127
|
git_filter *git_ident_filter_new(void)
|
|
118
128
|
{
|
|
119
129
|
git_filter *f = git__calloc(1, sizeof(git_filter));
|
|
@@ -123,7 +133,7 @@ git_filter *git_ident_filter_new(void)
|
|
|
123
133
|
f->version = GIT_FILTER_VERSION;
|
|
124
134
|
f->attributes = "+ident"; /* apply to files with ident attribute set */
|
|
125
135
|
f->shutdown = git_filter_free;
|
|
126
|
-
f->
|
|
136
|
+
f->stream = ident_stream;
|
|
127
137
|
|
|
128
138
|
return f;
|
|
129
139
|
}
|
data/vendor/libgit2/src/idxmap.c
CHANGED
|
@@ -138,28 +138,6 @@ void *git_idxmap_icase_get(git_idxmap_icase *map, const git_index_entry *key)
|
|
|
138
138
|
return kh_val(map, idx);
|
|
139
139
|
}
|
|
140
140
|
|
|
141
|
-
void git_idxmap_insert(git_idxmap *map, const git_index_entry *key, void *value, int *rval)
|
|
142
|
-
{
|
|
143
|
-
khiter_t idx = kh_put(idx, map, key, rval);
|
|
144
|
-
|
|
145
|
-
if ((*rval) >= 0) {
|
|
146
|
-
if ((*rval) == 0)
|
|
147
|
-
kh_key(map, idx) = key;
|
|
148
|
-
kh_val(map, idx) = value;
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
void git_idxmap_icase_insert(git_idxmap_icase *map, const git_index_entry *key, void *value, int *rval)
|
|
153
|
-
{
|
|
154
|
-
khiter_t idx = kh_put(idxicase, map, key, rval);
|
|
155
|
-
|
|
156
|
-
if ((*rval) >= 0) {
|
|
157
|
-
if ((*rval) == 0)
|
|
158
|
-
kh_key(map, idx) = key;
|
|
159
|
-
kh_val(map, idx) = value;
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
|
|
163
141
|
int git_idxmap_delete(git_idxmap *map, const git_index_entry *key)
|
|
164
142
|
{
|
|
165
143
|
khiter_t idx = kh_get(idx, map, key);
|
data/vendor/libgit2/src/ignore.c
CHANGED
|
@@ -101,7 +101,7 @@ static int does_negate_pattern(git_attr_fnmatch *rule, git_attr_fnmatch *neg)
|
|
|
101
101
|
*/
|
|
102
102
|
static int does_negate_rule(int *out, git_vector *rules, git_attr_fnmatch *match)
|
|
103
103
|
{
|
|
104
|
-
int error = 0, wildmatch_flags;
|
|
104
|
+
int error = 0, wildmatch_flags, effective_flags;
|
|
105
105
|
size_t i;
|
|
106
106
|
git_attr_fnmatch *rule;
|
|
107
107
|
char *path;
|
|
@@ -141,8 +141,17 @@ static int does_negate_rule(int *out, git_vector *rules, git_attr_fnmatch *match
|
|
|
141
141
|
if (git_buf_oom(&buf))
|
|
142
142
|
goto out;
|
|
143
143
|
|
|
144
|
+
/*
|
|
145
|
+
* if rule isn't for full path we match without PATHNAME flag
|
|
146
|
+
* as lines like *.txt should match something like dir/test.txt
|
|
147
|
+
* requiring * to also match /
|
|
148
|
+
*/
|
|
149
|
+
effective_flags = wildmatch_flags;
|
|
150
|
+
if (!(rule->flags & GIT_ATTR_FNMATCH_FULLPATH))
|
|
151
|
+
effective_flags &= ~WM_PATHNAME;
|
|
152
|
+
|
|
144
153
|
/* if we found a match, we want to keep this rule */
|
|
145
|
-
if ((wildmatch(git_buf_cstr(&buf), path,
|
|
154
|
+
if ((wildmatch(git_buf_cstr(&buf), path, effective_flags)) == WM_MATCH) {
|
|
146
155
|
*out = 1;
|
|
147
156
|
error = 0;
|
|
148
157
|
goto out;
|
|
@@ -238,11 +247,12 @@ static int push_ignore_file(
|
|
|
238
247
|
const char *base,
|
|
239
248
|
const char *filename)
|
|
240
249
|
{
|
|
241
|
-
|
|
250
|
+
git_attr_file_source source = { GIT_ATTR_FILE_SOURCE_FILE, base, filename };
|
|
242
251
|
git_attr_file *file = NULL;
|
|
252
|
+
int error = 0;
|
|
253
|
+
|
|
254
|
+
error = git_attr_cache__get(&file, ignores->repo, NULL, &source, parse_ignore_file, false);
|
|
243
255
|
|
|
244
|
-
error = git_attr_cache__get(&file, ignores->repo, NULL, GIT_ATTR_FILE__FROM_FILE,
|
|
245
|
-
base, filename, parse_ignore_file, false);
|
|
246
256
|
if (error < 0)
|
|
247
257
|
return error;
|
|
248
258
|
|
|
@@ -263,13 +273,13 @@ static int push_one_ignore(void *payload, const char *path)
|
|
|
263
273
|
|
|
264
274
|
static int get_internal_ignores(git_attr_file **out, git_repository *repo)
|
|
265
275
|
{
|
|
276
|
+
git_attr_file_source source = { GIT_ATTR_FILE_SOURCE_MEMORY, NULL, GIT_IGNORE_INTERNAL };
|
|
266
277
|
int error;
|
|
267
278
|
|
|
268
279
|
if ((error = git_attr_cache__init(repo)) < 0)
|
|
269
280
|
return error;
|
|
270
281
|
|
|
271
|
-
error = git_attr_cache__get(out, repo, NULL,
|
|
272
|
-
GIT_IGNORE_INTERNAL, NULL, false);
|
|
282
|
+
error = git_attr_cache__get(out, repo, NULL, &source, NULL, false);
|
|
273
283
|
|
|
274
284
|
/* if internal rules list is empty, insert default rules */
|
|
275
285
|
if (!error && !(*out)->rules.length)
|
|
@@ -287,7 +297,9 @@ int git_ignore__for_path(
|
|
|
287
297
|
const char *workdir = git_repository_workdir(repo);
|
|
288
298
|
git_buf infopath = GIT_BUF_INIT;
|
|
289
299
|
|
|
290
|
-
|
|
300
|
+
GIT_ASSERT_ARG(repo);
|
|
301
|
+
GIT_ASSERT_ARG(ignores);
|
|
302
|
+
GIT_ASSERT_ARG(path);
|
|
291
303
|
|
|
292
304
|
memset(ignores, 0, sizeof(*ignores));
|
|
293
305
|
ignores->repo = repo;
|
|
@@ -307,12 +319,17 @@ int git_ignore__for_path(
|
|
|
307
319
|
if ((error = git_path_dirname_r(&local, path)) < 0 ||
|
|
308
320
|
(error = git_path_resolve_relative(&local, 0)) < 0 ||
|
|
309
321
|
(error = git_path_to_dir(&local)) < 0 ||
|
|
310
|
-
(error = git_buf_joinpath(&ignores->dir, workdir, local.ptr)) < 0
|
|
311
|
-
|
|
322
|
+
(error = git_buf_joinpath(&ignores->dir, workdir, local.ptr)) < 0 ||
|
|
323
|
+
(error = git_path_validate_workdir_buf(repo, &ignores->dir)) < 0) {
|
|
324
|
+
/* Nothing, we just want to stop on the first error */
|
|
325
|
+
}
|
|
326
|
+
|
|
312
327
|
git_buf_dispose(&local);
|
|
313
328
|
} else {
|
|
314
|
-
error = git_buf_joinpath(&ignores->dir, path, "")
|
|
329
|
+
if (!(error = git_buf_joinpath(&ignores->dir, path, "")))
|
|
330
|
+
error = git_path_validate_filesystem(ignores->dir.ptr, ignores->dir.size);
|
|
315
331
|
}
|
|
332
|
+
|
|
316
333
|
if (error < 0)
|
|
317
334
|
goto cleanup;
|
|
318
335
|
|
|
@@ -451,7 +468,7 @@ int git_ignore__lookup(
|
|
|
451
468
|
*out = GIT_IGNORE_NOTFOUND;
|
|
452
469
|
|
|
453
470
|
if (git_attr_path__init(
|
|
454
|
-
&path, pathname, git_repository_workdir(ignores->repo), dir_flag) < 0)
|
|
471
|
+
&path, ignores->repo, pathname, git_repository_workdir(ignores->repo), dir_flag) < 0)
|
|
455
472
|
return -1;
|
|
456
473
|
|
|
457
474
|
/* first process builtins - success means path was found */
|
|
@@ -521,7 +538,9 @@ int git_ignore_path_is_ignored(
|
|
|
521
538
|
git_attr_file *file;
|
|
522
539
|
git_dir_flag dir_flag = GIT_DIR_FLAG_UNKNOWN;
|
|
523
540
|
|
|
524
|
-
|
|
541
|
+
GIT_ASSERT_ARG(repo);
|
|
542
|
+
GIT_ASSERT_ARG(ignored);
|
|
543
|
+
GIT_ASSERT_ARG(pathname);
|
|
525
544
|
|
|
526
545
|
workdir = git_repository_workdir(repo);
|
|
527
546
|
|
|
@@ -533,7 +552,7 @@ int git_ignore_path_is_ignored(
|
|
|
533
552
|
else if (git_repository_is_bare(repo))
|
|
534
553
|
dir_flag = GIT_DIR_FLAG_FALSE;
|
|
535
554
|
|
|
536
|
-
if ((error = git_attr_path__init(&path, pathname, workdir, dir_flag)) < 0 ||
|
|
555
|
+
if ((error = git_attr_path__init(&path, repo, pathname, workdir, dir_flag)) < 0 ||
|
|
537
556
|
(error = git_ignore__for_path(repo, path.path, &ignores)) < 0)
|
|
538
557
|
goto cleanup;
|
|
539
558
|
|
|
@@ -586,7 +605,7 @@ int git_ignore__check_pathspec_for_exact_ignores(
|
|
|
586
605
|
git_attr_fnmatch *match;
|
|
587
606
|
int ignored;
|
|
588
607
|
git_buf path = GIT_BUF_INIT;
|
|
589
|
-
const char *
|
|
608
|
+
const char *filename;
|
|
590
609
|
git_index *idx;
|
|
591
610
|
|
|
592
611
|
if ((error = git_repository__ensure_not_bare(
|
|
@@ -594,8 +613,6 @@ int git_ignore__check_pathspec_for_exact_ignores(
|
|
|
594
613
|
(error = git_repository_index(&idx, repo)) < 0)
|
|
595
614
|
return error;
|
|
596
615
|
|
|
597
|
-
wd = git_repository_workdir(repo);
|
|
598
|
-
|
|
599
616
|
git_vector_foreach(vspec, i, match) {
|
|
600
617
|
/* skip wildcard matches (if they are being used) */
|
|
601
618
|
if ((match->flags & GIT_ATTR_FNMATCH_HASWILD) != 0 &&
|
|
@@ -608,7 +625,7 @@ int git_ignore__check_pathspec_for_exact_ignores(
|
|
|
608
625
|
if (git_index_get_bypath(idx, filename, 0) != NULL)
|
|
609
626
|
continue;
|
|
610
627
|
|
|
611
|
-
if ((error =
|
|
628
|
+
if ((error = git_repository_workdir_path(&path, repo, filename)) < 0)
|
|
612
629
|
break;
|
|
613
630
|
|
|
614
631
|
/* is there a file on disk that matches this exactly? */
|
|
@@ -632,4 +649,3 @@ int git_ignore__check_pathspec_for_exact_ignores(
|
|
|
632
649
|
|
|
633
650
|
return error;
|
|
634
651
|
}
|
|
635
|
-
|
data/vendor/libgit2/src/index.c
CHANGED
|
@@ -406,12 +406,13 @@ int git_index_open(git_index **index_out, const char *index_path)
|
|
|
406
406
|
git_index *index;
|
|
407
407
|
int error = -1;
|
|
408
408
|
|
|
409
|
-
|
|
409
|
+
GIT_ASSERT_ARG(index_out);
|
|
410
410
|
|
|
411
411
|
index = git__calloc(1, sizeof(git_index));
|
|
412
412
|
GIT_ERROR_CHECK_ALLOC(index);
|
|
413
413
|
|
|
414
|
-
git_pool_init(&index->tree_pool, 1)
|
|
414
|
+
if (git_pool_init(&index->tree_pool, 1) < 0)
|
|
415
|
+
goto fail;
|
|
415
416
|
|
|
416
417
|
if (index_path != NULL) {
|
|
417
418
|
index->index_file_path = git__strdup(index_path);
|
|
@@ -460,7 +461,8 @@ static void index_free(git_index *index)
|
|
|
460
461
|
/* index iterators increment the refcount of the index, so if we
|
|
461
462
|
* get here then there should be no outstanding iterators.
|
|
462
463
|
*/
|
|
463
|
-
|
|
464
|
+
if (git_atomic32_get(&index->readers))
|
|
465
|
+
return;
|
|
464
466
|
|
|
465
467
|
git_index_clear(index);
|
|
466
468
|
git_idxmap_free(index->entries_map);
|
|
@@ -486,14 +488,14 @@ void git_index_free(git_index *index)
|
|
|
486
488
|
/* call with locked index */
|
|
487
489
|
static void index_free_deleted(git_index *index)
|
|
488
490
|
{
|
|
489
|
-
int readers = (int)
|
|
491
|
+
int readers = (int)git_atomic32_get(&index->readers);
|
|
490
492
|
size_t i;
|
|
491
493
|
|
|
492
494
|
if (readers > 0 || !index->deleted.length)
|
|
493
495
|
return;
|
|
494
496
|
|
|
495
497
|
for (i = 0; i < index->deleted.length; ++i) {
|
|
496
|
-
git_index_entry *ie =
|
|
498
|
+
git_index_entry *ie = git_atomic_swap(index->deleted.contents[i], NULL);
|
|
497
499
|
index_entry_free(ie);
|
|
498
500
|
}
|
|
499
501
|
|
|
@@ -514,7 +516,7 @@ static int index_remove_entry(git_index *index, size_t pos)
|
|
|
514
516
|
error = git_vector_remove(&index->entries, pos);
|
|
515
517
|
|
|
516
518
|
if (!error) {
|
|
517
|
-
if (
|
|
519
|
+
if (git_atomic32_get(&index->readers) > 0) {
|
|
518
520
|
error = git_vector_insert(&index->deleted, entry);
|
|
519
521
|
} else {
|
|
520
522
|
index_entry_free(entry);
|
|
@@ -530,7 +532,7 @@ int git_index_clear(git_index *index)
|
|
|
530
532
|
{
|
|
531
533
|
int error = 0;
|
|
532
534
|
|
|
533
|
-
|
|
535
|
+
GIT_ASSERT_ARG(index);
|
|
534
536
|
|
|
535
537
|
index->dirty = 1;
|
|
536
538
|
index->tree = NULL;
|
|
@@ -565,7 +567,7 @@ int git_index_set_caps(git_index *index, int caps)
|
|
|
565
567
|
{
|
|
566
568
|
unsigned int old_ignore_case;
|
|
567
569
|
|
|
568
|
-
|
|
570
|
+
GIT_ASSERT_ARG(index);
|
|
569
571
|
|
|
570
572
|
old_ignore_case = index->ignore_case;
|
|
571
573
|
|
|
@@ -777,14 +779,14 @@ done:
|
|
|
777
779
|
|
|
778
780
|
unsigned git_index_version(git_index *index)
|
|
779
781
|
{
|
|
780
|
-
|
|
782
|
+
GIT_ASSERT_ARG(index);
|
|
781
783
|
|
|
782
784
|
return index->version;
|
|
783
785
|
}
|
|
784
786
|
|
|
785
787
|
int git_index_set_version(git_index *index, unsigned int version)
|
|
786
788
|
{
|
|
787
|
-
|
|
789
|
+
GIT_ASSERT_ARG(index);
|
|
788
790
|
|
|
789
791
|
if (version < INDEX_VERSION_NUMBER_LB ||
|
|
790
792
|
version > INDEX_VERSION_NUMBER_UB) {
|
|
@@ -813,9 +815,9 @@ int git_index_write(git_index *index)
|
|
|
813
815
|
return error;
|
|
814
816
|
}
|
|
815
817
|
|
|
816
|
-
const char *
|
|
818
|
+
const char *git_index_path(const git_index *index)
|
|
817
819
|
{
|
|
818
|
-
|
|
820
|
+
GIT_ASSERT_ARG_WITH_RETVAL(index, NULL);
|
|
819
821
|
return index->index_file_path;
|
|
820
822
|
}
|
|
821
823
|
|
|
@@ -823,7 +825,8 @@ int git_index_write_tree(git_oid *oid, git_index *index)
|
|
|
823
825
|
{
|
|
824
826
|
git_repository *repo;
|
|
825
827
|
|
|
826
|
-
|
|
828
|
+
GIT_ASSERT_ARG(oid);
|
|
829
|
+
GIT_ASSERT_ARG(index);
|
|
827
830
|
|
|
828
831
|
repo = INDEX_OWNER(index);
|
|
829
832
|
|
|
@@ -837,20 +840,25 @@ int git_index_write_tree(git_oid *oid, git_index *index)
|
|
|
837
840
|
int git_index_write_tree_to(
|
|
838
841
|
git_oid *oid, git_index *index, git_repository *repo)
|
|
839
842
|
{
|
|
840
|
-
|
|
843
|
+
GIT_ASSERT_ARG(oid);
|
|
844
|
+
GIT_ASSERT_ARG(index);
|
|
845
|
+
GIT_ASSERT_ARG(repo);
|
|
846
|
+
|
|
841
847
|
return git_tree__write_index(oid, index, repo);
|
|
842
848
|
}
|
|
843
849
|
|
|
844
850
|
size_t git_index_entrycount(const git_index *index)
|
|
845
851
|
{
|
|
846
|
-
|
|
852
|
+
GIT_ASSERT_ARG(index);
|
|
853
|
+
|
|
847
854
|
return index->entries.length;
|
|
848
855
|
}
|
|
849
856
|
|
|
850
857
|
const git_index_entry *git_index_get_byindex(
|
|
851
858
|
git_index *index, size_t n)
|
|
852
859
|
{
|
|
853
|
-
|
|
860
|
+
GIT_ASSERT_ARG_WITH_RETVAL(index, NULL);
|
|
861
|
+
|
|
854
862
|
git_vector_sort(&index->entries);
|
|
855
863
|
return git_vector_get(&index->entries, n);
|
|
856
864
|
}
|
|
@@ -861,7 +869,7 @@ const git_index_entry *git_index_get_bypath(
|
|
|
861
869
|
git_index_entry key = {{ 0 }};
|
|
862
870
|
git_index_entry *value;
|
|
863
871
|
|
|
864
|
-
|
|
872
|
+
GIT_ASSERT_ARG_WITH_RETVAL(index, NULL);
|
|
865
873
|
|
|
866
874
|
key.path = path;
|
|
867
875
|
GIT_INDEX_ENTRY_STAGE_SET(&key, stage);
|
|
@@ -936,7 +944,7 @@ static int index_entry_create(
|
|
|
936
944
|
if (st)
|
|
937
945
|
mode = st->st_mode;
|
|
938
946
|
|
|
939
|
-
if (!
|
|
947
|
+
if (!git_path_validate(repo, path, mode, path_valid_flags)) {
|
|
940
948
|
git_error_set(GIT_ERROR_INDEX, "invalid path: '%s'", path);
|
|
941
949
|
return -1;
|
|
942
950
|
}
|
|
@@ -980,7 +988,7 @@ static int index_entry_init(
|
|
|
980
988
|
if (git_repository__ensure_not_bare(repo, "create blob from file") < 0)
|
|
981
989
|
return GIT_EBAREREPO;
|
|
982
990
|
|
|
983
|
-
if (
|
|
991
|
+
if (git_repository_workdir_path(&path, repo, rel_path) < 0)
|
|
984
992
|
return -1;
|
|
985
993
|
|
|
986
994
|
error = git_path_lstat(path.ptr, &st);
|
|
@@ -1038,23 +1046,24 @@ static int index_entry_reuc_init(git_index_reuc_entry **reuc_out,
|
|
|
1038
1046
|
{
|
|
1039
1047
|
git_index_reuc_entry *reuc = NULL;
|
|
1040
1048
|
|
|
1041
|
-
|
|
1049
|
+
GIT_ASSERT_ARG(reuc_out);
|
|
1050
|
+
GIT_ASSERT_ARG(path);
|
|
1042
1051
|
|
|
1043
1052
|
*reuc_out = reuc = reuc_entry_alloc(path);
|
|
1044
1053
|
GIT_ERROR_CHECK_ALLOC(reuc);
|
|
1045
1054
|
|
|
1046
1055
|
if ((reuc->mode[0] = ancestor_mode) > 0) {
|
|
1047
|
-
|
|
1056
|
+
GIT_ASSERT(ancestor_oid);
|
|
1048
1057
|
git_oid_cpy(&reuc->oid[0], ancestor_oid);
|
|
1049
1058
|
}
|
|
1050
1059
|
|
|
1051
1060
|
if ((reuc->mode[1] = our_mode) > 0) {
|
|
1052
|
-
|
|
1061
|
+
GIT_ASSERT(our_oid);
|
|
1053
1062
|
git_oid_cpy(&reuc->oid[1], our_oid);
|
|
1054
1063
|
}
|
|
1055
1064
|
|
|
1056
1065
|
if ((reuc->mode[2] = their_mode) > 0) {
|
|
1057
|
-
|
|
1066
|
+
GIT_ASSERT(their_oid);
|
|
1058
1067
|
git_oid_cpy(&reuc->oid[2], their_oid);
|
|
1059
1068
|
}
|
|
1060
1069
|
|
|
@@ -1346,7 +1355,8 @@ static int index_insert(
|
|
|
1346
1355
|
size_t path_length, position;
|
|
1347
1356
|
int error;
|
|
1348
1357
|
|
|
1349
|
-
|
|
1358
|
+
GIT_ASSERT_ARG(index);
|
|
1359
|
+
GIT_ASSERT_ARG(entry_ptr);
|
|
1350
1360
|
|
|
1351
1361
|
entry = *entry_ptr;
|
|
1352
1362
|
|
|
@@ -1471,7 +1481,8 @@ int git_index_add_from_buffer(
|
|
|
1471
1481
|
int error = 0;
|
|
1472
1482
|
git_oid id;
|
|
1473
1483
|
|
|
1474
|
-
|
|
1484
|
+
GIT_ASSERT_ARG(index);
|
|
1485
|
+
GIT_ASSERT_ARG(source_entry && source_entry->path);
|
|
1475
1486
|
|
|
1476
1487
|
if (INDEX_OWNER(index) == NULL)
|
|
1477
1488
|
return create_index_error(-1,
|
|
@@ -1521,7 +1532,7 @@ static int add_repo_as_submodule(git_index_entry **out, git_index *index, const
|
|
|
1521
1532
|
struct stat st;
|
|
1522
1533
|
int error;
|
|
1523
1534
|
|
|
1524
|
-
if ((error =
|
|
1535
|
+
if ((error = git_repository_workdir_path(&abspath, repo, path)) < 0)
|
|
1525
1536
|
return error;
|
|
1526
1537
|
|
|
1527
1538
|
if ((error = p_stat(abspath.ptr, &st)) < 0) {
|
|
@@ -1556,7 +1567,8 @@ int git_index_add_bypath(git_index *index, const char *path)
|
|
|
1556
1567
|
git_index_entry *entry = NULL;
|
|
1557
1568
|
int ret;
|
|
1558
1569
|
|
|
1559
|
-
|
|
1570
|
+
GIT_ASSERT_ARG(index);
|
|
1571
|
+
GIT_ASSERT_ARG(path);
|
|
1560
1572
|
|
|
1561
1573
|
if ((ret = index_entry_init(&entry, index, path)) == 0)
|
|
1562
1574
|
ret = index_insert(index, &entry, 1, false, false, true);
|
|
@@ -1608,7 +1620,8 @@ int git_index_remove_bypath(git_index *index, const char *path)
|
|
|
1608
1620
|
{
|
|
1609
1621
|
int ret;
|
|
1610
1622
|
|
|
1611
|
-
|
|
1623
|
+
GIT_ASSERT_ARG(index);
|
|
1624
|
+
GIT_ASSERT_ARG(path);
|
|
1612
1625
|
|
|
1613
1626
|
if (((ret = git_index_remove(index, path, 0)) < 0 &&
|
|
1614
1627
|
ret != GIT_ENOTFOUND) ||
|
|
@@ -1628,7 +1641,7 @@ int git_index__fill(git_index *index, const git_vector *source_entries)
|
|
|
1628
1641
|
int error = 0;
|
|
1629
1642
|
size_t i;
|
|
1630
1643
|
|
|
1631
|
-
|
|
1644
|
+
GIT_ASSERT_ARG(index);
|
|
1632
1645
|
|
|
1633
1646
|
if (!source_entries->length)
|
|
1634
1647
|
return 0;
|
|
@@ -1669,7 +1682,8 @@ int git_index_add(git_index *index, const git_index_entry *source_entry)
|
|
|
1669
1682
|
git_index_entry *entry = NULL;
|
|
1670
1683
|
int ret;
|
|
1671
1684
|
|
|
1672
|
-
|
|
1685
|
+
GIT_ASSERT_ARG(index);
|
|
1686
|
+
GIT_ASSERT_ARG(source_entry && source_entry->path);
|
|
1673
1687
|
|
|
1674
1688
|
if (!valid_filemode(source_entry->mode)) {
|
|
1675
1689
|
git_error_set(GIT_ERROR_INDEX, "invalid entry mode");
|
|
@@ -1757,7 +1771,8 @@ int git_index_find_prefix(size_t *at_pos, git_index *index, const char *prefix)
|
|
|
1757
1771
|
int git_index__find_pos(
|
|
1758
1772
|
size_t *out, git_index *index, const char *path, size_t path_len, int stage)
|
|
1759
1773
|
{
|
|
1760
|
-
|
|
1774
|
+
GIT_ASSERT_ARG(index);
|
|
1775
|
+
GIT_ASSERT_ARG(path);
|
|
1761
1776
|
return index_find(out, index, path, path_len, stage);
|
|
1762
1777
|
}
|
|
1763
1778
|
|
|
@@ -1765,7 +1780,8 @@ int git_index_find(size_t *at_pos, git_index *index, const char *path)
|
|
|
1765
1780
|
{
|
|
1766
1781
|
size_t pos;
|
|
1767
1782
|
|
|
1768
|
-
|
|
1783
|
+
GIT_ASSERT_ARG(index);
|
|
1784
|
+
GIT_ASSERT_ARG(path);
|
|
1769
1785
|
|
|
1770
1786
|
if (git_vector_bsearch2(
|
|
1771
1787
|
&pos, &index->entries, index->entries_search_path, path) < 0) {
|
|
@@ -1798,7 +1814,7 @@ int git_index_conflict_add(git_index *index,
|
|
|
1798
1814
|
unsigned short i;
|
|
1799
1815
|
int ret = 0;
|
|
1800
1816
|
|
|
1801
|
-
|
|
1817
|
+
GIT_ASSERT_ARG(index);
|
|
1802
1818
|
|
|
1803
1819
|
if ((ancestor_entry &&
|
|
1804
1820
|
(ret = index_entry_dup(&entries[0], index, ancestor_entry)) < 0) ||
|
|
@@ -1869,7 +1885,10 @@ static int index_conflict__get_byindex(
|
|
|
1869
1885
|
size_t count;
|
|
1870
1886
|
int stage, len = 0;
|
|
1871
1887
|
|
|
1872
|
-
|
|
1888
|
+
GIT_ASSERT_ARG(ancestor_out);
|
|
1889
|
+
GIT_ASSERT_ARG(our_out);
|
|
1890
|
+
GIT_ASSERT_ARG(their_out);
|
|
1891
|
+
GIT_ASSERT_ARG(index);
|
|
1873
1892
|
|
|
1874
1893
|
*ancestor_out = NULL;
|
|
1875
1894
|
*our_out = NULL;
|
|
@@ -1915,7 +1934,11 @@ int git_index_conflict_get(
|
|
|
1915
1934
|
size_t pos;
|
|
1916
1935
|
int len = 0;
|
|
1917
1936
|
|
|
1918
|
-
|
|
1937
|
+
GIT_ASSERT_ARG(ancestor_out);
|
|
1938
|
+
GIT_ASSERT_ARG(our_out);
|
|
1939
|
+
GIT_ASSERT_ARG(their_out);
|
|
1940
|
+
GIT_ASSERT_ARG(index);
|
|
1941
|
+
GIT_ASSERT_ARG(path);
|
|
1919
1942
|
|
|
1920
1943
|
*ancestor_out = NULL;
|
|
1921
1944
|
*our_out = NULL;
|
|
@@ -1962,13 +1985,14 @@ static int index_conflict_remove(git_index *index, const char *path)
|
|
|
1962
1985
|
|
|
1963
1986
|
int git_index_conflict_remove(git_index *index, const char *path)
|
|
1964
1987
|
{
|
|
1965
|
-
|
|
1988
|
+
GIT_ASSERT_ARG(index);
|
|
1989
|
+
GIT_ASSERT_ARG(path);
|
|
1966
1990
|
return index_conflict_remove(index, path);
|
|
1967
1991
|
}
|
|
1968
1992
|
|
|
1969
1993
|
int git_index_conflict_cleanup(git_index *index)
|
|
1970
1994
|
{
|
|
1971
|
-
|
|
1995
|
+
GIT_ASSERT_ARG(index);
|
|
1972
1996
|
return index_conflict_remove(index, NULL);
|
|
1973
1997
|
}
|
|
1974
1998
|
|
|
@@ -1977,7 +2001,7 @@ int git_index_has_conflicts(const git_index *index)
|
|
|
1977
2001
|
size_t i;
|
|
1978
2002
|
git_index_entry *entry;
|
|
1979
2003
|
|
|
1980
|
-
|
|
2004
|
+
GIT_ASSERT_ARG(index);
|
|
1981
2005
|
|
|
1982
2006
|
git_vector_foreach(&index->entries, i, entry) {
|
|
1983
2007
|
if (GIT_INDEX_ENTRY_STAGE(entry) > 0)
|
|
@@ -1994,7 +2018,8 @@ int git_index_iterator_new(
|
|
|
1994
2018
|
git_index_iterator *it;
|
|
1995
2019
|
int error;
|
|
1996
2020
|
|
|
1997
|
-
|
|
2021
|
+
GIT_ASSERT_ARG(iterator_out);
|
|
2022
|
+
GIT_ASSERT_ARG(index);
|
|
1998
2023
|
|
|
1999
2024
|
it = git__calloc(1, sizeof(git_index_iterator));
|
|
2000
2025
|
GIT_ERROR_CHECK_ALLOC(it);
|
|
@@ -2014,7 +2039,8 @@ int git_index_iterator_next(
|
|
|
2014
2039
|
const git_index_entry **out,
|
|
2015
2040
|
git_index_iterator *it)
|
|
2016
2041
|
{
|
|
2017
|
-
|
|
2042
|
+
GIT_ASSERT_ARG(out);
|
|
2043
|
+
GIT_ASSERT_ARG(it);
|
|
2018
2044
|
|
|
2019
2045
|
if (it->cur >= git_vector_length(&it->snap))
|
|
2020
2046
|
return GIT_ITEROVER;
|
|
@@ -2038,7 +2064,8 @@ int git_index_conflict_iterator_new(
|
|
|
2038
2064
|
{
|
|
2039
2065
|
git_index_conflict_iterator *it = NULL;
|
|
2040
2066
|
|
|
2041
|
-
|
|
2067
|
+
GIT_ASSERT_ARG(iterator_out);
|
|
2068
|
+
GIT_ASSERT_ARG(index);
|
|
2042
2069
|
|
|
2043
2070
|
it = git__calloc(1, sizeof(git_index_conflict_iterator));
|
|
2044
2071
|
GIT_ERROR_CHECK_ALLOC(it);
|
|
@@ -2058,7 +2085,10 @@ int git_index_conflict_next(
|
|
|
2058
2085
|
const git_index_entry *entry;
|
|
2059
2086
|
int len;
|
|
2060
2087
|
|
|
2061
|
-
|
|
2088
|
+
GIT_ASSERT_ARG(ancestor_out);
|
|
2089
|
+
GIT_ASSERT_ARG(our_out);
|
|
2090
|
+
GIT_ASSERT_ARG(their_out);
|
|
2091
|
+
GIT_ASSERT_ARG(iterator);
|
|
2062
2092
|
|
|
2063
2093
|
*ancestor_out = NULL;
|
|
2064
2094
|
*our_out = NULL;
|
|
@@ -2096,14 +2126,14 @@ void git_index_conflict_iterator_free(git_index_conflict_iterator *iterator)
|
|
|
2096
2126
|
|
|
2097
2127
|
size_t git_index_name_entrycount(git_index *index)
|
|
2098
2128
|
{
|
|
2099
|
-
|
|
2129
|
+
GIT_ASSERT_ARG(index);
|
|
2100
2130
|
return index->names.length;
|
|
2101
2131
|
}
|
|
2102
2132
|
|
|
2103
2133
|
const git_index_name_entry *git_index_name_get_byindex(
|
|
2104
2134
|
git_index *index, size_t n)
|
|
2105
2135
|
{
|
|
2106
|
-
|
|
2136
|
+
GIT_ASSERT_ARG_WITH_RETVAL(index, NULL);
|
|
2107
2137
|
|
|
2108
2138
|
git_vector_sort(&index->names);
|
|
2109
2139
|
return git_vector_get(&index->names, n);
|
|
@@ -2124,7 +2154,7 @@ int git_index_name_add(git_index *index,
|
|
|
2124
2154
|
{
|
|
2125
2155
|
git_index_name_entry *conflict_name;
|
|
2126
2156
|
|
|
2127
|
-
|
|
2157
|
+
GIT_ASSERT_ARG((ancestor && ours) || (ancestor && theirs) || (ours && theirs));
|
|
2128
2158
|
|
|
2129
2159
|
conflict_name = git__calloc(1, sizeof(git_index_name_entry));
|
|
2130
2160
|
GIT_ERROR_CHECK_ALLOC(conflict_name);
|
|
@@ -2147,7 +2177,7 @@ int git_index_name_clear(git_index *index)
|
|
|
2147
2177
|
size_t i;
|
|
2148
2178
|
git_index_name_entry *conflict_name;
|
|
2149
2179
|
|
|
2150
|
-
|
|
2180
|
+
GIT_ASSERT_ARG(index);
|
|
2151
2181
|
|
|
2152
2182
|
git_vector_foreach(&index->names, i, conflict_name)
|
|
2153
2183
|
index_name_entry_free(conflict_name);
|
|
@@ -2161,7 +2191,7 @@ int git_index_name_clear(git_index *index)
|
|
|
2161
2191
|
|
|
2162
2192
|
size_t git_index_reuc_entrycount(git_index *index)
|
|
2163
2193
|
{
|
|
2164
|
-
|
|
2194
|
+
GIT_ASSERT_ARG(index);
|
|
2165
2195
|
return index->reuc.length;
|
|
2166
2196
|
}
|
|
2167
2197
|
|
|
@@ -2178,8 +2208,9 @@ static int index_reuc_insert(
|
|
|
2178
2208
|
{
|
|
2179
2209
|
int res;
|
|
2180
2210
|
|
|
2181
|
-
|
|
2182
|
-
|
|
2211
|
+
GIT_ASSERT_ARG(index);
|
|
2212
|
+
GIT_ASSERT_ARG(reuc && reuc->path != NULL);
|
|
2213
|
+
GIT_ASSERT(git_vector_is_sorted(&index->reuc));
|
|
2183
2214
|
|
|
2184
2215
|
res = git_vector_insert_sorted(&index->reuc, reuc, &index_reuc_on_dup);
|
|
2185
2216
|
index->dirty = 1;
|
|
@@ -2195,7 +2226,8 @@ int git_index_reuc_add(git_index *index, const char *path,
|
|
|
2195
2226
|
git_index_reuc_entry *reuc = NULL;
|
|
2196
2227
|
int error = 0;
|
|
2197
2228
|
|
|
2198
|
-
|
|
2229
|
+
GIT_ASSERT_ARG(index);
|
|
2230
|
+
GIT_ASSERT_ARG(path);
|
|
2199
2231
|
|
|
2200
2232
|
if ((error = index_entry_reuc_init(&reuc, path, ancestor_mode,
|
|
2201
2233
|
ancestor_oid, our_mode, our_oid, their_mode, their_oid)) < 0 ||
|
|
@@ -2214,12 +2246,14 @@ const git_index_reuc_entry *git_index_reuc_get_bypath(
|
|
|
2214
2246
|
git_index *index, const char *path)
|
|
2215
2247
|
{
|
|
2216
2248
|
size_t pos;
|
|
2217
|
-
|
|
2249
|
+
|
|
2250
|
+
GIT_ASSERT_ARG_WITH_RETVAL(index, NULL);
|
|
2251
|
+
GIT_ASSERT_ARG_WITH_RETVAL(path, NULL);
|
|
2218
2252
|
|
|
2219
2253
|
if (!index->reuc.length)
|
|
2220
2254
|
return NULL;
|
|
2221
2255
|
|
|
2222
|
-
|
|
2256
|
+
GIT_ASSERT_WITH_RETVAL(git_vector_is_sorted(&index->reuc), NULL);
|
|
2223
2257
|
|
|
2224
2258
|
if (git_index_reuc_find(&pos, index, path) < 0)
|
|
2225
2259
|
return NULL;
|
|
@@ -2230,8 +2264,8 @@ const git_index_reuc_entry *git_index_reuc_get_bypath(
|
|
|
2230
2264
|
const git_index_reuc_entry *git_index_reuc_get_byindex(
|
|
2231
2265
|
git_index *index, size_t n)
|
|
2232
2266
|
{
|
|
2233
|
-
|
|
2234
|
-
|
|
2267
|
+
GIT_ASSERT_ARG_WITH_RETVAL(index, NULL);
|
|
2268
|
+
GIT_ASSERT_WITH_RETVAL(git_vector_is_sorted(&index->reuc), NULL);
|
|
2235
2269
|
|
|
2236
2270
|
return git_vector_get(&index->reuc, n);
|
|
2237
2271
|
}
|
|
@@ -2241,7 +2275,8 @@ int git_index_reuc_remove(git_index *index, size_t position)
|
|
|
2241
2275
|
int error;
|
|
2242
2276
|
git_index_reuc_entry *reuc;
|
|
2243
2277
|
|
|
2244
|
-
|
|
2278
|
+
GIT_ASSERT_ARG(index);
|
|
2279
|
+
GIT_ASSERT(git_vector_is_sorted(&index->reuc));
|
|
2245
2280
|
|
|
2246
2281
|
reuc = git_vector_get(&index->reuc, position);
|
|
2247
2282
|
error = git_vector_remove(&index->reuc, position);
|
|
@@ -2257,10 +2292,10 @@ int git_index_reuc_clear(git_index *index)
|
|
|
2257
2292
|
{
|
|
2258
2293
|
size_t i;
|
|
2259
2294
|
|
|
2260
|
-
|
|
2295
|
+
GIT_ASSERT_ARG(index);
|
|
2261
2296
|
|
|
2262
2297
|
for (i = 0; i < index->reuc.length; ++i)
|
|
2263
|
-
index_entry_reuc_free(
|
|
2298
|
+
index_entry_reuc_free(git_atomic_swap(index->reuc.contents[i], NULL));
|
|
2264
2299
|
|
|
2265
2300
|
git_vector_clear(&index->reuc);
|
|
2266
2301
|
|
|
@@ -2625,7 +2660,7 @@ static int parse_index(git_index *index, const char *buffer, size_t buffer_size)
|
|
|
2625
2660
|
|
|
2626
2661
|
seek_forward(INDEX_HEADER_SIZE);
|
|
2627
2662
|
|
|
2628
|
-
|
|
2663
|
+
GIT_ASSERT(!index->entries.length);
|
|
2629
2664
|
|
|
2630
2665
|
if ((error = index_map_resize(index->entries_map, header.entry_count, index->ignore_case)) < 0)
|
|
2631
2666
|
return error;
|
|
@@ -2744,7 +2779,7 @@ static int write_disk_entry(git_filebuf *file, git_index_entry *entry, const cha
|
|
|
2744
2779
|
++same_len;
|
|
2745
2780
|
}
|
|
2746
2781
|
path_len -= same_len;
|
|
2747
|
-
varint_len = git_encode_varint(NULL, 0, same_len);
|
|
2782
|
+
varint_len = git_encode_varint(NULL, 0, strlen(last) - same_len);
|
|
2748
2783
|
}
|
|
2749
2784
|
|
|
2750
2785
|
disk_size = index_entry_size(path_len, varint_len, entry->flags);
|
|
@@ -2780,23 +2815,26 @@ static int write_disk_entry(git_filebuf *file, git_index_entry *entry, const cha
|
|
|
2780
2815
|
ondisk.flags = htons(entry->flags);
|
|
2781
2816
|
|
|
2782
2817
|
if (entry->flags & GIT_INDEX_ENTRY_EXTENDED) {
|
|
2818
|
+
const size_t path_offset = offsetof(struct entry_long, path);
|
|
2783
2819
|
struct entry_long ondisk_ext;
|
|
2784
2820
|
memcpy(&ondisk_ext, &ondisk, sizeof(struct entry_short));
|
|
2785
2821
|
ondisk_ext.flags_extended = htons(entry->flags_extended &
|
|
2786
2822
|
GIT_INDEX_ENTRY_EXTENDED_FLAGS);
|
|
2787
|
-
memcpy(mem, &ondisk_ext,
|
|
2788
|
-
path = (
|
|
2789
|
-
disk_size -=
|
|
2823
|
+
memcpy(mem, &ondisk_ext, path_offset);
|
|
2824
|
+
path = (char *)mem + path_offset;
|
|
2825
|
+
disk_size -= path_offset;
|
|
2790
2826
|
} else {
|
|
2791
|
-
|
|
2792
|
-
|
|
2793
|
-
|
|
2827
|
+
const size_t path_offset = offsetof(struct entry_short, path);
|
|
2828
|
+
memcpy(mem, &ondisk, path_offset);
|
|
2829
|
+
path = (char *)mem + path_offset;
|
|
2830
|
+
disk_size -= path_offset;
|
|
2794
2831
|
}
|
|
2795
2832
|
|
|
2796
2833
|
if (last) {
|
|
2797
2834
|
varint_len = git_encode_varint((unsigned char *) path,
|
|
2798
|
-
disk_size, same_len);
|
|
2799
|
-
|
|
2835
|
+
disk_size, strlen(last) - same_len);
|
|
2836
|
+
GIT_ASSERT(varint_len > 0);
|
|
2837
|
+
|
|
2800
2838
|
path += varint_len;
|
|
2801
2839
|
disk_size -= varint_len;
|
|
2802
2840
|
|
|
@@ -2804,14 +2842,14 @@ static int write_disk_entry(git_filebuf *file, git_index_entry *entry, const cha
|
|
|
2804
2842
|
* If using path compression, we are not allowed
|
|
2805
2843
|
* to have additional trailing NULs.
|
|
2806
2844
|
*/
|
|
2807
|
-
|
|
2845
|
+
GIT_ASSERT(disk_size == path_len + 1);
|
|
2808
2846
|
} else {
|
|
2809
2847
|
/*
|
|
2810
2848
|
* If no path compression is used, we do have
|
|
2811
2849
|
* NULs as padding. As such, simply assert that
|
|
2812
2850
|
* we have enough space left to write the path.
|
|
2813
2851
|
*/
|
|
2814
|
-
|
|
2852
|
+
GIT_ASSERT(disk_size > path_len);
|
|
2815
2853
|
}
|
|
2816
2854
|
|
|
2817
2855
|
memcpy(path, path_start, path_len + 1);
|
|
@@ -2823,14 +2861,16 @@ static int write_entries(git_index *index, git_filebuf *file)
|
|
|
2823
2861
|
{
|
|
2824
2862
|
int error = 0;
|
|
2825
2863
|
size_t i;
|
|
2826
|
-
git_vector case_sorted, *entries;
|
|
2864
|
+
git_vector case_sorted = GIT_VECTOR_INIT, *entries = NULL;
|
|
2827
2865
|
git_index_entry *entry;
|
|
2828
2866
|
const char *last = NULL;
|
|
2829
2867
|
|
|
2830
2868
|
/* If index->entries is sorted case-insensitively, then we need
|
|
2831
2869
|
* to re-sort it case-sensitively before writing */
|
|
2832
2870
|
if (index->ignore_case) {
|
|
2833
|
-
git_vector_dup(&case_sorted, &index->entries, git_index_entry_cmp)
|
|
2871
|
+
if ((error = git_vector_dup(&case_sorted, &index->entries, git_index_entry_cmp)) < 0)
|
|
2872
|
+
goto done;
|
|
2873
|
+
|
|
2834
2874
|
git_vector_sort(&case_sorted);
|
|
2835
2875
|
entries = &case_sorted;
|
|
2836
2876
|
} else {
|
|
@@ -2847,9 +2887,8 @@ static int write_entries(git_index *index, git_filebuf *file)
|
|
|
2847
2887
|
last = entry->path;
|
|
2848
2888
|
}
|
|
2849
2889
|
|
|
2850
|
-
|
|
2851
|
-
|
|
2852
|
-
|
|
2890
|
+
done:
|
|
2891
|
+
git_vector_free(&case_sorted);
|
|
2853
2892
|
return error;
|
|
2854
2893
|
}
|
|
2855
2894
|
|
|
@@ -3007,7 +3046,8 @@ static int write_index(git_oid *checksum, git_index *index, git_filebuf *file)
|
|
|
3007
3046
|
bool is_extended;
|
|
3008
3047
|
uint32_t index_version_number;
|
|
3009
3048
|
|
|
3010
|
-
|
|
3049
|
+
GIT_ASSERT_ARG(index);
|
|
3050
|
+
GIT_ASSERT_ARG(file);
|
|
3011
3051
|
|
|
3012
3052
|
if (index->version <= INDEX_VERSION_NUMBER_EXT) {
|
|
3013
3053
|
is_extended = is_index_extended(index);
|
|
@@ -3158,7 +3198,7 @@ int git_index_read_tree(git_index *index, const git_tree *tree)
|
|
|
3158
3198
|
/* well, this isn't good */;
|
|
3159
3199
|
} else {
|
|
3160
3200
|
git_vector_swap(&entries, &index->entries);
|
|
3161
|
-
entries_map =
|
|
3201
|
+
entries_map = git_atomic_swap(index->entries_map, entries_map);
|
|
3162
3202
|
}
|
|
3163
3203
|
|
|
3164
3204
|
index->dirty = 1;
|
|
@@ -3189,7 +3229,7 @@ static int git_index_read_iterator(
|
|
|
3189
3229
|
size_t i;
|
|
3190
3230
|
int error;
|
|
3191
3231
|
|
|
3192
|
-
|
|
3232
|
+
GIT_ASSERT((new_iterator->flags & GIT_ITERATOR_DONT_IGNORE_CASE));
|
|
3193
3233
|
|
|
3194
3234
|
if ((error = git_vector_init(&new_entries, new_length_hint, index->entries._cmp)) < 0 ||
|
|
3195
3235
|
(error = git_vector_init(&remove_entries, index->entries.length, NULL)) < 0 ||
|
|
@@ -3292,7 +3332,7 @@ static int git_index_read_iterator(
|
|
|
3292
3332
|
goto done;
|
|
3293
3333
|
|
|
3294
3334
|
git_vector_swap(&new_entries, &index->entries);
|
|
3295
|
-
new_entries_map =
|
|
3335
|
+
new_entries_map = git_atomic_swap(index->entries_map, new_entries_map);
|
|
3296
3336
|
|
|
3297
3337
|
git_vector_foreach(&remove_entries, i, entry) {
|
|
3298
3338
|
if (index->tree)
|
|
@@ -3361,7 +3401,7 @@ int git_index_add_all(
|
|
|
3361
3401
|
git_pathspec ps;
|
|
3362
3402
|
bool no_fnmatch = (flags & GIT_INDEX_ADD_DISABLE_PATHSPEC_MATCH) != 0;
|
|
3363
3403
|
|
|
3364
|
-
|
|
3404
|
+
GIT_ASSERT_ARG(index);
|
|
3365
3405
|
|
|
3366
3406
|
repo = INDEX_OWNER(index);
|
|
3367
3407
|
if ((error = git_repository__ensure_not_bare(repo, "index add all")) < 0)
|
|
@@ -3447,8 +3487,8 @@ static int index_apply_to_wd_diff(git_index *index, int action, const git_strarr
|
|
|
3447
3487
|
payload,
|
|
3448
3488
|
};
|
|
3449
3489
|
|
|
3450
|
-
|
|
3451
|
-
|
|
3490
|
+
GIT_ASSERT_ARG(index);
|
|
3491
|
+
GIT_ASSERT_ARG(action == INDEX_ACTION_UPDATE || action == INDEX_ACTION_ADDALL);
|
|
3452
3492
|
|
|
3453
3493
|
repo = INDEX_OWNER(index);
|
|
3454
3494
|
|
|
@@ -3502,7 +3542,7 @@ static int index_apply_to_all(
|
|
|
3502
3542
|
const char *match;
|
|
3503
3543
|
git_buf path = GIT_BUF_INIT;
|
|
3504
3544
|
|
|
3505
|
-
|
|
3545
|
+
GIT_ASSERT_ARG(index);
|
|
3506
3546
|
|
|
3507
3547
|
if ((error = git_pathspec__init(&ps, paths)) < 0)
|
|
3508
3548
|
return error;
|
|
@@ -3598,7 +3638,7 @@ int git_index_snapshot_new(git_vector *snap, git_index *index)
|
|
|
3598
3638
|
|
|
3599
3639
|
GIT_REFCOUNT_INC(index);
|
|
3600
3640
|
|
|
3601
|
-
|
|
3641
|
+
git_atomic32_inc(&index->readers);
|
|
3602
3642
|
git_vector_sort(&index->entries);
|
|
3603
3643
|
|
|
3604
3644
|
error = git_vector_dup(snap, &index->entries, index->entries._cmp);
|
|
@@ -3613,7 +3653,7 @@ void git_index_snapshot_release(git_vector *snap, git_index *index)
|
|
|
3613
3653
|
{
|
|
3614
3654
|
git_vector_free(snap);
|
|
3615
3655
|
|
|
3616
|
-
|
|
3656
|
+
git_atomic32_dec(&index->readers);
|
|
3617
3657
|
|
|
3618
3658
|
git_index_free(index);
|
|
3619
3659
|
}
|
|
@@ -3716,9 +3756,11 @@ void git_indexwriter_cleanup(git_indexwriter *writer)
|
|
|
3716
3756
|
|
|
3717
3757
|
/* Deprecated functions */
|
|
3718
3758
|
|
|
3759
|
+
#ifndef GIT_DEPRECATE_HARD
|
|
3719
3760
|
int git_index_add_frombuffer(
|
|
3720
3761
|
git_index *index, const git_index_entry *source_entry,
|
|
3721
3762
|
const void *buffer, size_t len)
|
|
3722
3763
|
{
|
|
3723
3764
|
return git_index_add_from_buffer(index, source_entry, buffer, len);
|
|
3724
3765
|
}
|
|
3766
|
+
#endif
|