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
|
@@ -51,6 +51,7 @@ typedef enum {
|
|
|
51
51
|
GIT_CONFIGMAP_PROTECTHFS, /* core.protectHFS */
|
|
52
52
|
GIT_CONFIGMAP_PROTECTNTFS, /* core.protectNTFS */
|
|
53
53
|
GIT_CONFIGMAP_FSYNCOBJECTFILES, /* core.fsyncObjectFiles */
|
|
54
|
+
GIT_CONFIGMAP_LONGPATHS, /* core.longpaths */
|
|
54
55
|
GIT_CONFIGMAP_CACHE_MAX
|
|
55
56
|
} git_configmap_item;
|
|
56
57
|
|
|
@@ -116,6 +117,8 @@ typedef enum {
|
|
|
116
117
|
GIT_PROTECTNTFS_DEFAULT = GIT_CONFIGMAP_TRUE,
|
|
117
118
|
/* core.fsyncObjectFiles */
|
|
118
119
|
GIT_FSYNCOBJECTFILES_DEFAULT = GIT_CONFIGMAP_FALSE,
|
|
120
|
+
/* core.longpaths */
|
|
121
|
+
GIT_LONGPATHS_DEFAULT = GIT_CONFIGMAP_FALSE,
|
|
119
122
|
} git_configmap_value;
|
|
120
123
|
|
|
121
124
|
/* internal repository init flags */
|
|
@@ -152,9 +155,9 @@ struct git_repository {
|
|
|
152
155
|
|
|
153
156
|
unsigned int lru_counter;
|
|
154
157
|
|
|
155
|
-
|
|
158
|
+
git_atomic32 attr_session_key;
|
|
156
159
|
|
|
157
|
-
|
|
160
|
+
intptr_t configmap_cache[GIT_CONFIGMAP_CACHE_MAX];
|
|
158
161
|
git_strmap *submodule_cache;
|
|
159
162
|
};
|
|
160
163
|
|
|
@@ -166,34 +169,11 @@ GIT_INLINE(git_attr_cache *) git_repository_attr_cache(git_repository *repo)
|
|
|
166
169
|
int git_repository_head_tree(git_tree **tree, git_repository *repo);
|
|
167
170
|
int git_repository_create_head(const char *git_dir, const char *ref_name);
|
|
168
171
|
|
|
169
|
-
|
|
170
|
-
* Called for each HEAD.
|
|
171
|
-
*
|
|
172
|
-
* Can return either 0, causing the iteration over HEADs to
|
|
173
|
-
* continue, or a non-0 value causing the iteration to abort. The
|
|
174
|
-
* return value is passed back to the caller of
|
|
175
|
-
* `git_repository_foreach_head`
|
|
176
|
-
*/
|
|
177
|
-
typedef int (*git_repository_foreach_head_cb)(git_repository *repo, const char *path, void *payload);
|
|
172
|
+
typedef int (*git_repository_foreach_worktree_cb)(git_repository *, void *);
|
|
178
173
|
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
/* Skip enumeration of worktree HEADs */
|
|
183
|
-
GIT_REPOSITORY_FOREACH_HEAD_SKIP_WORKTREES = (1u << 1),
|
|
184
|
-
};
|
|
185
|
-
|
|
186
|
-
/*
|
|
187
|
-
* Iterate over repository and all worktree HEADs.
|
|
188
|
-
*
|
|
189
|
-
* This function will be called for the repository HEAD and for
|
|
190
|
-
* all HEADS of linked worktrees. For each HEAD, the callback is
|
|
191
|
-
* executed with the given payload. The return value equals the
|
|
192
|
-
* return value of the last executed callback function.
|
|
193
|
-
*/
|
|
194
|
-
int git_repository_foreach_head(git_repository *repo,
|
|
195
|
-
git_repository_foreach_head_cb cb,
|
|
196
|
-
int flags, void *payload);
|
|
174
|
+
int git_repository_foreach_worktree(git_repository *repo,
|
|
175
|
+
git_repository_foreach_worktree_cb cb,
|
|
176
|
+
void *payload);
|
|
197
177
|
|
|
198
178
|
/*
|
|
199
179
|
* Weak pointers to repository internals.
|
|
@@ -255,4 +235,18 @@ extern size_t git_repository__reserved_names_posix_len;
|
|
|
255
235
|
bool git_repository__reserved_names(
|
|
256
236
|
git_buf **out, size_t *outlen, git_repository *repo, bool include_ntfs);
|
|
257
237
|
|
|
238
|
+
/*
|
|
239
|
+
* The default branch for the repository; the `init.defaultBranch`
|
|
240
|
+
* configuration option, if set, or `master` if it is not.
|
|
241
|
+
*/
|
|
242
|
+
int git_repository_initialbranch(git_buf *out, git_repository *repo);
|
|
243
|
+
|
|
244
|
+
/*
|
|
245
|
+
* Given a relative `path`, this makes it absolute based on the
|
|
246
|
+
* repository's working directory. This will perform validation
|
|
247
|
+
* to ensure that the path is not longer than MAX_PATH on Windows
|
|
248
|
+
* (unless `core.longpaths` is set in the repo config).
|
|
249
|
+
*/
|
|
250
|
+
int git_repository_workdir_path(git_buf *out, git_repository *repo, const char *path);
|
|
251
|
+
|
|
258
252
|
#endif
|
data/vendor/libgit2/src/reset.c
CHANGED
|
@@ -33,7 +33,7 @@ int git_reset_default(
|
|
|
33
33
|
int error;
|
|
34
34
|
git_index *index = NULL;
|
|
35
35
|
|
|
36
|
-
|
|
36
|
+
GIT_ASSERT_ARG(pathspecs && pathspecs->count > 0);
|
|
37
37
|
|
|
38
38
|
memset(&entry, 0, sizeof(git_index_entry));
|
|
39
39
|
|
|
@@ -62,10 +62,10 @@ int git_reset_default(
|
|
|
62
62
|
for (i = 0, max_i = git_diff_num_deltas(diff); i < max_i; ++i) {
|
|
63
63
|
const git_diff_delta *delta = git_diff_get_delta(diff, i);
|
|
64
64
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
65
|
+
GIT_ASSERT(delta->status == GIT_DELTA_ADDED ||
|
|
66
|
+
delta->status == GIT_DELTA_MODIFIED ||
|
|
67
|
+
delta->status == GIT_DELTA_CONFLICTED ||
|
|
68
|
+
delta->status == GIT_DELTA_DELETED);
|
|
69
69
|
|
|
70
70
|
error = git_index_conflict_remove(index, delta->old_file.path);
|
|
71
71
|
if (error < 0) {
|
|
@@ -113,7 +113,8 @@ static int reset(
|
|
|
113
113
|
git_checkout_options opts = GIT_CHECKOUT_OPTIONS_INIT;
|
|
114
114
|
git_buf log_message = GIT_BUF_INIT;
|
|
115
115
|
|
|
116
|
-
|
|
116
|
+
GIT_ASSERT_ARG(repo);
|
|
117
|
+
GIT_ASSERT_ARG(target);
|
|
117
118
|
|
|
118
119
|
if (checkout_opts)
|
|
119
120
|
opts = *checkout_opts;
|
data/vendor/libgit2/src/revert.c
CHANGED
|
@@ -129,7 +129,10 @@ int git_revert_commit(
|
|
|
129
129
|
git_tree *parent_tree = NULL, *our_tree = NULL, *revert_tree = NULL;
|
|
130
130
|
int parent = 0, error = 0;
|
|
131
131
|
|
|
132
|
-
|
|
132
|
+
GIT_ASSERT_ARG(out);
|
|
133
|
+
GIT_ASSERT_ARG(repo);
|
|
134
|
+
GIT_ASSERT_ARG(revert_commit);
|
|
135
|
+
GIT_ASSERT_ARG(our_commit);
|
|
133
136
|
|
|
134
137
|
if (git_commit_parentcount(revert_commit) > 1) {
|
|
135
138
|
if (!mainline)
|
|
@@ -180,7 +183,8 @@ int git_revert(
|
|
|
180
183
|
git_indexwriter indexwriter = GIT_INDEXWRITER_INIT;
|
|
181
184
|
int error;
|
|
182
185
|
|
|
183
|
-
|
|
186
|
+
GIT_ASSERT_ARG(repo);
|
|
187
|
+
GIT_ASSERT_ARG(commit);
|
|
184
188
|
|
|
185
189
|
GIT_ERROR_CHECK_VERSION(given_opts, GIT_REVERT_OPTIONS_VERSION, "git_revert_options");
|
|
186
190
|
|
|
@@ -231,7 +235,9 @@ int git_revert_options_init(git_revert_options *opts, unsigned int version)
|
|
|
231
235
|
return 0;
|
|
232
236
|
}
|
|
233
237
|
|
|
238
|
+
#ifndef GIT_DEPRECATE_HARD
|
|
234
239
|
int git_revert_init_options(git_revert_options *opts, unsigned int version)
|
|
235
240
|
{
|
|
236
241
|
return git_revert_options_init(opts, version);
|
|
237
242
|
}
|
|
243
|
+
#endif
|
|
@@ -317,7 +317,7 @@ static int handle_at_syntax(git_object **out, git_reference **ref, const char *s
|
|
|
317
317
|
git_buf identifier = GIT_BUF_INIT;
|
|
318
318
|
git_time_t timestamp;
|
|
319
319
|
|
|
320
|
-
|
|
320
|
+
GIT_ASSERT(*out == NULL);
|
|
321
321
|
|
|
322
322
|
if (git_buf_put(&identifier, spec, identifier_len) < 0)
|
|
323
323
|
return -1;
|
|
@@ -524,7 +524,7 @@ static int extract_curly_braces_content(git_buf *buf, const char *spec, size_t *
|
|
|
524
524
|
{
|
|
525
525
|
git_buf_clear(buf);
|
|
526
526
|
|
|
527
|
-
|
|
527
|
+
GIT_ASSERT_ARG(spec[*pos] == '^' || spec[*pos] == '@');
|
|
528
528
|
|
|
529
529
|
(*pos)++;
|
|
530
530
|
|
|
@@ -537,7 +537,8 @@ static int extract_curly_braces_content(git_buf *buf, const char *spec, size_t *
|
|
|
537
537
|
if (spec[*pos] == '\0')
|
|
538
538
|
return GIT_EINVALIDSPEC;
|
|
539
539
|
|
|
540
|
-
git_buf_putc(buf, spec[(*pos)++])
|
|
540
|
+
if (git_buf_putc(buf, spec[(*pos)++]) < 0)
|
|
541
|
+
return -1;
|
|
541
542
|
}
|
|
542
543
|
|
|
543
544
|
(*pos)++;
|
|
@@ -549,7 +550,7 @@ static int extract_path(git_buf *buf, const char *spec, size_t *pos)
|
|
|
549
550
|
{
|
|
550
551
|
git_buf_clear(buf);
|
|
551
552
|
|
|
552
|
-
|
|
553
|
+
GIT_ASSERT_ARG(spec[*pos] == ':');
|
|
553
554
|
|
|
554
555
|
(*pos)++;
|
|
555
556
|
|
|
@@ -567,7 +568,7 @@ static int extract_how_many(int *n, const char *spec, size_t *pos)
|
|
|
567
568
|
int parsed, accumulated;
|
|
568
569
|
char kind = spec[*pos];
|
|
569
570
|
|
|
570
|
-
|
|
571
|
+
GIT_ASSERT_ARG(spec[*pos] == '^' || spec[*pos] == '~');
|
|
571
572
|
|
|
572
573
|
accumulated = 0;
|
|
573
574
|
|
|
@@ -585,7 +586,7 @@ static int extract_how_many(int *n, const char *spec, size_t *pos)
|
|
|
585
586
|
*pos = end_ptr - spec;
|
|
586
587
|
}
|
|
587
588
|
|
|
588
|
-
}
|
|
589
|
+
} while (spec[(*pos)] == kind && kind == '~');
|
|
589
590
|
|
|
590
591
|
*n = accumulated;
|
|
591
592
|
|
|
@@ -659,7 +660,7 @@ static int ensure_left_hand_identifier_is_not_known_yet(git_object *object, git_
|
|
|
659
660
|
return GIT_EINVALIDSPEC;
|
|
660
661
|
}
|
|
661
662
|
|
|
662
|
-
int
|
|
663
|
+
static int revparse(
|
|
663
664
|
git_object **object_out,
|
|
664
665
|
git_reference **reference_out,
|
|
665
666
|
size_t *identifier_len_out,
|
|
@@ -675,7 +676,10 @@ int revparse__ext(
|
|
|
675
676
|
|
|
676
677
|
bool should_return_reference = true;
|
|
677
678
|
|
|
678
|
-
|
|
679
|
+
GIT_ASSERT_ARG(object_out);
|
|
680
|
+
GIT_ASSERT_ARG(reference_out);
|
|
681
|
+
GIT_ASSERT_ARG(repo);
|
|
682
|
+
GIT_ASSERT_ARG(spec);
|
|
679
683
|
|
|
680
684
|
*object_out = NULL;
|
|
681
685
|
*reference_out = NULL;
|
|
@@ -835,7 +839,7 @@ int git_revparse_ext(
|
|
|
835
839
|
git_object *obj = NULL;
|
|
836
840
|
git_reference *ref = NULL;
|
|
837
841
|
|
|
838
|
-
if ((error =
|
|
842
|
+
if ((error = revparse(&obj, &ref, &identifier_len, repo, spec)) < 0)
|
|
839
843
|
goto cleanup;
|
|
840
844
|
|
|
841
845
|
*object_out = obj;
|
|
@@ -881,14 +885,16 @@ int git_revparse(
|
|
|
881
885
|
const char *dotdot;
|
|
882
886
|
int error = 0;
|
|
883
887
|
|
|
884
|
-
|
|
888
|
+
GIT_ASSERT_ARG(revspec);
|
|
889
|
+
GIT_ASSERT_ARG(repo);
|
|
890
|
+
GIT_ASSERT_ARG(spec);
|
|
885
891
|
|
|
886
892
|
memset(revspec, 0x0, sizeof(*revspec));
|
|
887
893
|
|
|
888
894
|
if ((dotdot = strstr(spec, "..")) != NULL) {
|
|
889
895
|
char *lstr;
|
|
890
896
|
const char *rstr;
|
|
891
|
-
revspec->flags =
|
|
897
|
+
revspec->flags = GIT_REVSPEC_RANGE;
|
|
892
898
|
|
|
893
899
|
/*
|
|
894
900
|
* Following git.git, don't allow '..' because it makes command line
|
|
@@ -904,7 +910,7 @@ int git_revparse(
|
|
|
904
910
|
lstr = git__substrdup(spec, dotdot - spec);
|
|
905
911
|
rstr = dotdot + 2;
|
|
906
912
|
if (dotdot[2] == '.') {
|
|
907
|
-
revspec->flags |=
|
|
913
|
+
revspec->flags |= GIT_REVSPEC_MERGE_BASE;
|
|
908
914
|
rstr++;
|
|
909
915
|
}
|
|
910
916
|
|
|
@@ -922,7 +928,7 @@ int git_revparse(
|
|
|
922
928
|
|
|
923
929
|
git__free((void*)lstr);
|
|
924
930
|
} else {
|
|
925
|
-
revspec->flags =
|
|
931
|
+
revspec->flags = GIT_REVSPEC_SINGLE;
|
|
926
932
|
error = git_revparse_single(&revspec->from, repo, spec);
|
|
927
933
|
}
|
|
928
934
|
|
|
@@ -99,7 +99,8 @@ int git_revwalk_push(git_revwalk *walk, const git_oid *oid)
|
|
|
99
99
|
{
|
|
100
100
|
git_revwalk__push_options opts = GIT_REVWALK__PUSH_OPTIONS_INIT;
|
|
101
101
|
|
|
102
|
-
|
|
102
|
+
GIT_ASSERT_ARG(walk);
|
|
103
|
+
GIT_ASSERT_ARG(oid);
|
|
103
104
|
|
|
104
105
|
return git_revwalk__push_commit(walk, oid, &opts);
|
|
105
106
|
}
|
|
@@ -108,7 +109,9 @@ int git_revwalk_push(git_revwalk *walk, const git_oid *oid)
|
|
|
108
109
|
int git_revwalk_hide(git_revwalk *walk, const git_oid *oid)
|
|
109
110
|
{
|
|
110
111
|
git_revwalk__push_options opts = GIT_REVWALK__PUSH_OPTIONS_INIT;
|
|
111
|
-
|
|
112
|
+
|
|
113
|
+
GIT_ASSERT_ARG(walk);
|
|
114
|
+
GIT_ASSERT_ARG(oid);
|
|
112
115
|
|
|
113
116
|
opts.uninteresting = 1;
|
|
114
117
|
return git_revwalk__push_commit(walk, oid, &opts);
|
|
@@ -133,7 +136,8 @@ int git_revwalk__push_glob(git_revwalk *walk, const char *glob, const git_revwal
|
|
|
133
136
|
git_reference_iterator *iter;
|
|
134
137
|
size_t wildcard;
|
|
135
138
|
|
|
136
|
-
|
|
139
|
+
GIT_ASSERT_ARG(walk);
|
|
140
|
+
GIT_ASSERT_ARG(glob);
|
|
137
141
|
|
|
138
142
|
if (given_opts)
|
|
139
143
|
memcpy(&opts, given_opts, sizeof(opts));
|
|
@@ -172,7 +176,9 @@ out:
|
|
|
172
176
|
int git_revwalk_push_glob(git_revwalk *walk, const char *glob)
|
|
173
177
|
{
|
|
174
178
|
git_revwalk__push_options opts = GIT_REVWALK__PUSH_OPTIONS_INIT;
|
|
175
|
-
|
|
179
|
+
|
|
180
|
+
GIT_ASSERT_ARG(walk);
|
|
181
|
+
GIT_ASSERT_ARG(glob);
|
|
176
182
|
|
|
177
183
|
return git_revwalk__push_glob(walk, glob, &opts);
|
|
178
184
|
}
|
|
@@ -180,7 +186,9 @@ int git_revwalk_push_glob(git_revwalk *walk, const char *glob)
|
|
|
180
186
|
int git_revwalk_hide_glob(git_revwalk *walk, const char *glob)
|
|
181
187
|
{
|
|
182
188
|
git_revwalk__push_options opts = GIT_REVWALK__PUSH_OPTIONS_INIT;
|
|
183
|
-
|
|
189
|
+
|
|
190
|
+
GIT_ASSERT_ARG(walk);
|
|
191
|
+
GIT_ASSERT_ARG(glob);
|
|
184
192
|
|
|
185
193
|
opts.uninteresting = 1;
|
|
186
194
|
return git_revwalk__push_glob(walk, glob, &opts);
|
|
@@ -189,7 +197,8 @@ int git_revwalk_hide_glob(git_revwalk *walk, const char *glob)
|
|
|
189
197
|
int git_revwalk_push_head(git_revwalk *walk)
|
|
190
198
|
{
|
|
191
199
|
git_revwalk__push_options opts = GIT_REVWALK__PUSH_OPTIONS_INIT;
|
|
192
|
-
|
|
200
|
+
|
|
201
|
+
GIT_ASSERT_ARG(walk);
|
|
193
202
|
|
|
194
203
|
return git_revwalk__push_ref(walk, GIT_HEAD_FILE, &opts);
|
|
195
204
|
}
|
|
@@ -197,7 +206,8 @@ int git_revwalk_push_head(git_revwalk *walk)
|
|
|
197
206
|
int git_revwalk_hide_head(git_revwalk *walk)
|
|
198
207
|
{
|
|
199
208
|
git_revwalk__push_options opts = GIT_REVWALK__PUSH_OPTIONS_INIT;
|
|
200
|
-
|
|
209
|
+
|
|
210
|
+
GIT_ASSERT_ARG(walk);
|
|
201
211
|
|
|
202
212
|
opts.uninteresting = 1;
|
|
203
213
|
return git_revwalk__push_ref(walk, GIT_HEAD_FILE, &opts);
|
|
@@ -206,7 +216,9 @@ int git_revwalk_hide_head(git_revwalk *walk)
|
|
|
206
216
|
int git_revwalk_push_ref(git_revwalk *walk, const char *refname)
|
|
207
217
|
{
|
|
208
218
|
git_revwalk__push_options opts = GIT_REVWALK__PUSH_OPTIONS_INIT;
|
|
209
|
-
|
|
219
|
+
|
|
220
|
+
GIT_ASSERT_ARG(walk);
|
|
221
|
+
GIT_ASSERT_ARG(refname);
|
|
210
222
|
|
|
211
223
|
return git_revwalk__push_ref(walk, refname, &opts);
|
|
212
224
|
}
|
|
@@ -226,7 +238,7 @@ int git_revwalk_push_range(git_revwalk *walk, const char *range)
|
|
|
226
238
|
goto out;
|
|
227
239
|
}
|
|
228
240
|
|
|
229
|
-
if (revspec.flags &
|
|
241
|
+
if (revspec.flags & GIT_REVSPEC_MERGE_BASE) {
|
|
230
242
|
/* TODO: support "<commit>...<commit>" */
|
|
231
243
|
git_error_set(GIT_ERROR_INVALID, "symmetric differences not implemented in revwalk");
|
|
232
244
|
error = GIT_EINVALIDSPEC;
|
|
@@ -249,7 +261,10 @@ out:
|
|
|
249
261
|
int git_revwalk_hide_ref(git_revwalk *walk, const char *refname)
|
|
250
262
|
{
|
|
251
263
|
git_revwalk__push_options opts = GIT_REVWALK__PUSH_OPTIONS_INIT;
|
|
252
|
-
|
|
264
|
+
|
|
265
|
+
GIT_ASSERT_ARG(walk);
|
|
266
|
+
GIT_ASSERT_ARG(refname);
|
|
267
|
+
|
|
253
268
|
opts.uninteresting = 1;
|
|
254
269
|
return git_revwalk__push_ref(walk, refname, &opts);
|
|
255
270
|
}
|
|
@@ -659,13 +674,11 @@ int git_revwalk_new(git_revwalk **revwalk_out, git_repository *repo)
|
|
|
659
674
|
git_revwalk *walk = git__calloc(1, sizeof(git_revwalk));
|
|
660
675
|
GIT_ERROR_CHECK_ALLOC(walk);
|
|
661
676
|
|
|
662
|
-
if (git_oidmap_new(&walk->commits) < 0
|
|
677
|
+
if (git_oidmap_new(&walk->commits) < 0 ||
|
|
678
|
+
git_pqueue_init(&walk->iterator_time, 0, 8, git_commit_list_time_cmp) < 0 ||
|
|
679
|
+
git_pool_init(&walk->commit_pool, COMMIT_ALLOC) < 0)
|
|
663
680
|
return -1;
|
|
664
681
|
|
|
665
|
-
if (git_pqueue_init(&walk->iterator_time, 0, 8, git_commit_list_time_cmp) < 0)
|
|
666
|
-
return -1;
|
|
667
|
-
|
|
668
|
-
git_pool_init(&walk->commit_pool, COMMIT_ALLOC);
|
|
669
682
|
walk->get_next = &revwalk_next_unsorted;
|
|
670
683
|
walk->enqueue = &revwalk_enqueue_unsorted;
|
|
671
684
|
|
|
@@ -696,13 +709,14 @@ void git_revwalk_free(git_revwalk *walk)
|
|
|
696
709
|
|
|
697
710
|
git_repository *git_revwalk_repository(git_revwalk *walk)
|
|
698
711
|
{
|
|
699
|
-
|
|
712
|
+
GIT_ASSERT_ARG_WITH_RETVAL(walk, NULL);
|
|
713
|
+
|
|
700
714
|
return walk->repo;
|
|
701
715
|
}
|
|
702
716
|
|
|
703
717
|
int git_revwalk_sorting(git_revwalk *walk, unsigned int sort_mode)
|
|
704
718
|
{
|
|
705
|
-
|
|
719
|
+
GIT_ASSERT_ARG(walk);
|
|
706
720
|
|
|
707
721
|
if (walk->walking)
|
|
708
722
|
git_revwalk_reset(walk);
|
|
@@ -734,7 +748,8 @@ int git_revwalk_next(git_oid *oid, git_revwalk *walk)
|
|
|
734
748
|
int error;
|
|
735
749
|
git_commit_list_node *next;
|
|
736
750
|
|
|
737
|
-
|
|
751
|
+
GIT_ASSERT_ARG(walk);
|
|
752
|
+
GIT_ASSERT_ARG(oid);
|
|
738
753
|
|
|
739
754
|
if (!walk->walking) {
|
|
740
755
|
if ((error = prepare_walk(walk)) < 0)
|
|
@@ -759,7 +774,7 @@ int git_revwalk_reset(git_revwalk *walk)
|
|
|
759
774
|
{
|
|
760
775
|
git_commit_list_node *commit;
|
|
761
776
|
|
|
762
|
-
|
|
777
|
+
GIT_ASSERT_ARG(walk);
|
|
763
778
|
|
|
764
779
|
git_oidmap_foreach_value(walk->commits, commit, {
|
|
765
780
|
commit->seen = 0;
|
|
@@ -789,7 +804,7 @@ int git_revwalk_add_hide_cb(
|
|
|
789
804
|
git_revwalk_hide_cb hide_cb,
|
|
790
805
|
void *payload)
|
|
791
806
|
{
|
|
792
|
-
|
|
807
|
+
GIT_ASSERT_ARG(walk);
|
|
793
808
|
|
|
794
809
|
if (walk->walking)
|
|
795
810
|
git_revwalk_reset(walk);
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (C) the libgit2 contributors. All rights reserved.
|
|
3
|
+
*
|
|
4
|
+
* This file is part of libgit2, distributed under the GNU GPL v2 with
|
|
5
|
+
* a Linking Exception. For full terms see the included COPYING file.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
#include "common.h"
|
|
9
|
+
#include "runtime.h"
|
|
10
|
+
|
|
11
|
+
static git_runtime_shutdown_fn shutdown_callback[32];
|
|
12
|
+
static git_atomic32 shutdown_callback_count;
|
|
13
|
+
|
|
14
|
+
static git_atomic32 init_count;
|
|
15
|
+
|
|
16
|
+
static int init_common(git_runtime_init_fn init_fns[], size_t cnt)
|
|
17
|
+
{
|
|
18
|
+
size_t i;
|
|
19
|
+
int ret;
|
|
20
|
+
|
|
21
|
+
/* Initialize subsystems that have global state */
|
|
22
|
+
for (i = 0; i < cnt; i++) {
|
|
23
|
+
if ((ret = init_fns[i]()) != 0)
|
|
24
|
+
break;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
GIT_MEMORY_BARRIER;
|
|
28
|
+
|
|
29
|
+
return ret;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
static void shutdown_common(void)
|
|
33
|
+
{
|
|
34
|
+
git_runtime_shutdown_fn cb;
|
|
35
|
+
int pos;
|
|
36
|
+
|
|
37
|
+
for (pos = git_atomic32_get(&shutdown_callback_count);
|
|
38
|
+
pos > 0;
|
|
39
|
+
pos = git_atomic32_dec(&shutdown_callback_count)) {
|
|
40
|
+
cb = git_atomic_swap(shutdown_callback[pos - 1], NULL);
|
|
41
|
+
|
|
42
|
+
if (cb != NULL)
|
|
43
|
+
cb();
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
int git_runtime_shutdown_register(git_runtime_shutdown_fn callback)
|
|
48
|
+
{
|
|
49
|
+
int count = git_atomic32_inc(&shutdown_callback_count);
|
|
50
|
+
|
|
51
|
+
if (count > (int)ARRAY_SIZE(shutdown_callback) || count == 0) {
|
|
52
|
+
git_error_set(GIT_ERROR_INVALID,
|
|
53
|
+
"too many shutdown callbacks registered");
|
|
54
|
+
git_atomic32_dec(&shutdown_callback_count);
|
|
55
|
+
return -1;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
shutdown_callback[count - 1] = callback;
|
|
59
|
+
|
|
60
|
+
return 0;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
#if defined(GIT_THREADS) && defined(GIT_WIN32)
|
|
64
|
+
|
|
65
|
+
/*
|
|
66
|
+
* On Win32, we use a spinlock to provide locking semantics. This is
|
|
67
|
+
* lighter-weight than a proper critical section.
|
|
68
|
+
*/
|
|
69
|
+
static volatile LONG init_spinlock = 0;
|
|
70
|
+
|
|
71
|
+
GIT_INLINE(int) init_lock(void)
|
|
72
|
+
{
|
|
73
|
+
while (InterlockedCompareExchange(&init_spinlock, 1, 0)) { Sleep(0); }
|
|
74
|
+
return 0;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
GIT_INLINE(int) init_unlock(void)
|
|
78
|
+
{
|
|
79
|
+
InterlockedExchange(&init_spinlock, 0);
|
|
80
|
+
return 0;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
#elif defined(GIT_THREADS) && defined(_POSIX_THREADS)
|
|
84
|
+
|
|
85
|
+
/*
|
|
86
|
+
* On POSIX, we need to use a proper mutex for locking. We might prefer
|
|
87
|
+
* a spinlock here, too, but there's no static initializer for a
|
|
88
|
+
* pthread_spinlock_t.
|
|
89
|
+
*/
|
|
90
|
+
static pthread_mutex_t init_mutex = PTHREAD_MUTEX_INITIALIZER;
|
|
91
|
+
|
|
92
|
+
GIT_INLINE(int) init_lock(void)
|
|
93
|
+
{
|
|
94
|
+
return pthread_mutex_lock(&init_mutex) == 0 ? 0 : -1;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
GIT_INLINE(int) init_unlock(void)
|
|
98
|
+
{
|
|
99
|
+
return pthread_mutex_unlock(&init_mutex) == 0 ? 0 : -1;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
#elif defined(GIT_THREADS)
|
|
103
|
+
# error unknown threading model
|
|
104
|
+
#else
|
|
105
|
+
|
|
106
|
+
# define init_lock() git__noop()
|
|
107
|
+
# define init_unlock() git__noop()
|
|
108
|
+
|
|
109
|
+
#endif
|
|
110
|
+
|
|
111
|
+
int git_runtime_init(git_runtime_init_fn init_fns[], size_t cnt)
|
|
112
|
+
{
|
|
113
|
+
int ret;
|
|
114
|
+
|
|
115
|
+
if (init_lock() < 0)
|
|
116
|
+
return -1;
|
|
117
|
+
|
|
118
|
+
/* Only do work on a 0 -> 1 transition of the refcount */
|
|
119
|
+
if ((ret = git_atomic32_inc(&init_count)) == 1) {
|
|
120
|
+
if (init_common(init_fns, cnt) < 0)
|
|
121
|
+
ret = -1;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
if (init_unlock() < 0)
|
|
125
|
+
return -1;
|
|
126
|
+
|
|
127
|
+
return ret;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
int git_runtime_init_count(void)
|
|
131
|
+
{
|
|
132
|
+
int ret;
|
|
133
|
+
|
|
134
|
+
if (init_lock() < 0)
|
|
135
|
+
return -1;
|
|
136
|
+
|
|
137
|
+
ret = git_atomic32_get(&init_count);
|
|
138
|
+
|
|
139
|
+
if (init_unlock() < 0)
|
|
140
|
+
return -1;
|
|
141
|
+
|
|
142
|
+
return ret;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
int git_runtime_shutdown(void)
|
|
146
|
+
{
|
|
147
|
+
int ret;
|
|
148
|
+
|
|
149
|
+
/* Enter the lock */
|
|
150
|
+
if (init_lock() < 0)
|
|
151
|
+
return -1;
|
|
152
|
+
|
|
153
|
+
/* Only do work on a 1 -> 0 transition of the refcount */
|
|
154
|
+
if ((ret = git_atomic32_dec(&init_count)) == 0)
|
|
155
|
+
shutdown_common();
|
|
156
|
+
|
|
157
|
+
/* Exit the lock */
|
|
158
|
+
if (init_unlock() < 0)
|
|
159
|
+
return -1;
|
|
160
|
+
|
|
161
|
+
return ret;
|
|
162
|
+
}
|