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
|
@@ -0,0 +1,58 @@
|
|
|
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_assert_safe_h__
|
|
8
|
+
#define INCLUDE_assert_safe_h__
|
|
9
|
+
|
|
10
|
+
/*
|
|
11
|
+
* In a debug build, we'll assert(3) for aide in debugging. In release
|
|
12
|
+
* builds, we will provide macros that will set an error message that
|
|
13
|
+
* indicate a failure and return. Note that memory leaks can occur in
|
|
14
|
+
* a release-mode assertion failure -- it is impractical to provide
|
|
15
|
+
* safe clean up routines in these very extreme failures, but care
|
|
16
|
+
* should be taken to not leak very large objects.
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
#if (defined(_DEBUG) || defined(GIT_ASSERT_HARD)) && GIT_ASSERT_HARD != 0
|
|
20
|
+
# include <assert.h>
|
|
21
|
+
|
|
22
|
+
# define GIT_ASSERT(expr) assert(expr)
|
|
23
|
+
# define GIT_ASSERT_ARG(expr) assert(expr)
|
|
24
|
+
|
|
25
|
+
# define GIT_ASSERT_WITH_RETVAL(expr, fail) assert(expr)
|
|
26
|
+
# define GIT_ASSERT_ARG_WITH_RETVAL(expr, fail) assert(expr)
|
|
27
|
+
#else
|
|
28
|
+
|
|
29
|
+
/** Internal consistency check to stop the function. */
|
|
30
|
+
# define GIT_ASSERT(expr) GIT_ASSERT_WITH_RETVAL(expr, -1)
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Assert that a consumer-provided argument is valid, setting an
|
|
34
|
+
* actionable error message and returning -1 if it is not.
|
|
35
|
+
*/
|
|
36
|
+
# define GIT_ASSERT_ARG(expr) GIT_ASSERT_ARG_WITH_RETVAL(expr, -1)
|
|
37
|
+
|
|
38
|
+
/** Internal consistency check to return the `fail` param on failure. */
|
|
39
|
+
# define GIT_ASSERT_WITH_RETVAL(expr, fail) \
|
|
40
|
+
GIT_ASSERT__WITH_RETVAL(expr, GIT_ERROR_INTERNAL, "unrecoverable internal error", fail)
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Assert that a consumer-provided argument is valid, setting an
|
|
44
|
+
* actionable error message and returning the `fail` param if not.
|
|
45
|
+
*/
|
|
46
|
+
# define GIT_ASSERT_ARG_WITH_RETVAL(expr, fail) \
|
|
47
|
+
GIT_ASSERT__WITH_RETVAL(expr, GIT_ERROR_INVALID, "invalid argument", fail)
|
|
48
|
+
|
|
49
|
+
# define GIT_ASSERT__WITH_RETVAL(expr, code, msg, fail) do { \
|
|
50
|
+
if (!(expr)) { \
|
|
51
|
+
git_error_set(code, "%s: '%s'", msg, #expr); \
|
|
52
|
+
return fail; \
|
|
53
|
+
} \
|
|
54
|
+
} while(0)
|
|
55
|
+
|
|
56
|
+
#endif /* GIT_ASSERT_HARD */
|
|
57
|
+
|
|
58
|
+
#endif
|
data/vendor/libgit2/src/attr.c
CHANGED
|
@@ -36,16 +36,16 @@ git_attr_value_t git_attr_value(const char *attr)
|
|
|
36
36
|
static int collect_attr_files(
|
|
37
37
|
git_repository *repo,
|
|
38
38
|
git_attr_session *attr_session,
|
|
39
|
-
|
|
39
|
+
git_attr_options *opts,
|
|
40
40
|
const char *path,
|
|
41
41
|
git_vector *files);
|
|
42
42
|
|
|
43
43
|
static void release_attr_files(git_vector *files);
|
|
44
44
|
|
|
45
|
-
int
|
|
45
|
+
int git_attr_get_ext(
|
|
46
46
|
const char **value,
|
|
47
47
|
git_repository *repo,
|
|
48
|
-
|
|
48
|
+
git_attr_options *opts,
|
|
49
49
|
const char *pathname,
|
|
50
50
|
const char *name)
|
|
51
51
|
{
|
|
@@ -58,17 +58,20 @@ int git_attr_get(
|
|
|
58
58
|
git_attr_rule *rule;
|
|
59
59
|
git_dir_flag dir_flag = GIT_DIR_FLAG_UNKNOWN;
|
|
60
60
|
|
|
61
|
-
|
|
61
|
+
GIT_ASSERT_ARG(value);
|
|
62
|
+
GIT_ASSERT_ARG(repo);
|
|
63
|
+
GIT_ASSERT_ARG(name);
|
|
64
|
+
GIT_ERROR_CHECK_VERSION(opts, GIT_ATTR_OPTIONS_VERSION, "git_attr_options");
|
|
62
65
|
|
|
63
66
|
*value = NULL;
|
|
64
67
|
|
|
65
68
|
if (git_repository_is_bare(repo))
|
|
66
69
|
dir_flag = GIT_DIR_FLAG_FALSE;
|
|
67
70
|
|
|
68
|
-
if (git_attr_path__init(&path, pathname, git_repository_workdir(repo), dir_flag) < 0)
|
|
71
|
+
if (git_attr_path__init(&path, repo, pathname, git_repository_workdir(repo), dir_flag) < 0)
|
|
69
72
|
return -1;
|
|
70
73
|
|
|
71
|
-
if ((error = collect_attr_files(repo, NULL,
|
|
74
|
+
if ((error = collect_attr_files(repo, NULL, opts, pathname, &files)) < 0)
|
|
72
75
|
goto cleanup;
|
|
73
76
|
|
|
74
77
|
memset(&attr, 0, sizeof(attr));
|
|
@@ -95,6 +98,20 @@ cleanup:
|
|
|
95
98
|
return error;
|
|
96
99
|
}
|
|
97
100
|
|
|
101
|
+
int git_attr_get(
|
|
102
|
+
const char **value,
|
|
103
|
+
git_repository *repo,
|
|
104
|
+
uint32_t flags,
|
|
105
|
+
const char *pathname,
|
|
106
|
+
const char *name)
|
|
107
|
+
{
|
|
108
|
+
git_attr_options opts = GIT_ATTR_OPTIONS_INIT;
|
|
109
|
+
|
|
110
|
+
opts.flags = flags;
|
|
111
|
+
|
|
112
|
+
return git_attr_get_ext(value, repo, &opts, pathname, name);
|
|
113
|
+
}
|
|
114
|
+
|
|
98
115
|
|
|
99
116
|
typedef struct {
|
|
100
117
|
git_attr_name name;
|
|
@@ -105,7 +122,7 @@ int git_attr_get_many_with_session(
|
|
|
105
122
|
const char **values,
|
|
106
123
|
git_repository *repo,
|
|
107
124
|
git_attr_session *attr_session,
|
|
108
|
-
|
|
125
|
+
git_attr_options *opts,
|
|
109
126
|
const char *pathname,
|
|
110
127
|
size_t num_attr,
|
|
111
128
|
const char **names)
|
|
@@ -123,15 +140,19 @@ int git_attr_get_many_with_session(
|
|
|
123
140
|
if (!num_attr)
|
|
124
141
|
return 0;
|
|
125
142
|
|
|
126
|
-
|
|
143
|
+
GIT_ASSERT_ARG(values);
|
|
144
|
+
GIT_ASSERT_ARG(repo);
|
|
145
|
+
GIT_ASSERT_ARG(pathname);
|
|
146
|
+
GIT_ASSERT_ARG(names);
|
|
147
|
+
GIT_ERROR_CHECK_VERSION(opts, GIT_ATTR_OPTIONS_VERSION, "git_attr_options");
|
|
127
148
|
|
|
128
149
|
if (git_repository_is_bare(repo))
|
|
129
150
|
dir_flag = GIT_DIR_FLAG_FALSE;
|
|
130
151
|
|
|
131
|
-
if (git_attr_path__init(&path, pathname, git_repository_workdir(repo), dir_flag) < 0)
|
|
152
|
+
if (git_attr_path__init(&path, repo, pathname, git_repository_workdir(repo), dir_flag) < 0)
|
|
132
153
|
return -1;
|
|
133
154
|
|
|
134
|
-
if ((error = collect_attr_files(repo, attr_session,
|
|
155
|
+
if ((error = collect_attr_files(repo, attr_session, opts, pathname, &files)) < 0)
|
|
135
156
|
goto cleanup;
|
|
136
157
|
|
|
137
158
|
info = git__calloc(num_attr, sizeof(attr_get_many_info));
|
|
@@ -184,9 +205,25 @@ int git_attr_get_many(
|
|
|
184
205
|
const char *pathname,
|
|
185
206
|
size_t num_attr,
|
|
186
207
|
const char **names)
|
|
208
|
+
{
|
|
209
|
+
git_attr_options opts = GIT_ATTR_OPTIONS_INIT;
|
|
210
|
+
|
|
211
|
+
opts.flags = flags;
|
|
212
|
+
|
|
213
|
+
return git_attr_get_many_with_session(
|
|
214
|
+
values, repo, NULL, &opts, pathname, num_attr, names);
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
int git_attr_get_many_ext(
|
|
218
|
+
const char **values,
|
|
219
|
+
git_repository *repo,
|
|
220
|
+
git_attr_options *opts,
|
|
221
|
+
const char *pathname,
|
|
222
|
+
size_t num_attr,
|
|
223
|
+
const char **names)
|
|
187
224
|
{
|
|
188
225
|
return git_attr_get_many_with_session(
|
|
189
|
-
values, repo, NULL,
|
|
226
|
+
values, repo, NULL, opts, pathname, num_attr, names);
|
|
190
227
|
}
|
|
191
228
|
|
|
192
229
|
int git_attr_foreach(
|
|
@@ -195,6 +232,20 @@ int git_attr_foreach(
|
|
|
195
232
|
const char *pathname,
|
|
196
233
|
int (*callback)(const char *name, const char *value, void *payload),
|
|
197
234
|
void *payload)
|
|
235
|
+
{
|
|
236
|
+
git_attr_options opts = GIT_ATTR_OPTIONS_INIT;
|
|
237
|
+
|
|
238
|
+
opts.flags = flags;
|
|
239
|
+
|
|
240
|
+
return git_attr_foreach_ext(repo, &opts, pathname, callback, payload);
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
int git_attr_foreach_ext(
|
|
244
|
+
git_repository *repo,
|
|
245
|
+
git_attr_options *opts,
|
|
246
|
+
const char *pathname,
|
|
247
|
+
int (*callback)(const char *name, const char *value, void *payload),
|
|
248
|
+
void *payload)
|
|
198
249
|
{
|
|
199
250
|
int error;
|
|
200
251
|
git_attr_path path;
|
|
@@ -206,15 +257,17 @@ int git_attr_foreach(
|
|
|
206
257
|
git_strmap *seen = NULL;
|
|
207
258
|
git_dir_flag dir_flag = GIT_DIR_FLAG_UNKNOWN;
|
|
208
259
|
|
|
209
|
-
|
|
260
|
+
GIT_ASSERT_ARG(repo);
|
|
261
|
+
GIT_ASSERT_ARG(callback);
|
|
262
|
+
GIT_ERROR_CHECK_VERSION(opts, GIT_ATTR_OPTIONS_VERSION, "git_attr_options");
|
|
210
263
|
|
|
211
264
|
if (git_repository_is_bare(repo))
|
|
212
265
|
dir_flag = GIT_DIR_FLAG_FALSE;
|
|
213
266
|
|
|
214
|
-
if (git_attr_path__init(&path, pathname, git_repository_workdir(repo), dir_flag) < 0)
|
|
267
|
+
if (git_attr_path__init(&path, repo, pathname, git_repository_workdir(repo), dir_flag) < 0)
|
|
215
268
|
return -1;
|
|
216
269
|
|
|
217
|
-
if ((error = collect_attr_files(repo, NULL,
|
|
270
|
+
if ((error = collect_attr_files(repo, NULL, opts, pathname, &files)) < 0 ||
|
|
218
271
|
(error = git_strmap_new(&seen)) < 0)
|
|
219
272
|
goto cleanup;
|
|
220
273
|
|
|
@@ -247,26 +300,43 @@ cleanup:
|
|
|
247
300
|
return error;
|
|
248
301
|
}
|
|
249
302
|
|
|
250
|
-
static int
|
|
303
|
+
static int preload_attr_source(
|
|
251
304
|
git_repository *repo,
|
|
252
305
|
git_attr_session *attr_session,
|
|
253
|
-
git_attr_file_source source
|
|
254
|
-
const char *base,
|
|
255
|
-
const char *file,
|
|
256
|
-
bool allow_macros)
|
|
306
|
+
git_attr_file_source *source)
|
|
257
307
|
{
|
|
258
308
|
int error;
|
|
259
309
|
git_attr_file *preload = NULL;
|
|
260
310
|
|
|
261
|
-
if (!
|
|
311
|
+
if (!source)
|
|
262
312
|
return 0;
|
|
263
|
-
|
|
264
|
-
|
|
313
|
+
|
|
314
|
+
error = git_attr_cache__get(&preload, repo, attr_session, source,
|
|
315
|
+
git_attr_file__parse_buffer, true);
|
|
316
|
+
|
|
317
|
+
if (!error)
|
|
265
318
|
git_attr_file__free(preload);
|
|
266
319
|
|
|
267
320
|
return error;
|
|
268
321
|
}
|
|
269
322
|
|
|
323
|
+
GIT_INLINE(int) preload_attr_file(
|
|
324
|
+
git_repository *repo,
|
|
325
|
+
git_attr_session *attr_session,
|
|
326
|
+
const char *base,
|
|
327
|
+
const char *filename)
|
|
328
|
+
{
|
|
329
|
+
git_attr_file_source source = { GIT_ATTR_FILE_SOURCE_FILE };
|
|
330
|
+
|
|
331
|
+
if (!filename)
|
|
332
|
+
return 0;
|
|
333
|
+
|
|
334
|
+
source.base = base;
|
|
335
|
+
source.filename = filename;
|
|
336
|
+
|
|
337
|
+
return preload_attr_source(repo, attr_session, &source);
|
|
338
|
+
}
|
|
339
|
+
|
|
270
340
|
static int system_attr_file(
|
|
271
341
|
git_buf *out,
|
|
272
342
|
git_attr_session *attr_session)
|
|
@@ -308,9 +378,12 @@ static int system_attr_file(
|
|
|
308
378
|
static int attr_setup(
|
|
309
379
|
git_repository *repo,
|
|
310
380
|
git_attr_session *attr_session,
|
|
311
|
-
|
|
381
|
+
git_attr_options *opts)
|
|
312
382
|
{
|
|
313
|
-
git_buf
|
|
383
|
+
git_buf system = GIT_BUF_INIT, info = GIT_BUF_INIT;
|
|
384
|
+
git_attr_file_source index_source = { GIT_ATTR_FILE_SOURCE_INDEX, NULL, GIT_ATTR_FILE, NULL };
|
|
385
|
+
git_attr_file_source head_source = { GIT_ATTR_FILE_SOURCE_COMMIT, NULL, GIT_ATTR_FILE, NULL };
|
|
386
|
+
git_attr_file_source commit_source = { GIT_ATTR_FILE_SOURCE_COMMIT, NULL, GIT_ATTR_FILE, NULL };
|
|
314
387
|
git_index *idx = NULL;
|
|
315
388
|
const char *workdir;
|
|
316
389
|
int error = 0;
|
|
@@ -326,45 +399,51 @@ static int attr_setup(
|
|
|
326
399
|
* definitions will be available for later file parsing.
|
|
327
400
|
*/
|
|
328
401
|
|
|
329
|
-
if ((error = system_attr_file(&
|
|
330
|
-
(error = preload_attr_file(repo, attr_session,
|
|
331
|
-
NULL, path.ptr, true)) < 0) {
|
|
402
|
+
if ((error = system_attr_file(&system, attr_session)) < 0 ||
|
|
403
|
+
(error = preload_attr_file(repo, attr_session, NULL, system.ptr)) < 0) {
|
|
332
404
|
if (error != GIT_ENOTFOUND)
|
|
333
405
|
goto out;
|
|
406
|
+
|
|
407
|
+
error = 0;
|
|
334
408
|
}
|
|
335
409
|
|
|
336
|
-
if ((error = preload_attr_file(repo, attr_session,
|
|
337
|
-
|
|
410
|
+
if ((error = preload_attr_file(repo, attr_session, NULL,
|
|
411
|
+
git_repository_attr_cache(repo)->cfg_attr_file)) < 0)
|
|
338
412
|
goto out;
|
|
339
413
|
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
(error = preload_attr_file(repo, attr_session, GIT_ATTR_FILE__FROM_FILE,
|
|
343
|
-
path.ptr, GIT_ATTR_FILE_INREPO, true)) < 0) {
|
|
414
|
+
if ((error = git_repository_item_path(&info, repo, GIT_REPOSITORY_ITEM_INFO)) < 0 ||
|
|
415
|
+
(error = preload_attr_file(repo, attr_session, info.ptr, GIT_ATTR_FILE_INREPO)) < 0) {
|
|
344
416
|
if (error != GIT_ENOTFOUND)
|
|
345
417
|
goto out;
|
|
418
|
+
|
|
419
|
+
error = 0;
|
|
346
420
|
}
|
|
347
421
|
|
|
348
422
|
if ((workdir = git_repository_workdir(repo)) != NULL &&
|
|
349
|
-
(error = preload_attr_file(repo, attr_session,
|
|
350
|
-
workdir, GIT_ATTR_FILE, true)) < 0)
|
|
423
|
+
(error = preload_attr_file(repo, attr_session, workdir, GIT_ATTR_FILE)) < 0)
|
|
351
424
|
goto out;
|
|
352
425
|
|
|
353
426
|
if ((error = git_repository_index__weakptr(&idx, repo)) < 0 ||
|
|
354
|
-
(error =
|
|
355
|
-
NULL, GIT_ATTR_FILE, true)) < 0)
|
|
427
|
+
(error = preload_attr_source(repo, attr_session, &index_source)) < 0)
|
|
356
428
|
goto out;
|
|
357
429
|
|
|
358
|
-
if ((flags & GIT_ATTR_CHECK_INCLUDE_HEAD) != 0 &&
|
|
359
|
-
(error =
|
|
360
|
-
NULL, GIT_ATTR_FILE, true)) < 0)
|
|
430
|
+
if ((opts && (opts->flags & GIT_ATTR_CHECK_INCLUDE_HEAD) != 0) &&
|
|
431
|
+
(error = preload_attr_source(repo, attr_session, &head_source)) < 0)
|
|
361
432
|
goto out;
|
|
362
433
|
|
|
434
|
+
if ((opts && (opts->flags & GIT_ATTR_CHECK_INCLUDE_COMMIT) != 0)) {
|
|
435
|
+
commit_source.commit_id = opts->commit_id;
|
|
436
|
+
|
|
437
|
+
if ((error = preload_attr_source(repo, attr_session, &commit_source)) < 0)
|
|
438
|
+
goto out;
|
|
439
|
+
}
|
|
440
|
+
|
|
363
441
|
if (attr_session)
|
|
364
442
|
attr_session->init_setup = 1;
|
|
365
443
|
|
|
366
444
|
out:
|
|
367
|
-
git_buf_dispose(&
|
|
445
|
+
git_buf_dispose(&system);
|
|
446
|
+
git_buf_dispose(&info);
|
|
368
447
|
|
|
369
448
|
return error;
|
|
370
449
|
}
|
|
@@ -378,6 +457,9 @@ int git_attr_add_macro(
|
|
|
378
457
|
git_attr_rule *macro = NULL;
|
|
379
458
|
git_pool *pool;
|
|
380
459
|
|
|
460
|
+
GIT_ASSERT_ARG(repo);
|
|
461
|
+
GIT_ASSERT_ARG(name);
|
|
462
|
+
|
|
381
463
|
if ((error = git_attr_cache__init(repo)) < 0)
|
|
382
464
|
return error;
|
|
383
465
|
|
|
@@ -406,56 +488,60 @@ int git_attr_add_macro(
|
|
|
406
488
|
typedef struct {
|
|
407
489
|
git_repository *repo;
|
|
408
490
|
git_attr_session *attr_session;
|
|
409
|
-
|
|
491
|
+
git_attr_options *opts;
|
|
410
492
|
const char *workdir;
|
|
411
493
|
git_index *index;
|
|
412
494
|
git_vector *files;
|
|
413
495
|
} attr_walk_up_info;
|
|
414
496
|
|
|
415
497
|
static int attr_decide_sources(
|
|
416
|
-
uint32_t flags,
|
|
498
|
+
uint32_t flags,
|
|
499
|
+
bool has_wd,
|
|
500
|
+
bool has_index,
|
|
501
|
+
git_attr_file_source_t *srcs)
|
|
417
502
|
{
|
|
418
503
|
int count = 0;
|
|
419
504
|
|
|
420
505
|
switch (flags & 0x03) {
|
|
421
506
|
case GIT_ATTR_CHECK_FILE_THEN_INDEX:
|
|
422
507
|
if (has_wd)
|
|
423
|
-
srcs[count++] =
|
|
508
|
+
srcs[count++] = GIT_ATTR_FILE_SOURCE_FILE;
|
|
424
509
|
if (has_index)
|
|
425
|
-
srcs[count++] =
|
|
510
|
+
srcs[count++] = GIT_ATTR_FILE_SOURCE_INDEX;
|
|
426
511
|
break;
|
|
427
512
|
case GIT_ATTR_CHECK_INDEX_THEN_FILE:
|
|
428
513
|
if (has_index)
|
|
429
|
-
srcs[count++] =
|
|
514
|
+
srcs[count++] = GIT_ATTR_FILE_SOURCE_INDEX;
|
|
430
515
|
if (has_wd)
|
|
431
|
-
srcs[count++] =
|
|
516
|
+
srcs[count++] = GIT_ATTR_FILE_SOURCE_FILE;
|
|
432
517
|
break;
|
|
433
518
|
case GIT_ATTR_CHECK_INDEX_ONLY:
|
|
434
519
|
if (has_index)
|
|
435
|
-
srcs[count++] =
|
|
520
|
+
srcs[count++] = GIT_ATTR_FILE_SOURCE_INDEX;
|
|
436
521
|
break;
|
|
437
522
|
}
|
|
438
523
|
|
|
439
|
-
if ((flags & GIT_ATTR_CHECK_INCLUDE_HEAD) != 0
|
|
440
|
-
|
|
524
|
+
if ((flags & GIT_ATTR_CHECK_INCLUDE_HEAD) != 0 ||
|
|
525
|
+
(flags & GIT_ATTR_CHECK_INCLUDE_COMMIT) != 0)
|
|
526
|
+
srcs[count++] = GIT_ATTR_FILE_SOURCE_COMMIT;
|
|
441
527
|
|
|
442
528
|
return count;
|
|
443
529
|
}
|
|
444
530
|
|
|
445
|
-
static int
|
|
531
|
+
static int push_attr_source(
|
|
446
532
|
git_repository *repo,
|
|
447
533
|
git_attr_session *attr_session,
|
|
448
534
|
git_vector *list,
|
|
449
|
-
git_attr_file_source source,
|
|
450
|
-
const char *base,
|
|
451
|
-
const char *filename,
|
|
535
|
+
git_attr_file_source *source,
|
|
452
536
|
bool allow_macros)
|
|
453
537
|
{
|
|
454
538
|
int error = 0;
|
|
455
539
|
git_attr_file *file = NULL;
|
|
456
540
|
|
|
457
541
|
error = git_attr_cache__get(&file, repo, attr_session,
|
|
458
|
-
|
|
542
|
+
source,
|
|
543
|
+
git_attr_file__parse_buffer,
|
|
544
|
+
allow_macros);
|
|
459
545
|
|
|
460
546
|
if (error < 0)
|
|
461
547
|
return error;
|
|
@@ -468,20 +554,40 @@ static int push_attr_file(
|
|
|
468
554
|
return error;
|
|
469
555
|
}
|
|
470
556
|
|
|
557
|
+
GIT_INLINE(int) push_attr_file(
|
|
558
|
+
git_repository *repo,
|
|
559
|
+
git_attr_session *attr_session,
|
|
560
|
+
git_vector *list,
|
|
561
|
+
const char *base,
|
|
562
|
+
const char *filename)
|
|
563
|
+
{
|
|
564
|
+
git_attr_file_source source = { GIT_ATTR_FILE_SOURCE_FILE, base, filename };
|
|
565
|
+
return push_attr_source(repo, attr_session, list, &source, true);
|
|
566
|
+
}
|
|
567
|
+
|
|
471
568
|
static int push_one_attr(void *ref, const char *path)
|
|
472
569
|
{
|
|
473
570
|
attr_walk_up_info *info = (attr_walk_up_info *)ref;
|
|
474
|
-
|
|
571
|
+
git_attr_file_source_t src[GIT_ATTR_FILE_NUM_SOURCES];
|
|
475
572
|
int error = 0, n_src, i;
|
|
476
573
|
bool allow_macros;
|
|
477
574
|
|
|
478
|
-
n_src = attr_decide_sources(
|
|
479
|
-
|
|
575
|
+
n_src = attr_decide_sources(info->opts ? info->opts->flags : 0,
|
|
576
|
+
info->workdir != NULL,
|
|
577
|
+
info->index != NULL,
|
|
578
|
+
src);
|
|
579
|
+
|
|
480
580
|
allow_macros = info->workdir ? !strcmp(info->workdir, path) : false;
|
|
481
581
|
|
|
482
|
-
for (i = 0; !error && i < n_src; ++i)
|
|
483
|
-
|
|
484
|
-
|
|
582
|
+
for (i = 0; !error && i < n_src; ++i) {
|
|
583
|
+
git_attr_file_source source = { src[i], path, GIT_ATTR_FILE };
|
|
584
|
+
|
|
585
|
+
if (src[i] == GIT_ATTR_FILE_SOURCE_COMMIT && info->opts)
|
|
586
|
+
source.commit_id = info->opts->commit_id;
|
|
587
|
+
|
|
588
|
+
error = push_attr_source(info->repo, info->attr_session, info->files,
|
|
589
|
+
&source, allow_macros);
|
|
590
|
+
}
|
|
485
591
|
|
|
486
592
|
return error;
|
|
487
593
|
}
|
|
@@ -501,7 +607,7 @@ static void release_attr_files(git_vector *files)
|
|
|
501
607
|
static int collect_attr_files(
|
|
502
608
|
git_repository *repo,
|
|
503
609
|
git_attr_session *attr_session,
|
|
504
|
-
|
|
610
|
+
git_attr_options *opts,
|
|
505
611
|
const char *path,
|
|
506
612
|
git_vector *files)
|
|
507
613
|
{
|
|
@@ -510,14 +616,18 @@ static int collect_attr_files(
|
|
|
510
616
|
const char *workdir = git_repository_workdir(repo);
|
|
511
617
|
attr_walk_up_info info = { NULL };
|
|
512
618
|
|
|
513
|
-
if ((error = attr_setup(repo, attr_session,
|
|
619
|
+
if ((error = attr_setup(repo, attr_session, opts)) < 0)
|
|
514
620
|
return error;
|
|
515
621
|
|
|
516
622
|
/* Resolve path in a non-bare repo */
|
|
517
|
-
if (workdir != NULL)
|
|
518
|
-
error =
|
|
519
|
-
|
|
623
|
+
if (workdir != NULL) {
|
|
624
|
+
if (!(error = git_repository_workdir_path(&dir, repo, path)))
|
|
625
|
+
error = git_path_find_dir(&dir);
|
|
626
|
+
}
|
|
627
|
+
else {
|
|
520
628
|
error = git_path_dirname_r(&dir, path);
|
|
629
|
+
}
|
|
630
|
+
|
|
521
631
|
if (error < 0)
|
|
522
632
|
goto cleanup;
|
|
523
633
|
|
|
@@ -529,15 +639,14 @@ static int collect_attr_files(
|
|
|
529
639
|
*/
|
|
530
640
|
|
|
531
641
|
if ((error = git_repository_item_path(&attrfile, repo, GIT_REPOSITORY_ITEM_INFO)) < 0 ||
|
|
532
|
-
(error = push_attr_file(repo, attr_session, files,
|
|
533
|
-
attrfile.ptr, GIT_ATTR_FILE_INREPO, true)) < 0) {
|
|
642
|
+
(error = push_attr_file(repo, attr_session, files, attrfile.ptr, GIT_ATTR_FILE_INREPO)) < 0) {
|
|
534
643
|
if (error != GIT_ENOTFOUND)
|
|
535
644
|
goto cleanup;
|
|
536
645
|
}
|
|
537
646
|
|
|
538
647
|
info.repo = repo;
|
|
539
648
|
info.attr_session = attr_session;
|
|
540
|
-
info.
|
|
649
|
+
info.opts = opts;
|
|
541
650
|
info.workdir = workdir;
|
|
542
651
|
if (git_repository_index__weakptr(&info.index, repo) < 0)
|
|
543
652
|
git_error_clear(); /* no error even if there is no index */
|
|
@@ -552,18 +661,16 @@ static int collect_attr_files(
|
|
|
552
661
|
goto cleanup;
|
|
553
662
|
|
|
554
663
|
if (git_repository_attr_cache(repo)->cfg_attr_file != NULL) {
|
|
555
|
-
error = push_attr_file(repo, attr_session, files,
|
|
556
|
-
NULL, git_repository_attr_cache(repo)->cfg_attr_file, true);
|
|
664
|
+
error = push_attr_file(repo, attr_session, files, NULL, git_repository_attr_cache(repo)->cfg_attr_file);
|
|
557
665
|
if (error < 0)
|
|
558
666
|
goto cleanup;
|
|
559
667
|
}
|
|
560
668
|
|
|
561
|
-
if ((flags & GIT_ATTR_CHECK_NO_SYSTEM) == 0) {
|
|
669
|
+
if (!opts || (opts->flags & GIT_ATTR_CHECK_NO_SYSTEM) == 0) {
|
|
562
670
|
error = system_attr_file(&dir, attr_session);
|
|
563
671
|
|
|
564
672
|
if (!error)
|
|
565
|
-
error = push_attr_file(repo, attr_session, files,
|
|
566
|
-
NULL, dir.ptr, true);
|
|
673
|
+
error = push_attr_file(repo, attr_session, files, NULL, dir.ptr);
|
|
567
674
|
else if (error == GIT_ENOTFOUND)
|
|
568
675
|
error = 0;
|
|
569
676
|
}
|