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
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (C) the libgit2 contributors. All rights reserved.
|
|
3
|
+
*
|
|
4
|
+
* This file is part of libgit2, distributed under the GNU GPL v2 with
|
|
5
|
+
* a Linking Exception. For full terms see the included COPYING file.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
#include "config.h"
|
|
9
|
+
|
|
10
|
+
#include "config_backend.h"
|
|
11
|
+
#include "config_parse.h"
|
|
12
|
+
#include "config_entries.h"
|
|
13
|
+
|
|
14
|
+
typedef struct {
|
|
15
|
+
git_config_backend parent;
|
|
16
|
+
git_config_entries *entries;
|
|
17
|
+
git_buf cfg;
|
|
18
|
+
} config_memory_backend;
|
|
19
|
+
|
|
20
|
+
typedef struct {
|
|
21
|
+
git_config_entries *entries;
|
|
22
|
+
git_config_level_t level;
|
|
23
|
+
} config_memory_parse_data;
|
|
24
|
+
|
|
25
|
+
static int config_error_readonly(void)
|
|
26
|
+
{
|
|
27
|
+
git_error_set(GIT_ERROR_CONFIG, "this backend is read-only");
|
|
28
|
+
return -1;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
static int read_variable_cb(
|
|
32
|
+
git_config_parser *reader,
|
|
33
|
+
const char *current_section,
|
|
34
|
+
const char *var_name,
|
|
35
|
+
const char *var_value,
|
|
36
|
+
const char *line,
|
|
37
|
+
size_t line_len,
|
|
38
|
+
void *payload)
|
|
39
|
+
{
|
|
40
|
+
config_memory_parse_data *parse_data = (config_memory_parse_data *) payload;
|
|
41
|
+
git_buf buf = GIT_BUF_INIT;
|
|
42
|
+
git_config_entry *entry;
|
|
43
|
+
const char *c;
|
|
44
|
+
int result;
|
|
45
|
+
|
|
46
|
+
GIT_UNUSED(reader);
|
|
47
|
+
GIT_UNUSED(line);
|
|
48
|
+
GIT_UNUSED(line_len);
|
|
49
|
+
|
|
50
|
+
if (current_section) {
|
|
51
|
+
/* TODO: Once warnings land, we should likely warn
|
|
52
|
+
* here. Git appears to warn in most cases if it sees
|
|
53
|
+
* un-namespaced config options.
|
|
54
|
+
*/
|
|
55
|
+
git_buf_puts(&buf, current_section);
|
|
56
|
+
git_buf_putc(&buf, '.');
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
for (c = var_name; *c; c++)
|
|
60
|
+
git_buf_putc(&buf, git__tolower(*c));
|
|
61
|
+
|
|
62
|
+
if (git_buf_oom(&buf))
|
|
63
|
+
return -1;
|
|
64
|
+
|
|
65
|
+
entry = git__calloc(1, sizeof(git_config_entry));
|
|
66
|
+
GIT_ERROR_CHECK_ALLOC(entry);
|
|
67
|
+
entry->name = git_buf_detach(&buf);
|
|
68
|
+
entry->value = var_value ? git__strdup(var_value) : NULL;
|
|
69
|
+
entry->level = parse_data->level;
|
|
70
|
+
entry->include_depth = 0;
|
|
71
|
+
|
|
72
|
+
if ((result = git_config_entries_append(parse_data->entries, entry)) < 0)
|
|
73
|
+
return result;
|
|
74
|
+
|
|
75
|
+
return result;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
static int config_memory_open(git_config_backend *backend, git_config_level_t level, const git_repository *repo)
|
|
79
|
+
{
|
|
80
|
+
config_memory_backend *memory_backend = (config_memory_backend *) backend;
|
|
81
|
+
git_config_parser parser = GIT_PARSE_CTX_INIT;
|
|
82
|
+
config_memory_parse_data parse_data;
|
|
83
|
+
int error;
|
|
84
|
+
|
|
85
|
+
GIT_UNUSED(repo);
|
|
86
|
+
|
|
87
|
+
if ((error = git_config_parser_init(&parser, "in-memory", memory_backend->cfg.ptr,
|
|
88
|
+
memory_backend->cfg.size)) < 0)
|
|
89
|
+
goto out;
|
|
90
|
+
parse_data.entries = memory_backend->entries;
|
|
91
|
+
parse_data.level = level;
|
|
92
|
+
|
|
93
|
+
if ((error = git_config_parse(&parser, NULL, read_variable_cb, NULL, NULL, &parse_data)) < 0)
|
|
94
|
+
goto out;
|
|
95
|
+
|
|
96
|
+
out:
|
|
97
|
+
git_config_parser_dispose(&parser);
|
|
98
|
+
return error;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
static int config_memory_get(git_config_backend *backend, const char *key, git_config_entry **out)
|
|
102
|
+
{
|
|
103
|
+
config_memory_backend *memory_backend = (config_memory_backend *) backend;
|
|
104
|
+
return git_config_entries_get(out, memory_backend->entries, key);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
static int config_memory_iterator(
|
|
108
|
+
git_config_iterator **iter,
|
|
109
|
+
git_config_backend *backend)
|
|
110
|
+
{
|
|
111
|
+
config_memory_backend *memory_backend = (config_memory_backend *) backend;
|
|
112
|
+
git_config_entries *entries;
|
|
113
|
+
int error;
|
|
114
|
+
|
|
115
|
+
if ((error = git_config_entries_dup(&entries, memory_backend->entries)) < 0)
|
|
116
|
+
goto out;
|
|
117
|
+
|
|
118
|
+
if ((error = git_config_entries_iterator_new(iter, entries)) < 0)
|
|
119
|
+
goto out;
|
|
120
|
+
|
|
121
|
+
out:
|
|
122
|
+
/* Let iterator delete duplicated entries when it's done */
|
|
123
|
+
git_config_entries_free(entries);
|
|
124
|
+
return error;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
static int config_memory_set(git_config_backend *backend, const char *name, const char *value)
|
|
128
|
+
{
|
|
129
|
+
GIT_UNUSED(backend);
|
|
130
|
+
GIT_UNUSED(name);
|
|
131
|
+
GIT_UNUSED(value);
|
|
132
|
+
return config_error_readonly();
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
static int config_memory_set_multivar(
|
|
136
|
+
git_config_backend *backend, const char *name, const char *regexp, const char *value)
|
|
137
|
+
{
|
|
138
|
+
GIT_UNUSED(backend);
|
|
139
|
+
GIT_UNUSED(name);
|
|
140
|
+
GIT_UNUSED(regexp);
|
|
141
|
+
GIT_UNUSED(value);
|
|
142
|
+
return config_error_readonly();
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
static int config_memory_delete(git_config_backend *backend, const char *name)
|
|
146
|
+
{
|
|
147
|
+
GIT_UNUSED(backend);
|
|
148
|
+
GIT_UNUSED(name);
|
|
149
|
+
return config_error_readonly();
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
static int config_memory_delete_multivar(git_config_backend *backend, const char *name, const char *regexp)
|
|
153
|
+
{
|
|
154
|
+
GIT_UNUSED(backend);
|
|
155
|
+
GIT_UNUSED(name);
|
|
156
|
+
GIT_UNUSED(regexp);
|
|
157
|
+
return config_error_readonly();
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
static int config_memory_lock(git_config_backend *backend)
|
|
161
|
+
{
|
|
162
|
+
GIT_UNUSED(backend);
|
|
163
|
+
return config_error_readonly();
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
static int config_memory_unlock(git_config_backend *backend, int success)
|
|
167
|
+
{
|
|
168
|
+
GIT_UNUSED(backend);
|
|
169
|
+
GIT_UNUSED(success);
|
|
170
|
+
return config_error_readonly();
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
static void config_memory_free(git_config_backend *_backend)
|
|
174
|
+
{
|
|
175
|
+
config_memory_backend *backend = (config_memory_backend *)_backend;
|
|
176
|
+
|
|
177
|
+
if (backend == NULL)
|
|
178
|
+
return;
|
|
179
|
+
|
|
180
|
+
git_config_entries_free(backend->entries);
|
|
181
|
+
git_buf_dispose(&backend->cfg);
|
|
182
|
+
git__free(backend);
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
int git_config_backend_from_string(git_config_backend **out, const char *cfg, size_t len)
|
|
186
|
+
{
|
|
187
|
+
config_memory_backend *backend;
|
|
188
|
+
|
|
189
|
+
backend = git__calloc(1, sizeof(config_memory_backend));
|
|
190
|
+
GIT_ERROR_CHECK_ALLOC(backend);
|
|
191
|
+
|
|
192
|
+
if (git_config_entries_new(&backend->entries) < 0) {
|
|
193
|
+
git__free(backend);
|
|
194
|
+
return -1;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
if (git_buf_set(&backend->cfg, cfg, len) < 0) {
|
|
198
|
+
git_config_entries_free(backend->entries);
|
|
199
|
+
git__free(backend);
|
|
200
|
+
return -1;
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
backend->parent.version = GIT_CONFIG_BACKEND_VERSION;
|
|
204
|
+
backend->parent.readonly = 1;
|
|
205
|
+
backend->parent.open = config_memory_open;
|
|
206
|
+
backend->parent.get = config_memory_get;
|
|
207
|
+
backend->parent.set = config_memory_set;
|
|
208
|
+
backend->parent.set_multivar = config_memory_set_multivar;
|
|
209
|
+
backend->parent.del = config_memory_delete;
|
|
210
|
+
backend->parent.del_multivar = config_memory_delete_multivar;
|
|
211
|
+
backend->parent.iterator = config_memory_iterator;
|
|
212
|
+
backend->parent.lock = config_memory_lock;
|
|
213
|
+
backend->parent.unlock = config_memory_unlock;
|
|
214
|
+
backend->parent.snapshot = git_config_backend_snapshot;
|
|
215
|
+
backend->parent.free = config_memory_free;
|
|
216
|
+
|
|
217
|
+
*out = (git_config_backend *)backend;
|
|
218
|
+
|
|
219
|
+
return 0;
|
|
220
|
+
}
|
|
@@ -11,10 +11,19 @@
|
|
|
11
11
|
|
|
12
12
|
#include <ctype.h>
|
|
13
13
|
|
|
14
|
+
const char *git_config_escapes = "ntb\"\\";
|
|
15
|
+
const char *git_config_escaped = "\n\t\b\"\\";
|
|
16
|
+
|
|
14
17
|
static void set_parse_error(git_config_parser *reader, int col, const char *error_str)
|
|
15
18
|
{
|
|
16
|
-
|
|
17
|
-
|
|
19
|
+
if (col)
|
|
20
|
+
git_error_set(GIT_ERROR_CONFIG,
|
|
21
|
+
"failed to parse config file: %s (in %s:%"PRIuZ", column %d)",
|
|
22
|
+
error_str, reader->path, reader->ctx.line_num, col);
|
|
23
|
+
else
|
|
24
|
+
git_error_set(GIT_ERROR_CONFIG,
|
|
25
|
+
"failed to parse config file: %s (in %s:%"PRIuZ")",
|
|
26
|
+
error_str, reader->path, reader->ctx.line_num);
|
|
18
27
|
}
|
|
19
28
|
|
|
20
29
|
|
|
@@ -55,35 +64,40 @@ static int strip_comments(char *line, int in_quotes)
|
|
|
55
64
|
}
|
|
56
65
|
|
|
57
66
|
|
|
58
|
-
static int
|
|
67
|
+
static int parse_subsection_header(git_config_parser *reader, const char *line, size_t pos, const char *base_name, char **section_name)
|
|
59
68
|
{
|
|
60
69
|
int c, rpos;
|
|
61
|
-
char *first_quote, *last_quote;
|
|
70
|
+
const char *first_quote, *last_quote;
|
|
71
|
+
const char *line_start = line;
|
|
62
72
|
git_buf buf = GIT_BUF_INIT;
|
|
63
73
|
size_t quoted_len, alloc_len, base_name_len = strlen(base_name);
|
|
64
74
|
|
|
65
|
-
/*
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
* sync so we only really use it to calculate the length.
|
|
69
|
-
*/
|
|
75
|
+
/* Skip any additional whitespace before our section name */
|
|
76
|
+
while (git__isspace(line[pos]))
|
|
77
|
+
pos++;
|
|
70
78
|
|
|
71
|
-
|
|
72
|
-
if (
|
|
73
|
-
set_parse_error(reader, 0, "
|
|
79
|
+
/* We should be at the first quotation mark. */
|
|
80
|
+
if (line[pos] != '"') {
|
|
81
|
+
set_parse_error(reader, 0, "missing quotation marks in section header");
|
|
74
82
|
goto end_error;
|
|
75
83
|
}
|
|
76
84
|
|
|
85
|
+
first_quote = &line[pos];
|
|
77
86
|
last_quote = strrchr(line, '"');
|
|
78
87
|
quoted_len = last_quote - first_quote;
|
|
79
88
|
|
|
89
|
+
if ((last_quote - line) > INT_MAX) {
|
|
90
|
+
set_parse_error(reader, 0, "invalid section header, line too long");
|
|
91
|
+
goto end_error;
|
|
92
|
+
}
|
|
93
|
+
|
|
80
94
|
if (quoted_len == 0) {
|
|
81
|
-
set_parse_error(reader, 0, "
|
|
95
|
+
set_parse_error(reader, 0, "missing closing quotation mark in section header");
|
|
82
96
|
goto end_error;
|
|
83
97
|
}
|
|
84
98
|
|
|
85
|
-
|
|
86
|
-
|
|
99
|
+
GIT_ERROR_CHECK_ALLOC_ADD(&alloc_len, base_name_len, quoted_len);
|
|
100
|
+
GIT_ERROR_CHECK_ALLOC_ADD(&alloc_len, alloc_len, 2);
|
|
87
101
|
|
|
88
102
|
if (git_buf_grow(&buf, alloc_len) < 0 ||
|
|
89
103
|
git_buf_printf(&buf, "%s.", base_name) < 0)
|
|
@@ -102,7 +116,7 @@ static int parse_section_header_ext(git_config_parser *reader, const char *line,
|
|
|
102
116
|
|
|
103
117
|
switch (c) {
|
|
104
118
|
case 0:
|
|
105
|
-
set_parse_error(reader, 0, "
|
|
119
|
+
set_parse_error(reader, 0, "unexpected end-of-line in section header");
|
|
106
120
|
goto end_error;
|
|
107
121
|
|
|
108
122
|
case '"':
|
|
@@ -112,7 +126,7 @@ static int parse_section_header_ext(git_config_parser *reader, const char *line,
|
|
|
112
126
|
c = line[++rpos];
|
|
113
127
|
|
|
114
128
|
if (c == 0) {
|
|
115
|
-
set_parse_error(reader, rpos, "
|
|
129
|
+
set_parse_error(reader, rpos, "unexpected end-of-line in section header");
|
|
116
130
|
goto end_error;
|
|
117
131
|
}
|
|
118
132
|
|
|
@@ -129,13 +143,13 @@ end_parse:
|
|
|
129
143
|
goto end_error;
|
|
130
144
|
|
|
131
145
|
if (line[rpos] != '"' || line[rpos + 1] != ']') {
|
|
132
|
-
set_parse_error(reader, rpos, "
|
|
146
|
+
set_parse_error(reader, rpos, "unexpected text after closing quotes");
|
|
133
147
|
git_buf_dispose(&buf);
|
|
134
148
|
return -1;
|
|
135
149
|
}
|
|
136
150
|
|
|
137
151
|
*section_name = git_buf_detach(&buf);
|
|
138
|
-
return
|
|
152
|
+
return (int)(&line[rpos + 2] - line_start); /* rpos is at the closing quote */
|
|
139
153
|
|
|
140
154
|
end_error:
|
|
141
155
|
git_buf_dispose(&buf);
|
|
@@ -160,13 +174,13 @@ static int parse_section_header(git_config_parser *reader, char **section_out)
|
|
|
160
174
|
name_end = strrchr(line, ']');
|
|
161
175
|
if (name_end == NULL) {
|
|
162
176
|
git__free(line);
|
|
163
|
-
set_parse_error(reader, 0, "
|
|
177
|
+
set_parse_error(reader, 0, "missing ']' in section header");
|
|
164
178
|
return -1;
|
|
165
179
|
}
|
|
166
180
|
|
|
167
|
-
|
|
181
|
+
GIT_ERROR_CHECK_ALLOC_ADD(&line_len, (size_t)(name_end - line), 1);
|
|
168
182
|
name = git__malloc(line_len);
|
|
169
|
-
|
|
183
|
+
GIT_ERROR_CHECK_ALLOC(name);
|
|
170
184
|
|
|
171
185
|
name_length = 0;
|
|
172
186
|
pos = 0;
|
|
@@ -180,14 +194,14 @@ static int parse_section_header(git_config_parser *reader, char **section_out)
|
|
|
180
194
|
do {
|
|
181
195
|
if (git__isspace(c)){
|
|
182
196
|
name[name_length] = '\0';
|
|
183
|
-
result =
|
|
197
|
+
result = parse_subsection_header(reader, line, pos, name, section_out);
|
|
184
198
|
git__free(line);
|
|
185
199
|
git__free(name);
|
|
186
200
|
return result;
|
|
187
201
|
}
|
|
188
202
|
|
|
189
203
|
if (!config_keychar(c) && c != '.') {
|
|
190
|
-
set_parse_error(reader, pos, "
|
|
204
|
+
set_parse_error(reader, pos, "unexpected character in header");
|
|
191
205
|
goto fail_parse;
|
|
192
206
|
}
|
|
193
207
|
|
|
@@ -196,7 +210,7 @@ static int parse_section_header(git_config_parser *reader, char **section_out)
|
|
|
196
210
|
} while ((c = line[pos++]) != ']');
|
|
197
211
|
|
|
198
212
|
if (line[pos - 1] != ']') {
|
|
199
|
-
set_parse_error(reader, pos, "
|
|
213
|
+
set_parse_error(reader, pos, "unexpected end of file");
|
|
200
214
|
goto fail_parse;
|
|
201
215
|
}
|
|
202
216
|
|
|
@@ -299,7 +313,7 @@ static int unescape_line(
|
|
|
299
313
|
*fixed++ = git_config_escaped[esc - git_config_escapes];
|
|
300
314
|
} else {
|
|
301
315
|
git__free(str);
|
|
302
|
-
|
|
316
|
+
git_error_set(GIT_ERROR_CONFIG, "invalid escape at %s", ptr);
|
|
303
317
|
return -1;
|
|
304
318
|
}
|
|
305
319
|
}
|
|
@@ -315,49 +329,51 @@ done:
|
|
|
315
329
|
|
|
316
330
|
static int parse_multiline_variable(git_config_parser *reader, git_buf *value, int in_quotes)
|
|
317
331
|
{
|
|
318
|
-
char *line = NULL, *proc_line = NULL;
|
|
319
332
|
int quote_count;
|
|
320
|
-
bool multiline;
|
|
333
|
+
bool multiline = true;
|
|
321
334
|
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
if (line == NULL)
|
|
326
|
-
return -1;
|
|
335
|
+
while (multiline) {
|
|
336
|
+
char *line = NULL, *proc_line = NULL;
|
|
337
|
+
int error;
|
|
327
338
|
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
339
|
+
/* Check that the next line exists */
|
|
340
|
+
git_parse_advance_line(&reader->ctx);
|
|
341
|
+
line = git__strndup(reader->ctx.line, reader->ctx.line_len);
|
|
342
|
+
GIT_ERROR_CHECK_ALLOC(line);
|
|
343
|
+
|
|
344
|
+
/*
|
|
345
|
+
* We've reached the end of the file, there is no continuation.
|
|
346
|
+
* (this is not an error).
|
|
347
|
+
*/
|
|
348
|
+
if (line[0] == '\0') {
|
|
349
|
+
error = 0;
|
|
350
|
+
goto out;
|
|
351
|
+
}
|
|
335
352
|
|
|
336
|
-
|
|
353
|
+
/* If it was just a comment, pretend it didn't exist */
|
|
354
|
+
quote_count = strip_comments(line, !!in_quotes);
|
|
355
|
+
if (line[0] == '\0')
|
|
356
|
+
goto next;
|
|
337
357
|
|
|
338
|
-
|
|
339
|
-
|
|
358
|
+
if ((error = unescape_line(&proc_line, &multiline,
|
|
359
|
+
line, in_quotes)) < 0)
|
|
360
|
+
goto out;
|
|
361
|
+
|
|
362
|
+
/* Add this line to the multiline var */
|
|
363
|
+
if ((error = git_buf_puts(value, proc_line)) < 0)
|
|
364
|
+
goto out;
|
|
365
|
+
|
|
366
|
+
next:
|
|
340
367
|
git__free(line);
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
368
|
+
git__free(proc_line);
|
|
369
|
+
in_quotes = quote_count;
|
|
370
|
+
continue;
|
|
344
371
|
|
|
345
|
-
|
|
372
|
+
out:
|
|
346
373
|
git__free(line);
|
|
347
|
-
|
|
374
|
+
git__free(proc_line);
|
|
375
|
+
return error;
|
|
348
376
|
}
|
|
349
|
-
/* add this line to the multiline var */
|
|
350
|
-
|
|
351
|
-
git_buf_puts(value, proc_line);
|
|
352
|
-
git__free(line);
|
|
353
|
-
git__free(proc_line);
|
|
354
|
-
|
|
355
|
-
/*
|
|
356
|
-
* If we need to continue reading the next line, let's just
|
|
357
|
-
* keep putting stuff in the buffer
|
|
358
|
-
*/
|
|
359
|
-
if (multiline)
|
|
360
|
-
return parse_multiline_variable(reader, value, quote_count);
|
|
361
377
|
|
|
362
378
|
return 0;
|
|
363
379
|
}
|
|
@@ -379,7 +395,7 @@ static int parse_name(
|
|
|
379
395
|
name_end++;
|
|
380
396
|
|
|
381
397
|
if (line == name_end) {
|
|
382
|
-
set_parse_error(reader, 0, "
|
|
398
|
+
set_parse_error(reader, 0, "invalid configuration key");
|
|
383
399
|
return -1;
|
|
384
400
|
}
|
|
385
401
|
|
|
@@ -391,7 +407,7 @@ static int parse_name(
|
|
|
391
407
|
if (*value_start == '=') {
|
|
392
408
|
*value = value_start + 1;
|
|
393
409
|
} else if (*value_start) {
|
|
394
|
-
set_parse_error(reader, 0, "
|
|
410
|
+
set_parse_error(reader, 0, "invalid configuration key");
|
|
395
411
|
return -1;
|
|
396
412
|
}
|
|
397
413
|
|
|
@@ -413,7 +429,7 @@ static int parse_variable(git_config_parser *reader, char **var_name, char **var
|
|
|
413
429
|
|
|
414
430
|
git_parse_advance_ws(&reader->ctx);
|
|
415
431
|
line = git__strndup(reader->ctx.line, reader->ctx.line_len);
|
|
416
|
-
|
|
432
|
+
GIT_ERROR_CHECK_ALLOC(line);
|
|
417
433
|
|
|
418
434
|
quote_count = strip_comments(line, 0);
|
|
419
435
|
|
|
@@ -433,6 +449,7 @@ static int parse_variable(git_config_parser *reader, char **var_name, char **var
|
|
|
433
449
|
if (multiline) {
|
|
434
450
|
git_buf multi_value = GIT_BUF_INIT;
|
|
435
451
|
git_buf_attach(&multi_value, value, 0);
|
|
452
|
+
value = NULL;
|
|
436
453
|
|
|
437
454
|
if (parse_multiline_variable(reader, &multi_value, quote_count) < 0 ||
|
|
438
455
|
git_buf_oom(&multi_value)) {
|
|
@@ -457,13 +474,24 @@ out:
|
|
|
457
474
|
return error;
|
|
458
475
|
}
|
|
459
476
|
|
|
477
|
+
int git_config_parser_init(git_config_parser *out, const char *path, const char *data, size_t datalen)
|
|
478
|
+
{
|
|
479
|
+
out->path = path;
|
|
480
|
+
return git_parse_ctx_init(&out->ctx, data, datalen);
|
|
481
|
+
}
|
|
482
|
+
|
|
483
|
+
void git_config_parser_dispose(git_config_parser *parser)
|
|
484
|
+
{
|
|
485
|
+
git_parse_ctx_clear(&parser->ctx);
|
|
486
|
+
}
|
|
487
|
+
|
|
460
488
|
int git_config_parse(
|
|
461
489
|
git_config_parser *parser,
|
|
462
490
|
git_config_parser_section_cb on_section,
|
|
463
491
|
git_config_parser_variable_cb on_variable,
|
|
464
492
|
git_config_parser_comment_cb on_comment,
|
|
465
493
|
git_config_parser_eof_cb on_eof,
|
|
466
|
-
void *
|
|
494
|
+
void *payload)
|
|
467
495
|
{
|
|
468
496
|
git_parse_ctx *ctx;
|
|
469
497
|
char *current_section = NULL, *var_name = NULL, *var_value = NULL;
|
|
@@ -503,7 +531,7 @@ int git_config_parse(
|
|
|
503
531
|
git_parse_advance_chars(ctx, result);
|
|
504
532
|
|
|
505
533
|
if (on_section)
|
|
506
|
-
result = on_section(parser, current_section, line_start, line_len,
|
|
534
|
+
result = on_section(parser, current_section, line_start, line_len, payload);
|
|
507
535
|
/*
|
|
508
536
|
* After we've parsed the section header we may not be
|
|
509
537
|
* done with the line. If there's still data in there,
|
|
@@ -523,13 +551,13 @@ int git_config_parse(
|
|
|
523
551
|
case ';':
|
|
524
552
|
case '#':
|
|
525
553
|
if (on_comment) {
|
|
526
|
-
result = on_comment(parser, line_start, line_len,
|
|
554
|
+
result = on_comment(parser, line_start, line_len, payload);
|
|
527
555
|
}
|
|
528
556
|
break;
|
|
529
557
|
|
|
530
558
|
default: /* assume variable declaration */
|
|
531
559
|
if ((result = parse_variable(parser, &var_name, &var_value)) == 0 && on_variable) {
|
|
532
|
-
result = on_variable(parser, current_section, var_name, var_value, line_start, line_len,
|
|
560
|
+
result = on_variable(parser, current_section, var_name, var_value, line_start, line_len, payload);
|
|
533
561
|
git__free(var_name);
|
|
534
562
|
git__free(var_value);
|
|
535
563
|
}
|
|
@@ -542,7 +570,7 @@ int git_config_parse(
|
|
|
542
570
|
}
|
|
543
571
|
|
|
544
572
|
if (on_eof)
|
|
545
|
-
result = on_eof(parser, current_section,
|
|
573
|
+
result = on_eof(parser, current_section, payload);
|
|
546
574
|
|
|
547
575
|
out:
|
|
548
576
|
git__free(current_section);
|
|
@@ -8,30 +8,28 @@
|
|
|
8
8
|
#define INCLUDE_config_parse_h__
|
|
9
9
|
|
|
10
10
|
#include "common.h"
|
|
11
|
+
|
|
11
12
|
#include "array.h"
|
|
13
|
+
#include "futils.h"
|
|
12
14
|
#include "oid.h"
|
|
13
15
|
#include "parse.h"
|
|
14
16
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
typedef struct config_file {
|
|
19
|
-
git_oid checksum;
|
|
20
|
-
char *path;
|
|
21
|
-
git_array_t(struct config_file) includes;
|
|
22
|
-
} git_config_file;
|
|
17
|
+
extern const char *git_config_escapes;
|
|
18
|
+
extern const char *git_config_escaped;
|
|
23
19
|
|
|
24
20
|
typedef struct {
|
|
25
|
-
|
|
21
|
+
const char *path;
|
|
26
22
|
git_parse_ctx ctx;
|
|
27
23
|
} git_config_parser;
|
|
28
24
|
|
|
25
|
+
#define GIT_CONFIG_PARSER_INIT { NULL, GIT_PARSE_CTX_INIT }
|
|
26
|
+
|
|
29
27
|
typedef int (*git_config_parser_section_cb)(
|
|
30
28
|
git_config_parser *parser,
|
|
31
29
|
const char *current_section,
|
|
32
30
|
const char *line,
|
|
33
31
|
size_t line_len,
|
|
34
|
-
void *
|
|
32
|
+
void *payload);
|
|
35
33
|
|
|
36
34
|
typedef int (*git_config_parser_variable_cb)(
|
|
37
35
|
git_config_parser *parser,
|
|
@@ -40,18 +38,21 @@ typedef int (*git_config_parser_variable_cb)(
|
|
|
40
38
|
const char *var_value,
|
|
41
39
|
const char *line,
|
|
42
40
|
size_t line_len,
|
|
43
|
-
void *
|
|
41
|
+
void *payload);
|
|
44
42
|
|
|
45
43
|
typedef int (*git_config_parser_comment_cb)(
|
|
46
44
|
git_config_parser *parser,
|
|
47
45
|
const char *line,
|
|
48
46
|
size_t line_len,
|
|
49
|
-
void *
|
|
47
|
+
void *payload);
|
|
50
48
|
|
|
51
49
|
typedef int (*git_config_parser_eof_cb)(
|
|
52
50
|
git_config_parser *parser,
|
|
53
51
|
const char *current_section,
|
|
54
|
-
void *
|
|
52
|
+
void *payload);
|
|
53
|
+
|
|
54
|
+
int git_config_parser_init(git_config_parser *out, const char *path, const char *data, size_t datalen);
|
|
55
|
+
void git_config_parser_dispose(git_config_parser *parser);
|
|
55
56
|
|
|
56
57
|
int git_config_parse(
|
|
57
58
|
git_config_parser *parser,
|
|
@@ -59,6 +60,6 @@ int git_config_parse(
|
|
|
59
60
|
git_config_parser_variable_cb on_variable,
|
|
60
61
|
git_config_parser_comment_cb on_comment,
|
|
61
62
|
git_config_parser_eof_cb on_eof,
|
|
62
|
-
void *
|
|
63
|
+
void *payload);
|
|
63
64
|
|
|
64
65
|
#endif
|