rugged 0.27.7 → 0.27.10
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/lib/rugged/version.rb +1 -1
- data/vendor/libgit2/AUTHORS +1 -0
- data/vendor/libgit2/CMakeLists.txt +99 -51
- data/vendor/libgit2/COPYING +28 -0
- data/vendor/libgit2/cmake/Modules/AddCFlagIfSupported.cmake +15 -1
- data/vendor/libgit2/cmake/Modules/CheckPrototypeDefinition.c.in +29 -0
- data/vendor/libgit2/cmake/Modules/CheckPrototypeDefinition.cmake +96 -0
- data/vendor/libgit2/cmake/Modules/EnableWarnings.cmake +9 -8
- data/vendor/libgit2/cmake/Modules/FindCoreFoundation.cmake +2 -2
- data/vendor/libgit2/cmake/Modules/FindGSSAPI.cmake +1 -1
- data/vendor/libgit2/cmake/Modules/FindGSSFramework.cmake +28 -0
- data/vendor/libgit2/cmake/Modules/FindIconv.cmake +11 -6
- data/vendor/libgit2/cmake/Modules/FindPCRE.cmake +38 -0
- data/vendor/libgit2/cmake/Modules/FindPCRE2.cmake +37 -0
- data/vendor/libgit2/cmake/Modules/FindSecurity.cmake +2 -2
- data/vendor/libgit2/cmake/Modules/FindStatNsec.cmake +6 -0
- data/vendor/libgit2/cmake/Modules/PkgBuildConfig.cmake +110 -0
- data/vendor/libgit2/cmake/Modules/SelectGSSAPI.cmake +53 -0
- data/vendor/libgit2/cmake/Modules/SelectHTTPSBackend.cmake +124 -0
- data/vendor/libgit2/cmake/Modules/SelectHashes.cmake +66 -0
- data/vendor/libgit2/deps/http-parser/http_parser.c +11 -6
- data/vendor/libgit2/deps/ntlmclient/CMakeLists.txt +21 -0
- data/vendor/libgit2/deps/ntlmclient/compat.h +33 -0
- data/vendor/libgit2/deps/ntlmclient/crypt.h +64 -0
- data/vendor/libgit2/deps/ntlmclient/crypt_commoncrypto.c +120 -0
- data/vendor/libgit2/deps/ntlmclient/crypt_commoncrypto.h +18 -0
- data/vendor/libgit2/deps/ntlmclient/crypt_mbedtls.c +145 -0
- data/vendor/libgit2/deps/ntlmclient/crypt_mbedtls.h +18 -0
- data/vendor/libgit2/deps/ntlmclient/crypt_openssl.c +130 -0
- data/vendor/libgit2/deps/ntlmclient/crypt_openssl.h +21 -0
- data/vendor/libgit2/deps/ntlmclient/ntlm.c +1420 -0
- data/vendor/libgit2/deps/ntlmclient/ntlm.h +174 -0
- data/vendor/libgit2/deps/ntlmclient/ntlmclient.h +320 -0
- data/vendor/libgit2/deps/ntlmclient/unicode.h +36 -0
- data/vendor/libgit2/deps/ntlmclient/unicode_builtin.c +445 -0
- data/vendor/libgit2/deps/ntlmclient/unicode_iconv.c +201 -0
- data/vendor/libgit2/deps/ntlmclient/utf8.h +1257 -0
- data/vendor/libgit2/deps/ntlmclient/util.c +21 -0
- data/vendor/libgit2/deps/ntlmclient/util.h +14 -0
- data/vendor/libgit2/deps/pcre/CMakeLists.txt +140 -0
- data/vendor/libgit2/deps/pcre/COPYING +5 -0
- data/vendor/libgit2/deps/pcre/cmake/COPYING-CMAKE-SCRIPTS +22 -0
- data/vendor/libgit2/deps/pcre/cmake/FindEditline.cmake +17 -0
- data/vendor/libgit2/deps/pcre/cmake/FindPackageHandleStandardArgs.cmake +58 -0
- data/vendor/libgit2/deps/pcre/cmake/FindReadline.cmake +29 -0
- data/vendor/libgit2/deps/pcre/config.h.in +57 -0
- data/vendor/libgit2/deps/pcre/pcre.h +641 -0
- data/vendor/libgit2/deps/pcre/pcre_byte_order.c +319 -0
- data/vendor/libgit2/deps/pcre/pcre_chartables.c +198 -0
- data/vendor/libgit2/deps/pcre/pcre_compile.c +9800 -0
- data/vendor/libgit2/deps/pcre/pcre_config.c +190 -0
- data/vendor/libgit2/deps/pcre/pcre_dfa_exec.c +3676 -0
- data/vendor/libgit2/deps/pcre/pcre_exec.c +7173 -0
- data/vendor/libgit2/deps/pcre/pcre_fullinfo.c +245 -0
- data/vendor/libgit2/deps/pcre/pcre_get.c +669 -0
- data/vendor/libgit2/deps/pcre/pcre_globals.c +86 -0
- data/vendor/libgit2/deps/pcre/pcre_internal.h +2787 -0
- data/vendor/libgit2/deps/pcre/pcre_jit_compile.c +11913 -0
- data/vendor/libgit2/deps/pcre/pcre_maketables.c +156 -0
- data/vendor/libgit2/deps/pcre/pcre_newline.c +210 -0
- data/vendor/libgit2/deps/pcre/pcre_ord2utf8.c +94 -0
- data/vendor/libgit2/deps/pcre/pcre_printint.c +834 -0
- data/vendor/libgit2/deps/pcre/pcre_refcount.c +92 -0
- data/vendor/libgit2/deps/pcre/pcre_string_utils.c +211 -0
- data/vendor/libgit2/deps/pcre/pcre_study.c +1686 -0
- data/vendor/libgit2/deps/pcre/pcre_tables.c +727 -0
- data/vendor/libgit2/deps/pcre/pcre_ucd.c +3644 -0
- data/vendor/libgit2/deps/pcre/pcre_valid_utf8.c +301 -0
- data/vendor/libgit2/deps/pcre/pcre_version.c +98 -0
- data/vendor/libgit2/deps/pcre/pcre_xclass.c +268 -0
- data/vendor/libgit2/deps/pcre/pcreposix.c +421 -0
- data/vendor/libgit2/deps/pcre/pcreposix.h +117 -0
- data/vendor/libgit2/deps/pcre/ucp.h +224 -0
- data/vendor/libgit2/deps/winhttp/COPYING.GPL +993 -0
- data/vendor/libgit2/deps/winhttp/COPYING.LGPL +502 -0
- data/vendor/libgit2/deps/zlib/CMakeLists.txt +1 -0
- data/vendor/libgit2/deps/zlib/COPYING +27 -0
- data/vendor/libgit2/deps/zlib/adler32.c +0 -7
- data/vendor/libgit2/deps/zlib/crc32.c +0 -7
- data/vendor/libgit2/include/git2/annotated_commit.h +9 -0
- data/vendor/libgit2/include/git2/apply.h +149 -0
- data/vendor/libgit2/include/git2/attr.h +20 -13
- data/vendor/libgit2/include/git2/blame.h +4 -4
- data/vendor/libgit2/include/git2/blob.h +44 -12
- data/vendor/libgit2/include/git2/buffer.h +20 -26
- data/vendor/libgit2/include/git2/cert.h +135 -0
- data/vendor/libgit2/include/git2/checkout.h +53 -21
- data/vendor/libgit2/include/git2/cherrypick.h +3 -3
- data/vendor/libgit2/include/git2/clone.h +5 -5
- data/vendor/libgit2/include/git2/commit.h +25 -3
- data/vendor/libgit2/include/git2/common.h +35 -10
- data/vendor/libgit2/include/git2/config.h +29 -19
- data/vendor/libgit2/include/git2/cred.h +308 -0
- data/vendor/libgit2/include/git2/deprecated.h +493 -0
- data/vendor/libgit2/include/git2/describe.h +4 -4
- data/vendor/libgit2/include/git2/diff.h +177 -135
- data/vendor/libgit2/include/git2/errors.h +53 -46
- data/vendor/libgit2/include/git2/filter.h +8 -0
- data/vendor/libgit2/include/git2/index.h +74 -52
- data/vendor/libgit2/include/git2/indexer.h +76 -6
- data/vendor/libgit2/include/git2/merge.h +25 -10
- data/vendor/libgit2/include/git2/net.h +0 -5
- data/vendor/libgit2/include/git2/notes.h +1 -1
- data/vendor/libgit2/include/git2/object.h +17 -29
- data/vendor/libgit2/include/git2/odb.h +12 -11
- data/vendor/libgit2/include/git2/odb_backend.h +10 -9
- data/vendor/libgit2/include/git2/oid.h +2 -2
- data/vendor/libgit2/include/git2/pack.h +14 -3
- data/vendor/libgit2/include/git2/proxy.h +5 -3
- data/vendor/libgit2/include/git2/rebase.h +46 -2
- data/vendor/libgit2/include/git2/refs.h +34 -16
- data/vendor/libgit2/include/git2/remote.h +111 -14
- data/vendor/libgit2/include/git2/repository.h +69 -34
- data/vendor/libgit2/include/git2/revert.h +1 -1
- data/vendor/libgit2/include/git2/revwalk.h +7 -7
- data/vendor/libgit2/include/git2/signature.h +2 -2
- data/vendor/libgit2/include/git2/stash.h +5 -5
- data/vendor/libgit2/include/git2/status.h +26 -17
- data/vendor/libgit2/include/git2/submodule.h +23 -6
- data/vendor/libgit2/include/git2/sys/alloc.h +18 -18
- data/vendor/libgit2/include/git2/sys/commit.h +1 -1
- data/vendor/libgit2/include/git2/sys/config.h +13 -13
- data/vendor/libgit2/include/git2/sys/cred.h +90 -0
- data/vendor/libgit2/include/git2/sys/filter.h +6 -6
- data/vendor/libgit2/include/git2/sys/merge.h +3 -3
- data/vendor/libgit2/include/git2/sys/odb_backend.h +66 -22
- data/vendor/libgit2/include/git2/sys/path.h +14 -5
- data/vendor/libgit2/include/git2/sys/refdb_backend.h +76 -40
- data/vendor/libgit2/include/git2/sys/repository.h +5 -1
- data/vendor/libgit2/include/git2/sys/stream.h +92 -12
- data/vendor/libgit2/include/git2/sys/transport.h +129 -83
- data/vendor/libgit2/include/git2/tag.h +13 -4
- data/vendor/libgit2/include/git2/trace.h +2 -2
- data/vendor/libgit2/include/git2/transport.h +11 -311
- data/vendor/libgit2/include/git2/tree.h +4 -4
- data/vendor/libgit2/include/git2/types.h +25 -106
- data/vendor/libgit2/include/git2/version.h +3 -3
- data/vendor/libgit2/include/git2/worktree.h +5 -5
- data/vendor/libgit2/include/git2.h +4 -0
- data/vendor/libgit2/src/CMakeLists.txt +104 -235
- data/vendor/libgit2/src/alloc.c +14 -18
- data/vendor/libgit2/src/{stdalloc.c → allocators/stdalloc.c} +7 -8
- data/vendor/libgit2/src/{stdalloc.h → allocators/stdalloc.h} +4 -4
- data/vendor/libgit2/src/allocators/win32_crtdbg.c +118 -0
- data/vendor/libgit2/src/{transports/cred.h → allocators/win32_crtdbg.h} +5 -4
- data/vendor/libgit2/src/annotated_commit.c +18 -11
- data/vendor/libgit2/src/apply.c +535 -28
- data/vendor/libgit2/src/apply.h +3 -1
- data/vendor/libgit2/src/array.h +2 -2
- data/vendor/libgit2/src/attr.c +77 -71
- data/vendor/libgit2/src/attr_file.c +203 -117
- data/vendor/libgit2/src/attr_file.h +9 -9
- data/vendor/libgit2/src/attrcache.c +49 -51
- data/vendor/libgit2/src/attrcache.h +2 -1
- data/vendor/libgit2/src/blame.c +38 -18
- data/vendor/libgit2/src/blame.h +1 -1
- data/vendor/libgit2/src/blame_git.c +29 -15
- data/vendor/libgit2/src/blob.c +123 -37
- data/vendor/libgit2/src/blob.h +19 -2
- data/vendor/libgit2/src/branch.c +47 -23
- data/vendor/libgit2/src/buf_text.c +7 -6
- data/vendor/libgit2/src/buffer.c +60 -53
- data/vendor/libgit2/src/cache.c +38 -45
- data/vendor/libgit2/src/cache.h +3 -3
- data/vendor/libgit2/src/cc-compat.h +20 -3
- data/vendor/libgit2/src/checkout.c +77 -67
- data/vendor/libgit2/src/cherrypick.c +12 -6
- data/vendor/libgit2/src/clone.c +36 -14
- data/vendor/libgit2/src/clone.h +4 -0
- data/vendor/libgit2/src/commit.c +103 -48
- data/vendor/libgit2/src/commit.h +7 -0
- data/vendor/libgit2/src/commit_list.c +36 -78
- data/vendor/libgit2/src/commit_list.h +2 -2
- data/vendor/libgit2/src/common.h +24 -90
- data/vendor/libgit2/src/config.c +203 -176
- data/vendor/libgit2/src/config.h +8 -20
- data/vendor/libgit2/src/config_backend.h +96 -0
- data/vendor/libgit2/src/config_cache.c +41 -35
- data/vendor/libgit2/src/config_entries.c +229 -0
- data/vendor/libgit2/src/config_entries.h +24 -0
- data/vendor/libgit2/src/config_file.c +422 -680
- data/vendor/libgit2/src/config_mem.c +220 -0
- data/vendor/libgit2/src/config_parse.c +96 -68
- data/vendor/libgit2/src/config_parse.h +15 -14
- data/vendor/libgit2/src/config_snapshot.c +206 -0
- data/vendor/libgit2/src/crlf.c +219 -196
- data/vendor/libgit2/src/delta.c +25 -18
- data/vendor/libgit2/src/describe.c +42 -41
- data/vendor/libgit2/src/diff.c +52 -67
- data/vendor/libgit2/src/diff.h +2 -1
- data/vendor/libgit2/src/diff_driver.c +44 -46
- data/vendor/libgit2/src/diff_file.c +16 -14
- data/vendor/libgit2/src/diff_file.h +1 -1
- data/vendor/libgit2/src/diff_generate.c +158 -103
- data/vendor/libgit2/src/diff_generate.h +3 -3
- data/vendor/libgit2/src/diff_parse.c +4 -4
- data/vendor/libgit2/src/diff_print.c +34 -22
- data/vendor/libgit2/src/diff_stats.c +22 -7
- data/vendor/libgit2/src/diff_tform.c +18 -16
- data/vendor/libgit2/src/diff_xdiff.c +3 -3
- data/vendor/libgit2/src/errors.c +51 -39
- data/vendor/libgit2/src/errors.h +81 -0
- data/vendor/libgit2/src/features.h.in +9 -3
- data/vendor/libgit2/src/fetch.c +8 -3
- data/vendor/libgit2/src/fetchhead.c +12 -12
- data/vendor/libgit2/src/filebuf.c +28 -32
- data/vendor/libgit2/src/filebuf.h +2 -2
- data/vendor/libgit2/src/filter.c +47 -33
- data/vendor/libgit2/src/filter.h +0 -10
- data/vendor/libgit2/src/{fileops.c → futils.c} +70 -63
- data/vendor/libgit2/src/{fileops.h → futils.h} +6 -6
- data/vendor/libgit2/src/global.c +35 -55
- data/vendor/libgit2/src/global.h +0 -2
- data/vendor/libgit2/src/hash/sha1/collisiondetect.c +48 -0
- data/vendor/libgit2/src/hash/sha1/collisiondetect.h +19 -0
- data/vendor/libgit2/src/hash/{hash_common_crypto.h → sha1/common_crypto.c} +17 -17
- data/vendor/libgit2/src/hash/sha1/common_crypto.h +19 -0
- data/vendor/libgit2/src/hash/{hash_generic.c → sha1/generic.c} +22 -10
- data/vendor/libgit2/src/hash/{hash_generic.h → sha1/generic.h} +4 -10
- data/vendor/libgit2/src/hash/{hash_mbedtls.c → sha1/mbedtls.c} +15 -7
- data/vendor/libgit2/src/hash/{hash_mbedtls.h → sha1/mbedtls.h} +6 -7
- data/vendor/libgit2/src/hash/sha1/openssl.c +59 -0
- data/vendor/libgit2/src/hash/sha1/openssl.h +19 -0
- data/vendor/libgit2/src/hash/{sha1dc → sha1/sha1dc}/sha1.c +14 -3
- data/vendor/libgit2/src/hash/{hash_win32.c → sha1/win32.c} +47 -37
- data/vendor/libgit2/src/hash/{hash_win32.h → sha1/win32.h} +6 -19
- data/vendor/libgit2/src/hash/sha1.h +38 -0
- data/vendor/libgit2/src/hash.c +61 -0
- data/vendor/libgit2/src/hash.h +20 -21
- data/vendor/libgit2/src/hashsig.c +5 -5
- data/vendor/libgit2/src/idxmap.c +107 -61
- data/vendor/libgit2/src/idxmap.h +153 -31
- data/vendor/libgit2/src/ignore.c +38 -42
- data/vendor/libgit2/src/index.c +264 -199
- data/vendor/libgit2/src/index.h +7 -1
- data/vendor/libgit2/src/indexer.c +338 -167
- data/vendor/libgit2/src/integer.h +71 -26
- data/vendor/libgit2/src/iterator.c +134 -62
- data/vendor/libgit2/src/iterator.h +15 -0
- data/vendor/libgit2/src/mailmap.c +8 -8
- data/vendor/libgit2/src/map.h +1 -1
- data/vendor/libgit2/src/merge.c +137 -93
- data/vendor/libgit2/src/merge_driver.c +11 -11
- data/vendor/libgit2/src/merge_file.c +2 -2
- data/vendor/libgit2/src/mwindow.c +24 -29
- data/vendor/libgit2/src/mwindow.h +4 -4
- data/vendor/libgit2/src/net.c +184 -0
- data/vendor/libgit2/src/net.h +36 -0
- data/vendor/libgit2/src/netops.c +55 -156
- data/vendor/libgit2/src/netops.h +3 -23
- data/vendor/libgit2/src/notes.c +14 -9
- data/vendor/libgit2/src/object.c +120 -69
- data/vendor/libgit2/src/object.h +22 -9
- data/vendor/libgit2/src/object_api.c +8 -8
- data/vendor/libgit2/src/odb.c +111 -88
- data/vendor/libgit2/src/odb.h +8 -7
- data/vendor/libgit2/src/odb_loose.c +58 -47
- data/vendor/libgit2/src/odb_mempack.c +21 -34
- data/vendor/libgit2/src/odb_pack.c +17 -13
- data/vendor/libgit2/src/offmap.c +53 -35
- data/vendor/libgit2/src/offmap.h +108 -21
- data/vendor/libgit2/src/oid.c +12 -7
- data/vendor/libgit2/src/oidmap.c +49 -47
- data/vendor/libgit2/src/oidmap.h +101 -24
- data/vendor/libgit2/src/pack-objects.c +87 -86
- data/vendor/libgit2/src/pack-objects.h +2 -8
- data/vendor/libgit2/src/pack.c +94 -96
- data/vendor/libgit2/src/pack.h +16 -18
- data/vendor/libgit2/src/parse.c +17 -4
- data/vendor/libgit2/src/parse.h +3 -3
- data/vendor/libgit2/src/patch.c +3 -3
- data/vendor/libgit2/src/patch_generate.c +18 -18
- data/vendor/libgit2/src/patch_parse.c +147 -79
- data/vendor/libgit2/src/path.c +207 -62
- data/vendor/libgit2/src/path.h +14 -0
- data/vendor/libgit2/src/pathspec.c +18 -18
- data/vendor/libgit2/src/pool.c +26 -22
- data/vendor/libgit2/src/pool.h +7 -7
- data/vendor/libgit2/src/posix.c +10 -10
- data/vendor/libgit2/src/posix.h +12 -1
- data/vendor/libgit2/src/proxy.c +8 -3
- data/vendor/libgit2/src/push.c +35 -29
- data/vendor/libgit2/src/push.h +2 -1
- data/vendor/libgit2/src/reader.c +265 -0
- data/vendor/libgit2/src/reader.h +107 -0
- data/vendor/libgit2/src/rebase.c +97 -38
- data/vendor/libgit2/src/refdb.c +15 -3
- data/vendor/libgit2/src/refdb_fs.c +318 -222
- data/vendor/libgit2/src/reflog.c +13 -15
- data/vendor/libgit2/src/refs.c +122 -89
- data/vendor/libgit2/src/refs.h +5 -3
- data/vendor/libgit2/src/refspec.c +27 -33
- data/vendor/libgit2/src/regexp.c +221 -0
- data/vendor/libgit2/src/regexp.h +97 -0
- data/vendor/libgit2/src/remote.c +229 -178
- data/vendor/libgit2/src/remote.h +11 -2
- data/vendor/libgit2/src/repository.c +227 -172
- data/vendor/libgit2/src/repository.h +52 -40
- data/vendor/libgit2/src/reset.c +7 -7
- data/vendor/libgit2/src/revert.c +11 -6
- data/vendor/libgit2/src/revparse.c +46 -46
- data/vendor/libgit2/src/revwalk.c +89 -54
- data/vendor/libgit2/src/revwalk.h +20 -0
- data/vendor/libgit2/src/settings.c +22 -9
- data/vendor/libgit2/src/signature.c +15 -13
- data/vendor/libgit2/src/sortedcache.c +22 -36
- data/vendor/libgit2/src/sortedcache.h +1 -1
- data/vendor/libgit2/src/stash.c +56 -76
- data/vendor/libgit2/src/status.c +27 -21
- data/vendor/libgit2/src/stream.h +17 -2
- data/vendor/libgit2/src/streams/mbedtls.c +100 -80
- data/vendor/libgit2/src/streams/mbedtls.h +5 -2
- data/vendor/libgit2/src/streams/openssl.c +93 -81
- data/vendor/libgit2/src/streams/openssl.h +5 -2
- data/vendor/libgit2/src/streams/registry.c +118 -0
- data/vendor/libgit2/src/streams/registry.h +19 -0
- data/vendor/libgit2/src/streams/socket.c +55 -30
- data/vendor/libgit2/src/streams/stransport.c +57 -32
- data/vendor/libgit2/src/streams/stransport.h +5 -0
- data/vendor/libgit2/src/streams/tls.c +48 -20
- data/vendor/libgit2/src/streams/tls.h +12 -4
- data/vendor/libgit2/src/strmap.c +47 -74
- data/vendor/libgit2/src/strmap.h +108 -33
- data/vendor/libgit2/src/submodule.c +190 -169
- data/vendor/libgit2/src/submodule.h +1 -1
- data/vendor/libgit2/src/sysdir.c +25 -15
- data/vendor/libgit2/src/tag.c +39 -26
- data/vendor/libgit2/src/tag.h +2 -1
- data/vendor/libgit2/src/trace.c +2 -2
- data/vendor/libgit2/src/trace.h +2 -2
- data/vendor/libgit2/src/trailer.c +46 -32
- data/vendor/libgit2/src/transaction.c +30 -29
- data/vendor/libgit2/src/transport.c +3 -3
- data/vendor/libgit2/src/transports/auth.c +14 -10
- data/vendor/libgit2/src/transports/auth.h +10 -3
- data/vendor/libgit2/src/transports/auth_negotiate.c +31 -16
- data/vendor/libgit2/src/transports/auth_negotiate.h +2 -2
- data/vendor/libgit2/src/transports/auth_ntlm.c +223 -0
- data/vendor/libgit2/src/transports/auth_ntlm.h +35 -0
- data/vendor/libgit2/src/transports/cred.c +24 -24
- data/vendor/libgit2/src/transports/git.c +25 -30
- data/vendor/libgit2/src/transports/http.c +871 -335
- data/vendor/libgit2/src/transports/http.h +2 -0
- data/vendor/libgit2/src/transports/local.c +28 -28
- data/vendor/libgit2/src/transports/smart.c +64 -46
- data/vendor/libgit2/src/transports/smart.h +5 -6
- data/vendor/libgit2/src/transports/smart_pkt.c +162 -151
- data/vendor/libgit2/src/transports/smart_protocol.c +64 -94
- data/vendor/libgit2/src/transports/ssh.c +76 -65
- data/vendor/libgit2/src/transports/winhttp.c +328 -319
- data/vendor/libgit2/src/tree-cache.c +21 -14
- data/vendor/libgit2/src/tree.c +119 -112
- data/vendor/libgit2/src/tree.h +1 -0
- data/vendor/libgit2/src/unix/map.c +3 -3
- data/vendor/libgit2/src/unix/posix.h +1 -11
- data/vendor/libgit2/src/userdiff.h +3 -1
- data/vendor/libgit2/src/util.c +154 -93
- data/vendor/libgit2/src/util.h +19 -23
- data/vendor/libgit2/src/vector.c +15 -10
- data/vendor/libgit2/src/wildmatch.c +320 -0
- data/vendor/libgit2/src/wildmatch.h +23 -0
- data/vendor/libgit2/src/win32/dir.c +3 -3
- data/vendor/libgit2/src/win32/findfile.c +1 -1
- data/vendor/libgit2/src/win32/map.c +9 -11
- data/vendor/libgit2/src/win32/msvc-compat.h +6 -0
- data/vendor/libgit2/src/win32/path_w32.c +113 -9
- data/vendor/libgit2/src/win32/path_w32.h +18 -29
- data/vendor/libgit2/src/win32/posix.h +1 -4
- data/vendor/libgit2/src/win32/posix_w32.c +69 -44
- data/vendor/libgit2/src/win32/precompiled.h +0 -2
- data/vendor/libgit2/src/win32/thread.c +5 -10
- data/vendor/libgit2/src/win32/w32_buffer.c +9 -5
- data/vendor/libgit2/src/win32/w32_common.h +39 -0
- data/vendor/libgit2/src/win32/w32_crtdbg_stacktrace.c +2 -95
- data/vendor/libgit2/src/win32/w32_crtdbg_stacktrace.h +0 -2
- data/vendor/libgit2/src/win32/w32_stack.c +6 -11
- data/vendor/libgit2/src/win32/w32_stack.h +3 -3
- data/vendor/libgit2/src/win32/w32_util.c +27 -64
- data/vendor/libgit2/src/win32/w32_util.h +5 -49
- data/vendor/libgit2/src/worktree.c +44 -30
- data/vendor/libgit2/src/xdiff/xdiffi.c +5 -5
- data/vendor/libgit2/src/xdiff/xhistogram.c +1 -1
- data/vendor/libgit2/src/xdiff/xmerge.c +27 -15
- data/vendor/libgit2/src/xdiff/xpatience.c +3 -0
- data/vendor/libgit2/src/zstream.c +4 -4
- metadata +115 -38
- data/vendor/libgit2/deps/regex/CMakeLists.txt +0 -2
- data/vendor/libgit2/deps/regex/config.h +0 -7
- data/vendor/libgit2/deps/regex/regcomp.c +0 -3857
- data/vendor/libgit2/deps/regex/regex.c +0 -92
- data/vendor/libgit2/deps/regex/regex.h +0 -582
- data/vendor/libgit2/deps/regex/regex_internal.c +0 -1744
- data/vendor/libgit2/deps/regex/regex_internal.h +0 -819
- data/vendor/libgit2/deps/regex/regexec.c +0 -4369
- data/vendor/libgit2/include/git2/inttypes.h +0 -309
- data/vendor/libgit2/include/git2/sys/time.h +0 -31
- data/vendor/libgit2/libgit2.pc.in +0 -13
- data/vendor/libgit2/src/config_file.h +0 -73
- data/vendor/libgit2/src/fnmatch.c +0 -248
- data/vendor/libgit2/src/fnmatch.h +0 -48
- data/vendor/libgit2/src/hash/hash_collisiondetect.h +0 -47
- data/vendor/libgit2/src/hash/hash_openssl.h +0 -59
- data/vendor/libgit2/src/streams/curl.c +0 -385
- data/vendor/libgit2/src/streams/curl.h +0 -17
- /data/vendor/libgit2/deps/http-parser/{LICENSE-MIT → COPYING} +0 -0
- /data/vendor/libgit2/src/hash/{sha1dc → sha1/sha1dc}/sha1.h +0 -0
- /data/vendor/libgit2/src/hash/{sha1dc → sha1/sha1dc}/ubc_check.c +0 -0
- /data/vendor/libgit2/src/hash/{sha1dc → sha1/sha1dc}/ubc_check.h +0 -0
|
@@ -10,9 +10,12 @@
|
|
|
10
10
|
#include "repository.h"
|
|
11
11
|
#include "filebuf.h"
|
|
12
12
|
#include "attrcache.h"
|
|
13
|
+
#include "buf_text.h"
|
|
13
14
|
#include "git2/blob.h"
|
|
14
15
|
#include "git2/tree.h"
|
|
16
|
+
#include "blob.h"
|
|
15
17
|
#include "index.h"
|
|
18
|
+
#include "wildmatch.h"
|
|
16
19
|
#include <ctype.h>
|
|
17
20
|
|
|
18
21
|
static void attr_file_free(git_attr_file *file)
|
|
@@ -34,10 +37,10 @@ int git_attr_file__new(
|
|
|
34
37
|
git_attr_file_source source)
|
|
35
38
|
{
|
|
36
39
|
git_attr_file *attrs = git__calloc(1, sizeof(git_attr_file));
|
|
37
|
-
|
|
40
|
+
GIT_ERROR_CHECK_ALLOC(attrs);
|
|
38
41
|
|
|
39
42
|
if (git_mutex_init(&attrs->lock) < 0) {
|
|
40
|
-
|
|
43
|
+
git_error_set(GIT_ERROR_OS, "failed to initialize lock");
|
|
41
44
|
git__free(attrs);
|
|
42
45
|
return -1;
|
|
43
46
|
}
|
|
@@ -56,7 +59,7 @@ int git_attr_file__clear_rules(git_attr_file *file, bool need_lock)
|
|
|
56
59
|
git_attr_rule *rule;
|
|
57
60
|
|
|
58
61
|
if (need_lock && git_mutex_lock(&file->lock) < 0) {
|
|
59
|
-
|
|
62
|
+
git_error_set(GIT_ERROR_OS, "failed to lock attribute file");
|
|
60
63
|
return -1;
|
|
61
64
|
}
|
|
62
65
|
|
|
@@ -102,14 +105,22 @@ int git_attr_file__load(
|
|
|
102
105
|
git_attr_session *attr_session,
|
|
103
106
|
git_attr_file_entry *entry,
|
|
104
107
|
git_attr_file_source source,
|
|
105
|
-
git_attr_file_parser parser
|
|
108
|
+
git_attr_file_parser parser,
|
|
109
|
+
bool allow_macros)
|
|
106
110
|
{
|
|
107
111
|
int error = 0;
|
|
112
|
+
git_tree *tree = NULL;
|
|
113
|
+
git_tree_entry *tree_entry = NULL;
|
|
108
114
|
git_blob *blob = NULL;
|
|
109
115
|
git_buf content = GIT_BUF_INIT;
|
|
116
|
+
const char *content_str;
|
|
110
117
|
git_attr_file *file;
|
|
111
118
|
struct stat st;
|
|
112
119
|
bool nonexistent = false;
|
|
120
|
+
int bom_offset;
|
|
121
|
+
git_bom_t bom;
|
|
122
|
+
git_oid id;
|
|
123
|
+
git_object_size_t blobsize;
|
|
113
124
|
|
|
114
125
|
*out = NULL;
|
|
115
126
|
|
|
@@ -118,15 +129,16 @@ int git_attr_file__load(
|
|
|
118
129
|
/* in-memory attribute file doesn't need data */
|
|
119
130
|
break;
|
|
120
131
|
case GIT_ATTR_FILE__FROM_INDEX: {
|
|
121
|
-
git_oid id;
|
|
122
|
-
|
|
123
132
|
if ((error = attr_file_oid_from_index(&id, repo, entry->path)) < 0 ||
|
|
124
133
|
(error = git_blob_lookup(&blob, repo, &id)) < 0)
|
|
125
134
|
return error;
|
|
126
135
|
|
|
127
136
|
/* Do not assume that data straight from the ODB is NULL-terminated;
|
|
128
137
|
* copy the contents of a file to a buffer to work on */
|
|
129
|
-
|
|
138
|
+
blobsize = git_blob_rawsize(blob);
|
|
139
|
+
|
|
140
|
+
GIT_ERROR_CHECK_BLOBSIZE(blobsize);
|
|
141
|
+
git_buf_put(&content, git_blob_rawcontent(blob), (size_t)blobsize);
|
|
130
142
|
break;
|
|
131
143
|
}
|
|
132
144
|
case GIT_ATTR_FILE__FROM_FILE: {
|
|
@@ -146,21 +158,47 @@ int git_attr_file__load(
|
|
|
146
158
|
|
|
147
159
|
break;
|
|
148
160
|
}
|
|
161
|
+
case GIT_ATTR_FILE__FROM_HEAD: {
|
|
162
|
+
if ((error = git_repository_head_tree(&tree, repo)) < 0 ||
|
|
163
|
+
(error = git_tree_entry_bypath(&tree_entry, tree, entry->path)) < 0 ||
|
|
164
|
+
(error = git_blob_lookup(&blob, repo, git_tree_entry_id(tree_entry))) < 0)
|
|
165
|
+
goto cleanup;
|
|
166
|
+
|
|
167
|
+
/*
|
|
168
|
+
* Do not assume that data straight from the ODB is NULL-terminated;
|
|
169
|
+
* copy the contents of a file to a buffer to work on.
|
|
170
|
+
*/
|
|
171
|
+
blobsize = git_blob_rawsize(blob);
|
|
172
|
+
|
|
173
|
+
GIT_ERROR_CHECK_BLOBSIZE(blobsize);
|
|
174
|
+
if ((error = git_buf_put(&content,
|
|
175
|
+
git_blob_rawcontent(blob), (size_t)blobsize)) < 0)
|
|
176
|
+
goto cleanup;
|
|
177
|
+
|
|
178
|
+
break;
|
|
179
|
+
}
|
|
149
180
|
default:
|
|
150
|
-
|
|
181
|
+
git_error_set(GIT_ERROR_INVALID, "unknown file source %d", source);
|
|
151
182
|
return -1;
|
|
152
183
|
}
|
|
153
184
|
|
|
154
185
|
if ((error = git_attr_file__new(&file, entry, source)) < 0)
|
|
155
186
|
goto cleanup;
|
|
156
187
|
|
|
188
|
+
/* advance over a UTF8 BOM */
|
|
189
|
+
content_str = git_buf_cstr(&content);
|
|
190
|
+
bom_offset = git_buf_text_detect_bom(&bom, &content);
|
|
191
|
+
|
|
192
|
+
if (bom == GIT_BOM_UTF8)
|
|
193
|
+
content_str += bom_offset;
|
|
194
|
+
|
|
157
195
|
/* store the key of the attr_reader; don't bother with cache
|
|
158
196
|
* invalidation during the same attr reader session.
|
|
159
197
|
*/
|
|
160
198
|
if (attr_session)
|
|
161
199
|
file->session_key = attr_session->key;
|
|
162
200
|
|
|
163
|
-
if (parser && (error = parser(repo, file,
|
|
201
|
+
if (parser && (error = parser(repo, file, content_str, allow_macros)) < 0) {
|
|
164
202
|
git_attr_file__free(file);
|
|
165
203
|
goto cleanup;
|
|
166
204
|
}
|
|
@@ -170,6 +208,8 @@ int git_attr_file__load(
|
|
|
170
208
|
file->nonexistent = 1;
|
|
171
209
|
else if (source == GIT_ATTR_FILE__FROM_INDEX)
|
|
172
210
|
git_oid_cpy(&file->cache_data.oid, git_blob_id(blob));
|
|
211
|
+
else if (source == GIT_ATTR_FILE__FROM_HEAD)
|
|
212
|
+
git_oid_cpy(&file->cache_data.oid, git_tree_id(tree));
|
|
173
213
|
else if (source == GIT_ATTR_FILE__FROM_FILE)
|
|
174
214
|
git_futils_filestamp_set_from_stat(&file->cache_data.stamp, &st);
|
|
175
215
|
/* else always cacheable */
|
|
@@ -178,6 +218,8 @@ int git_attr_file__load(
|
|
|
178
218
|
|
|
179
219
|
cleanup:
|
|
180
220
|
git_blob_free(blob);
|
|
221
|
+
git_tree_entry_free(tree_entry);
|
|
222
|
+
git_tree_free(tree);
|
|
181
223
|
git_buf_dispose(&content);
|
|
182
224
|
|
|
183
225
|
return error;
|
|
@@ -218,8 +260,21 @@ int git_attr_file__out_of_date(
|
|
|
218
260
|
return (git_oid__cmp(&file->cache_data.oid, &id) != 0);
|
|
219
261
|
}
|
|
220
262
|
|
|
263
|
+
case GIT_ATTR_FILE__FROM_HEAD: {
|
|
264
|
+
git_tree *tree;
|
|
265
|
+
int error;
|
|
266
|
+
|
|
267
|
+
if ((error = git_repository_head_tree(&tree, repo)) < 0)
|
|
268
|
+
return error;
|
|
269
|
+
|
|
270
|
+
error = git_oid__cmp(&file->cache_data.oid, git_tree_id(tree));
|
|
271
|
+
|
|
272
|
+
git_tree_free(tree);
|
|
273
|
+
return error;
|
|
274
|
+
}
|
|
275
|
+
|
|
221
276
|
default:
|
|
222
|
-
|
|
277
|
+
git_error_set(GIT_ERROR_INVALID, "invalid file type %d", file->source);
|
|
223
278
|
return -1;
|
|
224
279
|
}
|
|
225
280
|
}
|
|
@@ -232,56 +287,55 @@ static bool parse_optimized_patterns(
|
|
|
232
287
|
const char *pattern);
|
|
233
288
|
|
|
234
289
|
int git_attr_file__parse_buffer(
|
|
235
|
-
git_repository *repo, git_attr_file *attrs, const char *data)
|
|
290
|
+
git_repository *repo, git_attr_file *attrs, const char *data, bool allow_macros)
|
|
236
291
|
{
|
|
237
|
-
int error = 0;
|
|
238
292
|
const char *scan = data, *context = NULL;
|
|
239
293
|
git_attr_rule *rule = NULL;
|
|
294
|
+
int error = 0;
|
|
240
295
|
|
|
241
|
-
/*
|
|
242
|
-
if (attrs->entry &&
|
|
243
|
-
|
|
244
|
-
!git__suffixcmp(attrs->entry->path, "/" GIT_ATTR_FILE))
|
|
296
|
+
/* If subdir file path, convert context for file paths */
|
|
297
|
+
if (attrs->entry && git_path_root(attrs->entry->path) < 0 &&
|
|
298
|
+
!git__suffixcmp(attrs->entry->path, "/" GIT_ATTR_FILE))
|
|
245
299
|
context = attrs->entry->path;
|
|
246
300
|
|
|
247
301
|
if (git_mutex_lock(&attrs->lock) < 0) {
|
|
248
|
-
|
|
302
|
+
git_error_set(GIT_ERROR_OS, "failed to lock attribute file");
|
|
249
303
|
return -1;
|
|
250
304
|
}
|
|
251
305
|
|
|
252
306
|
while (!error && *scan) {
|
|
253
|
-
/*
|
|
254
|
-
if (!rule
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
}
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
/*
|
|
263
|
-
if (
|
|
264
|
-
|
|
265
|
-
!(error = git_attr_assignment__parse(
|
|
266
|
-
repo, &attrs->pool, &rule->assigns, &scan)))
|
|
307
|
+
/* Allocate rule if needed, otherwise re-use previous rule */
|
|
308
|
+
if (!rule) {
|
|
309
|
+
rule = git__calloc(1, sizeof(*rule));
|
|
310
|
+
GIT_ERROR_CHECK_ALLOC(rule);
|
|
311
|
+
} else
|
|
312
|
+
git_attr_rule__clear(rule);
|
|
313
|
+
|
|
314
|
+
rule->match.flags = GIT_ATTR_FNMATCH_ALLOWNEG | GIT_ATTR_FNMATCH_ALLOWMACRO;
|
|
315
|
+
|
|
316
|
+
/* Parse the next "pattern attr attr attr" line */
|
|
317
|
+
if ((error = git_attr_fnmatch__parse(&rule->match, &attrs->pool, context, &scan)) < 0 ||
|
|
318
|
+
(error = git_attr_assignment__parse(repo, &attrs->pool, &rule->assigns, &scan)) < 0)
|
|
267
319
|
{
|
|
268
|
-
if (
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
error = git_vector_insert(&attrs->rules, rule);
|
|
320
|
+
if (error != GIT_ENOTFOUND)
|
|
321
|
+
goto out;
|
|
322
|
+
error = 0;
|
|
323
|
+
continue;
|
|
273
324
|
}
|
|
274
325
|
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
326
|
+
if (rule->match.flags & GIT_ATTR_FNMATCH_MACRO) {
|
|
327
|
+
/* TODO: warning if macro found in file below repo root */
|
|
328
|
+
if (!allow_macros)
|
|
329
|
+
continue;
|
|
330
|
+
if ((error = git_attr_cache__insert_macro(repo, rule)) < 0)
|
|
331
|
+
goto out;
|
|
332
|
+
} else if ((error = git_vector_insert(&attrs->rules, rule)) < 0)
|
|
333
|
+
goto out;
|
|
334
|
+
|
|
335
|
+
rule = NULL;
|
|
283
336
|
}
|
|
284
337
|
|
|
338
|
+
out:
|
|
285
339
|
git_mutex_unlock(&attrs->lock);
|
|
286
340
|
git_attr_rule__free(rule);
|
|
287
341
|
|
|
@@ -328,33 +382,28 @@ int git_attr_file__lookup_one(
|
|
|
328
382
|
|
|
329
383
|
int git_attr_file__load_standalone(git_attr_file **out, const char *path)
|
|
330
384
|
{
|
|
331
|
-
int error;
|
|
332
|
-
git_attr_file *file;
|
|
333
385
|
git_buf content = GIT_BUF_INIT;
|
|
386
|
+
git_attr_file *file = NULL;
|
|
387
|
+
int error;
|
|
334
388
|
|
|
335
|
-
error =
|
|
336
|
-
|
|
337
|
-
return error;
|
|
389
|
+
if ((error = git_futils_readbuffer(&content, path)) < 0)
|
|
390
|
+
goto out;
|
|
338
391
|
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
if (error < 0) {
|
|
342
|
-
git_attr_file__free(file);
|
|
343
|
-
return error;
|
|
344
|
-
}
|
|
345
|
-
/* because the cache entry is allocated from the file's own pool, we
|
|
392
|
+
/*
|
|
393
|
+
* Because the cache entry is allocated from the file's own pool, we
|
|
346
394
|
* don't have to free it - freeing file+pool will free cache entry, too.
|
|
347
395
|
*/
|
|
348
396
|
|
|
349
|
-
if (
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
397
|
+
if ((error = git_attr_file__new(&file, NULL, GIT_ATTR_FILE__FROM_FILE)) < 0 ||
|
|
398
|
+
(error = git_attr_file__parse_buffer(NULL, file, content.ptr, true)) < 0 ||
|
|
399
|
+
(error = git_attr_cache__alloc_file_entry(&file->entry, NULL, path, &file->pool)) < 0)
|
|
400
|
+
goto out;
|
|
353
401
|
|
|
402
|
+
*out = file;
|
|
403
|
+
out:
|
|
354
404
|
if (error < 0)
|
|
355
405
|
git_attr_file__free(file);
|
|
356
|
-
|
|
357
|
-
*out = file;
|
|
406
|
+
git_buf_dispose(&content);
|
|
358
407
|
|
|
359
408
|
return error;
|
|
360
409
|
}
|
|
@@ -385,18 +434,13 @@ bool git_attr_fnmatch__match(
|
|
|
385
434
|
}
|
|
386
435
|
|
|
387
436
|
if (match->flags & GIT_ATTR_FNMATCH_ICASE)
|
|
388
|
-
flags |=
|
|
389
|
-
if (match->flags & GIT_ATTR_FNMATCH_LEADINGDIR)
|
|
390
|
-
flags |= FNM_LEADING_DIR;
|
|
437
|
+
flags |= WM_CASEFOLD;
|
|
391
438
|
|
|
392
439
|
if (match->flags & GIT_ATTR_FNMATCH_FULLPATH) {
|
|
393
440
|
filename = relpath;
|
|
394
|
-
flags |=
|
|
441
|
+
flags |= WM_PATHNAME;
|
|
395
442
|
} else {
|
|
396
443
|
filename = path->basename;
|
|
397
|
-
|
|
398
|
-
if (path->is_dir)
|
|
399
|
-
flags |= FNM_LEADING_DIR;
|
|
400
444
|
}
|
|
401
445
|
|
|
402
446
|
if ((match->flags & GIT_ATTR_FNMATCH_DIRECTORY) && !path->is_dir) {
|
|
@@ -411,8 +455,6 @@ bool git_attr_fnmatch__match(
|
|
|
411
455
|
path->basename == relpath)
|
|
412
456
|
return false;
|
|
413
457
|
|
|
414
|
-
flags |= FNM_LEADING_DIR;
|
|
415
|
-
|
|
416
458
|
/* fail match if this is a file with same name as ignored folder */
|
|
417
459
|
samename = (match->flags & GIT_ATTR_FNMATCH_ICASE) ?
|
|
418
460
|
!strcasecmp(match->pattern, relpath) :
|
|
@@ -421,22 +463,10 @@ bool git_attr_fnmatch__match(
|
|
|
421
463
|
if (samename)
|
|
422
464
|
return false;
|
|
423
465
|
|
|
424
|
-
return (
|
|
425
|
-
}
|
|
426
|
-
|
|
427
|
-
/* if path is a directory prefix of a negated pattern, then match */
|
|
428
|
-
if ((match->flags & GIT_ATTR_FNMATCH_NEGATIVE) && path->is_dir) {
|
|
429
|
-
size_t pathlen = strlen(relpath);
|
|
430
|
-
bool prefixed = (pathlen <= match->length) &&
|
|
431
|
-
((match->flags & GIT_ATTR_FNMATCH_ICASE) ?
|
|
432
|
-
!strncasecmp(match->pattern, relpath, pathlen) :
|
|
433
|
-
!strncmp(match->pattern, relpath, pathlen));
|
|
434
|
-
|
|
435
|
-
if (prefixed && git_path_at_end_of_segment(&match->pattern[pathlen]))
|
|
436
|
-
return true;
|
|
466
|
+
return (wildmatch(match->pattern, relpath, flags) == WM_MATCH);
|
|
437
467
|
}
|
|
438
468
|
|
|
439
|
-
return (
|
|
469
|
+
return (wildmatch(match->pattern, filename, flags) == WM_MATCH);
|
|
440
470
|
}
|
|
441
471
|
|
|
442
472
|
bool git_attr_rule__match(
|
|
@@ -555,6 +585,61 @@ void git_attr_path__free(git_attr_path *info)
|
|
|
555
585
|
* "cat-file.c" but not "mozilla-sha1/sha1.c".
|
|
556
586
|
*/
|
|
557
587
|
|
|
588
|
+
/*
|
|
589
|
+
* Determine the length of trailing spaces. Escaped spaces do not count as
|
|
590
|
+
* trailing whitespace.
|
|
591
|
+
*/
|
|
592
|
+
static size_t trailing_space_length(const char *p, size_t len)
|
|
593
|
+
{
|
|
594
|
+
size_t n, i;
|
|
595
|
+
for (n = len; n; n--) {
|
|
596
|
+
if (p[n-1] != ' ' && p[n-1] != '\t')
|
|
597
|
+
break;
|
|
598
|
+
|
|
599
|
+
/*
|
|
600
|
+
* Count escape-characters before space. In case where it's an
|
|
601
|
+
* even number of escape characters, then the escape char itself
|
|
602
|
+
* is escaped and the whitespace is an unescaped whitespace.
|
|
603
|
+
* Otherwise, the last escape char is not escaped and the
|
|
604
|
+
* whitespace in an escaped whitespace.
|
|
605
|
+
*/
|
|
606
|
+
i = n;
|
|
607
|
+
while (i > 1 && p[i-2] == '\\')
|
|
608
|
+
i--;
|
|
609
|
+
if ((n - i) % 2)
|
|
610
|
+
break;
|
|
611
|
+
}
|
|
612
|
+
return len - n;
|
|
613
|
+
}
|
|
614
|
+
|
|
615
|
+
static size_t unescape_spaces(char *str)
|
|
616
|
+
{
|
|
617
|
+
char *scan, *pos = str;
|
|
618
|
+
bool escaped = false;
|
|
619
|
+
|
|
620
|
+
if (!str)
|
|
621
|
+
return 0;
|
|
622
|
+
|
|
623
|
+
for (scan = str; *scan; scan++) {
|
|
624
|
+
if (!escaped && *scan == '\\') {
|
|
625
|
+
escaped = true;
|
|
626
|
+
continue;
|
|
627
|
+
}
|
|
628
|
+
|
|
629
|
+
/* Only insert the escape character for escaped non-spaces */
|
|
630
|
+
if (escaped && !git__isspace(*scan))
|
|
631
|
+
*pos++ = '\\';
|
|
632
|
+
|
|
633
|
+
*pos++ = *scan;
|
|
634
|
+
escaped = false;
|
|
635
|
+
}
|
|
636
|
+
|
|
637
|
+
if (pos != scan)
|
|
638
|
+
*pos = '\0';
|
|
639
|
+
|
|
640
|
+
return (pos - str);
|
|
641
|
+
}
|
|
642
|
+
|
|
558
643
|
/*
|
|
559
644
|
* This will return 0 if the spec was filled out,
|
|
560
645
|
* GIT_ENOTFOUND if the fnmatch does not require matching, or
|
|
@@ -568,6 +653,7 @@ int git_attr_fnmatch__parse(
|
|
|
568
653
|
{
|
|
569
654
|
const char *pattern, *scan;
|
|
570
655
|
int slash_count, allow_space;
|
|
656
|
+
bool escaped;
|
|
571
657
|
|
|
572
658
|
assert(spec && base && *base);
|
|
573
659
|
|
|
@@ -579,8 +665,11 @@ int git_attr_fnmatch__parse(
|
|
|
579
665
|
|
|
580
666
|
pattern = *base;
|
|
581
667
|
|
|
582
|
-
while (git__isspace(*pattern))
|
|
583
|
-
|
|
668
|
+
while (!allow_space && git__isspace(*pattern))
|
|
669
|
+
pattern++;
|
|
670
|
+
|
|
671
|
+
if (!*pattern || *pattern == '#' || *pattern == '\n' ||
|
|
672
|
+
(*pattern == '\r' && *(pattern + 1) == '\n')) {
|
|
584
673
|
*base = git__next_line(pattern);
|
|
585
674
|
return GIT_ENOTFOUND;
|
|
586
675
|
}
|
|
@@ -595,29 +684,33 @@ int git_attr_fnmatch__parse(
|
|
|
595
684
|
|
|
596
685
|
if (*pattern == '!' && (spec->flags & GIT_ATTR_FNMATCH_ALLOWNEG) != 0) {
|
|
597
686
|
spec->flags = spec->flags | GIT_ATTR_FNMATCH_NEGATIVE;
|
|
598
|
-
if ((spec->flags & GIT_ATTR_FNMATCH_NOLEADINGDIR) == 0)
|
|
599
|
-
spec->flags |= GIT_ATTR_FNMATCH_LEADINGDIR;
|
|
600
687
|
pattern++;
|
|
601
688
|
}
|
|
602
689
|
|
|
603
690
|
slash_count = 0;
|
|
691
|
+
escaped = false;
|
|
692
|
+
/* Scan until a non-escaped whitespace. */
|
|
604
693
|
for (scan = pattern; *scan != '\0'; ++scan) {
|
|
605
|
-
|
|
606
|
-
if (git__isspace(*scan) && *(scan - 1) != '\\') {
|
|
607
|
-
if (!allow_space || (*scan != ' ' && *scan != '\t' && *scan != '\r'))
|
|
608
|
-
break;
|
|
609
|
-
}
|
|
694
|
+
char c = *scan;
|
|
610
695
|
|
|
611
|
-
if (
|
|
696
|
+
if (c == '\\' && !escaped) {
|
|
697
|
+
escaped = true;
|
|
698
|
+
continue;
|
|
699
|
+
} else if (git__isspace(c) && !escaped) {
|
|
700
|
+
if (!allow_space || (c != ' ' && c != '\t' && c != '\r'))
|
|
701
|
+
break;
|
|
702
|
+
} else if (c == '/') {
|
|
612
703
|
spec->flags = spec->flags | GIT_ATTR_FNMATCH_FULLPATH;
|
|
613
704
|
slash_count++;
|
|
614
|
-
|
|
705
|
+
|
|
706
|
+
if (slash_count == 1 && pattern == scan)
|
|
615
707
|
pattern++;
|
|
616
|
-
}
|
|
617
|
-
|
|
618
|
-
else if (git__iswildcard(*scan) &&
|
|
619
|
-
(scan == pattern || (*(scan - 1) != '\\')))
|
|
708
|
+
} else if (git__iswildcard(c) && !escaped) {
|
|
709
|
+
/* remember if we see an unescaped wildcard in pattern */
|
|
620
710
|
spec->flags = spec->flags | GIT_ATTR_FNMATCH_HASWILD;
|
|
711
|
+
}
|
|
712
|
+
|
|
713
|
+
escaped = false;
|
|
621
714
|
}
|
|
622
715
|
|
|
623
716
|
*base = scan;
|
|
@@ -635,9 +728,10 @@ int git_attr_fnmatch__parse(
|
|
|
635
728
|
return GIT_ENOTFOUND;
|
|
636
729
|
|
|
637
730
|
/* Remove trailing spaces. */
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
731
|
+
spec->length -= trailing_space_length(pattern, spec->length);
|
|
732
|
+
|
|
733
|
+
if (spec->length == 0)
|
|
734
|
+
return GIT_ENOTFOUND;
|
|
641
735
|
|
|
642
736
|
if (pattern[spec->length - 1] == '/') {
|
|
643
737
|
spec->length--;
|
|
@@ -645,14 +739,6 @@ int git_attr_fnmatch__parse(
|
|
|
645
739
|
if (--slash_count <= 0)
|
|
646
740
|
spec->flags = spec->flags & ~GIT_ATTR_FNMATCH_FULLPATH;
|
|
647
741
|
}
|
|
648
|
-
if ((spec->flags & GIT_ATTR_FNMATCH_NOLEADINGDIR) == 0 &&
|
|
649
|
-
spec->length >= 2 &&
|
|
650
|
-
pattern[spec->length - 1] == '*' &&
|
|
651
|
-
pattern[spec->length - 2] == '/') {
|
|
652
|
-
spec->length -= 2;
|
|
653
|
-
spec->flags = spec->flags | GIT_ATTR_FNMATCH_LEADINGDIR;
|
|
654
|
-
/* leave FULLPATH match on, however */
|
|
655
|
-
}
|
|
656
742
|
|
|
657
743
|
if (context) {
|
|
658
744
|
char *slash = strrchr(context, '/');
|
|
@@ -671,9 +757,8 @@ int git_attr_fnmatch__parse(
|
|
|
671
757
|
*base = git__next_line(pattern);
|
|
672
758
|
return -1;
|
|
673
759
|
} else {
|
|
674
|
-
/* strip '\' that might have
|
|
675
|
-
spec->length =
|
|
676
|
-
/* TODO: convert remaining '\' into '/' for POSIX ??? */
|
|
760
|
+
/* strip '\' that might have been used for internal whitespace */
|
|
761
|
+
spec->length = unescape_spaces(spec->pattern);
|
|
677
762
|
}
|
|
678
763
|
|
|
679
764
|
return 0;
|
|
@@ -751,7 +836,7 @@ int git_attr_assignment__parse(
|
|
|
751
836
|
/* allocate assign if needed */
|
|
752
837
|
if (!assign) {
|
|
753
838
|
assign = git__calloc(1, sizeof(git_attr_assignment));
|
|
754
|
-
|
|
839
|
+
GIT_ERROR_CHECK_ALLOC(assign);
|
|
755
840
|
GIT_REFCOUNT_INC(assign);
|
|
756
841
|
}
|
|
757
842
|
|
|
@@ -785,7 +870,7 @@ int git_attr_assignment__parse(
|
|
|
785
870
|
|
|
786
871
|
/* allocate permanent storage for name */
|
|
787
872
|
assign->name = git_pool_strndup(pool, name_start, scan - name_start);
|
|
788
|
-
|
|
873
|
+
GIT_ERROR_CHECK_ALLOC(assign->name);
|
|
789
874
|
|
|
790
875
|
/* if there is an equals sign, find the value */
|
|
791
876
|
if (*scan == '=') {
|
|
@@ -794,7 +879,7 @@ int git_attr_assignment__parse(
|
|
|
794
879
|
/* if we found a value, allocate permanent storage for it */
|
|
795
880
|
if (scan > value_start) {
|
|
796
881
|
assign->value = git_pool_strndup(pool, value_start, scan - value_start);
|
|
797
|
-
|
|
882
|
+
GIT_ERROR_CHECK_ALLOC(assign->value);
|
|
798
883
|
}
|
|
799
884
|
}
|
|
800
885
|
|
|
@@ -866,6 +951,7 @@ int git_attr_session__init(git_attr_session *session, git_repository *repo)
|
|
|
866
951
|
{
|
|
867
952
|
assert(repo);
|
|
868
953
|
|
|
954
|
+
memset(session, 0, sizeof(*session));
|
|
869
955
|
session->key = git_atomic_inc(&repo->attr_session_key);
|
|
870
956
|
|
|
871
957
|
return 0;
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
#include "vector.h"
|
|
15
15
|
#include "pool.h"
|
|
16
16
|
#include "buffer.h"
|
|
17
|
-
#include "
|
|
17
|
+
#include "futils.h"
|
|
18
18
|
|
|
19
19
|
#define GIT_ATTR_FILE ".gitattributes"
|
|
20
20
|
#define GIT_ATTR_FILE_INREPO "attributes"
|
|
@@ -32,19 +32,17 @@
|
|
|
32
32
|
#define GIT_ATTR_FNMATCH_MATCH_ALL (1U << 8)
|
|
33
33
|
#define GIT_ATTR_FNMATCH_ALLOWNEG (1U << 9)
|
|
34
34
|
#define GIT_ATTR_FNMATCH_ALLOWMACRO (1U << 10)
|
|
35
|
-
#define GIT_ATTR_FNMATCH_LEADINGDIR (1U << 11)
|
|
36
|
-
#define GIT_ATTR_FNMATCH_NOLEADINGDIR (1U << 12)
|
|
37
35
|
|
|
38
36
|
#define GIT_ATTR_FNMATCH__INCOMING \
|
|
39
|
-
(GIT_ATTR_FNMATCH_ALLOWSPACE | GIT_ATTR_FNMATCH_ALLOWNEG |
|
|
40
|
-
GIT_ATTR_FNMATCH_ALLOWMACRO | GIT_ATTR_FNMATCH_NOLEADINGDIR)
|
|
37
|
+
(GIT_ATTR_FNMATCH_ALLOWSPACE | GIT_ATTR_FNMATCH_ALLOWNEG | GIT_ATTR_FNMATCH_ALLOWMACRO)
|
|
41
38
|
|
|
42
39
|
typedef enum {
|
|
43
40
|
GIT_ATTR_FILE__IN_MEMORY = 0,
|
|
44
41
|
GIT_ATTR_FILE__FROM_FILE = 1,
|
|
45
42
|
GIT_ATTR_FILE__FROM_INDEX = 2,
|
|
43
|
+
GIT_ATTR_FILE__FROM_HEAD = 3,
|
|
46
44
|
|
|
47
|
-
GIT_ATTR_FILE_NUM_SOURCES =
|
|
45
|
+
GIT_ATTR_FILE_NUM_SOURCES = 4
|
|
48
46
|
} git_attr_file_source;
|
|
49
47
|
|
|
50
48
|
extern const char *git_attr__true;
|
|
@@ -134,7 +132,8 @@ extern int git_attr_get_many_with_session(
|
|
|
134
132
|
typedef int (*git_attr_file_parser)(
|
|
135
133
|
git_repository *repo,
|
|
136
134
|
git_attr_file *file,
|
|
137
|
-
const char *data
|
|
135
|
+
const char *data,
|
|
136
|
+
bool allow_macros);
|
|
138
137
|
|
|
139
138
|
/*
|
|
140
139
|
* git_attr_file API
|
|
@@ -153,7 +152,8 @@ int git_attr_file__load(
|
|
|
153
152
|
git_attr_session *attr_session,
|
|
154
153
|
git_attr_file_entry *ce,
|
|
155
154
|
git_attr_file_source source,
|
|
156
|
-
git_attr_file_parser parser
|
|
155
|
+
git_attr_file_parser parser,
|
|
156
|
+
bool allow_macros);
|
|
157
157
|
|
|
158
158
|
int git_attr_file__load_standalone(
|
|
159
159
|
git_attr_file **out, const char *path);
|
|
@@ -162,7 +162,7 @@ int git_attr_file__out_of_date(
|
|
|
162
162
|
git_repository *repo, git_attr_session *session, git_attr_file *file);
|
|
163
163
|
|
|
164
164
|
int git_attr_file__parse_buffer(
|
|
165
|
-
git_repository *repo, git_attr_file *attrs, const char *data);
|
|
165
|
+
git_repository *repo, git_attr_file *attrs, const char *data, bool allow_macros);
|
|
166
166
|
|
|
167
167
|
int git_attr_file__clear_rules(
|
|
168
168
|
git_attr_file *file, bool need_lock);
|