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
|
@@ -8,10 +8,10 @@
|
|
|
8
8
|
#define INCLUDE_integer_h__
|
|
9
9
|
|
|
10
10
|
/** @return true if p fits into the range of a size_t */
|
|
11
|
-
GIT_INLINE(int) git__is_sizet(
|
|
11
|
+
GIT_INLINE(int) git__is_sizet(int64_t p)
|
|
12
12
|
{
|
|
13
13
|
size_t r = (size_t)p;
|
|
14
|
-
return p == (
|
|
14
|
+
return p == (int64_t)r;
|
|
15
15
|
}
|
|
16
16
|
|
|
17
17
|
/** @return true if p fits into the range of an ssize_t */
|
|
@@ -21,6 +21,13 @@ GIT_INLINE(int) git__is_ssizet(size_t p)
|
|
|
21
21
|
return p == (size_t)r;
|
|
22
22
|
}
|
|
23
23
|
|
|
24
|
+
/** @return true if p fits into the range of a uint16_t */
|
|
25
|
+
GIT_INLINE(int) git__is_uint16(size_t p)
|
|
26
|
+
{
|
|
27
|
+
uint16_t r = (uint16_t)p;
|
|
28
|
+
return p == (size_t)r;
|
|
29
|
+
}
|
|
30
|
+
|
|
24
31
|
/** @return true if p fits into the range of a uint32_t */
|
|
25
32
|
GIT_INLINE(int) git__is_uint32(size_t p)
|
|
26
33
|
{
|
|
@@ -29,10 +36,10 @@ GIT_INLINE(int) git__is_uint32(size_t p)
|
|
|
29
36
|
}
|
|
30
37
|
|
|
31
38
|
/** @return true if p fits into the range of an unsigned long */
|
|
32
|
-
GIT_INLINE(int) git__is_ulong(
|
|
39
|
+
GIT_INLINE(int) git__is_ulong(int64_t p)
|
|
33
40
|
{
|
|
34
41
|
unsigned long r = (unsigned long)p;
|
|
35
|
-
return p == (
|
|
42
|
+
return p == (int64_t)r;
|
|
36
43
|
}
|
|
37
44
|
|
|
38
45
|
/** @return true if p fits into the range of an int */
|
|
@@ -42,34 +49,54 @@ GIT_INLINE(int) git__is_int(long long p)
|
|
|
42
49
|
return p == (long long)r;
|
|
43
50
|
}
|
|
44
51
|
|
|
45
|
-
/**
|
|
46
|
-
* Sets `one + two` into `out`, unless the arithmetic would overflow.
|
|
47
|
-
* @return true if the result fits in a `uint64_t`, false on overflow.
|
|
48
|
-
*/
|
|
49
|
-
GIT_INLINE(bool) git__add_uint64_overflow(uint64_t *out, uint64_t one, uint64_t two)
|
|
50
|
-
{
|
|
51
|
-
if (UINT64_MAX - one < two)
|
|
52
|
-
return true;
|
|
53
|
-
*out = one + two;
|
|
54
|
-
return false;
|
|
55
|
-
}
|
|
56
|
-
|
|
57
52
|
/* Use clang/gcc compiler intrinsics whenever possible */
|
|
58
|
-
#if (
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
#
|
|
62
|
-
|
|
63
|
-
|
|
53
|
+
#if (__has_builtin(__builtin_add_overflow) || \
|
|
54
|
+
(defined(__GNUC__) && (__GNUC__ >= 5)))
|
|
55
|
+
|
|
56
|
+
# if (SIZE_MAX == UINT_MAX)
|
|
57
|
+
# define git__add_sizet_overflow(out, one, two) \
|
|
58
|
+
__builtin_uadd_overflow(one, two, out)
|
|
59
|
+
# define git__multiply_sizet_overflow(out, one, two) \
|
|
60
|
+
__builtin_umul_overflow(one, two, out)
|
|
61
|
+
# elif (SIZE_MAX == ULONG_MAX)
|
|
62
|
+
# define git__add_sizet_overflow(out, one, two) \
|
|
63
|
+
__builtin_uaddl_overflow(one, two, out)
|
|
64
|
+
# define git__multiply_sizet_overflow(out, one, two) \
|
|
65
|
+
__builtin_umull_overflow(one, two, out)
|
|
66
|
+
# elif (SIZE_MAX == ULLONG_MAX)
|
|
67
|
+
# define git__add_sizet_overflow(out, one, two) \
|
|
68
|
+
__builtin_uaddll_overflow(one, two, out)
|
|
69
|
+
# define git__multiply_sizet_overflow(out, one, two) \
|
|
70
|
+
__builtin_umulll_overflow(one, two, out)
|
|
71
|
+
# else
|
|
72
|
+
# error compiler has add with overflow intrinsics but SIZE_MAX is unknown
|
|
73
|
+
# endif
|
|
74
|
+
|
|
75
|
+
# define git__add_int_overflow(out, one, two) \
|
|
76
|
+
__builtin_sadd_overflow(one, two, out)
|
|
77
|
+
# define git__sub_int_overflow(out, one, two) \
|
|
78
|
+
__builtin_ssub_overflow(one, two, out)
|
|
79
|
+
|
|
80
|
+
/* Use Microsoft's safe integer handling functions where available */
|
|
81
|
+
#elif defined(_MSC_VER)
|
|
82
|
+
|
|
83
|
+
# define ENABLE_INTSAFE_SIGNED_FUNCTIONS
|
|
84
|
+
# include <intsafe.h>
|
|
85
|
+
|
|
64
86
|
# define git__add_sizet_overflow(out, one, two) \
|
|
65
|
-
|
|
87
|
+
(SizeTAdd(one, two, out) != S_OK)
|
|
66
88
|
# define git__multiply_sizet_overflow(out, one, two) \
|
|
67
|
-
|
|
89
|
+
(SizeTMult(one, two, out) != S_OK)
|
|
90
|
+
#define git__add_int_overflow(out, one, two) \
|
|
91
|
+
(IntAdd(one, two, out) != S_OK)
|
|
92
|
+
#define git__sub_int_overflow(out, one, two) \
|
|
93
|
+
(IntSub(one, two, out) != S_OK)
|
|
94
|
+
|
|
68
95
|
#else
|
|
69
96
|
|
|
70
97
|
/**
|
|
71
98
|
* Sets `one + two` into `out`, unless the arithmetic would overflow.
|
|
72
|
-
* @return
|
|
99
|
+
* @return false if the result fits in a `size_t`, true on overflow.
|
|
73
100
|
*/
|
|
74
101
|
GIT_INLINE(bool) git__add_sizet_overflow(size_t *out, size_t one, size_t two)
|
|
75
102
|
{
|
|
@@ -81,7 +108,7 @@ GIT_INLINE(bool) git__add_sizet_overflow(size_t *out, size_t one, size_t two)
|
|
|
81
108
|
|
|
82
109
|
/**
|
|
83
110
|
* Sets `one * two` into `out`, unless the arithmetic would overflow.
|
|
84
|
-
* @return
|
|
111
|
+
* @return false if the result fits in a `size_t`, true on overflow.
|
|
85
112
|
*/
|
|
86
113
|
GIT_INLINE(bool) git__multiply_sizet_overflow(size_t *out, size_t one, size_t two)
|
|
87
114
|
{
|
|
@@ -91,6 +118,24 @@ GIT_INLINE(bool) git__multiply_sizet_overflow(size_t *out, size_t one, size_t tw
|
|
|
91
118
|
return false;
|
|
92
119
|
}
|
|
93
120
|
|
|
121
|
+
GIT_INLINE(bool) git__add_int_overflow(int *out, int one, int two)
|
|
122
|
+
{
|
|
123
|
+
if ((two > 0 && one > (INT_MAX - two)) ||
|
|
124
|
+
(two < 0 && one < (INT_MIN - two)))
|
|
125
|
+
return true;
|
|
126
|
+
*out = one + two;
|
|
127
|
+
return false;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
GIT_INLINE(bool) git__sub_int_overflow(int *out, int one, int two)
|
|
131
|
+
{
|
|
132
|
+
if ((two > 0 && one < (INT_MIN + two)) ||
|
|
133
|
+
(two < 0 && one > (INT_MAX + two)))
|
|
134
|
+
return true;
|
|
135
|
+
*out = one - two;
|
|
136
|
+
return false;
|
|
137
|
+
}
|
|
138
|
+
|
|
94
139
|
#endif
|
|
95
140
|
|
|
96
141
|
#endif
|
|
@@ -46,14 +46,14 @@ static int iterator_range_init(
|
|
|
46
46
|
{
|
|
47
47
|
if (start && *start) {
|
|
48
48
|
iter->start = git__strdup(start);
|
|
49
|
-
|
|
49
|
+
GIT_ERROR_CHECK_ALLOC(iter->start);
|
|
50
50
|
|
|
51
51
|
iter->start_len = strlen(iter->start);
|
|
52
52
|
}
|
|
53
53
|
|
|
54
54
|
if (end && *end) {
|
|
55
55
|
iter->end = git__strdup(end);
|
|
56
|
-
|
|
56
|
+
GIT_ERROR_CHECK_ALLOC(iter->end);
|
|
57
57
|
|
|
58
58
|
iter->end_len = strlen(iter->end);
|
|
59
59
|
}
|
|
@@ -145,8 +145,8 @@ static int iterator_init_common(
|
|
|
145
145
|
(iter->flags & GIT_ITERATOR_PRECOMPOSE_UNICODE) == 0 &&
|
|
146
146
|
(iter->flags & GIT_ITERATOR_DONT_PRECOMPOSE_UNICODE) == 0) {
|
|
147
147
|
|
|
148
|
-
if (
|
|
149
|
-
|
|
148
|
+
if (git_repository__configmap_lookup(&precompose, repo, GIT_CONFIGMAP_PRECOMPOSE) < 0)
|
|
149
|
+
git_error_clear();
|
|
150
150
|
else if (precompose)
|
|
151
151
|
iter->flags |= GIT_ITERATOR_PRECOMPOSE_UNICODE;
|
|
152
152
|
}
|
|
@@ -403,7 +403,7 @@ int git_iterator_for_nothing(
|
|
|
403
403
|
*out = NULL;
|
|
404
404
|
|
|
405
405
|
iter = git__calloc(1, sizeof(empty_iterator));
|
|
406
|
-
|
|
406
|
+
GIT_ERROR_CHECK_ALLOC(iter);
|
|
407
407
|
|
|
408
408
|
iter->base.type = GIT_ITERATOR_TYPE_EMPTY;
|
|
409
409
|
iter->base.cb = &callbacks;
|
|
@@ -478,14 +478,6 @@ GIT_INLINE(int) tree_entry_cmp(
|
|
|
478
478
|
icase ? git__strncasecmp : git__strncmp);
|
|
479
479
|
}
|
|
480
480
|
|
|
481
|
-
GIT_INLINE(int) tree_iterator_entry_cmp(const void *ptr_a, const void *ptr_b)
|
|
482
|
-
{
|
|
483
|
-
const tree_iterator_entry *a = (const tree_iterator_entry *)ptr_a;
|
|
484
|
-
const tree_iterator_entry *b = (const tree_iterator_entry *)ptr_b;
|
|
485
|
-
|
|
486
|
-
return tree_entry_cmp(a->tree_entry, b->tree_entry, false);
|
|
487
|
-
}
|
|
488
|
-
|
|
489
481
|
GIT_INLINE(int) tree_iterator_entry_cmp_icase(
|
|
490
482
|
const void *ptr_a, const void *ptr_b)
|
|
491
483
|
{
|
|
@@ -549,9 +541,7 @@ static int tree_iterator_frame_init(
|
|
|
549
541
|
int error = 0;
|
|
550
542
|
|
|
551
543
|
new_frame = git_array_alloc(iter->frames);
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
memset(new_frame, 0, sizeof(tree_iterator_frame));
|
|
544
|
+
GIT_ERROR_CHECK_ALLOC(new_frame);
|
|
555
545
|
|
|
556
546
|
if ((error = git_tree_dup(&dup, tree)) < 0)
|
|
557
547
|
goto done;
|
|
@@ -560,19 +550,22 @@ static int tree_iterator_frame_init(
|
|
|
560
550
|
new_frame->tree = dup;
|
|
561
551
|
|
|
562
552
|
if (frame_entry &&
|
|
563
|
-
|
|
553
|
+
(error = tree_iterator_compute_path(&new_frame->path, frame_entry)) < 0)
|
|
564
554
|
goto done;
|
|
565
555
|
|
|
566
556
|
cmp = iterator__ignore_case(&iter->base) ?
|
|
567
557
|
tree_iterator_entry_sort_icase : NULL;
|
|
568
558
|
|
|
569
|
-
if ((error = git_vector_init(
|
|
570
|
-
|
|
559
|
+
if ((error = git_vector_init(&new_frame->entries,
|
|
560
|
+
dup->entries.size, cmp)) < 0)
|
|
571
561
|
goto done;
|
|
572
562
|
|
|
573
563
|
git_array_foreach(dup->entries, i, tree_entry) {
|
|
574
|
-
new_entry = git_pool_malloc(&iter->entry_pool, 1)
|
|
575
|
-
|
|
564
|
+
if ((new_entry = git_pool_malloc(&iter->entry_pool, 1)) == NULL) {
|
|
565
|
+
git_error_set_oom();
|
|
566
|
+
error = -1;
|
|
567
|
+
goto done;
|
|
568
|
+
}
|
|
576
569
|
|
|
577
570
|
new_entry->tree_entry = tree_entry;
|
|
578
571
|
new_entry->parent_path = new_frame->path.ptr;
|
|
@@ -626,20 +619,20 @@ GIT_INLINE(int) tree_iterator_frame_push_neighbors(
|
|
|
626
619
|
break;
|
|
627
620
|
|
|
628
621
|
path = git_array_alloc(parent_frame->similar_paths);
|
|
629
|
-
|
|
622
|
+
GIT_ERROR_CHECK_ALLOC(path);
|
|
630
623
|
|
|
631
624
|
memset(path, 0, sizeof(git_buf));
|
|
632
625
|
|
|
633
626
|
if ((error = tree_iterator_compute_path(path, entry)) < 0)
|
|
634
627
|
break;
|
|
635
628
|
|
|
636
|
-
|
|
629
|
+
GIT_ERROR_CHECK_ALLOC_ADD(&new_size,
|
|
637
630
|
frame->entries.length, tree->entries.size);
|
|
638
631
|
git_vector_size_hint(&frame->entries, new_size);
|
|
639
632
|
|
|
640
633
|
git_array_foreach(tree->entries, i, tree_entry) {
|
|
641
634
|
new_entry = git_pool_malloc(&iter->entry_pool, 1);
|
|
642
|
-
|
|
635
|
+
GIT_ERROR_CHECK_ALLOC(new_entry);
|
|
643
636
|
|
|
644
637
|
new_entry->tree_entry = tree_entry;
|
|
645
638
|
new_entry->parent_path = path->ptr;
|
|
@@ -955,7 +948,7 @@ int git_iterator_for_tree(
|
|
|
955
948
|
return git_iterator_for_nothing(out, options);
|
|
956
949
|
|
|
957
950
|
iter = git__calloc(1, sizeof(tree_iterator));
|
|
958
|
-
|
|
951
|
+
GIT_ERROR_CHECK_ALLOC(iter);
|
|
959
952
|
|
|
960
953
|
iter->base.type = GIT_ITERATOR_TYPE_TREE;
|
|
961
954
|
iter->base.cb = &callbacks;
|
|
@@ -1015,6 +1008,7 @@ typedef struct {
|
|
|
1015
1008
|
struct stat st;
|
|
1016
1009
|
size_t path_len;
|
|
1017
1010
|
iterator_pathlist_search_t match;
|
|
1011
|
+
git_oid id;
|
|
1018
1012
|
char path[GIT_FLEX_ARRAY];
|
|
1019
1013
|
} filesystem_iterator_entry;
|
|
1020
1014
|
|
|
@@ -1150,7 +1144,7 @@ static void filesystem_iterator_frame_push_ignores(
|
|
|
1150
1144
|
|
|
1151
1145
|
if (git_ignore__lookup(&new_frame->is_ignored,
|
|
1152
1146
|
&iter->ignores, path, GIT_DIR_FLAG_TRUE) < 0) {
|
|
1153
|
-
|
|
1147
|
+
git_error_clear();
|
|
1154
1148
|
new_frame->is_ignored = GIT_IGNORE_NOTFOUND;
|
|
1155
1149
|
}
|
|
1156
1150
|
|
|
@@ -1265,7 +1259,32 @@ GIT_INLINE(bool) filesystem_iterator_is_dot_git(
|
|
|
1265
1259
|
return (len == 4 || path[len - 5] == '/');
|
|
1266
1260
|
}
|
|
1267
1261
|
|
|
1268
|
-
static
|
|
1262
|
+
static int filesystem_iterator_entry_hash(
|
|
1263
|
+
filesystem_iterator *iter,
|
|
1264
|
+
filesystem_iterator_entry *entry)
|
|
1265
|
+
{
|
|
1266
|
+
git_buf fullpath = GIT_BUF_INIT;
|
|
1267
|
+
int error;
|
|
1268
|
+
|
|
1269
|
+
if (S_ISDIR(entry->st.st_mode)) {
|
|
1270
|
+
memset(&entry->id, 0, GIT_OID_RAWSZ);
|
|
1271
|
+
return 0;
|
|
1272
|
+
}
|
|
1273
|
+
|
|
1274
|
+
if (iter->base.type == GIT_ITERATOR_TYPE_WORKDIR)
|
|
1275
|
+
return git_repository_hashfile(&entry->id,
|
|
1276
|
+
iter->base.repo, entry->path, GIT_OBJECT_BLOB, NULL);
|
|
1277
|
+
|
|
1278
|
+
if (!(error = git_buf_joinpath(&fullpath, iter->root, entry->path)))
|
|
1279
|
+
error = git_odb_hashfile(&entry->id, fullpath.ptr, GIT_OBJECT_BLOB);
|
|
1280
|
+
|
|
1281
|
+
git_buf_dispose(&fullpath);
|
|
1282
|
+
return error;
|
|
1283
|
+
}
|
|
1284
|
+
|
|
1285
|
+
static int filesystem_iterator_entry_init(
|
|
1286
|
+
filesystem_iterator_entry **out,
|
|
1287
|
+
filesystem_iterator *iter,
|
|
1269
1288
|
filesystem_iterator_frame *frame,
|
|
1270
1289
|
const char *path,
|
|
1271
1290
|
size_t path_len,
|
|
@@ -1274,15 +1293,19 @@ static filesystem_iterator_entry *filesystem_iterator_entry_init(
|
|
|
1274
1293
|
{
|
|
1275
1294
|
filesystem_iterator_entry *entry;
|
|
1276
1295
|
size_t entry_size;
|
|
1296
|
+
int error = 0;
|
|
1297
|
+
|
|
1298
|
+
*out = NULL;
|
|
1277
1299
|
|
|
1278
1300
|
/* Make sure to append two bytes, one for the path's null
|
|
1279
1301
|
* termination, one for a possible trailing '/' for folders.
|
|
1280
1302
|
*/
|
|
1281
|
-
|
|
1282
|
-
|
|
1283
|
-
|
|
1284
|
-
|
|
1285
|
-
|
|
1303
|
+
GIT_ERROR_CHECK_ALLOC_ADD(&entry_size,
|
|
1304
|
+
sizeof(filesystem_iterator_entry), path_len);
|
|
1305
|
+
GIT_ERROR_CHECK_ALLOC_ADD(&entry_size, entry_size, 2);
|
|
1306
|
+
|
|
1307
|
+
entry = git_pool_malloc(&frame->entry_pool, entry_size);
|
|
1308
|
+
GIT_ERROR_CHECK_ALLOC(entry);
|
|
1286
1309
|
|
|
1287
1310
|
entry->path_len = path_len;
|
|
1288
1311
|
entry->match = pathlist_match;
|
|
@@ -1295,7 +1318,13 @@ static filesystem_iterator_entry *filesystem_iterator_entry_init(
|
|
|
1295
1318
|
|
|
1296
1319
|
entry->path[entry->path_len] = '\0';
|
|
1297
1320
|
|
|
1298
|
-
|
|
1321
|
+
if (iter->base.flags & GIT_ITERATOR_INCLUDE_HASH)
|
|
1322
|
+
error = filesystem_iterator_entry_hash(iter, entry);
|
|
1323
|
+
|
|
1324
|
+
if (!error)
|
|
1325
|
+
*out = entry;
|
|
1326
|
+
|
|
1327
|
+
return error;
|
|
1299
1328
|
}
|
|
1300
1329
|
|
|
1301
1330
|
static int filesystem_iterator_frame_push(
|
|
@@ -1312,13 +1341,13 @@ static int filesystem_iterator_frame_push(
|
|
|
1312
1341
|
int error;
|
|
1313
1342
|
|
|
1314
1343
|
if (iter->frames.size == FILESYSTEM_MAX_DEPTH) {
|
|
1315
|
-
|
|
1344
|
+
git_error_set(GIT_ERROR_REPOSITORY,
|
|
1316
1345
|
"directory nesting too deep (%"PRIuZ")", iter->frames.size);
|
|
1317
1346
|
return -1;
|
|
1318
1347
|
}
|
|
1319
1348
|
|
|
1320
1349
|
new_frame = git_array_alloc(iter->frames);
|
|
1321
|
-
|
|
1350
|
+
GIT_ERROR_CHECK_ALLOC(new_frame);
|
|
1322
1351
|
|
|
1323
1352
|
memset(new_frame, 0, sizeof(filesystem_iterator_frame));
|
|
1324
1353
|
|
|
@@ -1418,9 +1447,9 @@ static int filesystem_iterator_frame_push(
|
|
|
1418
1447
|
else if (dir_expected)
|
|
1419
1448
|
continue;
|
|
1420
1449
|
|
|
1421
|
-
|
|
1422
|
-
path, path_len, &statbuf, pathlist_match)
|
|
1423
|
-
|
|
1450
|
+
if ((error = filesystem_iterator_entry_init(&entry,
|
|
1451
|
+
iter, new_frame, path, path_len, &statbuf, pathlist_match)) < 0)
|
|
1452
|
+
goto done;
|
|
1424
1453
|
|
|
1425
1454
|
git_vector_insert(&new_frame->entries, entry);
|
|
1426
1455
|
}
|
|
@@ -1457,10 +1486,17 @@ static void filesystem_iterator_set_current(
|
|
|
1457
1486
|
filesystem_iterator *iter,
|
|
1458
1487
|
filesystem_iterator_entry *entry)
|
|
1459
1488
|
{
|
|
1460
|
-
|
|
1461
|
-
|
|
1489
|
+
/*
|
|
1490
|
+
* Index entries are limited to 32 bit timestamps. We can safely
|
|
1491
|
+
* cast this since workdir times are only used in the cache; any
|
|
1492
|
+
* mismatch will cause a hash recomputation which is unfortunate
|
|
1493
|
+
* but affects only people who set their filetimes to 2038.
|
|
1494
|
+
* (Same with the file size.)
|
|
1495
|
+
*/
|
|
1496
|
+
iter->entry.ctime.seconds = (int32_t)entry->st.st_ctime;
|
|
1497
|
+
iter->entry.mtime.seconds = (int32_t)entry->st.st_mtime;
|
|
1462
1498
|
|
|
1463
|
-
#if defined(GIT_USE_NSEC)
|
|
1499
|
+
#if defined(GIT_USE_NSEC)
|
|
1464
1500
|
iter->entry.ctime.nanoseconds = entry->st.st_ctime_nsec;
|
|
1465
1501
|
iter->entry.mtime.nanoseconds = entry->st.st_mtime_nsec;
|
|
1466
1502
|
#else
|
|
@@ -1473,7 +1509,10 @@ static void filesystem_iterator_set_current(
|
|
|
1473
1509
|
iter->entry.mode = git_futils_canonical_mode(entry->st.st_mode);
|
|
1474
1510
|
iter->entry.uid = entry->st.st_uid;
|
|
1475
1511
|
iter->entry.gid = entry->st.st_gid;
|
|
1476
|
-
iter->entry.file_size = entry->st.st_size;
|
|
1512
|
+
iter->entry.file_size = (uint32_t)entry->st.st_size;
|
|
1513
|
+
|
|
1514
|
+
if (iter->base.flags & GIT_ITERATOR_INCLUDE_HASH)
|
|
1515
|
+
git_oid_cpy(&iter->entry.id, &entry->id);
|
|
1477
1516
|
|
|
1478
1517
|
iter->entry.path = entry->path;
|
|
1479
1518
|
|
|
@@ -1483,7 +1522,7 @@ static void filesystem_iterator_set_current(
|
|
|
1483
1522
|
static int filesystem_iterator_current(
|
|
1484
1523
|
const git_index_entry **out, git_iterator *i)
|
|
1485
1524
|
{
|
|
1486
|
-
filesystem_iterator *iter = (filesystem_iterator
|
|
1525
|
+
filesystem_iterator *iter = GIT_CONTAINER_OF(i, filesystem_iterator, base);
|
|
1487
1526
|
|
|
1488
1527
|
if (!iterator__has_been_accessed(i))
|
|
1489
1528
|
return iter->base.cb->advance(out, i);
|
|
@@ -1530,7 +1569,7 @@ done:
|
|
|
1530
1569
|
static int filesystem_iterator_advance(
|
|
1531
1570
|
const git_index_entry **out, git_iterator *i)
|
|
1532
1571
|
{
|
|
1533
|
-
filesystem_iterator *iter = (filesystem_iterator
|
|
1572
|
+
filesystem_iterator *iter = GIT_CONTAINER_OF(i, filesystem_iterator, base);
|
|
1534
1573
|
bool is_dir;
|
|
1535
1574
|
int error = 0;
|
|
1536
1575
|
|
|
@@ -1589,7 +1628,7 @@ static int filesystem_iterator_advance(
|
|
|
1589
1628
|
static int filesystem_iterator_advance_into(
|
|
1590
1629
|
const git_index_entry **out, git_iterator *i)
|
|
1591
1630
|
{
|
|
1592
|
-
filesystem_iterator *iter = (filesystem_iterator
|
|
1631
|
+
filesystem_iterator *iter = GIT_CONTAINER_OF(i, filesystem_iterator, base);
|
|
1593
1632
|
filesystem_iterator_frame *frame;
|
|
1594
1633
|
filesystem_iterator_entry *prev_entry;
|
|
1595
1634
|
int error;
|
|
@@ -1626,7 +1665,7 @@ static int filesystem_iterator_advance_into(
|
|
|
1626
1665
|
|
|
1627
1666
|
int git_iterator_current_workdir_path(git_buf **out, git_iterator *i)
|
|
1628
1667
|
{
|
|
1629
|
-
filesystem_iterator *iter = (filesystem_iterator
|
|
1668
|
+
filesystem_iterator *iter = GIT_CONTAINER_OF(i, filesystem_iterator, base);
|
|
1630
1669
|
const git_index_entry *entry;
|
|
1631
1670
|
|
|
1632
1671
|
if (i->type != GIT_ITERATOR_TYPE_FS &&
|
|
@@ -1664,7 +1703,7 @@ static void filesystem_iterator_update_ignored(filesystem_iterator *iter)
|
|
|
1664
1703
|
|
|
1665
1704
|
if (git_ignore__lookup(&iter->current_is_ignored,
|
|
1666
1705
|
&iter->ignores, iter->entry.path, dir_flag) < 0) {
|
|
1667
|
-
|
|
1706
|
+
git_error_clear();
|
|
1668
1707
|
iter->current_is_ignored = GIT_IGNORE_NOTFOUND;
|
|
1669
1708
|
}
|
|
1670
1709
|
|
|
@@ -1686,15 +1725,19 @@ GIT_INLINE(bool) filesystem_iterator_current_is_ignored(
|
|
|
1686
1725
|
|
|
1687
1726
|
bool git_iterator_current_is_ignored(git_iterator *i)
|
|
1688
1727
|
{
|
|
1728
|
+
filesystem_iterator *iter = NULL;
|
|
1729
|
+
|
|
1689
1730
|
if (i->type != GIT_ITERATOR_TYPE_WORKDIR)
|
|
1690
1731
|
return false;
|
|
1691
1732
|
|
|
1692
|
-
|
|
1733
|
+
iter = GIT_CONTAINER_OF(i, filesystem_iterator, base);
|
|
1734
|
+
|
|
1735
|
+
return filesystem_iterator_current_is_ignored(iter);
|
|
1693
1736
|
}
|
|
1694
1737
|
|
|
1695
1738
|
bool git_iterator_current_tree_is_ignored(git_iterator *i)
|
|
1696
1739
|
{
|
|
1697
|
-
filesystem_iterator *iter = (filesystem_iterator
|
|
1740
|
+
filesystem_iterator *iter = GIT_CONTAINER_OF(i, filesystem_iterator, base);
|
|
1698
1741
|
filesystem_iterator_frame *frame;
|
|
1699
1742
|
|
|
1700
1743
|
if (i->type != GIT_ITERATOR_TYPE_WORKDIR)
|
|
@@ -1709,7 +1752,7 @@ static int filesystem_iterator_advance_over(
|
|
|
1709
1752
|
git_iterator_status_t *status,
|
|
1710
1753
|
git_iterator *i)
|
|
1711
1754
|
{
|
|
1712
|
-
filesystem_iterator *iter = (filesystem_iterator
|
|
1755
|
+
filesystem_iterator *iter = GIT_CONTAINER_OF(i, filesystem_iterator, base);
|
|
1713
1756
|
filesystem_iterator_frame *current_frame;
|
|
1714
1757
|
filesystem_iterator_entry *current_entry;
|
|
1715
1758
|
const git_index_entry *entry = NULL;
|
|
@@ -1828,7 +1871,7 @@ static int filesystem_iterator_init(filesystem_iterator *iter)
|
|
|
1828
1871
|
|
|
1829
1872
|
static int filesystem_iterator_reset(git_iterator *i)
|
|
1830
1873
|
{
|
|
1831
|
-
filesystem_iterator *iter = (filesystem_iterator
|
|
1874
|
+
filesystem_iterator *iter = GIT_CONTAINER_OF(i, filesystem_iterator, base);
|
|
1832
1875
|
|
|
1833
1876
|
filesystem_iterator_clear(iter);
|
|
1834
1877
|
return filesystem_iterator_init(iter);
|
|
@@ -1836,7 +1879,7 @@ static int filesystem_iterator_reset(git_iterator *i)
|
|
|
1836
1879
|
|
|
1837
1880
|
static void filesystem_iterator_free(git_iterator *i)
|
|
1838
1881
|
{
|
|
1839
|
-
filesystem_iterator *iter = (filesystem_iterator
|
|
1882
|
+
filesystem_iterator *iter = GIT_CONTAINER_OF(i, filesystem_iterator, base);
|
|
1840
1883
|
git__free(iter->root);
|
|
1841
1884
|
git_buf_dispose(&iter->current_path);
|
|
1842
1885
|
git_tree_free(iter->tree);
|
|
@@ -1873,7 +1916,7 @@ static int iterator_for_filesystem(
|
|
|
1873
1916
|
return git_iterator_for_nothing(out, options);
|
|
1874
1917
|
|
|
1875
1918
|
iter = git__calloc(1, sizeof(filesystem_iterator));
|
|
1876
|
-
|
|
1919
|
+
GIT_ERROR_CHECK_ALLOC(iter);
|
|
1877
1920
|
|
|
1878
1921
|
iter->base.type = type;
|
|
1879
1922
|
iter->base.cb = &callbacks;
|
|
@@ -1881,7 +1924,7 @@ static int iterator_for_filesystem(
|
|
|
1881
1924
|
root_len = strlen(root);
|
|
1882
1925
|
|
|
1883
1926
|
iter->root = git__malloc(root_len+2);
|
|
1884
|
-
|
|
1927
|
+
GIT_ERROR_CHECK_ALLOC(iter->root);
|
|
1885
1928
|
|
|
1886
1929
|
memcpy(iter->root, root, root_len);
|
|
1887
1930
|
|
|
@@ -2045,7 +2088,7 @@ static int index_iterator_skip_pseudotree(index_iterator *iter)
|
|
|
2045
2088
|
static int index_iterator_advance(
|
|
2046
2089
|
const git_index_entry **out, git_iterator *i)
|
|
2047
2090
|
{
|
|
2048
|
-
index_iterator *iter = (index_iterator
|
|
2091
|
+
index_iterator *iter = GIT_CONTAINER_OF(i, index_iterator, base);
|
|
2049
2092
|
const git_index_entry *entry = NULL;
|
|
2050
2093
|
bool is_submodule;
|
|
2051
2094
|
int error = 0;
|
|
@@ -2118,7 +2161,7 @@ static int index_iterator_advance(
|
|
|
2118
2161
|
static int index_iterator_advance_into(
|
|
2119
2162
|
const git_index_entry **out, git_iterator *i)
|
|
2120
2163
|
{
|
|
2121
|
-
index_iterator *iter = (index_iterator
|
|
2164
|
+
index_iterator *iter = GIT_CONTAINER_OF(i, index_iterator, base);
|
|
2122
2165
|
|
|
2123
2166
|
if (! S_ISDIR(iter->tree_entry.mode)) {
|
|
2124
2167
|
if (out)
|
|
@@ -2136,7 +2179,7 @@ static int index_iterator_advance_over(
|
|
|
2136
2179
|
git_iterator_status_t *status,
|
|
2137
2180
|
git_iterator *i)
|
|
2138
2181
|
{
|
|
2139
|
-
index_iterator *iter = (index_iterator
|
|
2182
|
+
index_iterator *iter = GIT_CONTAINER_OF(i, index_iterator, base);
|
|
2140
2183
|
const git_index_entry *entry;
|
|
2141
2184
|
int error;
|
|
2142
2185
|
|
|
@@ -2165,7 +2208,7 @@ static int index_iterator_init(index_iterator *iter)
|
|
|
2165
2208
|
|
|
2166
2209
|
static int index_iterator_reset(git_iterator *i)
|
|
2167
2210
|
{
|
|
2168
|
-
index_iterator *iter = (index_iterator
|
|
2211
|
+
index_iterator *iter = GIT_CONTAINER_OF(i, index_iterator, base);
|
|
2169
2212
|
|
|
2170
2213
|
index_iterator_clear(iter);
|
|
2171
2214
|
return index_iterator_init(iter);
|
|
@@ -2173,7 +2216,7 @@ static int index_iterator_reset(git_iterator *i)
|
|
|
2173
2216
|
|
|
2174
2217
|
static void index_iterator_free(git_iterator *i)
|
|
2175
2218
|
{
|
|
2176
|
-
index_iterator *iter = (index_iterator
|
|
2219
|
+
index_iterator *iter = GIT_CONTAINER_OF(i, index_iterator, base);
|
|
2177
2220
|
|
|
2178
2221
|
git_index_snapshot_release(&iter->entries, iter->base.index);
|
|
2179
2222
|
git_buf_dispose(&iter->tree_buf);
|
|
@@ -2203,7 +2246,7 @@ int git_iterator_for_index(
|
|
|
2203
2246
|
return git_iterator_for_nothing(out, options);
|
|
2204
2247
|
|
|
2205
2248
|
iter = git__calloc(1, sizeof(index_iterator));
|
|
2206
|
-
|
|
2249
|
+
GIT_ERROR_CHECK_ALLOC(iter);
|
|
2207
2250
|
|
|
2208
2251
|
iter->base.type = GIT_ITERATOR_TYPE_INDEX;
|
|
2209
2252
|
iter->base.cb = &callbacks;
|
|
@@ -2259,6 +2302,35 @@ void git_iterator_free(git_iterator *iter)
|
|
|
2259
2302
|
git__free(iter);
|
|
2260
2303
|
}
|
|
2261
2304
|
|
|
2305
|
+
int git_iterator_foreach(
|
|
2306
|
+
git_iterator *iterator,
|
|
2307
|
+
git_iterator_foreach_cb cb,
|
|
2308
|
+
void *data)
|
|
2309
|
+
{
|
|
2310
|
+
const git_index_entry *iterator_item;
|
|
2311
|
+
int error = 0;
|
|
2312
|
+
|
|
2313
|
+
if ((error = git_iterator_current(&iterator_item, iterator)) < 0)
|
|
2314
|
+
goto done;
|
|
2315
|
+
|
|
2316
|
+
if ((error = cb(iterator_item, data)) != 0)
|
|
2317
|
+
goto done;
|
|
2318
|
+
|
|
2319
|
+
while (true) {
|
|
2320
|
+
if ((error = git_iterator_advance(&iterator_item, iterator)) < 0)
|
|
2321
|
+
goto done;
|
|
2322
|
+
|
|
2323
|
+
if ((error = cb(iterator_item, data)) != 0)
|
|
2324
|
+
goto done;
|
|
2325
|
+
}
|
|
2326
|
+
|
|
2327
|
+
done:
|
|
2328
|
+
if (error == GIT_ITEROVER)
|
|
2329
|
+
error = 0;
|
|
2330
|
+
|
|
2331
|
+
return error;
|
|
2332
|
+
}
|
|
2333
|
+
|
|
2262
2334
|
int git_iterator_walk(
|
|
2263
2335
|
git_iterator **iterators,
|
|
2264
2336
|
size_t cnt,
|
|
@@ -2274,8 +2346,8 @@ int git_iterator_walk(
|
|
|
2274
2346
|
iterator_item = git__calloc(cnt, sizeof(git_index_entry *));
|
|
2275
2347
|
cur_items = git__calloc(cnt, sizeof(git_index_entry *));
|
|
2276
2348
|
|
|
2277
|
-
|
|
2278
|
-
|
|
2349
|
+
GIT_ERROR_CHECK_ALLOC(iterator_item);
|
|
2350
|
+
GIT_ERROR_CHECK_ALLOC(cur_items);
|
|
2279
2351
|
|
|
2280
2352
|
/* Set up the iterators */
|
|
2281
2353
|
for (i = 0; i < cnt; i++) {
|
|
@@ -41,6 +41,8 @@ typedef enum {
|
|
|
41
41
|
GIT_ITERATOR_INCLUDE_CONFLICTS = (1u << 6),
|
|
42
42
|
/** descend into symlinked directories */
|
|
43
43
|
GIT_ITERATOR_DESCEND_SYMLINKS = (1u << 7),
|
|
44
|
+
/** hash files in workdir or filesystem iterators */
|
|
45
|
+
GIT_ITERATOR_INCLUDE_HASH = (1u << 8),
|
|
44
46
|
} git_iterator_flag_t;
|
|
45
47
|
|
|
46
48
|
typedef enum {
|
|
@@ -289,6 +291,19 @@ extern int git_iterator_current_workdir_path(
|
|
|
289
291
|
*/
|
|
290
292
|
extern git_index *git_iterator_index(git_iterator *iter);
|
|
291
293
|
|
|
294
|
+
typedef int (*git_iterator_foreach_cb)(
|
|
295
|
+
const git_index_entry *entry,
|
|
296
|
+
void *data);
|
|
297
|
+
|
|
298
|
+
/**
|
|
299
|
+
* Walk the given iterator and invoke the callback for each path
|
|
300
|
+
* contained in the iterator.
|
|
301
|
+
*/
|
|
302
|
+
extern int git_iterator_foreach(
|
|
303
|
+
git_iterator *iterator,
|
|
304
|
+
git_iterator_foreach_cb cb,
|
|
305
|
+
void *data);
|
|
306
|
+
|
|
292
307
|
typedef int (*git_iterator_walk_cb)(
|
|
293
308
|
const git_index_entry **entries,
|
|
294
309
|
void *data);
|