rugged 0.28.4 → 0.28.4.1
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 +0 -1
- data/vendor/libgit2/CMakeLists.txt +16 -36
- data/vendor/libgit2/COPYING +0 -28
- data/vendor/libgit2/cmake/Modules/EnableWarnings.cmake +1 -5
- data/vendor/libgit2/cmake/Modules/FindCoreFoundation.cmake +2 -2
- data/vendor/libgit2/cmake/Modules/FindGSSAPI.cmake +1 -1
- data/vendor/libgit2/cmake/Modules/FindSecurity.cmake +2 -2
- data/vendor/libgit2/cmake/Modules/FindStatNsec.cmake +0 -6
- data/vendor/libgit2/deps/http-parser/http_parser.c +6 -11
- data/vendor/libgit2/deps/regex/CMakeLists.txt +2 -0
- data/vendor/libgit2/deps/regex/COPYING +502 -0
- data/vendor/libgit2/deps/regex/config.h +7 -0
- data/vendor/libgit2/deps/regex/regcomp.c +3857 -0
- data/vendor/libgit2/deps/regex/regex.c +92 -0
- data/vendor/libgit2/deps/regex/regex.h +582 -0
- data/vendor/libgit2/deps/regex/regex_internal.c +1744 -0
- data/vendor/libgit2/deps/regex/regex_internal.h +819 -0
- data/vendor/libgit2/deps/regex/regexec.c +4369 -0
- data/vendor/libgit2/deps/zlib/adler32.c +7 -0
- data/vendor/libgit2/deps/zlib/crc32.c +7 -0
- data/vendor/libgit2/include/git2.h +0 -2
- data/vendor/libgit2/include/git2/apply.h +2 -22
- data/vendor/libgit2/include/git2/attr.h +12 -19
- data/vendor/libgit2/include/git2/blame.h +2 -2
- data/vendor/libgit2/include/git2/blob.h +12 -44
- data/vendor/libgit2/include/git2/buffer.h +14 -20
- data/vendor/libgit2/include/git2/checkout.h +14 -46
- data/vendor/libgit2/include/git2/cherrypick.h +3 -3
- data/vendor/libgit2/include/git2/clone.h +2 -2
- data/vendor/libgit2/include/git2/commit.h +1 -23
- data/vendor/libgit2/include/git2/common.h +5 -7
- data/vendor/libgit2/include/git2/config.h +12 -12
- data/vendor/libgit2/include/git2/deprecated.h +3 -243
- data/vendor/libgit2/include/git2/describe.h +4 -4
- data/vendor/libgit2/include/git2/diff.h +14 -16
- data/vendor/libgit2/include/git2/filter.h +0 -8
- data/vendor/libgit2/include/git2/index.h +1 -2
- data/vendor/libgit2/include/git2/indexer.h +4 -48
- data/vendor/libgit2/include/git2/inttypes.h +309 -0
- data/vendor/libgit2/include/git2/merge.h +10 -6
- data/vendor/libgit2/include/git2/net.h +5 -0
- data/vendor/libgit2/include/git2/object.h +14 -2
- data/vendor/libgit2/include/git2/odb.h +2 -3
- data/vendor/libgit2/include/git2/odb_backend.h +4 -5
- data/vendor/libgit2/include/git2/oid.h +1 -1
- data/vendor/libgit2/include/git2/pack.h +1 -12
- data/vendor/libgit2/include/git2/proxy.h +3 -5
- data/vendor/libgit2/include/git2/rebase.h +2 -46
- data/vendor/libgit2/include/git2/refs.h +0 -19
- data/vendor/libgit2/include/git2/remote.h +12 -35
- data/vendor/libgit2/include/git2/repository.h +2 -24
- data/vendor/libgit2/include/git2/revert.h +1 -1
- data/vendor/libgit2/include/git2/stash.h +3 -3
- data/vendor/libgit2/include/git2/status.h +16 -25
- data/vendor/libgit2/include/git2/submodule.h +3 -20
- data/vendor/libgit2/include/git2/sys/alloc.h +9 -9
- data/vendor/libgit2/include/git2/sys/odb_backend.h +4 -48
- data/vendor/libgit2/include/git2/sys/refdb_backend.h +21 -57
- data/vendor/libgit2/include/git2/sys/repository.h +1 -5
- data/vendor/libgit2/include/git2/sys/time.h +31 -0
- data/vendor/libgit2/include/git2/sys/transport.h +2 -2
- data/vendor/libgit2/include/git2/tag.h +2 -11
- data/vendor/libgit2/include/git2/trace.h +2 -2
- data/vendor/libgit2/include/git2/transport.h +340 -11
- data/vendor/libgit2/include/git2/tree.h +1 -1
- data/vendor/libgit2/include/git2/types.h +89 -4
- data/vendor/libgit2/include/git2/version.h +2 -2
- data/vendor/libgit2/include/git2/worktree.h +5 -5
- data/vendor/libgit2/libgit2.pc.in +13 -0
- data/vendor/libgit2/src/CMakeLists.txt +222 -88
- data/vendor/libgit2/src/alloc.c +14 -2
- data/vendor/libgit2/src/apply.c +30 -60
- data/vendor/libgit2/src/attr.c +64 -70
- data/vendor/libgit2/src/attr_file.c +96 -189
- data/vendor/libgit2/src/attr_file.h +9 -9
- data/vendor/libgit2/src/attrcache.c +46 -44
- data/vendor/libgit2/src/attrcache.h +1 -2
- data/vendor/libgit2/src/blame.c +5 -17
- data/vendor/libgit2/src/blame.h +1 -1
- data/vendor/libgit2/src/blame_git.c +7 -21
- data/vendor/libgit2/src/blob.c +17 -81
- data/vendor/libgit2/src/blob.h +2 -2
- data/vendor/libgit2/src/branch.c +5 -29
- data/vendor/libgit2/src/buffer.c +7 -14
- data/vendor/libgit2/src/cache.c +33 -26
- data/vendor/libgit2/src/cache.h +1 -1
- data/vendor/libgit2/src/cc-compat.h +0 -5
- data/vendor/libgit2/src/checkout.c +16 -26
- data/vendor/libgit2/src/cherrypick.c +3 -9
- data/vendor/libgit2/src/clone.c +7 -29
- data/vendor/libgit2/src/clone.h +0 -4
- data/vendor/libgit2/src/commit.c +21 -69
- data/vendor/libgit2/src/commit.h +0 -6
- data/vendor/libgit2/src/commit_list.c +76 -28
- data/vendor/libgit2/src/commit_list.h +2 -2
- data/vendor/libgit2/src/common.h +75 -3
- data/vendor/libgit2/src/config.c +40 -31
- data/vendor/libgit2/src/config.h +6 -7
- data/vendor/libgit2/src/config_backend.h +0 -12
- data/vendor/libgit2/src/config_cache.c +39 -39
- data/vendor/libgit2/src/config_entries.c +99 -69
- data/vendor/libgit2/src/config_entries.h +0 -1
- data/vendor/libgit2/src/config_file.c +380 -337
- data/vendor/libgit2/src/config_mem.c +16 -12
- data/vendor/libgit2/src/config_parse.c +29 -49
- data/vendor/libgit2/src/config_parse.h +12 -13
- data/vendor/libgit2/src/crlf.c +14 -14
- data/vendor/libgit2/src/describe.c +20 -21
- data/vendor/libgit2/src/diff.c +58 -43
- data/vendor/libgit2/src/diff.h +1 -2
- data/vendor/libgit2/src/diff_driver.c +38 -37
- data/vendor/libgit2/src/diff_file.c +7 -9
- data/vendor/libgit2/src/diff_file.h +1 -1
- data/vendor/libgit2/src/diff_generate.c +85 -135
- data/vendor/libgit2/src/diff_generate.h +2 -2
- data/vendor/libgit2/src/diff_parse.c +1 -1
- data/vendor/libgit2/src/diff_print.c +13 -25
- data/vendor/libgit2/src/diff_stats.c +1 -1
- data/vendor/libgit2/src/diff_tform.c +4 -4
- data/vendor/libgit2/src/errors.c +22 -12
- data/vendor/libgit2/src/features.h.in +2 -9
- data/vendor/libgit2/src/fetch.c +2 -7
- data/vendor/libgit2/src/fetchhead.c +1 -1
- data/vendor/libgit2/src/filebuf.c +10 -6
- data/vendor/libgit2/src/filebuf.h +2 -2
- data/vendor/libgit2/src/{futils.c → fileops.c} +17 -21
- data/vendor/libgit2/src/{futils.h → fileops.h} +5 -5
- data/vendor/libgit2/src/filter.c +8 -16
- data/vendor/libgit2/src/fnmatch.c +248 -0
- data/vendor/libgit2/src/fnmatch.h +48 -0
- data/vendor/libgit2/src/global.c +40 -12
- data/vendor/libgit2/src/global.h +2 -0
- data/vendor/libgit2/src/hash.c +0 -61
- data/vendor/libgit2/src/hash.h +21 -19
- data/vendor/libgit2/src/hash/{sha1/collisiondetect.c → hash_collisiondetect.h} +17 -14
- data/vendor/libgit2/src/hash/{sha1/common_crypto.c → hash_common_crypto.h} +19 -15
- data/vendor/libgit2/src/hash/{sha1/generic.c → hash_generic.c} +10 -22
- data/vendor/libgit2/src/hash/{sha1/generic.h → hash_generic.h} +14 -4
- data/vendor/libgit2/src/hash/{sha1/mbedtls.c → hash_mbedtls.c} +7 -15
- data/vendor/libgit2/src/hash/{sha1/mbedtls.h → hash_mbedtls.h} +11 -6
- data/vendor/libgit2/src/hash/{sha1/openssl.c → hash_openssl.h} +18 -14
- data/vendor/libgit2/src/hash/{sha1/win32.c → hash_win32.c} +24 -34
- data/vendor/libgit2/src/hash/{sha1/win32.h → hash_win32.h} +19 -6
- data/vendor/libgit2/src/hash/{sha1/sha1dc → sha1dc}/sha1.c +3 -14
- data/vendor/libgit2/src/hash/{sha1/sha1dc → sha1dc}/sha1.h +0 -0
- data/vendor/libgit2/src/hash/{sha1/sha1dc → sha1dc}/ubc_check.c +0 -0
- data/vendor/libgit2/src/hash/{sha1/sha1dc → sha1dc}/ubc_check.h +0 -0
- data/vendor/libgit2/src/hashsig.c +1 -1
- data/vendor/libgit2/src/idxmap.c +65 -91
- data/vendor/libgit2/src/idxmap.h +15 -151
- data/vendor/libgit2/src/ignore.c +38 -32
- data/vendor/libgit2/src/index.c +43 -66
- data/vendor/libgit2/src/index.h +1 -1
- data/vendor/libgit2/src/indexer.c +70 -69
- data/vendor/libgit2/src/integer.h +4 -39
- data/vendor/libgit2/src/iterator.c +22 -27
- data/vendor/libgit2/src/map.h +1 -1
- data/vendor/libgit2/src/merge.c +44 -58
- data/vendor/libgit2/src/merge_driver.c +4 -4
- data/vendor/libgit2/src/merge_file.c +1 -1
- data/vendor/libgit2/src/mwindow.c +23 -18
- data/vendor/libgit2/src/mwindow.h +4 -4
- data/vendor/libgit2/src/netops.c +165 -55
- data/vendor/libgit2/src/netops.h +25 -3
- data/vendor/libgit2/src/notes.c +2 -2
- data/vendor/libgit2/src/object.c +2 -2
- data/vendor/libgit2/src/object.h +0 -2
- data/vendor/libgit2/src/odb.c +23 -41
- data/vendor/libgit2/src/odb.h +2 -3
- data/vendor/libgit2/src/odb_loose.c +10 -17
- data/vendor/libgit2/src/odb_mempack.c +23 -10
- data/vendor/libgit2/src/odb_pack.c +4 -4
- data/vendor/libgit2/src/offmap.c +55 -43
- data/vendor/libgit2/src/offmap.h +24 -102
- data/vendor/libgit2/src/oid.c +1 -6
- data/vendor/libgit2/src/oidmap.c +57 -39
- data/vendor/libgit2/src/oidmap.h +19 -99
- data/vendor/libgit2/src/pack-objects.c +32 -25
- data/vendor/libgit2/src/pack-objects.h +1 -1
- data/vendor/libgit2/src/pack.c +47 -45
- data/vendor/libgit2/src/pack.h +14 -12
- data/vendor/libgit2/src/parse.c +0 -10
- data/vendor/libgit2/src/parse.h +3 -3
- data/vendor/libgit2/src/patch.c +1 -1
- data/vendor/libgit2/src/patch_generate.c +2 -2
- data/vendor/libgit2/src/patch_parse.c +31 -124
- data/vendor/libgit2/src/path.c +6 -43
- data/vendor/libgit2/src/path.h +0 -2
- data/vendor/libgit2/src/pathspec.c +13 -13
- data/vendor/libgit2/src/pool.c +22 -26
- data/vendor/libgit2/src/pool.h +7 -7
- data/vendor/libgit2/src/posix.c +7 -7
- data/vendor/libgit2/src/posix.h +1 -12
- data/vendor/libgit2/src/proxy.c +2 -7
- data/vendor/libgit2/src/push.c +5 -10
- data/vendor/libgit2/src/reader.c +2 -2
- data/vendor/libgit2/src/rebase.c +7 -66
- data/vendor/libgit2/src/refdb.c +0 -12
- data/vendor/libgit2/src/refdb_fs.c +165 -214
- data/vendor/libgit2/src/reflog.c +13 -11
- data/vendor/libgit2/src/refs.c +18 -24
- data/vendor/libgit2/src/refspec.c +16 -9
- data/vendor/libgit2/src/remote.c +52 -50
- data/vendor/libgit2/src/remote.h +2 -2
- data/vendor/libgit2/src/repository.c +100 -115
- data/vendor/libgit2/src/repository.h +40 -49
- data/vendor/libgit2/src/revert.c +3 -8
- data/vendor/libgit2/src/revparse.c +19 -18
- data/vendor/libgit2/src/revwalk.c +30 -63
- data/vendor/libgit2/src/revwalk.h +0 -20
- data/vendor/libgit2/src/settings.c +0 -5
- data/vendor/libgit2/src/sortedcache.c +26 -12
- data/vendor/libgit2/src/sortedcache.h +1 -1
- data/vendor/libgit2/src/stash.c +65 -45
- data/vendor/libgit2/src/status.c +9 -15
- data/vendor/libgit2/src/{allocators/stdalloc.c → stdalloc.c} +4 -3
- data/vendor/libgit2/src/{allocators/stdalloc.h → stdalloc.h} +4 -4
- data/vendor/libgit2/src/streams/openssl.c +0 -20
- data/vendor/libgit2/src/streams/socket.c +2 -2
- data/vendor/libgit2/src/strmap.c +84 -37
- data/vendor/libgit2/src/strmap.h +33 -105
- data/vendor/libgit2/src/submodule.c +70 -102
- data/vendor/libgit2/src/submodule.h +1 -1
- data/vendor/libgit2/src/sysdir.c +1 -11
- data/vendor/libgit2/src/tag.c +2 -10
- data/vendor/libgit2/src/trace.c +1 -1
- data/vendor/libgit2/src/trace.h +2 -2
- data/vendor/libgit2/src/trailer.c +32 -46
- data/vendor/libgit2/src/transaction.c +9 -10
- data/vendor/libgit2/src/transports/auth.c +9 -10
- data/vendor/libgit2/src/transports/auth.h +4 -11
- data/vendor/libgit2/src/transports/auth_negotiate.c +9 -23
- data/vendor/libgit2/src/transports/auth_negotiate.h +2 -2
- data/vendor/libgit2/src/transports/cred.c +6 -6
- data/vendor/libgit2/src/{allocators/win32_crtdbg.h → transports/cred.h} +4 -5
- data/vendor/libgit2/src/transports/git.c +16 -11
- data/vendor/libgit2/src/transports/http.c +276 -419
- data/vendor/libgit2/src/transports/http.h +1 -1
- data/vendor/libgit2/src/transports/local.c +9 -9
- data/vendor/libgit2/src/transports/smart.c +17 -17
- data/vendor/libgit2/src/transports/smart.h +2 -2
- data/vendor/libgit2/src/transports/smart_protocol.c +60 -36
- data/vendor/libgit2/src/transports/ssh.c +36 -46
- data/vendor/libgit2/src/transports/winhttp.c +207 -231
- data/vendor/libgit2/src/tree-cache.c +7 -14
- data/vendor/libgit2/src/tree.c +24 -10
- data/vendor/libgit2/src/unix/map.c +1 -1
- data/vendor/libgit2/src/unix/posix.h +11 -1
- data/vendor/libgit2/src/userdiff.h +1 -3
- data/vendor/libgit2/src/util.c +53 -51
- data/vendor/libgit2/src/util.h +21 -16
- data/vendor/libgit2/src/win32/map.c +5 -3
- data/vendor/libgit2/src/win32/path_w32.c +2 -12
- data/vendor/libgit2/src/win32/path_w32.h +29 -0
- data/vendor/libgit2/src/win32/posix.h +4 -1
- data/vendor/libgit2/src/win32/posix_w32.c +5 -40
- data/vendor/libgit2/src/win32/precompiled.h +2 -0
- data/vendor/libgit2/src/win32/thread.c +10 -5
- data/vendor/libgit2/src/win32/w32_buffer.c +3 -7
- data/vendor/libgit2/src/win32/w32_crtdbg_stacktrace.c +93 -0
- data/vendor/libgit2/src/win32/w32_crtdbg_stacktrace.h +2 -0
- data/vendor/libgit2/src/win32/w32_stack.c +9 -4
- data/vendor/libgit2/src/win32/w32_stack.h +3 -3
- data/vendor/libgit2/src/win32/w32_util.c +0 -31
- data/vendor/libgit2/src/win32/w32_util.h +32 -6
- data/vendor/libgit2/src/worktree.c +22 -36
- data/vendor/libgit2/src/xdiff/xdiffi.c +1 -1
- data/vendor/libgit2/src/xdiff/xmerge.c +0 -12
- data/vendor/libgit2/src/xdiff/xpatience.c +0 -3
- metadata +34 -98
- data/vendor/libgit2/cmake/Modules/FindGSSFramework.cmake +0 -28
- data/vendor/libgit2/cmake/Modules/FindPCRE.cmake +0 -38
- data/vendor/libgit2/cmake/Modules/FindPCRE2.cmake +0 -37
- data/vendor/libgit2/cmake/Modules/PkgBuildConfig.cmake +0 -110
- data/vendor/libgit2/cmake/Modules/SelectGSSAPI.cmake +0 -53
- data/vendor/libgit2/cmake/Modules/SelectHTTPSBackend.cmake +0 -124
- data/vendor/libgit2/cmake/Modules/SelectHashes.cmake +0 -66
- data/vendor/libgit2/deps/ntlmclient/CMakeLists.txt +0 -21
- data/vendor/libgit2/deps/ntlmclient/compat.h +0 -33
- data/vendor/libgit2/deps/ntlmclient/crypt.h +0 -64
- data/vendor/libgit2/deps/ntlmclient/crypt_commoncrypto.c +0 -120
- data/vendor/libgit2/deps/ntlmclient/crypt_commoncrypto.h +0 -18
- data/vendor/libgit2/deps/ntlmclient/crypt_mbedtls.c +0 -145
- data/vendor/libgit2/deps/ntlmclient/crypt_mbedtls.h +0 -18
- data/vendor/libgit2/deps/ntlmclient/crypt_openssl.c +0 -130
- data/vendor/libgit2/deps/ntlmclient/crypt_openssl.h +0 -21
- data/vendor/libgit2/deps/ntlmclient/ntlm.c +0 -1420
- data/vendor/libgit2/deps/ntlmclient/ntlm.h +0 -174
- data/vendor/libgit2/deps/ntlmclient/ntlmclient.h +0 -320
- data/vendor/libgit2/deps/ntlmclient/unicode.h +0 -36
- data/vendor/libgit2/deps/ntlmclient/unicode_builtin.c +0 -445
- data/vendor/libgit2/deps/ntlmclient/unicode_iconv.c +0 -201
- data/vendor/libgit2/deps/ntlmclient/utf8.h +0 -1257
- data/vendor/libgit2/deps/ntlmclient/util.c +0 -21
- data/vendor/libgit2/deps/ntlmclient/util.h +0 -14
- data/vendor/libgit2/deps/pcre/CMakeLists.txt +0 -140
- data/vendor/libgit2/deps/pcre/COPYING +0 -5
- data/vendor/libgit2/deps/pcre/cmake/COPYING-CMAKE-SCRIPTS +0 -22
- data/vendor/libgit2/deps/pcre/cmake/FindEditline.cmake +0 -17
- data/vendor/libgit2/deps/pcre/cmake/FindPackageHandleStandardArgs.cmake +0 -58
- data/vendor/libgit2/deps/pcre/cmake/FindReadline.cmake +0 -29
- data/vendor/libgit2/deps/pcre/config.h.in +0 -57
- data/vendor/libgit2/deps/pcre/pcre.h +0 -641
- data/vendor/libgit2/deps/pcre/pcre_byte_order.c +0 -319
- data/vendor/libgit2/deps/pcre/pcre_chartables.c +0 -198
- data/vendor/libgit2/deps/pcre/pcre_compile.c +0 -9800
- data/vendor/libgit2/deps/pcre/pcre_config.c +0 -190
- data/vendor/libgit2/deps/pcre/pcre_dfa_exec.c +0 -3676
- data/vendor/libgit2/deps/pcre/pcre_exec.c +0 -7173
- data/vendor/libgit2/deps/pcre/pcre_fullinfo.c +0 -245
- data/vendor/libgit2/deps/pcre/pcre_get.c +0 -669
- data/vendor/libgit2/deps/pcre/pcre_globals.c +0 -86
- data/vendor/libgit2/deps/pcre/pcre_internal.h +0 -2787
- data/vendor/libgit2/deps/pcre/pcre_jit_compile.c +0 -11913
- data/vendor/libgit2/deps/pcre/pcre_maketables.c +0 -156
- data/vendor/libgit2/deps/pcre/pcre_newline.c +0 -210
- data/vendor/libgit2/deps/pcre/pcre_ord2utf8.c +0 -94
- data/vendor/libgit2/deps/pcre/pcre_printint.c +0 -834
- data/vendor/libgit2/deps/pcre/pcre_refcount.c +0 -92
- data/vendor/libgit2/deps/pcre/pcre_string_utils.c +0 -211
- data/vendor/libgit2/deps/pcre/pcre_study.c +0 -1686
- data/vendor/libgit2/deps/pcre/pcre_tables.c +0 -727
- data/vendor/libgit2/deps/pcre/pcre_ucd.c +0 -3644
- data/vendor/libgit2/deps/pcre/pcre_valid_utf8.c +0 -301
- data/vendor/libgit2/deps/pcre/pcre_version.c +0 -98
- data/vendor/libgit2/deps/pcre/pcre_xclass.c +0 -268
- data/vendor/libgit2/deps/pcre/pcreposix.c +0 -421
- data/vendor/libgit2/deps/pcre/pcreposix.h +0 -117
- data/vendor/libgit2/deps/pcre/ucp.h +0 -224
- data/vendor/libgit2/include/git2/cert.h +0 -135
- data/vendor/libgit2/include/git2/cred.h +0 -308
- data/vendor/libgit2/include/git2/sys/cred.h +0 -90
- data/vendor/libgit2/src/allocators/win32_crtdbg.c +0 -118
- data/vendor/libgit2/src/config_snapshot.c +0 -206
- data/vendor/libgit2/src/errors.h +0 -81
- data/vendor/libgit2/src/hash/sha1.h +0 -38
- data/vendor/libgit2/src/hash/sha1/collisiondetect.h +0 -19
- data/vendor/libgit2/src/hash/sha1/common_crypto.h +0 -19
- data/vendor/libgit2/src/hash/sha1/openssl.h +0 -19
- data/vendor/libgit2/src/net.c +0 -184
- data/vendor/libgit2/src/net.h +0 -36
- data/vendor/libgit2/src/regexp.c +0 -221
- data/vendor/libgit2/src/regexp.h +0 -97
- data/vendor/libgit2/src/transports/auth_ntlm.c +0 -223
- data/vendor/libgit2/src/transports/auth_ntlm.h +0 -35
- data/vendor/libgit2/src/wildmatch.c +0 -320
- data/vendor/libgit2/src/wildmatch.h +0 -23
- data/vendor/libgit2/src/win32/w32_common.h +0 -39
|
@@ -10,12 +10,10 @@
|
|
|
10
10
|
#include "repository.h"
|
|
11
11
|
#include "filebuf.h"
|
|
12
12
|
#include "attrcache.h"
|
|
13
|
-
#include "buf_text.h"
|
|
14
13
|
#include "git2/blob.h"
|
|
15
14
|
#include "git2/tree.h"
|
|
16
15
|
#include "blob.h"
|
|
17
16
|
#include "index.h"
|
|
18
|
-
#include "wildmatch.h"
|
|
19
17
|
#include <ctype.h>
|
|
20
18
|
|
|
21
19
|
static void attr_file_free(git_attr_file *file)
|
|
@@ -105,22 +103,14 @@ int git_attr_file__load(
|
|
|
105
103
|
git_attr_session *attr_session,
|
|
106
104
|
git_attr_file_entry *entry,
|
|
107
105
|
git_attr_file_source source,
|
|
108
|
-
git_attr_file_parser parser
|
|
109
|
-
bool allow_macros)
|
|
106
|
+
git_attr_file_parser parser)
|
|
110
107
|
{
|
|
111
108
|
int error = 0;
|
|
112
|
-
git_tree *tree = NULL;
|
|
113
|
-
git_tree_entry *tree_entry = NULL;
|
|
114
109
|
git_blob *blob = NULL;
|
|
115
110
|
git_buf content = GIT_BUF_INIT;
|
|
116
|
-
const char *content_str;
|
|
117
111
|
git_attr_file *file;
|
|
118
112
|
struct stat st;
|
|
119
113
|
bool nonexistent = false;
|
|
120
|
-
int bom_offset;
|
|
121
|
-
git_bom_t bom;
|
|
122
|
-
git_oid id;
|
|
123
|
-
git_object_size_t blobsize;
|
|
124
114
|
|
|
125
115
|
*out = NULL;
|
|
126
116
|
|
|
@@ -129,6 +119,9 @@ int git_attr_file__load(
|
|
|
129
119
|
/* in-memory attribute file doesn't need data */
|
|
130
120
|
break;
|
|
131
121
|
case GIT_ATTR_FILE__FROM_INDEX: {
|
|
122
|
+
git_oid id;
|
|
123
|
+
git_off_t blobsize;
|
|
124
|
+
|
|
132
125
|
if ((error = attr_file_oid_from_index(&id, repo, entry->path)) < 0 ||
|
|
133
126
|
(error = git_blob_lookup(&blob, repo, &id)) < 0)
|
|
134
127
|
return error;
|
|
@@ -158,25 +151,6 @@ int git_attr_file__load(
|
|
|
158
151
|
|
|
159
152
|
break;
|
|
160
153
|
}
|
|
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
|
-
}
|
|
180
154
|
default:
|
|
181
155
|
git_error_set(GIT_ERROR_INVALID, "unknown file source %d", source);
|
|
182
156
|
return -1;
|
|
@@ -185,20 +159,13 @@ int git_attr_file__load(
|
|
|
185
159
|
if ((error = git_attr_file__new(&file, entry, source)) < 0)
|
|
186
160
|
goto cleanup;
|
|
187
161
|
|
|
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
|
-
|
|
195
162
|
/* store the key of the attr_reader; don't bother with cache
|
|
196
163
|
* invalidation during the same attr reader session.
|
|
197
164
|
*/
|
|
198
165
|
if (attr_session)
|
|
199
166
|
file->session_key = attr_session->key;
|
|
200
167
|
|
|
201
|
-
if (parser && (error = parser(repo, file,
|
|
168
|
+
if (parser && (error = parser(repo, file, git_buf_cstr(&content))) < 0) {
|
|
202
169
|
git_attr_file__free(file);
|
|
203
170
|
goto cleanup;
|
|
204
171
|
}
|
|
@@ -208,8 +175,6 @@ int git_attr_file__load(
|
|
|
208
175
|
file->nonexistent = 1;
|
|
209
176
|
else if (source == GIT_ATTR_FILE__FROM_INDEX)
|
|
210
177
|
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));
|
|
213
178
|
else if (source == GIT_ATTR_FILE__FROM_FILE)
|
|
214
179
|
git_futils_filestamp_set_from_stat(&file->cache_data.stamp, &st);
|
|
215
180
|
/* else always cacheable */
|
|
@@ -218,8 +183,6 @@ int git_attr_file__load(
|
|
|
218
183
|
|
|
219
184
|
cleanup:
|
|
220
185
|
git_blob_free(blob);
|
|
221
|
-
git_tree_entry_free(tree_entry);
|
|
222
|
-
git_tree_free(tree);
|
|
223
186
|
git_buf_dispose(&content);
|
|
224
187
|
|
|
225
188
|
return error;
|
|
@@ -260,19 +223,6 @@ int git_attr_file__out_of_date(
|
|
|
260
223
|
return (git_oid__cmp(&file->cache_data.oid, &id) != 0);
|
|
261
224
|
}
|
|
262
225
|
|
|
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
|
-
|
|
276
226
|
default:
|
|
277
227
|
git_error_set(GIT_ERROR_INVALID, "invalid file type %d", file->source);
|
|
278
228
|
return -1;
|
|
@@ -287,15 +237,16 @@ static bool parse_optimized_patterns(
|
|
|
287
237
|
const char *pattern);
|
|
288
238
|
|
|
289
239
|
int git_attr_file__parse_buffer(
|
|
290
|
-
git_repository *repo, git_attr_file *attrs, const char *data
|
|
240
|
+
git_repository *repo, git_attr_file *attrs, const char *data)
|
|
291
241
|
{
|
|
242
|
+
int error = 0;
|
|
292
243
|
const char *scan = data, *context = NULL;
|
|
293
244
|
git_attr_rule *rule = NULL;
|
|
294
|
-
int error = 0;
|
|
295
245
|
|
|
296
|
-
/*
|
|
297
|
-
if (attrs->entry &&
|
|
298
|
-
|
|
246
|
+
/* if subdir file path, convert context for file paths */
|
|
247
|
+
if (attrs->entry &&
|
|
248
|
+
git_path_root(attrs->entry->path) < 0 &&
|
|
249
|
+
!git__suffixcmp(attrs->entry->path, "/" GIT_ATTR_FILE))
|
|
299
250
|
context = attrs->entry->path;
|
|
300
251
|
|
|
301
252
|
if (git_mutex_lock(&attrs->lock) < 0) {
|
|
@@ -304,38 +255,38 @@ int git_attr_file__parse_buffer(
|
|
|
304
255
|
}
|
|
305
256
|
|
|
306
257
|
while (!error && *scan) {
|
|
307
|
-
/*
|
|
308
|
-
if (!rule) {
|
|
309
|
-
|
|
310
|
-
|
|
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)
|
|
319
|
-
{
|
|
320
|
-
if (error != GIT_ENOTFOUND)
|
|
321
|
-
goto out;
|
|
322
|
-
error = 0;
|
|
323
|
-
continue;
|
|
258
|
+
/* allocate rule if needed */
|
|
259
|
+
if (!rule && !(rule = git__calloc(1, sizeof(*rule)))) {
|
|
260
|
+
error = -1;
|
|
261
|
+
break;
|
|
324
262
|
}
|
|
325
263
|
|
|
326
|
-
|
|
327
|
-
|
|
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;
|
|
264
|
+
rule->match.flags =
|
|
265
|
+
GIT_ATTR_FNMATCH_ALLOWNEG | GIT_ATTR_FNMATCH_ALLOWMACRO;
|
|
334
266
|
|
|
335
|
-
|
|
267
|
+
/* parse the next "pattern attr attr attr" line */
|
|
268
|
+
if (!(error = git_attr_fnmatch__parse(
|
|
269
|
+
&rule->match, &attrs->pool, context, &scan)) &&
|
|
270
|
+
!(error = git_attr_assignment__parse(
|
|
271
|
+
repo, &attrs->pool, &rule->assigns, &scan)))
|
|
272
|
+
{
|
|
273
|
+
if (rule->match.flags & GIT_ATTR_FNMATCH_MACRO)
|
|
274
|
+
/* TODO: warning if macro found in file below repo root */
|
|
275
|
+
error = git_attr_cache__insert_macro(repo, rule);
|
|
276
|
+
else
|
|
277
|
+
error = git_vector_insert(&attrs->rules, rule);
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
/* if the rule wasn't a pattern, on to the next */
|
|
281
|
+
if (error < 0) {
|
|
282
|
+
git_attr_rule__clear(rule); /* reset rule contents */
|
|
283
|
+
if (error == GIT_ENOTFOUND)
|
|
284
|
+
error = 0;
|
|
285
|
+
} else {
|
|
286
|
+
rule = NULL; /* vector now "owns" the rule */
|
|
287
|
+
}
|
|
336
288
|
}
|
|
337
289
|
|
|
338
|
-
out:
|
|
339
290
|
git_mutex_unlock(&attrs->lock);
|
|
340
291
|
git_attr_rule__free(rule);
|
|
341
292
|
|
|
@@ -382,28 +333,33 @@ int git_attr_file__lookup_one(
|
|
|
382
333
|
|
|
383
334
|
int git_attr_file__load_standalone(git_attr_file **out, const char *path)
|
|
384
335
|
{
|
|
385
|
-
git_buf content = GIT_BUF_INIT;
|
|
386
|
-
git_attr_file *file = NULL;
|
|
387
336
|
int error;
|
|
337
|
+
git_attr_file *file;
|
|
338
|
+
git_buf content = GIT_BUF_INIT;
|
|
388
339
|
|
|
389
|
-
|
|
390
|
-
|
|
340
|
+
error = git_attr_file__new(&file, NULL, GIT_ATTR_FILE__FROM_FILE);
|
|
341
|
+
if (error < 0)
|
|
342
|
+
return error;
|
|
391
343
|
|
|
392
|
-
|
|
393
|
-
|
|
344
|
+
error = git_attr_cache__alloc_file_entry(
|
|
345
|
+
&file->entry, NULL, path, &file->pool);
|
|
346
|
+
if (error < 0) {
|
|
347
|
+
git_attr_file__free(file);
|
|
348
|
+
return error;
|
|
349
|
+
}
|
|
350
|
+
/* because the cache entry is allocated from the file's own pool, we
|
|
394
351
|
* don't have to free it - freeing file+pool will free cache entry, too.
|
|
395
352
|
*/
|
|
396
353
|
|
|
397
|
-
if ((error =
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
354
|
+
if (!(error = git_futils_readbuffer(&content, path))) {
|
|
355
|
+
error = git_attr_file__parse_buffer(NULL, file, content.ptr);
|
|
356
|
+
git_buf_dispose(&content);
|
|
357
|
+
}
|
|
401
358
|
|
|
402
|
-
*out = file;
|
|
403
|
-
out:
|
|
404
359
|
if (error < 0)
|
|
405
360
|
git_attr_file__free(file);
|
|
406
|
-
|
|
361
|
+
else
|
|
362
|
+
*out = file;
|
|
407
363
|
|
|
408
364
|
return error;
|
|
409
365
|
}
|
|
@@ -434,13 +390,18 @@ bool git_attr_fnmatch__match(
|
|
|
434
390
|
}
|
|
435
391
|
|
|
436
392
|
if (match->flags & GIT_ATTR_FNMATCH_ICASE)
|
|
437
|
-
flags |=
|
|
393
|
+
flags |= FNM_CASEFOLD;
|
|
394
|
+
if (match->flags & GIT_ATTR_FNMATCH_LEADINGDIR)
|
|
395
|
+
flags |= FNM_LEADING_DIR;
|
|
438
396
|
|
|
439
397
|
if (match->flags & GIT_ATTR_FNMATCH_FULLPATH) {
|
|
440
398
|
filename = relpath;
|
|
441
|
-
flags |=
|
|
399
|
+
flags |= FNM_PATHNAME;
|
|
442
400
|
} else {
|
|
443
401
|
filename = path->basename;
|
|
402
|
+
|
|
403
|
+
if (path->is_dir)
|
|
404
|
+
flags |= FNM_LEADING_DIR;
|
|
444
405
|
}
|
|
445
406
|
|
|
446
407
|
if ((match->flags & GIT_ATTR_FNMATCH_DIRECTORY) && !path->is_dir) {
|
|
@@ -455,6 +416,8 @@ bool git_attr_fnmatch__match(
|
|
|
455
416
|
path->basename == relpath)
|
|
456
417
|
return false;
|
|
457
418
|
|
|
419
|
+
flags |= FNM_LEADING_DIR;
|
|
420
|
+
|
|
458
421
|
/* fail match if this is a file with same name as ignored folder */
|
|
459
422
|
samename = (match->flags & GIT_ATTR_FNMATCH_ICASE) ?
|
|
460
423
|
!strcasecmp(match->pattern, relpath) :
|
|
@@ -463,10 +426,10 @@ bool git_attr_fnmatch__match(
|
|
|
463
426
|
if (samename)
|
|
464
427
|
return false;
|
|
465
428
|
|
|
466
|
-
return (
|
|
429
|
+
return (p_fnmatch(match->pattern, relpath, flags) != FNM_NOMATCH);
|
|
467
430
|
}
|
|
468
431
|
|
|
469
|
-
return (
|
|
432
|
+
return (p_fnmatch(match->pattern, filename, flags) != FNM_NOMATCH);
|
|
470
433
|
}
|
|
471
434
|
|
|
472
435
|
bool git_attr_rule__match(
|
|
@@ -585,61 +548,6 @@ void git_attr_path__free(git_attr_path *info)
|
|
|
585
548
|
* "cat-file.c" but not "mozilla-sha1/sha1.c".
|
|
586
549
|
*/
|
|
587
550
|
|
|
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
|
-
|
|
643
551
|
/*
|
|
644
552
|
* This will return 0 if the spec was filled out,
|
|
645
553
|
* GIT_ENOTFOUND if the fnmatch does not require matching, or
|
|
@@ -653,7 +561,6 @@ int git_attr_fnmatch__parse(
|
|
|
653
561
|
{
|
|
654
562
|
const char *pattern, *scan;
|
|
655
563
|
int slash_count, allow_space;
|
|
656
|
-
bool escaped;
|
|
657
564
|
|
|
658
565
|
assert(spec && base && *base);
|
|
659
566
|
|
|
@@ -665,11 +572,8 @@ int git_attr_fnmatch__parse(
|
|
|
665
572
|
|
|
666
573
|
pattern = *base;
|
|
667
574
|
|
|
668
|
-
while (
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
if (!*pattern || *pattern == '#' || *pattern == '\n' ||
|
|
672
|
-
(*pattern == '\r' && *(pattern + 1) == '\n')) {
|
|
575
|
+
while (git__isspace(*pattern)) pattern++;
|
|
576
|
+
if (!*pattern || *pattern == '#') {
|
|
673
577
|
*base = git__next_line(pattern);
|
|
674
578
|
return GIT_ENOTFOUND;
|
|
675
579
|
}
|
|
@@ -684,33 +588,29 @@ int git_attr_fnmatch__parse(
|
|
|
684
588
|
|
|
685
589
|
if (*pattern == '!' && (spec->flags & GIT_ATTR_FNMATCH_ALLOWNEG) != 0) {
|
|
686
590
|
spec->flags = spec->flags | GIT_ATTR_FNMATCH_NEGATIVE;
|
|
591
|
+
if ((spec->flags & GIT_ATTR_FNMATCH_NOLEADINGDIR) == 0)
|
|
592
|
+
spec->flags |= GIT_ATTR_FNMATCH_LEADINGDIR;
|
|
687
593
|
pattern++;
|
|
688
594
|
}
|
|
689
595
|
|
|
690
596
|
slash_count = 0;
|
|
691
|
-
escaped = false;
|
|
692
|
-
/* Scan until a non-escaped whitespace. */
|
|
693
597
|
for (scan = pattern; *scan != '\0'; ++scan) {
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
escaped = true;
|
|
698
|
-
continue;
|
|
699
|
-
} else if (git__isspace(c) && !escaped) {
|
|
700
|
-
if (!allow_space || (c != ' ' && c != '\t' && c != '\r'))
|
|
598
|
+
/* scan until (non-escaped) white space */
|
|
599
|
+
if (git__isspace(*scan) && *(scan - 1) != '\\') {
|
|
600
|
+
if (!allow_space || (*scan != ' ' && *scan != '\t' && *scan != '\r'))
|
|
701
601
|
break;
|
|
702
|
-
}
|
|
602
|
+
}
|
|
603
|
+
|
|
604
|
+
if (*scan == '/') {
|
|
703
605
|
spec->flags = spec->flags | GIT_ATTR_FNMATCH_FULLPATH;
|
|
704
606
|
slash_count++;
|
|
705
|
-
|
|
706
|
-
if (slash_count == 1 && pattern == scan)
|
|
607
|
+
if (pattern == scan)
|
|
707
608
|
pattern++;
|
|
708
|
-
} else if (git__iswildcard(c) && !escaped) {
|
|
709
|
-
/* remember if we see an unescaped wildcard in pattern */
|
|
710
|
-
spec->flags = spec->flags | GIT_ATTR_FNMATCH_HASWILD;
|
|
711
609
|
}
|
|
712
|
-
|
|
713
|
-
|
|
610
|
+
/* remember if we see an unescaped wildcard in pattern */
|
|
611
|
+
else if (git__iswildcard(*scan) &&
|
|
612
|
+
(scan == pattern || (*(scan - 1) != '\\')))
|
|
613
|
+
spec->flags = spec->flags | GIT_ATTR_FNMATCH_HASWILD;
|
|
714
614
|
}
|
|
715
615
|
|
|
716
616
|
*base = scan;
|
|
@@ -728,10 +628,9 @@ int git_attr_fnmatch__parse(
|
|
|
728
628
|
return GIT_ENOTFOUND;
|
|
729
629
|
|
|
730
630
|
/* Remove trailing spaces. */
|
|
731
|
-
spec->length
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
return GIT_ENOTFOUND;
|
|
631
|
+
while (pattern[spec->length - 1] == ' ' || pattern[spec->length - 1] == '\t')
|
|
632
|
+
if (--spec->length == 0)
|
|
633
|
+
return GIT_ENOTFOUND;
|
|
735
634
|
|
|
736
635
|
if (pattern[spec->length - 1] == '/') {
|
|
737
636
|
spec->length--;
|
|
@@ -739,6 +638,14 @@ int git_attr_fnmatch__parse(
|
|
|
739
638
|
if (--slash_count <= 0)
|
|
740
639
|
spec->flags = spec->flags & ~GIT_ATTR_FNMATCH_FULLPATH;
|
|
741
640
|
}
|
|
641
|
+
if ((spec->flags & GIT_ATTR_FNMATCH_NOLEADINGDIR) == 0 &&
|
|
642
|
+
spec->length >= 2 &&
|
|
643
|
+
pattern[spec->length - 1] == '*' &&
|
|
644
|
+
pattern[spec->length - 2] == '/') {
|
|
645
|
+
spec->length -= 2;
|
|
646
|
+
spec->flags = spec->flags | GIT_ATTR_FNMATCH_LEADINGDIR;
|
|
647
|
+
/* leave FULLPATH match on, however */
|
|
648
|
+
}
|
|
742
649
|
|
|
743
650
|
if (context) {
|
|
744
651
|
char *slash = strrchr(context, '/');
|
|
@@ -757,8 +664,9 @@ int git_attr_fnmatch__parse(
|
|
|
757
664
|
*base = git__next_line(pattern);
|
|
758
665
|
return -1;
|
|
759
666
|
} else {
|
|
760
|
-
/* strip '\' that might have
|
|
761
|
-
spec->length =
|
|
667
|
+
/* strip '\' that might have be used for internal whitespace */
|
|
668
|
+
spec->length = git__unescape(spec->pattern);
|
|
669
|
+
/* TODO: convert remaining '\' into '/' for POSIX ??? */
|
|
762
670
|
}
|
|
763
671
|
|
|
764
672
|
return 0;
|
|
@@ -951,7 +859,6 @@ int git_attr_session__init(git_attr_session *session, git_repository *repo)
|
|
|
951
859
|
{
|
|
952
860
|
assert(repo);
|
|
953
861
|
|
|
954
|
-
memset(session, 0, sizeof(*session));
|
|
955
862
|
session->key = git_atomic_inc(&repo->attr_session_key);
|
|
956
863
|
|
|
957
864
|
return 0;
|