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/pack.h
CHANGED
|
@@ -20,6 +20,14 @@
|
|
|
20
20
|
#include "oidmap.h"
|
|
21
21
|
#include "zstream.h"
|
|
22
22
|
|
|
23
|
+
/**
|
|
24
|
+
* Function type for callbacks from git_pack_foreach_entry_offset.
|
|
25
|
+
*/
|
|
26
|
+
typedef int git_pack_foreach_entry_offset_cb(
|
|
27
|
+
const git_oid *id,
|
|
28
|
+
off64_t offset,
|
|
29
|
+
void *payload);
|
|
30
|
+
|
|
23
31
|
#define GIT_PACK_FILE_MODE 0444
|
|
24
32
|
|
|
25
33
|
#define PACK_SIGNATURE 0x5041434b /* "PACK" */
|
|
@@ -58,7 +66,7 @@ struct git_pack_idx_header {
|
|
|
58
66
|
|
|
59
67
|
typedef struct git_pack_cache_entry {
|
|
60
68
|
size_t last_usage; /* enough? */
|
|
61
|
-
|
|
69
|
+
git_atomic32 refcount;
|
|
62
70
|
git_rawobj raw;
|
|
63
71
|
} git_pack_cache_entry;
|
|
64
72
|
|
|
@@ -85,8 +93,8 @@ typedef struct {
|
|
|
85
93
|
struct git_pack_file {
|
|
86
94
|
git_mwindow_file mwf;
|
|
87
95
|
git_map index_map;
|
|
88
|
-
git_mutex lock; /* protect updates to
|
|
89
|
-
|
|
96
|
+
git_mutex lock; /* protect updates to index_map */
|
|
97
|
+
git_atomic32 refcount;
|
|
90
98
|
|
|
91
99
|
uint32_t num_objects;
|
|
92
100
|
uint32_t num_bad_objects;
|
|
@@ -106,6 +114,19 @@ struct git_pack_file {
|
|
|
106
114
|
char pack_name[GIT_FLEX_ARRAY]; /* more */
|
|
107
115
|
};
|
|
108
116
|
|
|
117
|
+
/**
|
|
118
|
+
* Return the position where an OID (or a prefix) would be inserted within the
|
|
119
|
+
* OID Lookup Table of an .idx file. This performs binary search between the lo
|
|
120
|
+
* and hi indices.
|
|
121
|
+
*
|
|
122
|
+
* The stride parameter is provided because .idx files version 1 store the OIDs
|
|
123
|
+
* interleaved with the 4-byte file offsets of the objects within the .pack
|
|
124
|
+
* file (stride = 24), whereas files with version 2 store them in a contiguous
|
|
125
|
+
* flat array (stride = 20).
|
|
126
|
+
*/
|
|
127
|
+
int git_pack__lookup_sha1(const void *oid_lookup_table, size_t stride, unsigned lo,
|
|
128
|
+
unsigned hi, const unsigned char *oid_prefix);
|
|
129
|
+
|
|
109
130
|
struct git_pack_entry {
|
|
110
131
|
off64_t offset;
|
|
111
132
|
git_oid sha1;
|
|
@@ -120,14 +141,14 @@ typedef struct git_packfile_stream {
|
|
|
120
141
|
git_mwindow *mw;
|
|
121
142
|
} git_packfile_stream;
|
|
122
143
|
|
|
123
|
-
|
|
144
|
+
int git_packfile__object_header(size_t *out, unsigned char *hdr, size_t size, git_object_t type);
|
|
124
145
|
|
|
125
146
|
int git_packfile__name(char **out, const char *path);
|
|
126
147
|
|
|
127
148
|
int git_packfile_unpack_header(
|
|
128
149
|
size_t *size_p,
|
|
129
150
|
git_object_t *type_p,
|
|
130
|
-
|
|
151
|
+
struct git_pack_file *p,
|
|
131
152
|
git_mwindow **w_curs,
|
|
132
153
|
off64_t *curpos);
|
|
133
154
|
|
|
@@ -143,12 +164,15 @@ int git_packfile_stream_open(git_packfile_stream *obj, struct git_pack_file *p,
|
|
|
143
164
|
ssize_t git_packfile_stream_read(git_packfile_stream *obj, void *buffer, size_t len);
|
|
144
165
|
void git_packfile_stream_dispose(git_packfile_stream *obj);
|
|
145
166
|
|
|
146
|
-
|
|
147
|
-
off64_t *
|
|
167
|
+
int get_delta_base(
|
|
168
|
+
off64_t *delta_base_out,
|
|
169
|
+
struct git_pack_file *p,
|
|
170
|
+
git_mwindow **w_curs,
|
|
171
|
+
off64_t *curpos,
|
|
172
|
+
git_object_t type,
|
|
148
173
|
off64_t delta_obj_offset);
|
|
149
174
|
|
|
150
|
-
void
|
|
151
|
-
void git_packfile_free(struct git_pack_file *p);
|
|
175
|
+
void git_packfile_free(struct git_pack_file *p, bool unlink_packfile);
|
|
152
176
|
int git_packfile_alloc(struct git_pack_file **pack_out, const char *path);
|
|
153
177
|
|
|
154
178
|
int git_pack_entry_find(
|
|
@@ -160,5 +184,16 @@ int git_pack_foreach_entry(
|
|
|
160
184
|
struct git_pack_file *p,
|
|
161
185
|
git_odb_foreach_cb cb,
|
|
162
186
|
void *data);
|
|
187
|
+
/**
|
|
188
|
+
* Similar to git_pack_foreach_entry, but:
|
|
189
|
+
* - It also provides the offset of the object within the
|
|
190
|
+
* packfile.
|
|
191
|
+
* - It does not sort the objects in any order.
|
|
192
|
+
* - It retains the lock while invoking the callback.
|
|
193
|
+
*/
|
|
194
|
+
int git_pack_foreach_entry_offset(
|
|
195
|
+
struct git_pack_file *p,
|
|
196
|
+
git_pack_foreach_entry_offset_cb cb,
|
|
197
|
+
void *data);
|
|
163
198
|
|
|
164
199
|
#endif
|
data/vendor/libgit2/src/patch.c
CHANGED
|
@@ -65,7 +65,7 @@ size_t git_patch_size(
|
|
|
65
65
|
{
|
|
66
66
|
size_t out;
|
|
67
67
|
|
|
68
|
-
|
|
68
|
+
GIT_ASSERT_ARG(patch);
|
|
69
69
|
|
|
70
70
|
out = patch->content_size;
|
|
71
71
|
|
|
@@ -129,13 +129,13 @@ int git_patch_line_stats(
|
|
|
129
129
|
|
|
130
130
|
const git_diff_delta *git_patch_get_delta(const git_patch *patch)
|
|
131
131
|
{
|
|
132
|
-
|
|
132
|
+
GIT_ASSERT_ARG_WITH_RETVAL(patch, NULL);
|
|
133
133
|
return patch->delta;
|
|
134
134
|
}
|
|
135
135
|
|
|
136
136
|
size_t git_patch_num_hunks(const git_patch *patch)
|
|
137
137
|
{
|
|
138
|
-
|
|
138
|
+
GIT_ASSERT_ARG(patch);
|
|
139
139
|
return git_array_size(patch->hunks);
|
|
140
140
|
}
|
|
141
141
|
|
|
@@ -152,7 +152,7 @@ int git_patch_get_hunk(
|
|
|
152
152
|
size_t hunk_idx)
|
|
153
153
|
{
|
|
154
154
|
git_patch_hunk *hunk;
|
|
155
|
-
|
|
155
|
+
GIT_ASSERT_ARG(patch);
|
|
156
156
|
|
|
157
157
|
hunk = git_array_get(patch->hunks, hunk_idx);
|
|
158
158
|
|
|
@@ -170,7 +170,7 @@ int git_patch_get_hunk(
|
|
|
170
170
|
int git_patch_num_lines_in_hunk(const git_patch *patch, size_t hunk_idx)
|
|
171
171
|
{
|
|
172
172
|
git_patch_hunk *hunk;
|
|
173
|
-
|
|
173
|
+
GIT_ASSERT_ARG(patch);
|
|
174
174
|
|
|
175
175
|
if (!(hunk = git_array_get(patch->hunks, hunk_idx)))
|
|
176
176
|
return patch_error_outofrange("hunk");
|
|
@@ -186,7 +186,7 @@ int git_patch_get_line_in_hunk(
|
|
|
186
186
|
git_patch_hunk *hunk;
|
|
187
187
|
git_diff_line *line;
|
|
188
188
|
|
|
189
|
-
|
|
189
|
+
GIT_ASSERT_ARG(patch);
|
|
190
190
|
|
|
191
191
|
if (!(hunk = git_array_get(patch->hunks, hunk_idx))) {
|
|
192
192
|
if (out) *out = NULL;
|
|
@@ -204,9 +204,16 @@ int git_patch_get_line_in_hunk(
|
|
|
204
204
|
return 0;
|
|
205
205
|
}
|
|
206
206
|
|
|
207
|
+
git_repository *git_patch_owner(const git_patch *patch)
|
|
208
|
+
{
|
|
209
|
+
return patch->repo;
|
|
210
|
+
}
|
|
211
|
+
|
|
207
212
|
int git_patch_from_diff(git_patch **out, git_diff *diff, size_t idx)
|
|
208
213
|
{
|
|
209
|
-
|
|
214
|
+
GIT_ASSERT_ARG(out);
|
|
215
|
+
GIT_ASSERT_ARG(diff);
|
|
216
|
+
GIT_ASSERT_ARG(diff->patch_fn);
|
|
210
217
|
return diff->patch_fn(out, diff, idx);
|
|
211
218
|
}
|
|
212
219
|
|
|
@@ -209,9 +209,7 @@ static int patch_generated_load(git_patch_generated *patch, git_patch_generated_
|
|
|
209
209
|
|
|
210
210
|
if ((error = git_diff_file_content__load(
|
|
211
211
|
&patch->ofile, &patch->base.diff_opts)) < 0 ||
|
|
212
|
-
|
|
213
|
-
goto cleanup;
|
|
214
|
-
if ((error = git_diff_file_content__load(
|
|
212
|
+
(error = git_diff_file_content__load(
|
|
215
213
|
&patch->nfile, &patch->base.diff_opts)) < 0 ||
|
|
216
214
|
should_skip_binary(patch, patch->nfile.file))
|
|
217
215
|
goto cleanup;
|
|
@@ -563,7 +561,7 @@ static int patch_from_sources(
|
|
|
563
561
|
patch_generated_with_delta *pd;
|
|
564
562
|
git_xdiff_output xo;
|
|
565
563
|
|
|
566
|
-
|
|
564
|
+
GIT_ASSERT_ARG(out);
|
|
567
565
|
*out = NULL;
|
|
568
566
|
|
|
569
567
|
if ((error = patch_generated_with_delta_alloc(
|
|
@@ -842,7 +840,7 @@ static int patch_generated_line_cb(
|
|
|
842
840
|
GIT_UNUSED(hunk_);
|
|
843
841
|
|
|
844
842
|
hunk = git_array_last(patch->base.hunks);
|
|
845
|
-
|
|
843
|
+
GIT_ASSERT(hunk); /* programmer error if no hunk is available */
|
|
846
844
|
|
|
847
845
|
line = git_array_alloc(patch->base.lines);
|
|
848
846
|
GIT_ERROR_CHECK_ALLOC(line);
|
|
@@ -198,7 +198,7 @@ static int parse_header_git_index(
|
|
|
198
198
|
return -1;
|
|
199
199
|
|
|
200
200
|
if (git_parse_peek(&c, &ctx->parse_ctx, 0) == 0 && c == ' ') {
|
|
201
|
-
uint16_t mode;
|
|
201
|
+
uint16_t mode = 0;
|
|
202
202
|
|
|
203
203
|
git_parse_advance_chars(&ctx->parse_ctx, 1);
|
|
204
204
|
|
|
@@ -407,10 +407,12 @@ static const parse_header_transition transitions[] = {
|
|
|
407
407
|
|
|
408
408
|
{ "--- " , STATE_DIFF, STATE_PATH, parse_header_git_oldpath },
|
|
409
409
|
{ "--- " , STATE_INDEX, STATE_PATH, parse_header_git_oldpath },
|
|
410
|
+
{ "--- " , STATE_FILEMODE, STATE_PATH, parse_header_git_oldpath },
|
|
410
411
|
{ "+++ " , STATE_PATH, STATE_END, parse_header_git_newpath },
|
|
411
412
|
{ "GIT binary patch" , STATE_INDEX, STATE_END, NULL },
|
|
412
413
|
{ "Binary files " , STATE_INDEX, STATE_END, NULL },
|
|
413
414
|
|
|
415
|
+
{ "similarity index " , STATE_END, STATE_SIMILARITY, parse_header_similarity },
|
|
414
416
|
{ "similarity index " , STATE_DIFF, STATE_SIMILARITY, parse_header_similarity },
|
|
415
417
|
{ "dissimilarity index ", STATE_DIFF, STATE_SIMILARITY, parse_header_dissimilarity },
|
|
416
418
|
{ "rename from " , STATE_SIMILARITY, STATE_RENAME, parse_header_renamefrom },
|
|
@@ -940,7 +942,7 @@ static int parse_patch_body(
|
|
|
940
942
|
return parse_patch_hunks(patch, ctx);
|
|
941
943
|
}
|
|
942
944
|
|
|
943
|
-
int check_header_names(
|
|
945
|
+
static int check_header_names(
|
|
944
946
|
const char *one,
|
|
945
947
|
const char *two,
|
|
946
948
|
const char *old_or_new,
|
|
@@ -1166,7 +1168,8 @@ int git_patch_parse(
|
|
|
1166
1168
|
size_t start, used;
|
|
1167
1169
|
int error = 0;
|
|
1168
1170
|
|
|
1169
|
-
|
|
1171
|
+
GIT_ASSERT_ARG(out);
|
|
1172
|
+
GIT_ASSERT_ARG(ctx);
|
|
1170
1173
|
|
|
1171
1174
|
*out = NULL;
|
|
1172
1175
|
|
data/vendor/libgit2/src/path.c
CHANGED
|
@@ -274,24 +274,6 @@ size_t git_path_basename_offset(git_buf *buffer)
|
|
|
274
274
|
return 0;
|
|
275
275
|
}
|
|
276
276
|
|
|
277
|
-
const char *git_path_topdir(const char *path)
|
|
278
|
-
{
|
|
279
|
-
size_t len;
|
|
280
|
-
ssize_t i;
|
|
281
|
-
|
|
282
|
-
assert(path);
|
|
283
|
-
len = strlen(path);
|
|
284
|
-
|
|
285
|
-
if (!len || path[len - 1] != '/')
|
|
286
|
-
return NULL;
|
|
287
|
-
|
|
288
|
-
for (i = (ssize_t)len - 2; i >= 0; --i)
|
|
289
|
-
if (path[i] == '/')
|
|
290
|
-
break;
|
|
291
|
-
|
|
292
|
-
return &path[i + 1];
|
|
293
|
-
}
|
|
294
|
-
|
|
295
277
|
int git_path_root(const char *path)
|
|
296
278
|
{
|
|
297
279
|
int offset = 0, prefix_len;
|
|
@@ -322,10 +304,12 @@ int git_path_root(const char *path)
|
|
|
322
304
|
return -1; /* Not a real error - signals that path is not rooted */
|
|
323
305
|
}
|
|
324
306
|
|
|
325
|
-
void
|
|
307
|
+
static void path_trim_slashes(git_buf *path)
|
|
326
308
|
{
|
|
327
309
|
int ceiling = git_path_root(path->ptr) + 1;
|
|
328
|
-
|
|
310
|
+
|
|
311
|
+
if (ceiling < 0)
|
|
312
|
+
return;
|
|
329
313
|
|
|
330
314
|
while (path->size > (size_t)ceiling) {
|
|
331
315
|
if (path->ptr[path->size-1] != '/')
|
|
@@ -341,7 +325,8 @@ int git_path_join_unrooted(
|
|
|
341
325
|
{
|
|
342
326
|
ssize_t root;
|
|
343
327
|
|
|
344
|
-
|
|
328
|
+
GIT_ASSERT_ARG(path_out);
|
|
329
|
+
GIT_ASSERT_ARG(path);
|
|
345
330
|
|
|
346
331
|
root = (ssize_t)git_path_root(path);
|
|
347
332
|
|
|
@@ -389,7 +374,8 @@ int git_path_prettify(git_buf *path_out, const char *path, const char *base)
|
|
|
389
374
|
{
|
|
390
375
|
char buf[GIT_PATH_MAX];
|
|
391
376
|
|
|
392
|
-
|
|
377
|
+
GIT_ASSERT_ARG(path_out);
|
|
378
|
+
GIT_ASSERT_ARG(path);
|
|
393
379
|
|
|
394
380
|
/* construct path if needed */
|
|
395
381
|
if (base != NULL && git_path_root(path) < 0) {
|
|
@@ -440,7 +426,9 @@ void git_path_string_to_dir(char* path, size_t size)
|
|
|
440
426
|
int git__percent_decode(git_buf *decoded_out, const char *input)
|
|
441
427
|
{
|
|
442
428
|
int len, hi, lo, i;
|
|
443
|
-
|
|
429
|
+
|
|
430
|
+
GIT_ASSERT_ARG(decoded_out);
|
|
431
|
+
GIT_ASSERT_ARG(input);
|
|
444
432
|
|
|
445
433
|
len = (int)strlen(input);
|
|
446
434
|
git_buf_clear(decoded_out);
|
|
@@ -501,7 +489,8 @@ int git_path_fromurl(git_buf *local_path_out, const char *file_url)
|
|
|
501
489
|
{
|
|
502
490
|
int offset;
|
|
503
491
|
|
|
504
|
-
|
|
492
|
+
GIT_ASSERT_ARG(local_path_out);
|
|
493
|
+
GIT_ASSERT_ARG(file_url);
|
|
505
494
|
|
|
506
495
|
if ((offset = local_file_url_prefixlen(file_url)) < 0 ||
|
|
507
496
|
file_url[offset] == '\0' || file_url[offset] == '/')
|
|
@@ -526,7 +515,8 @@ int git_path_walk_up(
|
|
|
526
515
|
ssize_t stop = 0, scan;
|
|
527
516
|
char oldc = '\0';
|
|
528
517
|
|
|
529
|
-
|
|
518
|
+
GIT_ASSERT_ARG(path);
|
|
519
|
+
GIT_ASSERT_ARG(cb);
|
|
530
520
|
|
|
531
521
|
if (ceiling != NULL) {
|
|
532
522
|
if (git__prefixcmp(path->ptr, ceiling) == 0)
|
|
@@ -581,7 +571,7 @@ int git_path_walk_up(
|
|
|
581
571
|
|
|
582
572
|
bool git_path_exists(const char *path)
|
|
583
573
|
{
|
|
584
|
-
|
|
574
|
+
GIT_ASSERT_ARG_WITH_RETVAL(path, false);
|
|
585
575
|
return p_access(path, F_OK) == 0;
|
|
586
576
|
}
|
|
587
577
|
|
|
@@ -598,7 +588,7 @@ bool git_path_isfile(const char *path)
|
|
|
598
588
|
{
|
|
599
589
|
struct stat st;
|
|
600
590
|
|
|
601
|
-
|
|
591
|
+
GIT_ASSERT_ARG_WITH_RETVAL(path, false);
|
|
602
592
|
if (p_stat(path, &st) < 0)
|
|
603
593
|
return false;
|
|
604
594
|
|
|
@@ -609,7 +599,7 @@ bool git_path_islink(const char *path)
|
|
|
609
599
|
{
|
|
610
600
|
struct stat st;
|
|
611
601
|
|
|
612
|
-
|
|
602
|
+
GIT_ASSERT_ARG_WITH_RETVAL(path, false);
|
|
613
603
|
if (p_lstat(path, &st) < 0)
|
|
614
604
|
return false;
|
|
615
605
|
|
|
@@ -764,15 +754,13 @@ bool git_path_contains_file(git_buf *base, const char *file)
|
|
|
764
754
|
return _check_dir_contents(base, file, &git_path_isfile);
|
|
765
755
|
}
|
|
766
756
|
|
|
767
|
-
int git_path_find_dir(git_buf *dir
|
|
757
|
+
int git_path_find_dir(git_buf *dir)
|
|
768
758
|
{
|
|
769
|
-
int error =
|
|
759
|
+
int error = 0;
|
|
760
|
+
char buf[GIT_PATH_MAX];
|
|
770
761
|
|
|
771
|
-
if (
|
|
772
|
-
|
|
773
|
-
if (p_realpath(dir->ptr, buf) != NULL)
|
|
774
|
-
error = git_buf_sets(dir, buf);
|
|
775
|
-
}
|
|
762
|
+
if (p_realpath(dir->ptr, buf) != NULL)
|
|
763
|
+
error = git_buf_sets(dir, buf);
|
|
776
764
|
|
|
777
765
|
/* call dirname if this is not a directory */
|
|
778
766
|
if (!error) /* && git_path_isdir(dir->ptr) == false) */
|
|
@@ -1211,7 +1199,8 @@ int git_path_diriter_init(
|
|
|
1211
1199
|
if (is_win7_or_later < 0)
|
|
1212
1200
|
is_win7_or_later = git_has_win32_version(6, 1, 0);
|
|
1213
1201
|
|
|
1214
|
-
|
|
1202
|
+
GIT_ASSERT_ARG(diriter);
|
|
1203
|
+
GIT_ASSERT_ARG(path);
|
|
1215
1204
|
|
|
1216
1205
|
memset(diriter, 0, sizeof(git_path_diriter));
|
|
1217
1206
|
diriter->handle = INVALID_HANDLE_VALUE;
|
|
@@ -1219,7 +1208,7 @@ int git_path_diriter_init(
|
|
|
1219
1208
|
if (git_buf_puts(&diriter->path_utf8, path) < 0)
|
|
1220
1209
|
return -1;
|
|
1221
1210
|
|
|
1222
|
-
|
|
1211
|
+
path_trim_slashes(&diriter->path_utf8);
|
|
1223
1212
|
|
|
1224
1213
|
if (diriter->path_utf8.size == 0) {
|
|
1225
1214
|
git_error_set(GIT_ERROR_FILESYSTEM, "could not open directory '%s'", path);
|
|
@@ -1311,9 +1300,10 @@ int git_path_diriter_filename(
|
|
|
1311
1300
|
size_t *out_len,
|
|
1312
1301
|
git_path_diriter *diriter)
|
|
1313
1302
|
{
|
|
1314
|
-
|
|
1315
|
-
|
|
1316
|
-
|
|
1303
|
+
GIT_ASSERT_ARG(out);
|
|
1304
|
+
GIT_ASSERT_ARG(out_len);
|
|
1305
|
+
GIT_ASSERT_ARG(diriter);
|
|
1306
|
+
GIT_ASSERT(diriter->path_utf8.size > diriter->parent_utf8_len);
|
|
1317
1307
|
|
|
1318
1308
|
*out = &diriter->path_utf8.ptr[diriter->parent_utf8_len+1];
|
|
1319
1309
|
*out_len = diriter->path_utf8.size - diriter->parent_utf8_len - 1;
|
|
@@ -1325,7 +1315,9 @@ int git_path_diriter_fullpath(
|
|
|
1325
1315
|
size_t *out_len,
|
|
1326
1316
|
git_path_diriter *diriter)
|
|
1327
1317
|
{
|
|
1328
|
-
|
|
1318
|
+
GIT_ASSERT_ARG(out);
|
|
1319
|
+
GIT_ASSERT_ARG(out_len);
|
|
1320
|
+
GIT_ASSERT_ARG(diriter);
|
|
1329
1321
|
|
|
1330
1322
|
*out = diriter->path_utf8.ptr;
|
|
1331
1323
|
*out_len = diriter->path_utf8.size;
|
|
@@ -1334,7 +1326,8 @@ int git_path_diriter_fullpath(
|
|
|
1334
1326
|
|
|
1335
1327
|
int git_path_diriter_stat(struct stat *out, git_path_diriter *diriter)
|
|
1336
1328
|
{
|
|
1337
|
-
|
|
1329
|
+
GIT_ASSERT_ARG(out);
|
|
1330
|
+
GIT_ASSERT_ARG(diriter);
|
|
1338
1331
|
|
|
1339
1332
|
return git_win32__file_attribute_to_stat(out,
|
|
1340
1333
|
(WIN32_FILE_ATTRIBUTE_DATA *)&diriter->current,
|
|
@@ -1361,14 +1354,15 @@ int git_path_diriter_init(
|
|
|
1361
1354
|
const char *path,
|
|
1362
1355
|
unsigned int flags)
|
|
1363
1356
|
{
|
|
1364
|
-
|
|
1357
|
+
GIT_ASSERT_ARG(diriter);
|
|
1358
|
+
GIT_ASSERT_ARG(path);
|
|
1365
1359
|
|
|
1366
1360
|
memset(diriter, 0, sizeof(git_path_diriter));
|
|
1367
1361
|
|
|
1368
1362
|
if (git_buf_puts(&diriter->path, path) < 0)
|
|
1369
1363
|
return -1;
|
|
1370
1364
|
|
|
1371
|
-
|
|
1365
|
+
path_trim_slashes(&diriter->path);
|
|
1372
1366
|
|
|
1373
1367
|
if (diriter->path.size == 0) {
|
|
1374
1368
|
git_error_set(GIT_ERROR_FILESYSTEM, "could not open directory '%s'", path);
|
|
@@ -1401,7 +1395,7 @@ int git_path_diriter_next(git_path_diriter *diriter)
|
|
|
1401
1395
|
bool skip_dot = !(diriter->flags & GIT_PATH_DIR_INCLUDE_DOT_AND_DOTDOT);
|
|
1402
1396
|
int error = 0;
|
|
1403
1397
|
|
|
1404
|
-
|
|
1398
|
+
GIT_ASSERT_ARG(diriter);
|
|
1405
1399
|
|
|
1406
1400
|
errno = 0;
|
|
1407
1401
|
|
|
@@ -1444,9 +1438,10 @@ int git_path_diriter_filename(
|
|
|
1444
1438
|
size_t *out_len,
|
|
1445
1439
|
git_path_diriter *diriter)
|
|
1446
1440
|
{
|
|
1447
|
-
|
|
1448
|
-
|
|
1449
|
-
|
|
1441
|
+
GIT_ASSERT_ARG(out);
|
|
1442
|
+
GIT_ASSERT_ARG(out_len);
|
|
1443
|
+
GIT_ASSERT_ARG(diriter);
|
|
1444
|
+
GIT_ASSERT(diriter->path.size > diriter->parent_len);
|
|
1450
1445
|
|
|
1451
1446
|
*out = &diriter->path.ptr[diriter->parent_len+1];
|
|
1452
1447
|
*out_len = diriter->path.size - diriter->parent_len - 1;
|
|
@@ -1458,7 +1453,9 @@ int git_path_diriter_fullpath(
|
|
|
1458
1453
|
size_t *out_len,
|
|
1459
1454
|
git_path_diriter *diriter)
|
|
1460
1455
|
{
|
|
1461
|
-
|
|
1456
|
+
GIT_ASSERT_ARG(out);
|
|
1457
|
+
GIT_ASSERT_ARG(out_len);
|
|
1458
|
+
GIT_ASSERT_ARG(diriter);
|
|
1462
1459
|
|
|
1463
1460
|
*out = diriter->path.ptr;
|
|
1464
1461
|
*out_len = diriter->path.size;
|
|
@@ -1467,7 +1464,8 @@ int git_path_diriter_fullpath(
|
|
|
1467
1464
|
|
|
1468
1465
|
int git_path_diriter_stat(struct stat *out, git_path_diriter *diriter)
|
|
1469
1466
|
{
|
|
1470
|
-
|
|
1467
|
+
GIT_ASSERT_ARG(out);
|
|
1468
|
+
GIT_ASSERT_ARG(diriter);
|
|
1471
1469
|
|
|
1472
1470
|
return git_path_lstat(diriter->path.ptr, out);
|
|
1473
1471
|
}
|
|
@@ -1503,7 +1501,8 @@ int git_path_dirload(
|
|
|
1503
1501
|
char *dup;
|
|
1504
1502
|
int error;
|
|
1505
1503
|
|
|
1506
|
-
|
|
1504
|
+
GIT_ASSERT_ARG(contents);
|
|
1505
|
+
GIT_ASSERT_ARG(path);
|
|
1507
1506
|
|
|
1508
1507
|
if ((error = git_path_diriter_init(&iter, path, flags)) < 0)
|
|
1509
1508
|
return error;
|
|
@@ -1512,7 +1511,7 @@ int git_path_dirload(
|
|
|
1512
1511
|
if ((error = git_path_diriter_fullpath(&name, &name_len, &iter)) < 0)
|
|
1513
1512
|
break;
|
|
1514
1513
|
|
|
1515
|
-
|
|
1514
|
+
GIT_ASSERT(name_len > prefix_len);
|
|
1516
1515
|
|
|
1517
1516
|
dup = git__strndup(name + prefix_len, name_len - prefix_len);
|
|
1518
1517
|
GIT_ERROR_CHECK_ALLOC(dup);
|
|
@@ -1561,8 +1560,8 @@ GIT_INLINE(bool) verify_dospath(
|
|
|
1561
1560
|
static int32_t next_hfs_char(const char **in, size_t *len)
|
|
1562
1561
|
{
|
|
1563
1562
|
while (*len) {
|
|
1564
|
-
|
|
1565
|
-
int cp_len =
|
|
1563
|
+
uint32_t codepoint;
|
|
1564
|
+
int cp_len = git_utf8_iterate(&codepoint, *in, *len);
|
|
1566
1565
|
if (cp_len < 0)
|
|
1567
1566
|
return -1;
|
|
1568
1567
|
|
|
@@ -1594,7 +1593,7 @@ static int32_t next_hfs_char(const char **in, size_t *len)
|
|
|
1594
1593
|
* the ASCII range, which is perfectly fine, because the
|
|
1595
1594
|
* git folder name can only be composed of ascii characters
|
|
1596
1595
|
*/
|
|
1597
|
-
return git__tolower(codepoint);
|
|
1596
|
+
return git__tolower((int)codepoint);
|
|
1598
1597
|
}
|
|
1599
1598
|
return 0; /* NULL byte -- end of string */
|
|
1600
1599
|
}
|
|
@@ -1876,7 +1875,7 @@ GIT_INLINE(unsigned int) dotgit_flags(
|
|
|
1876
1875
|
return flags;
|
|
1877
1876
|
}
|
|
1878
1877
|
|
|
1879
|
-
bool
|
|
1878
|
+
bool git_path_validate(
|
|
1880
1879
|
git_repository *repo,
|
|
1881
1880
|
const char *path,
|
|
1882
1881
|
uint16_t mode,
|
|
@@ -1903,6 +1902,52 @@ bool git_path_isvalid(
|
|
|
1903
1902
|
return verify_component(repo, start, (c - start), mode, flags);
|
|
1904
1903
|
}
|
|
1905
1904
|
|
|
1905
|
+
#ifdef GIT_WIN32
|
|
1906
|
+
GIT_INLINE(bool) should_validate_longpaths(git_repository *repo)
|
|
1907
|
+
{
|
|
1908
|
+
int longpaths = 0;
|
|
1909
|
+
|
|
1910
|
+
if (repo &&
|
|
1911
|
+
git_repository__configmap_lookup(&longpaths, repo, GIT_CONFIGMAP_LONGPATHS) < 0)
|
|
1912
|
+
longpaths = 0;
|
|
1913
|
+
|
|
1914
|
+
return (longpaths == 0);
|
|
1915
|
+
}
|
|
1916
|
+
|
|
1917
|
+
#else
|
|
1918
|
+
|
|
1919
|
+
GIT_INLINE(bool) should_validate_longpaths(git_repository *repo)
|
|
1920
|
+
{
|
|
1921
|
+
GIT_UNUSED(repo);
|
|
1922
|
+
|
|
1923
|
+
return false;
|
|
1924
|
+
}
|
|
1925
|
+
#endif
|
|
1926
|
+
|
|
1927
|
+
int git_path_validate_workdir(git_repository *repo, const char *path)
|
|
1928
|
+
{
|
|
1929
|
+
if (should_validate_longpaths(repo))
|
|
1930
|
+
return git_path_validate_filesystem(path, strlen(path));
|
|
1931
|
+
|
|
1932
|
+
return 0;
|
|
1933
|
+
}
|
|
1934
|
+
|
|
1935
|
+
int git_path_validate_workdir_with_len(
|
|
1936
|
+
git_repository *repo,
|
|
1937
|
+
const char *path,
|
|
1938
|
+
size_t path_len)
|
|
1939
|
+
{
|
|
1940
|
+
if (should_validate_longpaths(repo))
|
|
1941
|
+
return git_path_validate_filesystem(path, path_len);
|
|
1942
|
+
|
|
1943
|
+
return 0;
|
|
1944
|
+
}
|
|
1945
|
+
|
|
1946
|
+
int git_path_validate_workdir_buf(git_repository *repo, git_buf *path)
|
|
1947
|
+
{
|
|
1948
|
+
return git_path_validate_workdir_with_len(repo, path->ptr, path->size);
|
|
1949
|
+
}
|
|
1950
|
+
|
|
1906
1951
|
int git_path_normalize_slashes(git_buf *out, const char *path)
|
|
1907
1952
|
{
|
|
1908
1953
|
int error;
|
|
@@ -2045,7 +2090,7 @@ int git_path_validate_system_file_ownership(const char *path)
|
|
|
2045
2090
|
git_error_set(GIT_ERROR_INVALID, "programdata configuration file owner is not valid");
|
|
2046
2091
|
ret = GIT_ERROR;
|
|
2047
2092
|
}
|
|
2048
|
-
|
|
2093
|
+
git__free(info);
|
|
2049
2094
|
|
|
2050
2095
|
cleanup:
|
|
2051
2096
|
if (descriptor)
|