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
|
@@ -101,12 +101,6 @@ struct git_submodule {
|
|
|
101
101
|
git_oid wd_oid;
|
|
102
102
|
};
|
|
103
103
|
|
|
104
|
-
/* Force revalidation of submodule data cache (alloc as needed) */
|
|
105
|
-
extern int git_submodule_cache_refresh(git_repository *repo);
|
|
106
|
-
|
|
107
|
-
/* Release all submodules */
|
|
108
|
-
extern void git_submodule_cache_free(git_repository *repo);
|
|
109
|
-
|
|
110
104
|
/* Additional flags on top of public GIT_SUBMODULE_STATUS values */
|
|
111
105
|
enum {
|
|
112
106
|
GIT_SUBMODULE_STATUS__WD_SCANNED = (1u << 20),
|
|
@@ -122,9 +116,15 @@ enum {
|
|
|
122
116
|
#define GIT_SUBMODULE_STATUS__CLEAR_INTERNAL(S) \
|
|
123
117
|
((S) & ~(0xFFFFFFFFu << 20))
|
|
124
118
|
|
|
125
|
-
/*
|
|
126
|
-
extern int
|
|
127
|
-
|
|
119
|
+
/* Initialize an external submodule cache for the provided repo. */
|
|
120
|
+
extern int git_submodule_cache_init(git_strmap **out, git_repository *repo);
|
|
121
|
+
|
|
122
|
+
/* Release the resources of the submodule cache. */
|
|
123
|
+
extern int git_submodule_cache_free(git_strmap *cache);
|
|
124
|
+
|
|
125
|
+
/* Submodule lookup with an explicit cache */
|
|
126
|
+
extern int git_submodule__lookup_with_cache(
|
|
127
|
+
git_submodule **out, git_repository *repo, const char *path, git_strmap *cache);
|
|
128
128
|
|
|
129
129
|
/* Internal status fn returns status and optionally the various OIDs */
|
|
130
130
|
extern int git_submodule__status(
|
data/vendor/libgit2/src/sysdir.c
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
|
|
8
8
|
#include "sysdir.h"
|
|
9
9
|
|
|
10
|
-
#include "
|
|
10
|
+
#include "runtime.h"
|
|
11
11
|
#include "buffer.h"
|
|
12
12
|
#include "path.h"
|
|
13
13
|
#include <ctype.h>
|
|
@@ -45,7 +45,7 @@ static int get_passwd_home(git_buf *out, uid_t uid)
|
|
|
45
45
|
long buflen;
|
|
46
46
|
int error;
|
|
47
47
|
|
|
48
|
-
|
|
48
|
+
GIT_ASSERT_ARG(out);
|
|
49
49
|
|
|
50
50
|
if ((buflen = sysconf(_SC_GETPW_R_SIZE_MAX)) == -1)
|
|
51
51
|
buflen = 1024;
|
|
@@ -189,9 +189,7 @@ int git_sysdir_global_init(void)
|
|
|
189
189
|
for (i = 0; !error && i < ARRAY_SIZE(git_sysdir__dirs); i++)
|
|
190
190
|
error = git_sysdir__dirs[i].guess(&git_sysdir__dirs[i].buf);
|
|
191
191
|
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
return error;
|
|
192
|
+
return git_runtime_shutdown_register(git_sysdir_global_shutdown);
|
|
195
193
|
}
|
|
196
194
|
|
|
197
195
|
static int git_sysdir_check_selector(git_sysdir_t which)
|
|
@@ -206,7 +204,7 @@ static int git_sysdir_check_selector(git_sysdir_t which)
|
|
|
206
204
|
|
|
207
205
|
int git_sysdir_get(const git_buf **out, git_sysdir_t which)
|
|
208
206
|
{
|
|
209
|
-
|
|
207
|
+
GIT_ASSERT_ARG(out);
|
|
210
208
|
|
|
211
209
|
*out = NULL;
|
|
212
210
|
|
|
@@ -216,25 +214,6 @@ int git_sysdir_get(const git_buf **out, git_sysdir_t which)
|
|
|
216
214
|
return 0;
|
|
217
215
|
}
|
|
218
216
|
|
|
219
|
-
int git_sysdir_get_str(
|
|
220
|
-
char *out,
|
|
221
|
-
size_t outlen,
|
|
222
|
-
git_sysdir_t which)
|
|
223
|
-
{
|
|
224
|
-
const git_buf *path = NULL;
|
|
225
|
-
|
|
226
|
-
GIT_ERROR_CHECK_ERROR(git_sysdir_check_selector(which));
|
|
227
|
-
GIT_ERROR_CHECK_ERROR(git_sysdir_get(&path, which));
|
|
228
|
-
|
|
229
|
-
if (!out || path->size >= outlen) {
|
|
230
|
-
git_error_set(GIT_ERROR_NOMEMORY, "buffer is too short for the path");
|
|
231
|
-
return GIT_EBUFS;
|
|
232
|
-
}
|
|
233
|
-
|
|
234
|
-
git_buf_copy_cstr(out, outlen, path);
|
|
235
|
-
return 0;
|
|
236
|
-
}
|
|
237
|
-
|
|
238
217
|
#define PATH_MAGIC "$PATH"
|
|
239
218
|
|
|
240
219
|
int git_sysdir_set(git_sysdir_t which, const char *search_path)
|
|
@@ -317,8 +296,11 @@ static int git_sysdir_find_in_dirlist(
|
|
|
317
296
|
}
|
|
318
297
|
|
|
319
298
|
done:
|
|
299
|
+
if (name)
|
|
300
|
+
git_error_set(GIT_ERROR_OS, "the %s file '%s' doesn't exist", label, name);
|
|
301
|
+
else
|
|
302
|
+
git_error_set(GIT_ERROR_OS, "the %s directory doesn't exist", label);
|
|
320
303
|
git_buf_dispose(path);
|
|
321
|
-
git_error_set(GIT_ERROR_OS, "the %s file '%s' doesn't exist", label, name);
|
|
322
304
|
return GIT_ENOTFOUND;
|
|
323
305
|
}
|
|
324
306
|
|
data/vendor/libgit2/src/sysdir.h
CHANGED
|
@@ -93,17 +93,6 @@ extern int git_sysdir_global_init(void);
|
|
|
93
93
|
*/
|
|
94
94
|
extern int git_sysdir_get(const git_buf **out, git_sysdir_t which);
|
|
95
95
|
|
|
96
|
-
/**
|
|
97
|
-
* Get search path into a preallocated buffer
|
|
98
|
-
*
|
|
99
|
-
* @param out String buffer to write into
|
|
100
|
-
* @param outlen Size of string buffer
|
|
101
|
-
* @param which Which search path to return
|
|
102
|
-
* @return 0 on success, GIT_EBUFS if out is too small, <0 on other failure
|
|
103
|
-
*/
|
|
104
|
-
|
|
105
|
-
extern int git_sysdir_get_str(char *out, size_t outlen, git_sysdir_t which);
|
|
106
|
-
|
|
107
96
|
/**
|
|
108
97
|
* Set search paths for global/system/xdg files
|
|
109
98
|
*
|
data/vendor/libgit2/src/tag.c
CHANGED
|
@@ -27,25 +27,25 @@ void git_tag__free(void *_tag)
|
|
|
27
27
|
|
|
28
28
|
int git_tag_target(git_object **target, const git_tag *t)
|
|
29
29
|
{
|
|
30
|
-
|
|
30
|
+
GIT_ASSERT_ARG(t);
|
|
31
31
|
return git_object_lookup(target, t->object.repo, &t->target, t->type);
|
|
32
32
|
}
|
|
33
33
|
|
|
34
34
|
const git_oid *git_tag_target_id(const git_tag *t)
|
|
35
35
|
{
|
|
36
|
-
|
|
36
|
+
GIT_ASSERT_ARG_WITH_RETVAL(t, NULL);
|
|
37
37
|
return &t->target;
|
|
38
38
|
}
|
|
39
39
|
|
|
40
40
|
git_object_t git_tag_target_type(const git_tag *t)
|
|
41
41
|
{
|
|
42
|
-
|
|
42
|
+
GIT_ASSERT_ARG_WITH_RETVAL(t, GIT_OBJECT_INVALID);
|
|
43
43
|
return t->type;
|
|
44
44
|
}
|
|
45
45
|
|
|
46
46
|
const char *git_tag_name(const git_tag *t)
|
|
47
47
|
{
|
|
48
|
-
|
|
48
|
+
GIT_ASSERT_ARG_WITH_RETVAL(t, NULL);
|
|
49
49
|
return t->tag_name;
|
|
50
50
|
}
|
|
51
51
|
|
|
@@ -56,7 +56,7 @@ const git_signature *git_tag_tagger(const git_tag *t)
|
|
|
56
56
|
|
|
57
57
|
const char *git_tag_message(const git_tag *t)
|
|
58
58
|
{
|
|
59
|
-
|
|
59
|
+
GIT_ASSERT_ARG_WITH_RETVAL(t, NULL);
|
|
60
60
|
return t->message;
|
|
61
61
|
}
|
|
62
62
|
|
|
@@ -259,8 +259,10 @@ static int git_tag_create__internal(
|
|
|
259
259
|
|
|
260
260
|
int error;
|
|
261
261
|
|
|
262
|
-
|
|
263
|
-
|
|
262
|
+
GIT_ASSERT_ARG(repo);
|
|
263
|
+
GIT_ASSERT_ARG(tag_name);
|
|
264
|
+
GIT_ASSERT_ARG(target);
|
|
265
|
+
GIT_ASSERT_ARG(!create_tag_annotation || (tagger && message));
|
|
264
266
|
|
|
265
267
|
if (git_object_owner(target) != repo) {
|
|
266
268
|
git_error_set(GIT_ERROR_INVALID, "the given target does not belong to this repository");
|
|
@@ -313,7 +315,12 @@ int git_tag_annotation_create(
|
|
|
313
315
|
const git_signature *tagger,
|
|
314
316
|
const char *message)
|
|
315
317
|
{
|
|
316
|
-
|
|
318
|
+
GIT_ASSERT_ARG(oid);
|
|
319
|
+
GIT_ASSERT_ARG(repo);
|
|
320
|
+
GIT_ASSERT_ARG(tag_name);
|
|
321
|
+
GIT_ASSERT_ARG(target);
|
|
322
|
+
GIT_ASSERT_ARG(tagger);
|
|
323
|
+
GIT_ASSERT_ARG(message);
|
|
317
324
|
|
|
318
325
|
return write_tag_annotation(oid, repo, tag_name, target, tagger, message);
|
|
319
326
|
}
|
|
@@ -339,7 +346,8 @@ int git_tag_create_from_buffer(git_oid *oid, git_repository *repo, const char *b
|
|
|
339
346
|
git_reference *new_ref = NULL;
|
|
340
347
|
git_buf ref_name = GIT_BUF_INIT;
|
|
341
348
|
|
|
342
|
-
|
|
349
|
+
GIT_ASSERT_ARG(oid);
|
|
350
|
+
GIT_ASSERT_ARG(buffer);
|
|
343
351
|
|
|
344
352
|
memset(&tag, 0, sizeof(tag));
|
|
345
353
|
|
|
@@ -454,7 +462,8 @@ int git_tag_foreach(git_repository *repo, git_tag_foreach_cb cb, void *cb_data)
|
|
|
454
462
|
{
|
|
455
463
|
tag_cb_data data;
|
|
456
464
|
|
|
457
|
-
|
|
465
|
+
GIT_ASSERT_ARG(repo);
|
|
466
|
+
GIT_ASSERT_ARG(cb);
|
|
458
467
|
|
|
459
468
|
data.cb = cb;
|
|
460
469
|
data.cb_data = cb_data;
|
|
@@ -493,7 +502,9 @@ int git_tag_list_match(git_strarray *tag_names, const char *pattern, git_reposit
|
|
|
493
502
|
tag_filter_data filter;
|
|
494
503
|
git_vector taglist;
|
|
495
504
|
|
|
496
|
-
|
|
505
|
+
GIT_ASSERT_ARG(tag_names);
|
|
506
|
+
GIT_ASSERT_ARG(repo);
|
|
507
|
+
GIT_ASSERT_ARG(pattern);
|
|
497
508
|
|
|
498
509
|
if ((error = git_vector_init(&taglist, 8, NULL)) < 0)
|
|
499
510
|
return error;
|
|
@@ -522,9 +533,36 @@ int git_tag_peel(git_object **tag_target, const git_tag *tag)
|
|
|
522
533
|
return git_object_peel(tag_target, (const git_object *)tag, GIT_OBJECT_ANY);
|
|
523
534
|
}
|
|
524
535
|
|
|
536
|
+
int git_tag_name_is_valid(int *valid, const char *name)
|
|
537
|
+
{
|
|
538
|
+
git_buf ref_name = GIT_BUF_INIT;
|
|
539
|
+
int error = 0;
|
|
540
|
+
|
|
541
|
+
GIT_ASSERT(valid);
|
|
542
|
+
|
|
543
|
+
/*
|
|
544
|
+
* Discourage tag name starting with dash,
|
|
545
|
+
* https://github.com/git/git/commit/4f0accd638b8d2
|
|
546
|
+
*/
|
|
547
|
+
if (!name || name[0] == '-')
|
|
548
|
+
goto done;
|
|
549
|
+
|
|
550
|
+
if ((error = git_buf_puts(&ref_name, GIT_REFS_TAGS_DIR)) < 0 ||
|
|
551
|
+
(error = git_buf_puts(&ref_name, name)) < 0)
|
|
552
|
+
goto done;
|
|
553
|
+
|
|
554
|
+
error = git_reference_name_is_valid(valid, ref_name.ptr);
|
|
555
|
+
|
|
556
|
+
done:
|
|
557
|
+
git_buf_dispose(&ref_name);
|
|
558
|
+
return error;
|
|
559
|
+
}
|
|
560
|
+
|
|
525
561
|
/* Deprecated Functions */
|
|
526
562
|
|
|
563
|
+
#ifndef GIT_DEPRECATE_HARD
|
|
527
564
|
int git_tag_create_frombuffer(git_oid *oid, git_repository *repo, const char *buffer, int allow_ref_overwrite)
|
|
528
565
|
{
|
|
529
566
|
return git_tag_create_from_buffer(oid, repo, buffer, allow_ref_overwrite);
|
|
530
567
|
}
|
|
568
|
+
#endif
|
|
@@ -0,0 +1,140 @@
|
|
|
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
|
+
|
|
10
|
+
#if !defined(GIT_THREADS)
|
|
11
|
+
|
|
12
|
+
#define TLSDATA_MAX 16
|
|
13
|
+
|
|
14
|
+
typedef struct {
|
|
15
|
+
void *value;
|
|
16
|
+
void (GIT_SYSTEM_CALL *destroy_fn)(void *);
|
|
17
|
+
} tlsdata_value;
|
|
18
|
+
|
|
19
|
+
static tlsdata_value tlsdata_values[TLSDATA_MAX];
|
|
20
|
+
static int tlsdata_cnt = 0;
|
|
21
|
+
|
|
22
|
+
int git_tlsdata_init(git_tlsdata_key *key, void (GIT_SYSTEM_CALL *destroy_fn)(void *))
|
|
23
|
+
{
|
|
24
|
+
if (tlsdata_cnt >= TLSDATA_MAX)
|
|
25
|
+
return -1;
|
|
26
|
+
|
|
27
|
+
tlsdata_values[tlsdata_cnt].value = NULL;
|
|
28
|
+
tlsdata_values[tlsdata_cnt].destroy_fn = destroy_fn;
|
|
29
|
+
|
|
30
|
+
*key = tlsdata_cnt;
|
|
31
|
+
tlsdata_cnt++;
|
|
32
|
+
|
|
33
|
+
return 0;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
int git_tlsdata_set(git_tlsdata_key key, void *value)
|
|
37
|
+
{
|
|
38
|
+
if (key < 0 || key > tlsdata_cnt)
|
|
39
|
+
return -1;
|
|
40
|
+
|
|
41
|
+
tlsdata_values[key].value = value;
|
|
42
|
+
return 0;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
void *git_tlsdata_get(git_tlsdata_key key)
|
|
46
|
+
{
|
|
47
|
+
if (key < 0 || key > tlsdata_cnt)
|
|
48
|
+
return NULL;
|
|
49
|
+
|
|
50
|
+
return tlsdata_values[key].value;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
int git_tlsdata_dispose(git_tlsdata_key key)
|
|
54
|
+
{
|
|
55
|
+
void *value;
|
|
56
|
+
void (*destroy_fn)(void *) = NULL;
|
|
57
|
+
|
|
58
|
+
if (key < 0 || key > tlsdata_cnt)
|
|
59
|
+
return -1;
|
|
60
|
+
|
|
61
|
+
value = tlsdata_values[key].value;
|
|
62
|
+
destroy_fn = tlsdata_values[key].destroy_fn;
|
|
63
|
+
|
|
64
|
+
tlsdata_values[key].value = NULL;
|
|
65
|
+
tlsdata_values[key].destroy_fn = NULL;
|
|
66
|
+
|
|
67
|
+
if (value && destroy_fn)
|
|
68
|
+
destroy_fn(value);
|
|
69
|
+
|
|
70
|
+
return 0;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
#elif defined(GIT_WIN32)
|
|
74
|
+
|
|
75
|
+
int git_tlsdata_init(git_tlsdata_key *key, void (GIT_SYSTEM_CALL *destroy_fn)(void *))
|
|
76
|
+
{
|
|
77
|
+
DWORD fls_index = FlsAlloc(destroy_fn);
|
|
78
|
+
|
|
79
|
+
if (fls_index == FLS_OUT_OF_INDEXES)
|
|
80
|
+
return -1;
|
|
81
|
+
|
|
82
|
+
*key = fls_index;
|
|
83
|
+
return 0;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
int git_tlsdata_set(git_tlsdata_key key, void *value)
|
|
87
|
+
{
|
|
88
|
+
if (!FlsSetValue(key, value))
|
|
89
|
+
return -1;
|
|
90
|
+
|
|
91
|
+
return 0;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
void *git_tlsdata_get(git_tlsdata_key key)
|
|
95
|
+
{
|
|
96
|
+
return FlsGetValue(key);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
int git_tlsdata_dispose(git_tlsdata_key key)
|
|
100
|
+
{
|
|
101
|
+
if (!FlsFree(key))
|
|
102
|
+
return -1;
|
|
103
|
+
|
|
104
|
+
return 0;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
#elif defined(_POSIX_THREADS)
|
|
108
|
+
|
|
109
|
+
int git_tlsdata_init(git_tlsdata_key *key, void (GIT_SYSTEM_CALL *destroy_fn)(void *))
|
|
110
|
+
{
|
|
111
|
+
if (pthread_key_create(key, destroy_fn) != 0)
|
|
112
|
+
return -1;
|
|
113
|
+
|
|
114
|
+
return 0;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
int git_tlsdata_set(git_tlsdata_key key, void *value)
|
|
118
|
+
{
|
|
119
|
+
if (pthread_setspecific(key, value) != 0)
|
|
120
|
+
return -1;
|
|
121
|
+
|
|
122
|
+
return 0;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
void *git_tlsdata_get(git_tlsdata_key key)
|
|
126
|
+
{
|
|
127
|
+
return pthread_getspecific(key);
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
int git_tlsdata_dispose(git_tlsdata_key key)
|
|
131
|
+
{
|
|
132
|
+
if (pthread_key_delete(key) != 0)
|
|
133
|
+
return -1;
|
|
134
|
+
|
|
135
|
+
return 0;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
#else
|
|
139
|
+
# error unknown threading model
|
|
140
|
+
#endif
|
|
@@ -0,0 +1,479 @@
|
|
|
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
|
+
#ifndef INCLUDE_thread_h__
|
|
8
|
+
#define INCLUDE_thread_h__
|
|
9
|
+
|
|
10
|
+
#if defined(GIT_THREADS)
|
|
11
|
+
|
|
12
|
+
#if defined(__clang__)
|
|
13
|
+
|
|
14
|
+
# if (__clang_major__ < 3 || (__clang_major__ == 3 && __clang_minor__ < 1))
|
|
15
|
+
# error Atomic primitives do not exist on this version of clang; configure libgit2 with -DTHREADSAFE=OFF
|
|
16
|
+
# else
|
|
17
|
+
# define GIT_BUILTIN_ATOMIC
|
|
18
|
+
# endif
|
|
19
|
+
|
|
20
|
+
#elif defined(__GNUC__)
|
|
21
|
+
|
|
22
|
+
# if (__GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 1))
|
|
23
|
+
# error Atomic primitives do not exist on this version of gcc; configure libgit2 with -DTHREADSAFE=OFF
|
|
24
|
+
# elif (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7))
|
|
25
|
+
# define GIT_BUILTIN_ATOMIC
|
|
26
|
+
# else
|
|
27
|
+
# define GIT_BUILTIN_SYNC
|
|
28
|
+
# endif
|
|
29
|
+
|
|
30
|
+
#endif
|
|
31
|
+
|
|
32
|
+
#endif /* GIT_THREADS */
|
|
33
|
+
|
|
34
|
+
/* Common operations even if threading has been disabled */
|
|
35
|
+
typedef struct {
|
|
36
|
+
#if defined(GIT_WIN32)
|
|
37
|
+
volatile long val;
|
|
38
|
+
#else
|
|
39
|
+
volatile int val;
|
|
40
|
+
#endif
|
|
41
|
+
} git_atomic32;
|
|
42
|
+
|
|
43
|
+
#ifdef GIT_ARCH_64
|
|
44
|
+
|
|
45
|
+
typedef struct {
|
|
46
|
+
#if defined(GIT_WIN32)
|
|
47
|
+
volatile __int64 val;
|
|
48
|
+
#else
|
|
49
|
+
volatile int64_t val;
|
|
50
|
+
#endif
|
|
51
|
+
} git_atomic64;
|
|
52
|
+
|
|
53
|
+
typedef git_atomic64 git_atomic_ssize;
|
|
54
|
+
|
|
55
|
+
#define git_atomic_ssize_set git_atomic64_set
|
|
56
|
+
#define git_atomic_ssize_add git_atomic64_add
|
|
57
|
+
#define git_atomic_ssize_get git_atomic64_get
|
|
58
|
+
|
|
59
|
+
#else
|
|
60
|
+
|
|
61
|
+
typedef git_atomic32 git_atomic_ssize;
|
|
62
|
+
|
|
63
|
+
#define git_atomic_ssize_set git_atomic32_set
|
|
64
|
+
#define git_atomic_ssize_add git_atomic32_add
|
|
65
|
+
#define git_atomic_ssize_get git_atomic32_get
|
|
66
|
+
|
|
67
|
+
#endif
|
|
68
|
+
|
|
69
|
+
#ifdef GIT_THREADS
|
|
70
|
+
|
|
71
|
+
#ifdef GIT_WIN32
|
|
72
|
+
# include "win32/thread.h"
|
|
73
|
+
#else
|
|
74
|
+
# include "unix/pthread.h"
|
|
75
|
+
#endif
|
|
76
|
+
|
|
77
|
+
/*
|
|
78
|
+
* Atomically sets the contents of *a to be val.
|
|
79
|
+
*/
|
|
80
|
+
GIT_INLINE(void) git_atomic32_set(git_atomic32 *a, int val)
|
|
81
|
+
{
|
|
82
|
+
#if defined(GIT_WIN32)
|
|
83
|
+
InterlockedExchange(&a->val, (LONG)val);
|
|
84
|
+
#elif defined(GIT_BUILTIN_ATOMIC)
|
|
85
|
+
__atomic_store_n(&a->val, val, __ATOMIC_SEQ_CST);
|
|
86
|
+
#elif defined(GIT_BUILTIN_SYNC)
|
|
87
|
+
__sync_lock_test_and_set(&a->val, val);
|
|
88
|
+
#else
|
|
89
|
+
# error "Unsupported architecture for atomic operations"
|
|
90
|
+
#endif
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/*
|
|
94
|
+
* Atomically increments the contents of *a by 1, and stores the result back into *a.
|
|
95
|
+
* @return the result of the operation.
|
|
96
|
+
*/
|
|
97
|
+
GIT_INLINE(int) git_atomic32_inc(git_atomic32 *a)
|
|
98
|
+
{
|
|
99
|
+
#if defined(GIT_WIN32)
|
|
100
|
+
return InterlockedIncrement(&a->val);
|
|
101
|
+
#elif defined(GIT_BUILTIN_ATOMIC)
|
|
102
|
+
return __atomic_add_fetch(&a->val, 1, __ATOMIC_SEQ_CST);
|
|
103
|
+
#elif defined(GIT_BUILTIN_SYNC)
|
|
104
|
+
return __sync_add_and_fetch(&a->val, 1);
|
|
105
|
+
#else
|
|
106
|
+
# error "Unsupported architecture for atomic operations"
|
|
107
|
+
#endif
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
/*
|
|
111
|
+
* Atomically adds the contents of *a and addend, and stores the result back into *a.
|
|
112
|
+
* @return the result of the operation.
|
|
113
|
+
*/
|
|
114
|
+
GIT_INLINE(int) git_atomic32_add(git_atomic32 *a, int32_t addend)
|
|
115
|
+
{
|
|
116
|
+
#if defined(GIT_WIN32)
|
|
117
|
+
return InterlockedAdd(&a->val, addend);
|
|
118
|
+
#elif defined(GIT_BUILTIN_ATOMIC)
|
|
119
|
+
return __atomic_add_fetch(&a->val, addend, __ATOMIC_SEQ_CST);
|
|
120
|
+
#elif defined(GIT_BUILTIN_SYNC)
|
|
121
|
+
return __sync_add_and_fetch(&a->val, addend);
|
|
122
|
+
#else
|
|
123
|
+
# error "Unsupported architecture for atomic operations"
|
|
124
|
+
#endif
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
/*
|
|
128
|
+
* Atomically decrements the contents of *a by 1, and stores the result back into *a.
|
|
129
|
+
* @return the result of the operation.
|
|
130
|
+
*/
|
|
131
|
+
GIT_INLINE(int) git_atomic32_dec(git_atomic32 *a)
|
|
132
|
+
{
|
|
133
|
+
#if defined(GIT_WIN32)
|
|
134
|
+
return InterlockedDecrement(&a->val);
|
|
135
|
+
#elif defined(GIT_BUILTIN_ATOMIC)
|
|
136
|
+
return __atomic_sub_fetch(&a->val, 1, __ATOMIC_SEQ_CST);
|
|
137
|
+
#elif defined(GIT_BUILTIN_SYNC)
|
|
138
|
+
return __sync_sub_and_fetch(&a->val, 1);
|
|
139
|
+
#else
|
|
140
|
+
# error "Unsupported architecture for atomic operations"
|
|
141
|
+
#endif
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
/*
|
|
145
|
+
* Atomically gets the contents of *a.
|
|
146
|
+
* @return the contents of *a.
|
|
147
|
+
*/
|
|
148
|
+
GIT_INLINE(int) git_atomic32_get(git_atomic32 *a)
|
|
149
|
+
{
|
|
150
|
+
#if defined(GIT_WIN32)
|
|
151
|
+
return (int)InterlockedCompareExchange(&a->val, 0, 0);
|
|
152
|
+
#elif defined(GIT_BUILTIN_ATOMIC)
|
|
153
|
+
return __atomic_load_n(&a->val, __ATOMIC_SEQ_CST);
|
|
154
|
+
#elif defined(GIT_BUILTIN_SYNC)
|
|
155
|
+
return __sync_val_compare_and_swap(&a->val, 0, 0);
|
|
156
|
+
#else
|
|
157
|
+
# error "Unsupported architecture for atomic operations"
|
|
158
|
+
#endif
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
GIT_INLINE(void *) git_atomic__compare_and_swap(
|
|
162
|
+
void * volatile *ptr, void *oldval, void *newval)
|
|
163
|
+
{
|
|
164
|
+
#if defined(GIT_WIN32)
|
|
165
|
+
return InterlockedCompareExchangePointer((volatile PVOID *)ptr, newval, oldval);
|
|
166
|
+
#elif defined(GIT_BUILTIN_ATOMIC)
|
|
167
|
+
void *foundval = oldval;
|
|
168
|
+
__atomic_compare_exchange(ptr, &foundval, &newval, false, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST);
|
|
169
|
+
return foundval;
|
|
170
|
+
#elif defined(GIT_BUILTIN_SYNC)
|
|
171
|
+
return __sync_val_compare_and_swap(ptr, oldval, newval);
|
|
172
|
+
#else
|
|
173
|
+
# error "Unsupported architecture for atomic operations"
|
|
174
|
+
#endif
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
GIT_INLINE(volatile void *) git_atomic__swap(
|
|
178
|
+
void * volatile *ptr, void *newval)
|
|
179
|
+
{
|
|
180
|
+
#if defined(GIT_WIN32)
|
|
181
|
+
return InterlockedExchangePointer(ptr, newval);
|
|
182
|
+
#elif defined(GIT_BUILTIN_ATOMIC)
|
|
183
|
+
void * volatile foundval = NULL;
|
|
184
|
+
__atomic_exchange(ptr, &newval, &foundval, __ATOMIC_SEQ_CST);
|
|
185
|
+
return foundval;
|
|
186
|
+
#elif defined(GIT_BUILTIN_SYNC)
|
|
187
|
+
return (volatile void *)__sync_lock_test_and_set(ptr, newval);
|
|
188
|
+
#else
|
|
189
|
+
# error "Unsupported architecture for atomic operations"
|
|
190
|
+
#endif
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
GIT_INLINE(volatile void *) git_atomic__load(void * volatile *ptr)
|
|
194
|
+
{
|
|
195
|
+
#if defined(GIT_WIN32)
|
|
196
|
+
void *newval = NULL, *oldval = NULL;
|
|
197
|
+
return (volatile void *)InterlockedCompareExchangePointer((volatile PVOID *)ptr, newval, oldval);
|
|
198
|
+
#elif defined(GIT_BUILTIN_ATOMIC)
|
|
199
|
+
return (volatile void *)__atomic_load_n(ptr, __ATOMIC_SEQ_CST);
|
|
200
|
+
#elif defined(GIT_BUILTIN_SYNC)
|
|
201
|
+
return (volatile void *)__sync_val_compare_and_swap(ptr, 0, 0);
|
|
202
|
+
#else
|
|
203
|
+
# error "Unsupported architecture for atomic operations"
|
|
204
|
+
#endif
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
#ifdef GIT_ARCH_64
|
|
208
|
+
|
|
209
|
+
/*
|
|
210
|
+
* Atomically adds the contents of *a and addend, and stores the result back into *a.
|
|
211
|
+
* @return the result of the operation.
|
|
212
|
+
*/
|
|
213
|
+
GIT_INLINE(int64_t) git_atomic64_add(git_atomic64 *a, int64_t addend)
|
|
214
|
+
{
|
|
215
|
+
#if defined(GIT_WIN32)
|
|
216
|
+
return InterlockedAdd64(&a->val, addend);
|
|
217
|
+
#elif defined(GIT_BUILTIN_ATOMIC)
|
|
218
|
+
return __atomic_add_fetch(&a->val, addend, __ATOMIC_SEQ_CST);
|
|
219
|
+
#elif defined(GIT_BUILTIN_SYNC)
|
|
220
|
+
return __sync_add_and_fetch(&a->val, addend);
|
|
221
|
+
#else
|
|
222
|
+
# error "Unsupported architecture for atomic operations"
|
|
223
|
+
#endif
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
/*
|
|
227
|
+
* Atomically sets the contents of *a to be val.
|
|
228
|
+
*/
|
|
229
|
+
GIT_INLINE(void) git_atomic64_set(git_atomic64 *a, int64_t val)
|
|
230
|
+
{
|
|
231
|
+
#if defined(GIT_WIN32)
|
|
232
|
+
InterlockedExchange64(&a->val, val);
|
|
233
|
+
#elif defined(GIT_BUILTIN_ATOMIC)
|
|
234
|
+
__atomic_store_n(&a->val, val, __ATOMIC_SEQ_CST);
|
|
235
|
+
#elif defined(GIT_BUILTIN_SYNC)
|
|
236
|
+
__sync_lock_test_and_set(&a->val, val);
|
|
237
|
+
#else
|
|
238
|
+
# error "Unsupported architecture for atomic operations"
|
|
239
|
+
#endif
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
/*
|
|
243
|
+
* Atomically gets the contents of *a.
|
|
244
|
+
* @return the contents of *a.
|
|
245
|
+
*/
|
|
246
|
+
GIT_INLINE(int64_t) git_atomic64_get(git_atomic64 *a)
|
|
247
|
+
{
|
|
248
|
+
#if defined(GIT_WIN32)
|
|
249
|
+
return (int64_t)InterlockedCompareExchange64(&a->val, 0, 0);
|
|
250
|
+
#elif defined(GIT_BUILTIN_ATOMIC)
|
|
251
|
+
return __atomic_load_n(&a->val, __ATOMIC_SEQ_CST);
|
|
252
|
+
#elif defined(GIT_BUILTIN_SYNC)
|
|
253
|
+
return __sync_val_compare_and_swap(&a->val, 0, 0);
|
|
254
|
+
#else
|
|
255
|
+
# error "Unsupported architecture for atomic operations"
|
|
256
|
+
#endif
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
#endif
|
|
260
|
+
|
|
261
|
+
#else
|
|
262
|
+
|
|
263
|
+
#define git_threads_global_init git__noop
|
|
264
|
+
|
|
265
|
+
#define git_thread unsigned int
|
|
266
|
+
#define git_thread_create(thread, start_routine, arg) git__noop()
|
|
267
|
+
#define git_thread_join(id, status) git__noop()
|
|
268
|
+
|
|
269
|
+
/* Pthreads Mutex */
|
|
270
|
+
#define git_mutex unsigned int
|
|
271
|
+
#define git_mutex_init(a) git__noop()
|
|
272
|
+
#define git_mutex_init(a) git__noop()
|
|
273
|
+
#define git_mutex_lock(a) git__noop()
|
|
274
|
+
#define git_mutex_unlock(a) git__noop()
|
|
275
|
+
#define git_mutex_free(a) git__noop()
|
|
276
|
+
|
|
277
|
+
/* Pthreads condition vars */
|
|
278
|
+
#define git_cond unsigned int
|
|
279
|
+
#define git_cond_init(c) git__noop()
|
|
280
|
+
#define git_cond_free(c) git__noop()
|
|
281
|
+
#define git_cond_wait(c, l) git__noop()
|
|
282
|
+
#define git_cond_signal(c) git__noop()
|
|
283
|
+
#define git_cond_broadcast(c) git__noop()
|
|
284
|
+
|
|
285
|
+
/* Pthreads rwlock */
|
|
286
|
+
#define git_rwlock unsigned int
|
|
287
|
+
#define git_rwlock_init(a) git__noop()
|
|
288
|
+
#define git_rwlock_rdlock(a) git__noop()
|
|
289
|
+
#define git_rwlock_rdunlock(a) git__noop()
|
|
290
|
+
#define git_rwlock_wrlock(a) git__noop()
|
|
291
|
+
#define git_rwlock_wrunlock(a) git__noop()
|
|
292
|
+
#define git_rwlock_free(a) git__noop()
|
|
293
|
+
#define GIT_RWLOCK_STATIC_INIT 0
|
|
294
|
+
|
|
295
|
+
|
|
296
|
+
GIT_INLINE(void) git_atomic32_set(git_atomic32 *a, int val)
|
|
297
|
+
{
|
|
298
|
+
a->val = val;
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
GIT_INLINE(int) git_atomic32_inc(git_atomic32 *a)
|
|
302
|
+
{
|
|
303
|
+
return ++a->val;
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
GIT_INLINE(int) git_atomic32_add(git_atomic32 *a, int32_t addend)
|
|
307
|
+
{
|
|
308
|
+
a->val += addend;
|
|
309
|
+
return a->val;
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
GIT_INLINE(int) git_atomic32_dec(git_atomic32 *a)
|
|
313
|
+
{
|
|
314
|
+
return --a->val;
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
GIT_INLINE(int) git_atomic32_get(git_atomic32 *a)
|
|
318
|
+
{
|
|
319
|
+
return (int)a->val;
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
GIT_INLINE(void *) git_atomic__compare_and_swap(
|
|
323
|
+
void * volatile *ptr, void *oldval, void *newval)
|
|
324
|
+
{
|
|
325
|
+
void *foundval = *ptr;
|
|
326
|
+
if (foundval == oldval)
|
|
327
|
+
*ptr = newval;
|
|
328
|
+
return foundval;
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
GIT_INLINE(volatile void *) git_atomic__swap(
|
|
332
|
+
void * volatile *ptr, void *newval)
|
|
333
|
+
{
|
|
334
|
+
volatile void *old = *ptr;
|
|
335
|
+
*ptr = newval;
|
|
336
|
+
return old;
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
GIT_INLINE(volatile void *) git_atomic__load(void * volatile *ptr)
|
|
340
|
+
{
|
|
341
|
+
return *ptr;
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
#ifdef GIT_ARCH_64
|
|
345
|
+
|
|
346
|
+
GIT_INLINE(int64_t) git_atomic64_add(git_atomic64 *a, int64_t addend)
|
|
347
|
+
{
|
|
348
|
+
a->val += addend;
|
|
349
|
+
return a->val;
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
GIT_INLINE(void) git_atomic64_set(git_atomic64 *a, int64_t val)
|
|
353
|
+
{
|
|
354
|
+
a->val = val;
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
GIT_INLINE(int64_t) git_atomic64_get(git_atomic64 *a)
|
|
358
|
+
{
|
|
359
|
+
return (int64_t)a->val;
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
#endif
|
|
363
|
+
|
|
364
|
+
#endif
|
|
365
|
+
|
|
366
|
+
/*
|
|
367
|
+
* Atomically replace the contents of *ptr (if they are equal to oldval) with
|
|
368
|
+
* newval. ptr must point to a pointer or a value that is the same size as a
|
|
369
|
+
* pointer. This is semantically compatible with:
|
|
370
|
+
*
|
|
371
|
+
* #define git_atomic_compare_and_swap(ptr, oldval, newval) \
|
|
372
|
+
* ({ \
|
|
373
|
+
* void *foundval = *ptr; \
|
|
374
|
+
* if (foundval == oldval) \
|
|
375
|
+
* *ptr = newval; \
|
|
376
|
+
* foundval; \
|
|
377
|
+
* })
|
|
378
|
+
*
|
|
379
|
+
* @return the original contents of *ptr.
|
|
380
|
+
*/
|
|
381
|
+
#define git_atomic_compare_and_swap(ptr, oldval, newval) \
|
|
382
|
+
git_atomic__compare_and_swap((void * volatile *)ptr, oldval, newval)
|
|
383
|
+
|
|
384
|
+
/*
|
|
385
|
+
* Atomically replace the contents of v with newval. v must be the same size as
|
|
386
|
+
* a pointer. This is semantically compatible with:
|
|
387
|
+
*
|
|
388
|
+
* #define git_atomic_swap(v, newval) \
|
|
389
|
+
* ({ \
|
|
390
|
+
* volatile void *old = v; \
|
|
391
|
+
* v = newval; \
|
|
392
|
+
* old; \
|
|
393
|
+
* })
|
|
394
|
+
*
|
|
395
|
+
* @return the original contents of v.
|
|
396
|
+
*/
|
|
397
|
+
#define git_atomic_swap(v, newval) \
|
|
398
|
+
(void *)git_atomic__swap((void * volatile *)&(v), newval)
|
|
399
|
+
|
|
400
|
+
/*
|
|
401
|
+
* Atomically reads the contents of v. v must be the same size as a pointer.
|
|
402
|
+
* This is semantically compatible with:
|
|
403
|
+
*
|
|
404
|
+
* #define git_atomic_load(v) v
|
|
405
|
+
*
|
|
406
|
+
* @return the contents of v.
|
|
407
|
+
*/
|
|
408
|
+
#define git_atomic_load(v) \
|
|
409
|
+
(void *)git_atomic__load((void * volatile *)&(v))
|
|
410
|
+
|
|
411
|
+
#if defined(GIT_THREADS)
|
|
412
|
+
|
|
413
|
+
# if defined(GIT_WIN32)
|
|
414
|
+
# define GIT_MEMORY_BARRIER MemoryBarrier()
|
|
415
|
+
# elif defined(GIT_BUILTIN_ATOMIC)
|
|
416
|
+
# define GIT_MEMORY_BARRIER __atomic_thread_fence(__ATOMIC_SEQ_CST)
|
|
417
|
+
# elif defined(GIT_BUILTIN_SYNC)
|
|
418
|
+
# define GIT_MEMORY_BARRIER __sync_synchronize()
|
|
419
|
+
# endif
|
|
420
|
+
|
|
421
|
+
#else
|
|
422
|
+
|
|
423
|
+
# define GIT_MEMORY_BARRIER /* noop */
|
|
424
|
+
|
|
425
|
+
#endif
|
|
426
|
+
|
|
427
|
+
/* Thread-local data */
|
|
428
|
+
|
|
429
|
+
#if !defined(GIT_THREADS)
|
|
430
|
+
# define git_tlsdata_key int
|
|
431
|
+
#elif defined(GIT_WIN32)
|
|
432
|
+
# define git_tlsdata_key DWORD
|
|
433
|
+
#elif defined(_POSIX_THREADS)
|
|
434
|
+
# define git_tlsdata_key pthread_key_t
|
|
435
|
+
#else
|
|
436
|
+
# error unknown threading model
|
|
437
|
+
#endif
|
|
438
|
+
|
|
439
|
+
/**
|
|
440
|
+
* Create a thread-local data key. The destroy function will be
|
|
441
|
+
* called upon thread exit. On some platforms, it may be called
|
|
442
|
+
* when all threads have deleted their keys.
|
|
443
|
+
*
|
|
444
|
+
* Note that the tlsdata functions do not set an error message on
|
|
445
|
+
* failure; this is because the error handling in libgit2 is itself
|
|
446
|
+
* handled by thread-local data storage.
|
|
447
|
+
*
|
|
448
|
+
* @param key the tlsdata key
|
|
449
|
+
* @param destroy_fn function pointer called upon thread exit
|
|
450
|
+
* @return 0 on success, non-zero on failure
|
|
451
|
+
*/
|
|
452
|
+
int git_tlsdata_init(git_tlsdata_key *key, void (GIT_SYSTEM_CALL *destroy_fn)(void *));
|
|
453
|
+
|
|
454
|
+
/**
|
|
455
|
+
* Set a the thread-local value for the given key.
|
|
456
|
+
*
|
|
457
|
+
* @param key the tlsdata key to store data on
|
|
458
|
+
* @param value the pointer to store
|
|
459
|
+
* @return 0 on success, non-zero on failure
|
|
460
|
+
*/
|
|
461
|
+
int git_tlsdata_set(git_tlsdata_key key, void *value);
|
|
462
|
+
|
|
463
|
+
/**
|
|
464
|
+
* Get the thread-local value for the given key.
|
|
465
|
+
*
|
|
466
|
+
* @param key the tlsdata key to retrieve the value of
|
|
467
|
+
* @return the pointer stored with git_tlsdata_set
|
|
468
|
+
*/
|
|
469
|
+
void *git_tlsdata_get(git_tlsdata_key key);
|
|
470
|
+
|
|
471
|
+
/**
|
|
472
|
+
* Delete the given thread-local key.
|
|
473
|
+
*
|
|
474
|
+
* @param key the tlsdata key to dispose
|
|
475
|
+
* @return 0 on success, non-zero on failure
|
|
476
|
+
*/
|
|
477
|
+
int git_tlsdata_dispose(git_tlsdata_key key);
|
|
478
|
+
|
|
479
|
+
#endif
|