rugged 0.27.9 → 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 +98 -54
- data/vendor/libgit2/COPYING +28 -0
- data/vendor/libgit2/cmake/Modules/AddCFlagIfSupported.cmake +15 -1
- 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/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/FindmbedTLS.cmake +93 -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/CMakeLists.txt +2 -0
- data/vendor/libgit2/deps/http-parser/{LICENSE-MIT → COPYING} +0 -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.h +5 -0
- 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 +38 -20
- data/vendor/libgit2/include/git2/blame.h +42 -25
- data/vendor/libgit2/include/git2/blob.h +45 -13
- data/vendor/libgit2/include/git2/branch.h +1 -1
- data/vendor/libgit2/include/git2/buffer.h +22 -16
- data/vendor/libgit2/include/git2/cert.h +135 -0
- data/vendor/libgit2/include/git2/checkout.h +65 -32
- data/vendor/libgit2/include/git2/cherrypick.h +9 -7
- data/vendor/libgit2/include/git2/clone.h +12 -10
- data/vendor/libgit2/include/git2/commit.h +53 -3
- data/vendor/libgit2/include/git2/common.h +60 -8
- data/vendor/libgit2/include/git2/config.h +30 -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 +32 -9
- data/vendor/libgit2/include/git2/diff.h +208 -156
- data/vendor/libgit2/include/git2/errors.h +54 -46
- data/vendor/libgit2/include/git2/filter.h +8 -0
- data/vendor/libgit2/include/git2/ignore.h +2 -2
- data/vendor/libgit2/include/git2/index.h +74 -52
- data/vendor/libgit2/include/git2/indexer.h +76 -6
- data/vendor/libgit2/include/git2/mailmap.h +115 -0
- data/vendor/libgit2/include/git2/merge.h +35 -18
- 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 +14 -8
- data/vendor/libgit2/include/git2/rebase.h +53 -6
- data/vendor/libgit2/include/git2/refs.h +33 -15
- data/vendor/libgit2/include/git2/refspec.h +17 -0
- data/vendor/libgit2/include/git2/remote.h +123 -24
- data/vendor/libgit2/include/git2/repository.h +76 -39
- data/vendor/libgit2/include/git2/revert.h +6 -4
- 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 +15 -12
- data/vendor/libgit2/include/git2/status.h +33 -20
- data/vendor/libgit2/include/git2/submodule.h +30 -12
- data/vendor/libgit2/include/git2/sys/alloc.h +101 -0
- 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/index.h +3 -0
- data/vendor/libgit2/include/git2/sys/mempack.h +35 -35
- data/vendor/libgit2/include/git2/sys/merge.h +9 -4
- data/vendor/libgit2/include/git2/sys/odb_backend.h +66 -22
- data/vendor/libgit2/include/git2/sys/path.h +64 -0
- 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/transaction.h +1 -0
- 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 +33 -111
- data/vendor/libgit2/include/git2/version.h +4 -4
- data/vendor/libgit2/include/git2/worktree.h +48 -13
- data/vendor/libgit2/src/CMakeLists.txt +96 -164
- data/vendor/libgit2/src/alloc.c +43 -0
- data/vendor/libgit2/src/alloc.h +40 -0
- data/vendor/libgit2/src/allocators/stdalloc.c +119 -0
- data/vendor/libgit2/src/{streams/curl.h → allocators/stdalloc.h} +5 -5
- 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 +15 -8
- data/vendor/libgit2/src/apply.c +537 -31
- data/vendor/libgit2/src/apply.h +3 -1
- data/vendor/libgit2/src/array.h +2 -2
- data/vendor/libgit2/src/attr.c +81 -75
- data/vendor/libgit2/src/attr_file.c +207 -121
- data/vendor/libgit2/src/attr_file.h +9 -9
- data/vendor/libgit2/src/attrcache.c +51 -53
- data/vendor/libgit2/src/attrcache.h +2 -1
- data/vendor/libgit2/src/blame.c +47 -20
- data/vendor/libgit2/src/blame.h +2 -1
- data/vendor/libgit2/src/blame_git.c +37 -20
- data/vendor/libgit2/src/blob.c +128 -42
- data/vendor/libgit2/src/blob.h +19 -2
- data/vendor/libgit2/src/branch.c +67 -43
- data/vendor/libgit2/src/buf_text.c +7 -6
- data/vendor/libgit2/src/buffer.c +69 -57
- data/vendor/libgit2/src/buffer.h +1 -1
- 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 +109 -90
- data/vendor/libgit2/src/cherrypick.c +15 -9
- data/vendor/libgit2/src/clone.c +49 -27
- data/vendor/libgit2/src/clone.h +4 -0
- data/vendor/libgit2/src/commit.c +117 -49
- data/vendor/libgit2/src/commit.h +7 -0
- data/vendor/libgit2/src/commit_list.c +30 -78
- data/vendor/libgit2/src/commit_list.h +2 -2
- data/vendor/libgit2/src/common.h +27 -91
- data/vendor/libgit2/src/config.c +194 -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 +439 -753
- data/vendor/libgit2/src/config_mem.c +220 -0
- data/vendor/libgit2/src/config_parse.c +114 -63
- data/vendor/libgit2/src/config_parse.h +17 -16
- data/vendor/libgit2/src/config_snapshot.c +206 -0
- data/vendor/libgit2/src/crlf.c +219 -190
- data/vendor/libgit2/src/delta.c +25 -18
- data/vendor/libgit2/src/describe.c +42 -41
- data/vendor/libgit2/src/diff.c +53 -68
- data/vendor/libgit2/src/diff.h +2 -1
- data/vendor/libgit2/src/diff_driver.c +47 -49
- data/vendor/libgit2/src/diff_file.c +19 -17
- data/vendor/libgit2/src/diff_file.h +1 -1
- data/vendor/libgit2/src/diff_generate.c +162 -106
- 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 +42 -30
- data/vendor/libgit2/src/diff_stats.c +22 -7
- data/vendor/libgit2/src/diff_tform.c +16 -16
- data/vendor/libgit2/src/diff_xdiff.c +15 -3
- data/vendor/libgit2/src/errors.c +51 -39
- data/vendor/libgit2/src/errors.h +81 -0
- data/vendor/libgit2/src/features.h.in +11 -3
- data/vendor/libgit2/src/fetch.c +10 -5
- data/vendor/libgit2/src/fetchhead.c +17 -17
- data/vendor/libgit2/src/filebuf.c +32 -36
- data/vendor/libgit2/src/filebuf.h +2 -2
- data/vendor/libgit2/src/filter.c +46 -38
- data/vendor/libgit2/src/filter.h +0 -10
- data/vendor/libgit2/src/{fileops.c → futils.c} +80 -73
- data/vendor/libgit2/src/{fileops.h → futils.h} +6 -6
- data/vendor/libgit2/src/global.c +48 -63
- data/vendor/libgit2/src/global.h +0 -2
- data/vendor/libgit2/src/hash.c +61 -0
- data/vendor/libgit2/src/hash.h +20 -19
- data/vendor/libgit2/src/hash/sha1.h +38 -0
- 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/sha1/mbedtls.c +46 -0
- data/vendor/libgit2/src/hash/sha1/mbedtls.h +19 -0
- 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/{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
- 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/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 +43 -47
- data/vendor/libgit2/src/index.c +337 -232
- data/vendor/libgit2/src/index.h +17 -1
- data/vendor/libgit2/src/indexer.c +346 -175
- data/vendor/libgit2/src/integer.h +71 -26
- data/vendor/libgit2/src/iterator.c +142 -70
- data/vendor/libgit2/src/iterator.h +15 -0
- data/vendor/libgit2/src/khash.h +3 -1
- data/vendor/libgit2/src/mailmap.c +485 -0
- data/vendor/libgit2/src/mailmap.h +35 -0
- data/vendor/libgit2/src/map.h +1 -1
- data/vendor/libgit2/src/merge.c +144 -100
- 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 +16 -11
- 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 +116 -93
- data/vendor/libgit2/src/odb.h +8 -7
- data/vendor/libgit2/src/odb_loose.c +62 -55
- data/vendor/libgit2/src/odb_mempack.c +21 -34
- data/vendor/libgit2/src/odb_pack.c +18 -14
- 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 +88 -87
- data/vendor/libgit2/src/pack-objects.h +2 -8
- data/vendor/libgit2/src/pack.c +99 -101
- data/vendor/libgit2/src/pack.h +17 -19
- data/vendor/libgit2/src/parse.c +10 -0
- data/vendor/libgit2/src/parse.h +3 -3
- data/vendor/libgit2/src/patch.c +4 -4
- data/vendor/libgit2/src/patch_generate.c +20 -20
- data/vendor/libgit2/src/patch_parse.c +151 -63
- data/vendor/libgit2/src/path.c +169 -125
- data/vendor/libgit2/src/path.h +3 -71
- data/vendor/libgit2/src/pathspec.c +19 -19
- 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 +37 -31
- 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 +115 -59
- data/vendor/libgit2/src/refdb.c +15 -3
- data/vendor/libgit2/src/refdb_fs.c +381 -254
- data/vendor/libgit2/src/reflog.c +13 -15
- data/vendor/libgit2/src/refs.c +118 -88
- data/vendor/libgit2/src/refs.h +5 -3
- data/vendor/libgit2/src/refspec.c +56 -37
- data/vendor/libgit2/src/refspec.h +1 -1
- data/vendor/libgit2/src/regexp.c +221 -0
- data/vendor/libgit2/src/regexp.h +97 -0
- data/vendor/libgit2/src/remote.c +266 -215
- data/vendor/libgit2/src/remote.h +11 -2
- data/vendor/libgit2/src/repository.c +280 -225
- data/vendor/libgit2/src/repository.h +52 -40
- data/vendor/libgit2/src/reset.c +8 -8
- data/vendor/libgit2/src/revert.c +14 -9
- data/vendor/libgit2/src/revparse.c +47 -48
- data/vendor/libgit2/src/revwalk.c +120 -57
- data/vendor/libgit2/src/revwalk.h +22 -1
- data/vendor/libgit2/src/settings.c +47 -10
- data/vendor/libgit2/src/signature.c +11 -11
- data/vendor/libgit2/src/sortedcache.c +22 -36
- data/vendor/libgit2/src/sortedcache.h +1 -1
- data/vendor/libgit2/src/stash.c +125 -99
- data/vendor/libgit2/src/status.c +28 -22
- data/vendor/libgit2/src/stream.h +17 -2
- data/vendor/libgit2/src/streams/mbedtls.c +483 -0
- data/vendor/libgit2/src/streams/mbedtls.h +23 -0
- data/vendor/libgit2/src/streams/openssl.c +224 -114
- data/vendor/libgit2/src/streams/openssl.h +4 -108
- 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 +50 -19
- 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 +272 -216
- data/vendor/libgit2/src/submodule.h +1 -1
- data/vendor/libgit2/src/sysdir.c +29 -19
- data/vendor/libgit2/src/tag.c +41 -28
- data/vendor/libgit2/src/tag.h +2 -1
- data/vendor/libgit2/src/trace.c +2 -2
- data/vendor/libgit2/src/trace.h +3 -3
- data/vendor/libgit2/src/trailer.c +52 -38
- data/vendor/libgit2/src/transaction.c +30 -29
- data/vendor/libgit2/src/transport.c +5 -5
- data/vendor/libgit2/src/transports/auth.c +15 -11
- data/vendor/libgit2/src/transports/auth.h +10 -3
- data/vendor/libgit2/src/transports/auth_negotiate.c +33 -18
- 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 +26 -31
- data/vendor/libgit2/src/transports/http.c +881 -348
- data/vendor/libgit2/src/transports/http.h +2 -0
- data/vendor/libgit2/src/transports/local.c +35 -35
- data/vendor/libgit2/src/transports/smart.c +70 -47
- data/vendor/libgit2/src/transports/smart.h +3 -4
- data/vendor/libgit2/src/transports/smart_pkt.c +43 -40
- data/vendor/libgit2/src/transports/smart_protocol.c +96 -116
- data/vendor/libgit2/src/transports/ssh.c +77 -66
- data/vendor/libgit2/src/transports/winhttp.c +318 -314
- data/vendor/libgit2/src/tree-cache.c +19 -12
- data/vendor/libgit2/src/tree.c +103 -142
- data/vendor/libgit2/src/tree.h +1 -12
- 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 +70 -56
- data/vendor/libgit2/src/util.h +28 -156
- data/vendor/libgit2/src/vector.c +4 -4
- 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 +3 -3
- 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 +70 -45
- 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 +3 -2
- data/vendor/libgit2/src/win32/w32_crtdbg_stacktrace.h +26 -75
- 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 +95 -60
- data/vendor/libgit2/src/worktree.h +2 -0
- data/vendor/libgit2/src/xdiff/xdiffi.c +7 -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 +122 -33
- 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/apply.h
CHANGED
@@ -10,6 +10,7 @@
|
|
10
10
|
#include "common.h"
|
11
11
|
|
12
12
|
#include "git2/patch.h"
|
13
|
+
#include "git2/apply.h"
|
13
14
|
#include "buffer.h"
|
14
15
|
|
15
16
|
extern int git_apply__patch(
|
@@ -18,6 +19,7 @@ extern int git_apply__patch(
|
|
18
19
|
unsigned int *mode,
|
19
20
|
const char *source,
|
20
21
|
size_t source_len,
|
21
|
-
git_patch *patch
|
22
|
+
git_patch *patch,
|
23
|
+
const git_apply_options *opts);
|
22
24
|
|
23
25
|
#endif
|
data/vendor/libgit2/src/array.h
CHANGED
@@ -15,7 +15,7 @@
|
|
15
15
|
* git_array_t(int) my_ints = GIT_ARRAY_INIT;
|
16
16
|
* ...
|
17
17
|
* int *i = git_array_alloc(my_ints);
|
18
|
-
*
|
18
|
+
* GIT_ERROR_CHECK_ALLOC(i);
|
19
19
|
* ...
|
20
20
|
* git_array_clear(my_ints);
|
21
21
|
*
|
@@ -36,7 +36,7 @@
|
|
36
36
|
#define git_array_clear(a) \
|
37
37
|
do { git__free((a).ptr); git_array_init(a); } while (0)
|
38
38
|
|
39
|
-
#define
|
39
|
+
#define GIT_ERROR_CHECK_ARRAY(a) GIT_ERROR_CHECK_ALLOC((a).ptr)
|
40
40
|
|
41
41
|
|
42
42
|
typedef git_array_t(char) git_array_generic_t;
|
data/vendor/libgit2/src/attr.c
CHANGED
@@ -19,18 +19,18 @@ const char *git_attr__true = "[internal]__TRUE__";
|
|
19
19
|
const char *git_attr__false = "[internal]__FALSE__";
|
20
20
|
const char *git_attr__unset = "[internal]__UNSET__";
|
21
21
|
|
22
|
-
|
22
|
+
git_attr_value_t git_attr_value(const char *attr)
|
23
23
|
{
|
24
24
|
if (attr == NULL || attr == git_attr__unset)
|
25
|
-
return
|
25
|
+
return GIT_ATTR_VALUE_UNSPECIFIED;
|
26
26
|
|
27
27
|
if (attr == git_attr__true)
|
28
|
-
return
|
28
|
+
return GIT_ATTR_VALUE_TRUE;
|
29
29
|
|
30
30
|
if (attr == git_attr__false)
|
31
|
-
return
|
31
|
+
return GIT_ATTR_VALUE_FALSE;
|
32
32
|
|
33
|
-
return
|
33
|
+
return GIT_ATTR_VALUE_STRING;
|
34
34
|
}
|
35
35
|
|
36
36
|
static int collect_attr_files(
|
@@ -135,7 +135,7 @@ int git_attr_get_many_with_session(
|
|
135
135
|
goto cleanup;
|
136
136
|
|
137
137
|
info = git__calloc(num_attr, sizeof(attr_get_many_info));
|
138
|
-
|
138
|
+
GIT_ERROR_CHECK_ALLOC(info);
|
139
139
|
|
140
140
|
git_vector_foreach(&files, i, file) {
|
141
141
|
|
@@ -215,7 +215,7 @@ int git_attr_foreach(
|
|
215
215
|
return -1;
|
216
216
|
|
217
217
|
if ((error = collect_attr_files(repo, NULL, flags, pathname, &files)) < 0 ||
|
218
|
-
|
218
|
+
(error = git_strmap_new(&seen)) < 0)
|
219
219
|
goto cleanup;
|
220
220
|
|
221
221
|
git_vector_foreach(&files, i, file) {
|
@@ -227,13 +227,12 @@ int git_attr_foreach(
|
|
227
227
|
if (git_strmap_exists(seen, assign->name))
|
228
228
|
continue;
|
229
229
|
|
230
|
-
|
231
|
-
if (error < 0)
|
230
|
+
if ((error = git_strmap_set(seen, assign->name, assign)) < 0)
|
232
231
|
goto cleanup;
|
233
232
|
|
234
233
|
error = callback(assign->name, assign->value, payload);
|
235
234
|
if (error) {
|
236
|
-
|
235
|
+
git_error_set_after_callback(error);
|
237
236
|
goto cleanup;
|
238
237
|
}
|
239
238
|
}
|
@@ -253,15 +252,16 @@ static int preload_attr_file(
|
|
253
252
|
git_attr_session *attr_session,
|
254
253
|
git_attr_file_source source,
|
255
254
|
const char *base,
|
256
|
-
const char *file
|
255
|
+
const char *file,
|
256
|
+
bool allow_macros)
|
257
257
|
{
|
258
258
|
int error;
|
259
259
|
git_attr_file *preload = NULL;
|
260
260
|
|
261
261
|
if (!file)
|
262
262
|
return 0;
|
263
|
-
if (!(error = git_attr_cache__get(
|
264
|
-
|
263
|
+
if (!(error = git_attr_cache__get(&preload, repo, attr_session, source, base, file,
|
264
|
+
git_attr_file__parse_buffer, allow_macros)))
|
265
265
|
git_attr_file__free(preload);
|
266
266
|
|
267
267
|
return error;
|
@@ -277,7 +277,7 @@ static int system_attr_file(
|
|
277
277
|
error = git_sysdir_find_system_file(out, GIT_ATTR_FILE_SYSTEM);
|
278
278
|
|
279
279
|
if (error == GIT_ENOTFOUND)
|
280
|
-
|
280
|
+
git_error_clear();
|
281
281
|
|
282
282
|
return error;
|
283
283
|
}
|
@@ -286,7 +286,7 @@ static int system_attr_file(
|
|
286
286
|
error = git_sysdir_find_system_file(&attr_session->sysdir, GIT_ATTR_FILE_SYSTEM);
|
287
287
|
|
288
288
|
if (error == GIT_ENOTFOUND)
|
289
|
-
|
289
|
+
git_error_clear();
|
290
290
|
else if (error)
|
291
291
|
return error;
|
292
292
|
|
@@ -298,19 +298,22 @@ static int system_attr_file(
|
|
298
298
|
|
299
299
|
/* We can safely provide a git_buf with no allocation (asize == 0) to
|
300
300
|
* a consumer. This allows them to treat this as a regular `git_buf`,
|
301
|
-
* but their call to `
|
301
|
+
* but their call to `git_buf_dispose` will not attempt to free it.
|
302
302
|
*/
|
303
303
|
git_buf_attach_notowned(
|
304
304
|
out, attr_session->sysdir.ptr, attr_session->sysdir.size);
|
305
305
|
return 0;
|
306
306
|
}
|
307
307
|
|
308
|
-
static int attr_setup(
|
308
|
+
static int attr_setup(
|
309
|
+
git_repository *repo,
|
310
|
+
git_attr_session *attr_session,
|
311
|
+
uint32_t flags)
|
309
312
|
{
|
310
|
-
int error = 0;
|
311
|
-
const char *workdir = git_repository_workdir(repo);
|
312
|
-
git_index *idx = NULL;
|
313
313
|
git_buf path = GIT_BUF_INIT;
|
314
|
+
git_index *idx = NULL;
|
315
|
+
const char *workdir;
|
316
|
+
int error = 0;
|
314
317
|
|
315
318
|
if (attr_session && attr_session->init_setup)
|
316
319
|
return 0;
|
@@ -318,48 +321,50 @@ static int attr_setup(git_repository *repo, git_attr_session *attr_session)
|
|
318
321
|
if ((error = git_attr_cache__init(repo)) < 0)
|
319
322
|
return error;
|
320
323
|
|
321
|
-
/*
|
322
|
-
*
|
324
|
+
/*
|
325
|
+
* Preload attribute files that could contain macros so the
|
326
|
+
* definitions will be available for later file parsing.
|
323
327
|
*/
|
324
328
|
|
325
|
-
error = system_attr_file(&path, attr_session)
|
326
|
-
|
327
|
-
|
328
|
-
error
|
329
|
-
|
330
|
-
|
331
|
-
if (error != GIT_ENOTFOUND)
|
332
|
-
goto out;
|
333
|
-
|
334
|
-
if ((error = preload_attr_file(
|
335
|
-
repo, attr_session, GIT_ATTR_FILE__FROM_FILE,
|
336
|
-
NULL, git_repository_attr_cache(repo)->cfg_attr_file)) < 0)
|
337
|
-
goto out;
|
329
|
+
if ((error = system_attr_file(&path, attr_session)) < 0 ||
|
330
|
+
(error = preload_attr_file(repo, attr_session, GIT_ATTR_FILE__FROM_FILE,
|
331
|
+
NULL, path.ptr, true)) < 0) {
|
332
|
+
if (error != GIT_ENOTFOUND)
|
333
|
+
goto out;
|
334
|
+
}
|
338
335
|
|
339
|
-
if ((error =
|
340
|
-
|
336
|
+
if ((error = preload_attr_file(repo, attr_session, GIT_ATTR_FILE__FROM_FILE,
|
337
|
+
NULL, git_repository_attr_cache(repo)->cfg_attr_file, true)) < 0)
|
341
338
|
goto out;
|
342
339
|
|
343
|
-
|
344
|
-
|
345
|
-
|
346
|
-
|
340
|
+
git_buf_clear(&path); /* git_repository_item_path expects an empty buffer, because it uses git_buf_set */
|
341
|
+
if ((error = git_repository_item_path(&path, repo, GIT_REPOSITORY_ITEM_INFO)) < 0 ||
|
342
|
+
(error = preload_attr_file(repo, attr_session, GIT_ATTR_FILE__FROM_FILE,
|
343
|
+
path.ptr, GIT_ATTR_FILE_INREPO, true)) < 0) {
|
344
|
+
if (error != GIT_ENOTFOUND)
|
345
|
+
goto out;
|
346
|
+
}
|
347
347
|
|
348
|
-
if (workdir != NULL &&
|
349
|
-
|
350
|
-
|
351
|
-
|
348
|
+
if ((workdir = git_repository_workdir(repo)) != NULL &&
|
349
|
+
(error = preload_attr_file(repo, attr_session, GIT_ATTR_FILE__FROM_FILE,
|
350
|
+
workdir, GIT_ATTR_FILE, true)) < 0)
|
351
|
+
goto out;
|
352
352
|
|
353
353
|
if ((error = git_repository_index__weakptr(&idx, repo)) < 0 ||
|
354
|
-
|
355
|
-
|
354
|
+
(error = preload_attr_file(repo, attr_session, GIT_ATTR_FILE__FROM_INDEX,
|
355
|
+
NULL, GIT_ATTR_FILE, true)) < 0)
|
356
|
+
goto out;
|
357
|
+
|
358
|
+
if ((flags & GIT_ATTR_CHECK_INCLUDE_HEAD) != 0 &&
|
359
|
+
(error = preload_attr_file(repo, attr_session, GIT_ATTR_FILE__FROM_HEAD,
|
360
|
+
NULL, GIT_ATTR_FILE, true)) < 0)
|
356
361
|
goto out;
|
357
362
|
|
358
363
|
if (attr_session)
|
359
364
|
attr_session->init_setup = 1;
|
360
365
|
|
361
366
|
out:
|
362
|
-
|
367
|
+
git_buf_dispose(&path);
|
363
368
|
|
364
369
|
return error;
|
365
370
|
}
|
@@ -377,12 +382,12 @@ int git_attr_add_macro(
|
|
377
382
|
return error;
|
378
383
|
|
379
384
|
macro = git__calloc(1, sizeof(git_attr_rule));
|
380
|
-
|
385
|
+
GIT_ERROR_CHECK_ALLOC(macro);
|
381
386
|
|
382
387
|
pool = &git_repository_attr_cache(repo)->pool;
|
383
388
|
|
384
389
|
macro->match.pattern = git_pool_strdup(pool, name);
|
385
|
-
|
390
|
+
GIT_ERROR_CHECK_ALLOC(macro->match.pattern);
|
386
391
|
|
387
392
|
macro->match.length = strlen(macro->match.pattern);
|
388
393
|
macro->match.flags = GIT_ATTR_FNMATCH_MACRO;
|
@@ -431,6 +436,9 @@ static int attr_decide_sources(
|
|
431
436
|
break;
|
432
437
|
}
|
433
438
|
|
439
|
+
if ((flags & GIT_ATTR_CHECK_INCLUDE_HEAD) != 0)
|
440
|
+
srcs[count++] = GIT_ATTR_FILE__FROM_HEAD;
|
441
|
+
|
434
442
|
return count;
|
435
443
|
}
|
436
444
|
|
@@ -440,13 +448,14 @@ static int push_attr_file(
|
|
440
448
|
git_vector *list,
|
441
449
|
git_attr_file_source source,
|
442
450
|
const char *base,
|
443
|
-
const char *filename
|
451
|
+
const char *filename,
|
452
|
+
bool allow_macros)
|
444
453
|
{
|
445
454
|
int error = 0;
|
446
455
|
git_attr_file *file = NULL;
|
447
456
|
|
448
457
|
error = git_attr_cache__get(&file, repo, attr_session,
|
449
|
-
source, base, filename, git_attr_file__parse_buffer);
|
458
|
+
source, base, filename, git_attr_file__parse_buffer, allow_macros);
|
450
459
|
|
451
460
|
if (error < 0)
|
452
461
|
return error;
|
@@ -461,16 +470,18 @@ static int push_attr_file(
|
|
461
470
|
|
462
471
|
static int push_one_attr(void *ref, const char *path)
|
463
472
|
{
|
464
|
-
int error = 0, n_src, i;
|
465
473
|
attr_walk_up_info *info = (attr_walk_up_info *)ref;
|
466
|
-
git_attr_file_source src[
|
474
|
+
git_attr_file_source src[GIT_ATTR_FILE_NUM_SOURCES];
|
475
|
+
int error = 0, n_src, i;
|
476
|
+
bool allow_macros;
|
467
477
|
|
468
478
|
n_src = attr_decide_sources(
|
469
479
|
info->flags, info->workdir != NULL, info->index != NULL, src);
|
480
|
+
allow_macros = info->workdir ? !strcmp(info->workdir, path) : false;
|
470
481
|
|
471
482
|
for (i = 0; !error && i < n_src; ++i)
|
472
|
-
error = push_attr_file(info->repo, info->attr_session,
|
473
|
-
|
483
|
+
error = push_attr_file(info->repo, info->attr_session, info->files,
|
484
|
+
src[i], path, GIT_ATTR_FILE, allow_macros);
|
474
485
|
|
475
486
|
return error;
|
476
487
|
}
|
@@ -499,7 +510,7 @@ static int collect_attr_files(
|
|
499
510
|
const char *workdir = git_repository_workdir(repo);
|
500
511
|
attr_walk_up_info info = { NULL };
|
501
512
|
|
502
|
-
if ((error = attr_setup(repo, attr_session)) < 0)
|
513
|
+
if ((error = attr_setup(repo, attr_session, flags)) < 0)
|
503
514
|
return error;
|
504
515
|
|
505
516
|
/* Resolve path in a non-bare repo */
|
@@ -517,22 +528,19 @@ static int collect_attr_files(
|
|
517
528
|
* - $GIT_PREFIX/etc/gitattributes
|
518
529
|
*/
|
519
530
|
|
520
|
-
error = git_repository_item_path(&attrfile, repo, GIT_REPOSITORY_ITEM_INFO)
|
521
|
-
|
522
|
-
|
523
|
-
|
524
|
-
|
525
|
-
|
526
|
-
attrfile.ptr, GIT_ATTR_FILE_INREPO);
|
527
|
-
if (error < 0)
|
528
|
-
goto cleanup;
|
531
|
+
if ((error = git_repository_item_path(&attrfile, repo, GIT_REPOSITORY_ITEM_INFO)) < 0 ||
|
532
|
+
(error = push_attr_file(repo, attr_session, files, GIT_ATTR_FILE__FROM_FILE,
|
533
|
+
attrfile.ptr, GIT_ATTR_FILE_INREPO, true)) < 0) {
|
534
|
+
if (error != GIT_ENOTFOUND)
|
535
|
+
goto cleanup;
|
536
|
+
}
|
529
537
|
|
530
538
|
info.repo = repo;
|
531
539
|
info.attr_session = attr_session;
|
532
540
|
info.flags = flags;
|
533
541
|
info.workdir = workdir;
|
534
542
|
if (git_repository_index__weakptr(&info.index, repo) < 0)
|
535
|
-
|
543
|
+
git_error_clear(); /* no error even if there is no index */
|
536
544
|
info.files = files;
|
537
545
|
|
538
546
|
if (!strcmp(dir.ptr, "."))
|
@@ -544,9 +552,8 @@ static int collect_attr_files(
|
|
544
552
|
goto cleanup;
|
545
553
|
|
546
554
|
if (git_repository_attr_cache(repo)->cfg_attr_file != NULL) {
|
547
|
-
error = push_attr_file(
|
548
|
-
|
549
|
-
NULL, git_repository_attr_cache(repo)->cfg_attr_file);
|
555
|
+
error = push_attr_file(repo, attr_session, files, GIT_ATTR_FILE__FROM_FILE,
|
556
|
+
NULL, git_repository_attr_cache(repo)->cfg_attr_file, true);
|
550
557
|
if (error < 0)
|
551
558
|
goto cleanup;
|
552
559
|
}
|
@@ -555,9 +562,8 @@ static int collect_attr_files(
|
|
555
562
|
error = system_attr_file(&dir, attr_session);
|
556
563
|
|
557
564
|
if (!error)
|
558
|
-
error = push_attr_file(
|
559
|
-
|
560
|
-
NULL, dir.ptr);
|
565
|
+
error = push_attr_file(repo, attr_session, files, GIT_ATTR_FILE__FROM_FILE,
|
566
|
+
NULL, dir.ptr, true);
|
561
567
|
else if (error == GIT_ENOTFOUND)
|
562
568
|
error = 0;
|
563
569
|
}
|
@@ -565,8 +571,8 @@ static int collect_attr_files(
|
|
565
571
|
cleanup:
|
566
572
|
if (error < 0)
|
567
573
|
release_attr_files(files);
|
568
|
-
|
569
|
-
|
574
|
+
git_buf_dispose(&attrfile);
|
575
|
+
git_buf_dispose(&dir);
|
570
576
|
|
571
577
|
return error;
|
572
578
|
}
|
@@ -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,7 +218,9 @@ int git_attr_file__load(
|
|
178
218
|
|
179
219
|
cleanup:
|
180
220
|
git_blob_free(blob);
|
181
|
-
|
221
|
+
git_tree_entry_free(tree_entry);
|
222
|
+
git_tree_free(tree);
|
223
|
+
git_buf_dispose(&content);
|
182
224
|
|
183
225
|
return error;
|
184
226
|
}
|
@@ -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(
|
@@ -518,7 +548,7 @@ int git_attr_path__init(
|
|
518
548
|
|
519
549
|
void git_attr_path__free(git_attr_path *info)
|
520
550
|
{
|
521
|
-
|
551
|
+
git_buf_dispose(&info->full);
|
522
552
|
info->path = NULL;
|
523
553
|
info->basename = NULL;
|
524
554
|
}
|
@@ -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;
|
@@ -876,8 +962,8 @@ void git_attr_session__free(git_attr_session *session)
|
|
876
962
|
if (!session)
|
877
963
|
return;
|
878
964
|
|
879
|
-
|
880
|
-
|
965
|
+
git_buf_dispose(&session->sysdir);
|
966
|
+
git_buf_dispose(&session->tmp);
|
881
967
|
|
882
968
|
memset(session, 0, sizeof(git_attr_session));
|
883
969
|
}
|