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
|
@@ -9,10 +9,10 @@
|
|
|
9
9
|
|
|
10
10
|
#include "git2/errors.h"
|
|
11
11
|
|
|
12
|
-
#include "util.h"
|
|
13
|
-
#include "posix.h"
|
|
14
12
|
#include "refs.h"
|
|
13
|
+
#include "util.h"
|
|
15
14
|
#include "vector.h"
|
|
15
|
+
#include "wildmatch.h"
|
|
16
16
|
|
|
17
17
|
int git_refspec__parse(git_refspec *refspec, const char *input, bool is_fetch)
|
|
18
18
|
{
|
|
@@ -43,11 +43,11 @@ int git_refspec__parse(git_refspec *refspec, const char *input, bool is_fetch)
|
|
|
43
43
|
if (!is_fetch && rhs == lhs && rhs[1] == '\0') {
|
|
44
44
|
refspec->matching = 1;
|
|
45
45
|
refspec->string = git__strdup(input);
|
|
46
|
-
|
|
46
|
+
GIT_ERROR_CHECK_ALLOC(refspec->string);
|
|
47
47
|
refspec->src = git__strdup("");
|
|
48
|
-
|
|
48
|
+
GIT_ERROR_CHECK_ALLOC(refspec->src);
|
|
49
49
|
refspec->dst = git__strdup("");
|
|
50
|
-
|
|
50
|
+
GIT_ERROR_CHECK_ALLOC(refspec->dst);
|
|
51
51
|
return 0;
|
|
52
52
|
}
|
|
53
53
|
|
|
@@ -69,8 +69,9 @@ int git_refspec__parse(git_refspec *refspec, const char *input, bool is_fetch)
|
|
|
69
69
|
|
|
70
70
|
refspec->pattern = is_glob;
|
|
71
71
|
refspec->src = git__strndup(lhs, llen);
|
|
72
|
-
flags =
|
|
73
|
-
|
|
|
72
|
+
flags = GIT_REFERENCE_FORMAT_ALLOW_ONELEVEL |
|
|
73
|
+
GIT_REFERENCE_FORMAT_REFSPEC_SHORTHAND |
|
|
74
|
+
(is_glob ? GIT_REFERENCE_FORMAT_REFSPEC_PATTERN : 0);
|
|
74
75
|
|
|
75
76
|
if (is_fetch) {
|
|
76
77
|
/*
|
|
@@ -131,18 +132,18 @@ int git_refspec__parse(git_refspec *refspec, const char *input, bool is_fetch)
|
|
|
131
132
|
/* if the RHS is empty, then it's a copy of the LHS */
|
|
132
133
|
if (!refspec->dst) {
|
|
133
134
|
refspec->dst = git__strdup(refspec->src);
|
|
134
|
-
|
|
135
|
+
GIT_ERROR_CHECK_ALLOC(refspec->dst);
|
|
135
136
|
}
|
|
136
137
|
}
|
|
137
138
|
|
|
138
139
|
refspec->string = git__strdup(input);
|
|
139
|
-
|
|
140
|
+
GIT_ERROR_CHECK_ALLOC(refspec->string);
|
|
140
141
|
|
|
141
142
|
return 0;
|
|
142
143
|
|
|
143
144
|
invalid:
|
|
144
|
-
|
|
145
|
-
|
|
145
|
+
git_error_set(
|
|
146
|
+
GIT_ERROR_INVALID,
|
|
146
147
|
"'%s' is not a valid refspec.", input);
|
|
147
148
|
git_refspec__dispose(refspec);
|
|
148
149
|
return -1;
|
|
@@ -168,7 +169,7 @@ int git_refspec_parse(git_refspec **out_refspec, const char *input, int is_fetch
|
|
|
168
169
|
*out_refspec = NULL;
|
|
169
170
|
|
|
170
171
|
refspec = git__malloc(sizeof(git_refspec));
|
|
171
|
-
|
|
172
|
+
GIT_ERROR_CHECK_ALLOC(refspec);
|
|
172
173
|
|
|
173
174
|
if (git_refspec__parse(refspec, input, !!is_fetch) != 0) {
|
|
174
175
|
git__free(refspec);
|
|
@@ -212,7 +213,7 @@ int git_refspec_src_matches(const git_refspec *refspec, const char *refname)
|
|
|
212
213
|
if (refspec == NULL || refspec->src == NULL)
|
|
213
214
|
return false;
|
|
214
215
|
|
|
215
|
-
return (
|
|
216
|
+
return (wildmatch(refspec->src, refname, 0) == 0);
|
|
216
217
|
}
|
|
217
218
|
|
|
218
219
|
int git_refspec_dst_matches(const git_refspec *refspec, const char *refname)
|
|
@@ -220,14 +221,13 @@ int git_refspec_dst_matches(const git_refspec *refspec, const char *refname)
|
|
|
220
221
|
if (refspec == NULL || refspec->dst == NULL)
|
|
221
222
|
return false;
|
|
222
223
|
|
|
223
|
-
return (
|
|
224
|
+
return (wildmatch(refspec->dst, refname, 0) == 0);
|
|
224
225
|
}
|
|
225
226
|
|
|
226
227
|
static int refspec_transform(
|
|
227
228
|
git_buf *out, const char *from, const char *to, const char *name)
|
|
228
229
|
{
|
|
229
230
|
const char *from_star, *to_star;
|
|
230
|
-
const char *name_slash, *from_slash;
|
|
231
231
|
size_t replacement_len, star_offset;
|
|
232
232
|
|
|
233
233
|
git_buf_sanitize(out);
|
|
@@ -250,17 +250,11 @@ static int refspec_transform(
|
|
|
250
250
|
/* the first half is copied over */
|
|
251
251
|
git_buf_put(out, to, to_star - to);
|
|
252
252
|
|
|
253
|
-
/*
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
/* if there is no slash after the star in 'from', we want to copy everything over */
|
|
259
|
-
from_slash = strchr(from + star_offset, '/');
|
|
260
|
-
if (!from_slash)
|
|
261
|
-
name_slash = strrchr(name, '\0');
|
|
262
|
-
|
|
263
|
-
replacement_len = (name_slash - name) - star_offset;
|
|
253
|
+
/*
|
|
254
|
+
* Copy over the name, but exclude the trailing part in "from" starting
|
|
255
|
+
* after the glob
|
|
256
|
+
*/
|
|
257
|
+
replacement_len = strlen(name + star_offset) - strlen(from_star + 1);
|
|
264
258
|
git_buf_put(out, name + star_offset, replacement_len);
|
|
265
259
|
|
|
266
260
|
return git_buf_puts(out, to_star + 1);
|
|
@@ -272,7 +266,7 @@ int git_refspec_transform(git_buf *out, const git_refspec *spec, const char *nam
|
|
|
272
266
|
git_buf_sanitize(out);
|
|
273
267
|
|
|
274
268
|
if (!git_refspec_src_matches(spec, name)) {
|
|
275
|
-
|
|
269
|
+
git_error_set(GIT_ERROR_INVALID, "ref '%s' doesn't match the source", name);
|
|
276
270
|
return -1;
|
|
277
271
|
}
|
|
278
272
|
|
|
@@ -288,7 +282,7 @@ int git_refspec_rtransform(git_buf *out, const git_refspec *spec, const char *na
|
|
|
288
282
|
git_buf_sanitize(out);
|
|
289
283
|
|
|
290
284
|
if (!git_refspec_dst_matches(spec, name)) {
|
|
291
|
-
|
|
285
|
+
git_error_set(GIT_ERROR_INVALID, "ref '%s' doesn't match the destination", name);
|
|
292
286
|
return -1;
|
|
293
287
|
}
|
|
294
288
|
|
|
@@ -341,7 +335,7 @@ int git_refspec__dwim_one(git_vector *out, git_refspec *spec, git_vector *refs)
|
|
|
341
335
|
assert(out && spec && refs);
|
|
342
336
|
|
|
343
337
|
cur = git__calloc(1, sizeof(git_refspec));
|
|
344
|
-
|
|
338
|
+
GIT_ERROR_CHECK_ALLOC(cur);
|
|
345
339
|
|
|
346
340
|
cur->force = spec->force;
|
|
347
341
|
cur->push = spec->push;
|
|
@@ -354,7 +348,7 @@ int git_refspec__dwim_one(git_vector *out, git_refspec *spec, git_vector *refs)
|
|
|
354
348
|
for (j = 0; formatters[j]; j++) {
|
|
355
349
|
git_buf_clear(&buf);
|
|
356
350
|
git_buf_printf(&buf, formatters[j], spec->src);
|
|
357
|
-
|
|
351
|
+
GIT_ERROR_CHECK_ALLOC_BUF(&buf);
|
|
358
352
|
|
|
359
353
|
key.name = (char *) git_buf_cstr(&buf);
|
|
360
354
|
if (!git_vector_search(&pos, refs, &key)) {
|
|
@@ -367,7 +361,7 @@ int git_refspec__dwim_one(git_vector *out, git_refspec *spec, git_vector *refs)
|
|
|
367
361
|
/* No shorthands found, copy over the name */
|
|
368
362
|
if (cur->src == NULL && spec->src != NULL) {
|
|
369
363
|
cur->src = git__strdup(spec->src);
|
|
370
|
-
|
|
364
|
+
GIT_ERROR_CHECK_ALLOC(cur->src);
|
|
371
365
|
}
|
|
372
366
|
|
|
373
367
|
if (spec->dst && git__prefixcmp(spec->dst, GIT_REFS_DIR)) {
|
|
@@ -379,7 +373,7 @@ int git_refspec__dwim_one(git_vector *out, git_refspec *spec, git_vector *refs)
|
|
|
379
373
|
}
|
|
380
374
|
|
|
381
375
|
git_buf_puts(&buf, spec->dst);
|
|
382
|
-
|
|
376
|
+
GIT_ERROR_CHECK_ALLOC_BUF(&buf);
|
|
383
377
|
|
|
384
378
|
cur->dst = git_buf_detach(&buf);
|
|
385
379
|
}
|
|
@@ -388,7 +382,7 @@ int git_refspec__dwim_one(git_vector *out, git_refspec *spec, git_vector *refs)
|
|
|
388
382
|
|
|
389
383
|
if (cur->dst == NULL && spec->dst != NULL) {
|
|
390
384
|
cur->dst = git__strdup(spec->dst);
|
|
391
|
-
|
|
385
|
+
GIT_ERROR_CHECK_ALLOC(cur->dst);
|
|
392
386
|
}
|
|
393
387
|
|
|
394
388
|
return git_vector_insert(out, cur);
|
|
@@ -0,0 +1,221 @@
|
|
|
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 "regexp.h"
|
|
9
|
+
|
|
10
|
+
#if defined(GIT_REGEX_BUILTIN) || defined(GIT_REGEX_PCRE)
|
|
11
|
+
|
|
12
|
+
int git_regexp_compile(git_regexp *r, const char *pattern, int flags)
|
|
13
|
+
{
|
|
14
|
+
int erroffset, cflags = 0;
|
|
15
|
+
const char *error;
|
|
16
|
+
|
|
17
|
+
if (flags & GIT_REGEXP_ICASE)
|
|
18
|
+
cflags |= PCRE_CASELESS;
|
|
19
|
+
|
|
20
|
+
if ((*r = pcre_compile(pattern, cflags, &error, &erroffset, NULL)) == NULL) {
|
|
21
|
+
git_error_set_str(GIT_ERROR_REGEX, error);
|
|
22
|
+
return GIT_EINVALIDSPEC;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
return 0;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
void git_regexp_dispose(git_regexp *r)
|
|
29
|
+
{
|
|
30
|
+
pcre_free(*r);
|
|
31
|
+
*r = NULL;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
int git_regexp_match(const git_regexp *r, const char *string)
|
|
35
|
+
{
|
|
36
|
+
int error;
|
|
37
|
+
if ((error = pcre_exec(*r, NULL, string, (int) strlen(string), 0, 0, NULL, 0)) < 0)
|
|
38
|
+
return (error == PCRE_ERROR_NOMATCH) ? GIT_ENOTFOUND : GIT_EINVALIDSPEC;
|
|
39
|
+
return 0;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
int git_regexp_search(const git_regexp *r, const char *string, size_t nmatches, git_regmatch *matches)
|
|
43
|
+
{
|
|
44
|
+
int static_ovec[9], *ovec;
|
|
45
|
+
int error;
|
|
46
|
+
size_t i;
|
|
47
|
+
|
|
48
|
+
/* The ovec array always needs to be a mutiple of three */
|
|
49
|
+
if (nmatches <= ARRAY_SIZE(static_ovec) / 3)
|
|
50
|
+
ovec = static_ovec;
|
|
51
|
+
else
|
|
52
|
+
ovec = git__calloc(nmatches * 3, sizeof(*ovec));
|
|
53
|
+
GIT_ERROR_CHECK_ALLOC(ovec);
|
|
54
|
+
|
|
55
|
+
if ((error = pcre_exec(*r, NULL, string, (int) strlen(string), 0, 0, ovec, (int) nmatches * 3)) < 0)
|
|
56
|
+
goto out;
|
|
57
|
+
|
|
58
|
+
if (error == 0)
|
|
59
|
+
error = (int) nmatches;
|
|
60
|
+
|
|
61
|
+
for (i = 0; i < (unsigned int) error; i++) {
|
|
62
|
+
matches[i].start = (ovec[i * 2] < 0) ? -1 : ovec[i * 2];
|
|
63
|
+
matches[i].end = (ovec[i * 2 + 1] < 0) ? -1 : ovec[i * 2 + 1];
|
|
64
|
+
}
|
|
65
|
+
for (i = (unsigned int) error; i < nmatches; i++)
|
|
66
|
+
matches[i].start = matches[i].end = -1;
|
|
67
|
+
|
|
68
|
+
out:
|
|
69
|
+
if (nmatches > ARRAY_SIZE(static_ovec) / 3)
|
|
70
|
+
git__free(ovec);
|
|
71
|
+
if (error < 0)
|
|
72
|
+
return (error == PCRE_ERROR_NOMATCH) ? GIT_ENOTFOUND : GIT_EINVALIDSPEC;
|
|
73
|
+
return 0;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
#elif defined(GIT_REGEX_PCRE2)
|
|
77
|
+
|
|
78
|
+
int git_regexp_compile(git_regexp *r, const char *pattern, int flags)
|
|
79
|
+
{
|
|
80
|
+
unsigned char errmsg[1024];
|
|
81
|
+
PCRE2_SIZE erroff;
|
|
82
|
+
int error, cflags = 0;
|
|
83
|
+
|
|
84
|
+
if (flags & GIT_REGEXP_ICASE)
|
|
85
|
+
cflags |= PCRE2_CASELESS;
|
|
86
|
+
|
|
87
|
+
if ((*r = pcre2_compile((const unsigned char *) pattern, PCRE2_ZERO_TERMINATED,
|
|
88
|
+
cflags, &error, &erroff, NULL)) == NULL) {
|
|
89
|
+
pcre2_get_error_message(error, errmsg, sizeof(errmsg));
|
|
90
|
+
git_error_set_str(GIT_ERROR_REGEX, (char *) errmsg);
|
|
91
|
+
return GIT_EINVALIDSPEC;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
return 0;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
void git_regexp_dispose(git_regexp *r)
|
|
98
|
+
{
|
|
99
|
+
pcre2_code_free(*r);
|
|
100
|
+
*r = NULL;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
int git_regexp_match(const git_regexp *r, const char *string)
|
|
104
|
+
{
|
|
105
|
+
pcre2_match_data *data;
|
|
106
|
+
int error;
|
|
107
|
+
|
|
108
|
+
data = pcre2_match_data_create(1, NULL);
|
|
109
|
+
GIT_ERROR_CHECK_ALLOC(data);
|
|
110
|
+
|
|
111
|
+
if ((error = pcre2_match(*r, (const unsigned char *) string, strlen(string),
|
|
112
|
+
0, 0, data, NULL)) < 0)
|
|
113
|
+
return (error == PCRE2_ERROR_NOMATCH) ? GIT_ENOTFOUND : GIT_EINVALIDSPEC;
|
|
114
|
+
|
|
115
|
+
pcre2_match_data_free(data);
|
|
116
|
+
return 0;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
int git_regexp_search(const git_regexp *r, const char *string, size_t nmatches, git_regmatch *matches)
|
|
120
|
+
{
|
|
121
|
+
pcre2_match_data *data = NULL;
|
|
122
|
+
PCRE2_SIZE *ovec;
|
|
123
|
+
int error;
|
|
124
|
+
size_t i;
|
|
125
|
+
|
|
126
|
+
if ((data = pcre2_match_data_create(nmatches, NULL)) == NULL) {
|
|
127
|
+
git_error_set_oom();
|
|
128
|
+
goto out;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
if ((error = pcre2_match(*r, (const unsigned char *) string, strlen(string),
|
|
132
|
+
0, 0, data, NULL)) < 0)
|
|
133
|
+
goto out;
|
|
134
|
+
|
|
135
|
+
if (error == 0 || (unsigned int) error > nmatches)
|
|
136
|
+
error = nmatches;
|
|
137
|
+
ovec = pcre2_get_ovector_pointer(data);
|
|
138
|
+
|
|
139
|
+
for (i = 0; i < (unsigned int) error; i++) {
|
|
140
|
+
matches[i].start = (ovec[i * 2] == PCRE2_UNSET) ? -1 : (ssize_t) ovec[i * 2];
|
|
141
|
+
matches[i].end = (ovec[i * 2 + 1] == PCRE2_UNSET) ? -1 : (ssize_t) ovec[i * 2 + 1];
|
|
142
|
+
}
|
|
143
|
+
for (i = (unsigned int) error; i < nmatches; i++)
|
|
144
|
+
matches[i].start = matches[i].end = -1;
|
|
145
|
+
|
|
146
|
+
out:
|
|
147
|
+
pcre2_match_data_free(data);
|
|
148
|
+
if (error < 0)
|
|
149
|
+
return (error == PCRE2_ERROR_NOMATCH) ? GIT_ENOTFOUND : GIT_EINVALIDSPEC;
|
|
150
|
+
return 0;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
#elif defined(GIT_REGEX_REGCOMP) || defined(GIT_REGEX_REGCOMP_L)
|
|
154
|
+
|
|
155
|
+
#if defined(GIT_REGEX_REGCOMP_L)
|
|
156
|
+
# include <xlocale.h>
|
|
157
|
+
#endif
|
|
158
|
+
|
|
159
|
+
int git_regexp_compile(git_regexp *r, const char *pattern, int flags)
|
|
160
|
+
{
|
|
161
|
+
int cflags = REG_EXTENDED, error;
|
|
162
|
+
char errmsg[1024];
|
|
163
|
+
|
|
164
|
+
if (flags & GIT_REGEXP_ICASE)
|
|
165
|
+
cflags |= REG_ICASE;
|
|
166
|
+
|
|
167
|
+
# if defined(GIT_REGEX_REGCOMP)
|
|
168
|
+
if ((error = regcomp(r, pattern, cflags)) != 0)
|
|
169
|
+
# else
|
|
170
|
+
if ((error = regcomp_l(r, pattern, cflags, (locale_t) 0)) != 0)
|
|
171
|
+
# endif
|
|
172
|
+
{
|
|
173
|
+
regerror(error, r, errmsg, sizeof(errmsg));
|
|
174
|
+
git_error_set_str(GIT_ERROR_REGEX, errmsg);
|
|
175
|
+
return GIT_EINVALIDSPEC;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
return 0;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
void git_regexp_dispose(git_regexp *r)
|
|
182
|
+
{
|
|
183
|
+
regfree(r);
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
int git_regexp_match(const git_regexp *r, const char *string)
|
|
187
|
+
{
|
|
188
|
+
int error;
|
|
189
|
+
if ((error = regexec(r, string, 0, NULL, 0)) != 0)
|
|
190
|
+
return (error == REG_NOMATCH) ? GIT_ENOTFOUND : GIT_EINVALIDSPEC;
|
|
191
|
+
return 0;
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
int git_regexp_search(const git_regexp *r, const char *string, size_t nmatches, git_regmatch *matches)
|
|
195
|
+
{
|
|
196
|
+
regmatch_t static_m[3], *m;
|
|
197
|
+
int error;
|
|
198
|
+
size_t i;
|
|
199
|
+
|
|
200
|
+
if (nmatches <= ARRAY_SIZE(static_m))
|
|
201
|
+
m = static_m;
|
|
202
|
+
else
|
|
203
|
+
m = git__calloc(nmatches, sizeof(*m));
|
|
204
|
+
|
|
205
|
+
if ((error = regexec(r, string, nmatches, m, 0)) != 0)
|
|
206
|
+
goto out;
|
|
207
|
+
|
|
208
|
+
for (i = 0; i < nmatches; i++) {
|
|
209
|
+
matches[i].start = (m[i].rm_so < 0) ? -1 : m[i].rm_so;
|
|
210
|
+
matches[i].end = (m[i].rm_eo < 0) ? -1 : m[i].rm_eo;
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
out:
|
|
214
|
+
if (nmatches > ARRAY_SIZE(static_m))
|
|
215
|
+
git__free(m);
|
|
216
|
+
if (error)
|
|
217
|
+
return (error == REG_NOMATCH) ? GIT_ENOTFOUND : GIT_EINVALIDSPEC;
|
|
218
|
+
return 0;
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
#endif
|
|
@@ -0,0 +1,97 @@
|
|
|
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
|
+
#ifndef INCLUDE_regexp_h__
|
|
9
|
+
#define INCLUDE_regexp_h__
|
|
10
|
+
|
|
11
|
+
#include "common.h"
|
|
12
|
+
|
|
13
|
+
#if defined(GIT_REGEX_BUILTIN) || defined(GIT_REGEX_PCRE)
|
|
14
|
+
# include "pcre.h"
|
|
15
|
+
typedef pcre *git_regexp;
|
|
16
|
+
# define GIT_REGEX_INIT NULL
|
|
17
|
+
#elif defined(GIT_REGEX_PCRE2)
|
|
18
|
+
# define PCRE2_CODE_UNIT_WIDTH 8
|
|
19
|
+
# include <pcre2.h>
|
|
20
|
+
typedef pcre2_code *git_regexp;
|
|
21
|
+
# define GIT_REGEX_INIT NULL
|
|
22
|
+
#elif defined(GIT_REGEX_REGCOMP) || defined(GIT_REGEX_REGCOMP_L)
|
|
23
|
+
# include <regex.h>
|
|
24
|
+
typedef regex_t git_regexp;
|
|
25
|
+
# define GIT_REGEX_INIT { 0 }
|
|
26
|
+
#else
|
|
27
|
+
# error "No regex backend"
|
|
28
|
+
#endif
|
|
29
|
+
|
|
30
|
+
/** Options supported by @git_regexp_compile. */
|
|
31
|
+
typedef enum {
|
|
32
|
+
/** Enable case-insensitive matching */
|
|
33
|
+
GIT_REGEXP_ICASE = (1 << 0)
|
|
34
|
+
} git_regexp_flags_t;
|
|
35
|
+
|
|
36
|
+
/** Structure containing information about regular expression matching groups */
|
|
37
|
+
typedef struct {
|
|
38
|
+
/** Start of the given match. -1 if the group didn't match anything */
|
|
39
|
+
ssize_t start;
|
|
40
|
+
/** End of the given match. -1 if the group didn't match anything */
|
|
41
|
+
ssize_t end;
|
|
42
|
+
} git_regmatch;
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Compile a regular expression. The compiled expression needs to
|
|
46
|
+
* be cleaned up afterwards with `git_regexp_dispose`.
|
|
47
|
+
*
|
|
48
|
+
* @param r Pointer to the storage where to initialize the regular expression.
|
|
49
|
+
* @param pattern The pattern that shall be compiled.
|
|
50
|
+
* @param flags Flags to alter how the pattern shall be handled.
|
|
51
|
+
* 0 for defaults, otherwise see @git_regexp_flags_t.
|
|
52
|
+
* @return 0 on success, otherwise a negative return value.
|
|
53
|
+
*/
|
|
54
|
+
int git_regexp_compile(git_regexp *r, const char *pattern, int flags);
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Free memory associated with the regular expression
|
|
58
|
+
*
|
|
59
|
+
* @param r The regular expression structure to dispose.
|
|
60
|
+
*/
|
|
61
|
+
void git_regexp_dispose(git_regexp *r);
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Test whether a given string matches a compiled regular
|
|
65
|
+
* expression.
|
|
66
|
+
*
|
|
67
|
+
* @param r Compiled regular expression.
|
|
68
|
+
* @param string String to match against the regular expression.
|
|
69
|
+
* @return 0 if the string matches, a negative error code
|
|
70
|
+
* otherwise. GIT_ENOTFOUND if no match was found,
|
|
71
|
+
* GIT_EINVALIDSPEC if the regular expression matching
|
|
72
|
+
* was invalid.
|
|
73
|
+
*/
|
|
74
|
+
int git_regexp_match(const git_regexp *r, const char *string);
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Search for matches inside of a given string.
|
|
78
|
+
*
|
|
79
|
+
* Given a regular expression with capturing groups, this
|
|
80
|
+
* function will populate provided @git_regmatch structures with
|
|
81
|
+
* offsets for each of the given matches. Non-matching groups
|
|
82
|
+
* will have start and end values of the respective @git_regmatch
|
|
83
|
+
* structure set to -1.
|
|
84
|
+
*
|
|
85
|
+
* @param r Compiled regular expression.
|
|
86
|
+
* @param string String to match against the regular expression.
|
|
87
|
+
* @param nmatches Number of @git_regmatch structures provided by
|
|
88
|
+
* the user.
|
|
89
|
+
* @param matches Pointer to an array of @git_regmatch structures.
|
|
90
|
+
* @return 0 if the string matches, a negative error code
|
|
91
|
+
* otherwise. GIT_ENOTFOUND if no match was found,
|
|
92
|
+
* GIT_EINVALIDSPEC if the regular expression matching
|
|
93
|
+
* was invalid.
|
|
94
|
+
*/
|
|
95
|
+
int git_regexp_search(const git_regexp *r, const char *string, size_t nmatches, git_regmatch *matches);
|
|
96
|
+
|
|
97
|
+
#endif
|