rugged 1.6.3 → 1.9.0
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/ext/rugged/rugged_allocator.c +0 -54
- data/lib/rugged/version.rb +1 -1
- data/vendor/libgit2/AUTHORS +1 -0
- data/vendor/libgit2/CMakeLists.txt +25 -17
- data/vendor/libgit2/COPYING +195 -1
- data/vendor/libgit2/cmake/CheckPrototypeDefinitionSafe.cmake +16 -0
- data/vendor/libgit2/cmake/{FindIconv.cmake → FindIntlIconv.cmake} +6 -0
- data/vendor/libgit2/cmake/FindLLHTTP.cmake +39 -0
- data/vendor/libgit2/cmake/SelectGSSAPI.cmake +4 -4
- data/vendor/libgit2/cmake/SelectHTTPParser.cmake +23 -8
- data/vendor/libgit2/cmake/SelectHTTPSBackend.cmake +34 -6
- data/vendor/libgit2/cmake/SelectHashes.cmake +32 -11
- data/vendor/libgit2/cmake/SelectRegex.cmake +6 -1
- data/vendor/libgit2/cmake/SelectSSH.cmake +22 -17
- data/vendor/libgit2/cmake/SelectXdiff.cmake +9 -0
- data/vendor/libgit2/cmake/SelectZlib.cmake +4 -0
- data/vendor/libgit2/deps/llhttp/CMakeLists.txt +8 -0
- data/vendor/libgit2/deps/llhttp/LICENSE-MIT +22 -0
- data/vendor/libgit2/deps/llhttp/api.c +510 -0
- data/vendor/libgit2/deps/llhttp/http.c +170 -0
- data/vendor/libgit2/deps/llhttp/llhttp.c +10168 -0
- data/vendor/libgit2/deps/llhttp/llhttp.h +897 -0
- data/vendor/libgit2/deps/ntlmclient/CMakeLists.txt +1 -1
- data/vendor/libgit2/deps/ntlmclient/crypt_builtin_md4.c +311 -0
- data/vendor/libgit2/deps/ntlmclient/crypt_commoncrypto.c +2 -1
- data/vendor/libgit2/deps/ntlmclient/crypt_mbedtls.c +0 -20
- data/vendor/libgit2/deps/ntlmclient/crypt_openssl.c +4 -4
- data/vendor/libgit2/deps/ntlmclient/ntlm.c +21 -21
- data/vendor/libgit2/deps/ntlmclient/unicode_builtin.c +5 -4
- data/vendor/libgit2/deps/ntlmclient/unicode_iconv.c +2 -1
- data/vendor/libgit2/deps/ntlmclient/utf8.h +1176 -721
- data/vendor/libgit2/deps/ntlmclient/util.h +11 -0
- data/vendor/libgit2/deps/pcre/CMakeLists.txt +1 -0
- data/vendor/libgit2/deps/pcre/LICENCE +5 -5
- data/vendor/libgit2/deps/pcre/pcre.h +2 -2
- data/vendor/libgit2/deps/pcre/pcre_compile.c +6 -3
- data/vendor/libgit2/deps/pcre/pcre_exec.c +2 -2
- data/vendor/libgit2/deps/xdiff/CMakeLists.txt +28 -0
- data/vendor/libgit2/{src/libgit2 → deps}/xdiff/git-xdiff.h +4 -1
- data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xdiffi.c +19 -18
- data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xdiffi.h +2 -4
- data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xemit.c +3 -3
- data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xhistogram.c +7 -18
- data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xmacros.h +18 -1
- data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xmerge.c +22 -20
- data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xpatience.c +21 -30
- data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xprepare.c +13 -30
- data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xutils.c +18 -1
- data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xutils.h +2 -1
- data/vendor/libgit2/deps/zlib/CMakeLists.txt +6 -1
- data/vendor/libgit2/deps/zlib/LICENSE +22 -0
- data/vendor/libgit2/deps/zlib/adler32.c +5 -27
- data/vendor/libgit2/deps/zlib/crc32.c +94 -167
- data/vendor/libgit2/deps/zlib/deflate.c +358 -435
- data/vendor/libgit2/deps/zlib/deflate.h +41 -10
- data/vendor/libgit2/deps/zlib/gzguts.h +13 -18
- data/vendor/libgit2/deps/zlib/infback.c +17 -30
- data/vendor/libgit2/deps/zlib/inffast.c +1 -4
- data/vendor/libgit2/deps/zlib/inffast.h +1 -1
- data/vendor/libgit2/deps/zlib/inflate.c +36 -102
- data/vendor/libgit2/deps/zlib/inftrees.c +6 -11
- data/vendor/libgit2/deps/zlib/inftrees.h +6 -6
- data/vendor/libgit2/deps/zlib/trees.c +287 -352
- data/vendor/libgit2/deps/zlib/zconf.h +23 -14
- data/vendor/libgit2/deps/zlib/zlib.h +202 -202
- data/vendor/libgit2/deps/zlib/zutil.c +18 -44
- data/vendor/libgit2/deps/zlib/zutil.h +13 -33
- data/vendor/libgit2/include/git2/annotated_commit.h +12 -5
- data/vendor/libgit2/include/git2/apply.h +27 -6
- data/vendor/libgit2/include/git2/attr.h +17 -4
- data/vendor/libgit2/include/git2/blame.h +133 -28
- data/vendor/libgit2/include/git2/blob.h +71 -28
- data/vendor/libgit2/include/git2/branch.h +22 -15
- data/vendor/libgit2/include/git2/buffer.h +6 -4
- data/vendor/libgit2/include/git2/cert.h +2 -1
- data/vendor/libgit2/include/git2/checkout.h +83 -32
- data/vendor/libgit2/include/git2/cherrypick.h +10 -3
- data/vendor/libgit2/include/git2/clone.h +25 -9
- data/vendor/libgit2/include/git2/commit.h +132 -3
- data/vendor/libgit2/include/git2/common.h +138 -56
- data/vendor/libgit2/include/git2/config.h +93 -23
- data/vendor/libgit2/include/git2/credential.h +30 -2
- data/vendor/libgit2/include/git2/credential_helpers.h +1 -0
- data/vendor/libgit2/include/git2/deprecated.h +133 -3
- data/vendor/libgit2/include/git2/describe.h +13 -1
- data/vendor/libgit2/include/git2/diff.h +77 -9
- data/vendor/libgit2/include/git2/email.h +9 -29
- data/vendor/libgit2/include/git2/errors.h +49 -74
- data/vendor/libgit2/include/git2/filter.h +14 -7
- data/vendor/libgit2/include/git2/global.h +8 -1
- data/vendor/libgit2/include/git2/graph.h +3 -2
- data/vendor/libgit2/include/git2/ignore.h +10 -0
- data/vendor/libgit2/include/git2/index.h +100 -6
- data/vendor/libgit2/include/git2/indexer.h +21 -4
- data/vendor/libgit2/include/git2/mailmap.h +7 -1
- data/vendor/libgit2/include/git2/merge.h +46 -1
- data/vendor/libgit2/include/git2/message.h +2 -2
- data/vendor/libgit2/include/git2/net.h +3 -1
- data/vendor/libgit2/include/git2/notes.h +9 -6
- data/vendor/libgit2/include/git2/object.h +9 -8
- data/vendor/libgit2/include/git2/odb.h +91 -49
- data/vendor/libgit2/include/git2/odb_backend.h +80 -52
- data/vendor/libgit2/include/git2/oid.h +24 -25
- data/vendor/libgit2/include/git2/oidarray.h +7 -1
- data/vendor/libgit2/include/git2/pack.h +13 -1
- data/vendor/libgit2/include/git2/patch.h +2 -3
- data/vendor/libgit2/include/git2/pathspec.h +9 -0
- data/vendor/libgit2/include/git2/proxy.h +10 -0
- data/vendor/libgit2/include/git2/rebase.h +9 -6
- data/vendor/libgit2/include/git2/refdb.h +2 -2
- data/vendor/libgit2/include/git2/reflog.h +3 -2
- data/vendor/libgit2/include/git2/refs.h +9 -6
- data/vendor/libgit2/include/git2/refspec.h +14 -4
- data/vendor/libgit2/include/git2/remote.h +112 -18
- data/vendor/libgit2/include/git2/repository.h +61 -15
- data/vendor/libgit2/include/git2/reset.h +16 -3
- data/vendor/libgit2/include/git2/revert.h +9 -4
- data/vendor/libgit2/include/git2/revparse.h +3 -3
- data/vendor/libgit2/include/git2/revwalk.h +3 -2
- data/vendor/libgit2/include/git2/signature.h +46 -1
- data/vendor/libgit2/include/git2/stash.h +17 -3
- data/vendor/libgit2/include/git2/status.h +10 -6
- data/vendor/libgit2/include/git2/stdint.h +87 -85
- data/vendor/libgit2/include/git2/strarray.h +2 -3
- data/vendor/libgit2/include/git2/submodule.h +20 -9
- data/vendor/libgit2/include/git2/sys/alloc.h +12 -34
- data/vendor/libgit2/include/git2/sys/commit.h +77 -3
- data/vendor/libgit2/include/git2/sys/commit_graph.h +109 -58
- data/vendor/libgit2/include/git2/sys/config.h +80 -4
- data/vendor/libgit2/include/git2/sys/credential.h +4 -3
- data/vendor/libgit2/include/git2/sys/diff.h +21 -1
- data/vendor/libgit2/include/git2/sys/email.h +7 -0
- data/vendor/libgit2/include/git2/sys/errors.h +76 -0
- data/vendor/libgit2/include/git2/sys/filter.h +66 -3
- data/vendor/libgit2/include/git2/sys/hashsig.h +11 -0
- data/vendor/libgit2/include/git2/sys/index.h +3 -2
- data/vendor/libgit2/include/git2/sys/mempack.h +32 -2
- data/vendor/libgit2/include/git2/sys/merge.h +55 -7
- data/vendor/libgit2/include/git2/sys/midx.h +47 -4
- data/vendor/libgit2/include/git2/sys/odb_backend.h +7 -3
- data/vendor/libgit2/include/git2/sys/openssl.h +8 -1
- data/vendor/libgit2/include/git2/sys/path.h +12 -1
- data/vendor/libgit2/include/git2/sys/refdb_backend.h +40 -36
- data/vendor/libgit2/include/git2/sys/refs.h +3 -2
- data/vendor/libgit2/include/git2/sys/remote.h +8 -1
- data/vendor/libgit2/include/git2/sys/repository.h +63 -3
- data/vendor/libgit2/include/git2/sys/stream.h +25 -2
- data/vendor/libgit2/include/git2/sys/transport.h +44 -5
- data/vendor/libgit2/include/git2/tag.h +3 -1
- data/vendor/libgit2/include/git2/trace.h +9 -3
- data/vendor/libgit2/include/git2/transaction.h +3 -2
- data/vendor/libgit2/include/git2/transport.h +11 -3
- data/vendor/libgit2/include/git2/tree.h +16 -5
- data/vendor/libgit2/include/git2/types.h +19 -3
- data/vendor/libgit2/include/git2/version.h +44 -8
- data/vendor/libgit2/include/git2/worktree.h +19 -7
- data/vendor/libgit2/src/CMakeLists.txt +40 -15
- data/vendor/libgit2/src/cli/CMakeLists.txt +2 -2
- data/vendor/libgit2/src/cli/cmd.c +1 -1
- data/vendor/libgit2/src/cli/cmd.h +4 -0
- data/vendor/libgit2/src/cli/cmd_blame.c +287 -0
- data/vendor/libgit2/src/cli/cmd_cat_file.c +6 -8
- data/vendor/libgit2/src/cli/cmd_clone.c +27 -13
- data/vendor/libgit2/src/cli/cmd_config.c +241 -0
- data/vendor/libgit2/src/cli/cmd_hash_object.c +6 -8
- data/vendor/libgit2/src/cli/cmd_help.c +6 -7
- data/vendor/libgit2/src/cli/cmd_index_pack.c +114 -0
- data/vendor/libgit2/src/cli/cmd_init.c +102 -0
- data/vendor/libgit2/src/cli/common.c +168 -0
- data/vendor/libgit2/src/cli/common.h +63 -0
- data/vendor/libgit2/src/cli/error.h +1 -1
- data/vendor/libgit2/src/cli/main.c +52 -24
- data/vendor/libgit2/src/cli/opt.c +29 -3
- data/vendor/libgit2/src/cli/opt.h +21 -3
- data/vendor/libgit2/src/cli/opt_usage.c +102 -33
- data/vendor/libgit2/src/cli/opt_usage.h +6 -1
- data/vendor/libgit2/src/cli/progress.c +60 -10
- data/vendor/libgit2/src/cli/progress.h +16 -4
- data/vendor/libgit2/src/cli/unix/sighandler.c +2 -1
- data/vendor/libgit2/src/cli/win32/precompiled.h +1 -1
- data/vendor/libgit2/src/cli/win32/sighandler.c +1 -1
- data/vendor/libgit2/src/libgit2/CMakeLists.txt +27 -27
- data/vendor/libgit2/src/libgit2/annotated_commit.c +2 -2
- data/vendor/libgit2/src/libgit2/annotated_commit.h +1 -1
- data/vendor/libgit2/src/libgit2/apply.c +14 -16
- data/vendor/libgit2/src/libgit2/attr.c +30 -13
- data/vendor/libgit2/src/libgit2/attr_file.c +7 -2
- data/vendor/libgit2/src/libgit2/attr_file.h +2 -0
- data/vendor/libgit2/src/libgit2/attrcache.c +69 -33
- data/vendor/libgit2/src/libgit2/attrcache.h +5 -9
- data/vendor/libgit2/src/libgit2/blame.c +152 -59
- data/vendor/libgit2/src/libgit2/blame.h +1 -0
- data/vendor/libgit2/src/libgit2/blame_git.c +0 -1
- data/vendor/libgit2/src/libgit2/branch.c +2 -2
- data/vendor/libgit2/src/libgit2/cache.c +22 -17
- data/vendor/libgit2/src/libgit2/cache.h +7 -9
- data/vendor/libgit2/src/libgit2/checkout.c +34 -24
- data/vendor/libgit2/src/libgit2/checkout.h +0 -2
- data/vendor/libgit2/src/libgit2/cherrypick.c +4 -5
- data/vendor/libgit2/src/libgit2/clone.c +186 -164
- data/vendor/libgit2/src/libgit2/clone.h +4 -1
- data/vendor/libgit2/src/libgit2/commit.c +123 -9
- data/vendor/libgit2/src/libgit2/commit_graph.c +166 -88
- data/vendor/libgit2/src/libgit2/commit_graph.h +21 -6
- data/vendor/libgit2/src/libgit2/commit_list.c +12 -5
- data/vendor/libgit2/src/libgit2/commit_list.h +1 -0
- data/vendor/libgit2/src/libgit2/config.c +394 -300
- data/vendor/libgit2/src/libgit2/config.cmake.in +3 -0
- data/vendor/libgit2/src/libgit2/config.h +9 -4
- data/vendor/libgit2/src/libgit2/config_backend.h +8 -10
- data/vendor/libgit2/src/libgit2/config_cache.c +4 -5
- data/vendor/libgit2/src/libgit2/config_file.c +113 -96
- data/vendor/libgit2/src/libgit2/config_list.c +285 -0
- data/vendor/libgit2/src/libgit2/config_list.h +32 -0
- data/vendor/libgit2/src/libgit2/config_mem.c +194 -40
- data/vendor/libgit2/src/libgit2/config_parse.c +10 -9
- data/vendor/libgit2/src/libgit2/config_snapshot.c +24 -31
- data/vendor/libgit2/src/libgit2/describe.c +34 -31
- data/vendor/libgit2/src/libgit2/diff.c +17 -8
- data/vendor/libgit2/src/libgit2/diff.h +6 -6
- data/vendor/libgit2/src/libgit2/diff_driver.c +12 -19
- data/vendor/libgit2/src/libgit2/diff_driver.h +2 -2
- data/vendor/libgit2/src/libgit2/diff_file.c +7 -7
- data/vendor/libgit2/src/libgit2/diff_generate.c +39 -18
- data/vendor/libgit2/src/libgit2/diff_parse.c +22 -6
- data/vendor/libgit2/src/libgit2/diff_print.c +88 -13
- data/vendor/libgit2/src/libgit2/diff_tform.c +40 -12
- data/vendor/libgit2/src/libgit2/diff_xdiff.h +1 -1
- data/vendor/libgit2/src/libgit2/email.c +5 -3
- data/vendor/libgit2/src/libgit2/fetch.c +39 -9
- data/vendor/libgit2/src/libgit2/fetch.h +0 -2
- data/vendor/libgit2/src/libgit2/fetchhead.c +11 -9
- data/vendor/libgit2/src/libgit2/filter.c +5 -5
- data/vendor/libgit2/src/libgit2/git2.rc +3 -3
- data/vendor/libgit2/src/libgit2/grafts.c +270 -0
- data/vendor/libgit2/src/libgit2/grafts.h +35 -0
- data/vendor/libgit2/src/libgit2/graph.c +1 -1
- data/vendor/libgit2/src/libgit2/hashmap_oid.h +30 -0
- data/vendor/libgit2/src/libgit2/ident.c +3 -3
- data/vendor/libgit2/src/libgit2/ignore.c +9 -5
- data/vendor/libgit2/src/libgit2/index.c +392 -208
- data/vendor/libgit2/src/libgit2/index.h +16 -3
- data/vendor/libgit2/src/libgit2/index_map.c +95 -0
- data/vendor/libgit2/src/libgit2/index_map.h +28 -0
- data/vendor/libgit2/src/libgit2/indexer.c +44 -41
- data/vendor/libgit2/src/libgit2/iterator.c +34 -13
- data/vendor/libgit2/src/libgit2/iterator.h +3 -0
- data/vendor/libgit2/src/libgit2/libgit2.c +155 -331
- data/vendor/libgit2/src/libgit2/mailmap.c +1 -1
- data/vendor/libgit2/src/libgit2/merge.c +56 -46
- data/vendor/libgit2/src/libgit2/merge_driver.c +2 -2
- data/vendor/libgit2/src/libgit2/merge_file.c +0 -2
- data/vendor/libgit2/src/libgit2/midx.c +86 -44
- data/vendor/libgit2/src/libgit2/midx.h +13 -3
- data/vendor/libgit2/src/libgit2/mwindow.c +38 -45
- data/vendor/libgit2/src/libgit2/mwindow.h +4 -0
- data/vendor/libgit2/src/libgit2/notes.c +9 -8
- data/vendor/libgit2/src/libgit2/object.c +42 -16
- data/vendor/libgit2/src/libgit2/object.h +6 -0
- data/vendor/libgit2/src/libgit2/odb.c +16 -9
- data/vendor/libgit2/src/libgit2/odb_mempack.c +49 -17
- data/vendor/libgit2/src/libgit2/odb_pack.c +28 -7
- data/vendor/libgit2/src/libgit2/oid.c +35 -2
- data/vendor/libgit2/src/libgit2/oid.h +11 -0
- data/vendor/libgit2/src/libgit2/oidarray.c +49 -3
- data/vendor/libgit2/src/libgit2/oidarray.h +5 -1
- data/vendor/libgit2/src/libgit2/pack-objects.c +77 -43
- data/vendor/libgit2/src/libgit2/pack-objects.h +17 -6
- data/vendor/libgit2/src/libgit2/pack.c +33 -27
- data/vendor/libgit2/src/libgit2/pack.h +15 -10
- data/vendor/libgit2/src/libgit2/parse.c +7 -4
- data/vendor/libgit2/src/libgit2/parse.h +1 -1
- data/vendor/libgit2/src/libgit2/patch.h +7 -1
- data/vendor/libgit2/src/libgit2/patch_generate.c +24 -5
- data/vendor/libgit2/src/libgit2/patch_parse.c +18 -10
- data/vendor/libgit2/src/libgit2/path.c +1 -1
- data/vendor/libgit2/src/libgit2/pathspec.c +1 -1
- data/vendor/libgit2/src/libgit2/push.c +81 -30
- data/vendor/libgit2/src/libgit2/push.h +1 -0
- data/vendor/libgit2/src/libgit2/reader.c +1 -1
- data/vendor/libgit2/src/libgit2/rebase.c +72 -84
- data/vendor/libgit2/src/libgit2/refdb_fs.c +146 -70
- data/vendor/libgit2/src/libgit2/reflog.c +1 -2
- data/vendor/libgit2/src/libgit2/reflog.h +2 -0
- data/vendor/libgit2/src/libgit2/refs.c +34 -8
- data/vendor/libgit2/src/libgit2/refs.h +6 -1
- data/vendor/libgit2/src/libgit2/refspec.c +28 -1
- data/vendor/libgit2/src/libgit2/refspec.h +8 -0
- data/vendor/libgit2/src/libgit2/remote.c +136 -67
- data/vendor/libgit2/src/libgit2/remote.h +1 -0
- data/vendor/libgit2/src/libgit2/repository.c +789 -330
- data/vendor/libgit2/src/libgit2/repository.h +22 -3
- data/vendor/libgit2/src/libgit2/reset.c +2 -2
- data/vendor/libgit2/src/libgit2/revert.c +9 -13
- data/vendor/libgit2/src/libgit2/revparse.c +6 -3
- data/vendor/libgit2/src/libgit2/revwalk.c +36 -11
- data/vendor/libgit2/src/libgit2/revwalk.h +3 -3
- data/vendor/libgit2/src/libgit2/settings.c +468 -0
- data/vendor/libgit2/src/libgit2/settings.h +6 -2
- data/vendor/libgit2/src/libgit2/signature.c +132 -15
- data/vendor/libgit2/src/libgit2/signature.h +0 -1
- data/vendor/libgit2/src/libgit2/stash.c +9 -8
- data/vendor/libgit2/src/libgit2/status.c +1 -1
- data/vendor/libgit2/src/libgit2/streams/mbedtls.c +54 -61
- data/vendor/libgit2/src/libgit2/streams/openssl.c +40 -23
- data/vendor/libgit2/src/libgit2/streams/openssl.h +2 -0
- data/vendor/libgit2/src/libgit2/streams/openssl_dynamic.c +4 -0
- data/vendor/libgit2/src/libgit2/streams/openssl_dynamic.h +3 -0
- data/vendor/libgit2/src/libgit2/streams/schannel.c +715 -0
- data/vendor/libgit2/src/libgit2/streams/schannel.h +28 -0
- data/vendor/libgit2/src/libgit2/streams/socket.c +237 -51
- data/vendor/libgit2/src/libgit2/streams/socket.h +3 -1
- data/vendor/libgit2/src/libgit2/streams/stransport.c +79 -19
- data/vendor/libgit2/src/libgit2/streams/tls.c +5 -0
- data/vendor/libgit2/src/libgit2/submodule.c +106 -63
- data/vendor/libgit2/src/libgit2/submodule.h +9 -10
- data/vendor/libgit2/src/libgit2/tag.c +1 -1
- data/vendor/libgit2/src/libgit2/trailer.c +6 -6
- data/vendor/libgit2/src/libgit2/transaction.c +26 -20
- data/vendor/libgit2/src/libgit2/transaction.h +4 -1
- data/vendor/libgit2/src/libgit2/transport.c +4 -1
- data/vendor/libgit2/src/libgit2/transports/auth.h +1 -2
- data/vendor/libgit2/src/libgit2/transports/{auth_negotiate.c → auth_gssapi.c} +32 -32
- data/vendor/libgit2/src/libgit2/transports/auth_negotiate.h +1 -1
- data/vendor/libgit2/src/libgit2/transports/auth_ntlm.h +1 -1
- data/vendor/libgit2/src/libgit2/transports/{auth_ntlm.c → auth_ntlmclient.c} +12 -12
- data/vendor/libgit2/src/libgit2/transports/auth_sspi.c +341 -0
- data/vendor/libgit2/src/libgit2/transports/credential.c +1 -1
- data/vendor/libgit2/src/libgit2/transports/git.c +7 -8
- data/vendor/libgit2/src/libgit2/transports/http.c +8 -4
- data/vendor/libgit2/src/libgit2/transports/http.h +0 -10
- data/vendor/libgit2/src/libgit2/transports/httpclient.c +117 -72
- data/vendor/libgit2/src/libgit2/transports/httpparser.c +128 -0
- data/vendor/libgit2/src/libgit2/transports/httpparser.h +99 -0
- data/vendor/libgit2/src/libgit2/transports/local.c +21 -11
- data/vendor/libgit2/src/libgit2/transports/smart.c +50 -32
- data/vendor/libgit2/src/libgit2/transports/smart.h +26 -9
- data/vendor/libgit2/src/libgit2/transports/smart_pkt.c +139 -18
- data/vendor/libgit2/src/libgit2/transports/smart_protocol.c +209 -57
- data/vendor/libgit2/src/libgit2/transports/ssh.c +41 -1103
- data/vendor/libgit2/src/libgit2/transports/ssh_exec.c +347 -0
- data/vendor/libgit2/src/libgit2/transports/ssh_exec.h +26 -0
- data/vendor/libgit2/src/libgit2/transports/ssh_libssh2.c +1126 -0
- data/vendor/libgit2/src/libgit2/transports/ssh_libssh2.h +28 -0
- data/vendor/libgit2/src/libgit2/transports/winhttp.c +48 -21
- data/vendor/libgit2/src/libgit2/tree-cache.c +26 -16
- data/vendor/libgit2/src/libgit2/tree-cache.h +5 -3
- data/vendor/libgit2/src/libgit2/tree.c +35 -27
- data/vendor/libgit2/src/libgit2/tree.h +3 -2
- data/vendor/libgit2/src/libgit2/worktree.c +39 -27
- data/vendor/libgit2/src/util/CMakeLists.txt +4 -6
- data/vendor/libgit2/src/util/alloc.c +69 -7
- data/vendor/libgit2/src/util/alloc.h +34 -9
- data/vendor/libgit2/src/util/allocators/debugalloc.c +73 -0
- data/vendor/libgit2/src/{cli/cli.h → util/allocators/debugalloc.h} +6 -9
- data/vendor/libgit2/src/util/allocators/failalloc.c +0 -60
- data/vendor/libgit2/src/util/allocators/failalloc.h +0 -6
- data/vendor/libgit2/src/util/allocators/stdalloc.c +2 -115
- data/vendor/libgit2/src/util/allocators/win32_leakcheck.c +0 -68
- data/vendor/libgit2/src/util/array.h +24 -18
- data/vendor/libgit2/src/util/cc-compat.h +4 -0
- data/vendor/libgit2/src/util/ctype_compat.h +70 -0
- data/vendor/libgit2/src/util/date.c +22 -14
- data/vendor/libgit2/src/util/date.h +12 -0
- data/vendor/libgit2/src/util/errors.c +401 -0
- data/vendor/libgit2/src/{libgit2 → util}/errors.h +21 -17
- data/vendor/libgit2/src/util/filebuf.c +6 -1
- data/vendor/libgit2/src/util/filebuf.h +19 -6
- data/vendor/libgit2/src/util/fs_path.c +16 -5
- data/vendor/libgit2/src/util/fs_path.h +23 -0
- data/vendor/libgit2/src/util/futils.c +14 -10
- data/vendor/libgit2/src/util/futils.h +13 -4
- data/vendor/libgit2/src/util/git2_features.h.in +21 -4
- data/vendor/libgit2/src/util/git2_util.h +6 -0
- data/vendor/libgit2/src/util/hash/openssl.c +152 -0
- data/vendor/libgit2/src/util/hash/openssl.h +17 -1
- data/vendor/libgit2/src/util/hash/sha.h +4 -1
- data/vendor/libgit2/src/util/hashmap.h +424 -0
- data/vendor/libgit2/src/util/hashmap_str.h +43 -0
- data/vendor/libgit2/src/util/integer.h +3 -1
- data/vendor/libgit2/src/util/net.c +318 -161
- data/vendor/libgit2/src/util/net.h +27 -0
- data/vendor/libgit2/src/util/pool.c +1 -1
- data/vendor/libgit2/src/util/pool.h +5 -0
- data/vendor/libgit2/src/util/posix.c +54 -0
- data/vendor/libgit2/src/util/posix.h +22 -0
- data/vendor/libgit2/src/util/pqueue.h +1 -1
- data/vendor/libgit2/src/util/process.h +222 -0
- data/vendor/libgit2/src/util/rand.c +6 -10
- data/vendor/libgit2/src/util/regexp.c +1 -1
- data/vendor/libgit2/src/util/sortedcache.c +14 -13
- data/vendor/libgit2/src/util/sortedcache.h +3 -3
- data/vendor/libgit2/src/util/staticstr.h +66 -0
- data/vendor/libgit2/src/util/str.c +2 -2
- data/vendor/libgit2/src/util/strlist.c +108 -0
- data/vendor/libgit2/src/util/strlist.h +36 -0
- data/vendor/libgit2/src/util/unix/posix.h +0 -2
- data/vendor/libgit2/src/util/unix/process.c +629 -0
- data/vendor/libgit2/src/util/unix/realpath.c +23 -5
- data/vendor/libgit2/src/util/util.c +17 -12
- data/vendor/libgit2/src/util/util.h +28 -54
- data/vendor/libgit2/src/util/vector.c +3 -3
- data/vendor/libgit2/src/util/vector.h +2 -2
- data/vendor/libgit2/src/util/win32/error.c +1 -1
- data/vendor/libgit2/src/util/win32/path_w32.c +8 -8
- data/vendor/libgit2/src/util/win32/posix_w32.c +30 -7
- data/vendor/libgit2/src/util/win32/process.c +506 -0
- data/vendor/libgit2/src/util/win32/utf-conv.c +73 -75
- data/vendor/libgit2/src/util/win32/utf-conv.h +81 -14
- data/vendor/libgit2/src/util/win32/w32_util.c +1 -1
- metadata +72 -49
- data/vendor/libgit2/cmake/SelectWinHTTP.cmake +0 -17
- data/vendor/libgit2/deps/http-parser/CMakeLists.txt +0 -6
- data/vendor/libgit2/deps/http-parser/COPYING +0 -23
- data/vendor/libgit2/deps/http-parser/http_parser.c +0 -2182
- data/vendor/libgit2/deps/http-parser/http_parser.h +0 -305
- data/vendor/libgit2/deps/zlib/COPYING +0 -27
- data/vendor/libgit2/include/git2/sys/reflog.h +0 -21
- data/vendor/libgit2/src/libgit2/config_entries.c +0 -237
- data/vendor/libgit2/src/libgit2/config_entries.h +0 -24
- data/vendor/libgit2/src/libgit2/errors.c +0 -238
- data/vendor/libgit2/src/libgit2/idxmap.c +0 -157
- data/vendor/libgit2/src/libgit2/idxmap.h +0 -177
- data/vendor/libgit2/src/libgit2/libgit2.h +0 -15
- data/vendor/libgit2/src/libgit2/netops.c +0 -124
- data/vendor/libgit2/src/libgit2/netops.h +0 -68
- data/vendor/libgit2/src/libgit2/offmap.c +0 -101
- data/vendor/libgit2/src/libgit2/offmap.h +0 -133
- data/vendor/libgit2/src/libgit2/oidmap.c +0 -107
- data/vendor/libgit2/src/libgit2/oidmap.h +0 -128
- data/vendor/libgit2/src/libgit2/threadstate.c +0 -84
- data/vendor/libgit2/src/libgit2/threadstate.h +0 -24
- data/vendor/libgit2/src/libgit2/transports/ssh.h +0 -14
- data/vendor/libgit2/src/util/khash.h +0 -615
- data/vendor/libgit2/src/util/strmap.c +0 -100
- data/vendor/libgit2/src/util/strmap.h +0 -131
- /data/vendor/libgit2/cmake/{FindHTTPParser.cmake → FindHTTP_Parser.cmake} +0 -0
- /data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xdiff.h +0 -0
- /data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xemit.h +0 -0
- /data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xinclude.h +0 -0
- /data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xprepare.h +0 -0
- /data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xtypes.h +0 -0
@@ -169,22 +169,27 @@ out:
|
|
169
169
|
return error;
|
170
170
|
}
|
171
171
|
|
172
|
+
GIT_HASHMAP_STR_SETUP(git_submodule_namemap, char *);
|
173
|
+
|
172
174
|
/**
|
173
175
|
* Release the name map returned by 'load_submodule_names'.
|
174
176
|
*/
|
175
|
-
static void free_submodule_names(
|
177
|
+
static void free_submodule_names(git_submodule_namemap *names)
|
176
178
|
{
|
179
|
+
git_hashmap_iter_t iter = GIT_HASHMAP_ITER_INIT;
|
177
180
|
const char *key;
|
178
181
|
char *value;
|
179
182
|
|
180
183
|
if (names == NULL)
|
181
184
|
return;
|
182
185
|
|
183
|
-
|
184
|
-
git__free((char *)
|
186
|
+
while (git_submodule_namemap_iterate(&iter, &key, &value, names) == 0) {
|
187
|
+
git__free((char *)key);
|
185
188
|
git__free(value);
|
186
|
-
}
|
187
|
-
|
189
|
+
}
|
190
|
+
|
191
|
+
git_submodule_namemap_dispose(names);
|
192
|
+
git__free(names);
|
188
193
|
|
189
194
|
return;
|
190
195
|
}
|
@@ -194,19 +199,22 @@ static void free_submodule_names(git_strmap *names)
|
|
194
199
|
* TODO: for some use-cases, this might need case-folding on a
|
195
200
|
* case-insensitive filesystem
|
196
201
|
*/
|
197
|
-
static int load_submodule_names(
|
202
|
+
static int load_submodule_names(git_submodule_namemap **out, git_repository *repo, git_config *cfg)
|
198
203
|
{
|
199
|
-
const char *key = "submodule\\..*\\.path";
|
204
|
+
const char *key = "^submodule\\..*\\.path$";
|
205
|
+
char *value;
|
200
206
|
git_config_iterator *iter = NULL;
|
201
207
|
git_config_entry *entry;
|
202
208
|
git_str buf = GIT_STR_INIT;
|
203
|
-
|
209
|
+
git_submodule_namemap *names;
|
204
210
|
int isvalid, error;
|
205
211
|
|
206
212
|
*out = NULL;
|
207
213
|
|
208
|
-
if ((
|
214
|
+
if ((names = git__calloc(1, sizeof(git_submodule_namemap))) == NULL) {
|
215
|
+
error = -1;
|
209
216
|
goto out;
|
217
|
+
}
|
210
218
|
|
211
219
|
if ((error = git_config_iterator_glob_new(&iter, cfg, key)) < 0)
|
212
220
|
goto out;
|
@@ -216,7 +224,7 @@ static int load_submodule_names(git_strmap **out, git_repository *repo, git_conf
|
|
216
224
|
fdot = strchr(entry->name, '.');
|
217
225
|
ldot = strrchr(entry->name, '.');
|
218
226
|
|
219
|
-
if (
|
227
|
+
if (git_submodule_namemap_contains(names, entry->value)) {
|
220
228
|
git_error_set(GIT_ERROR_SUBMODULE,
|
221
229
|
"duplicated submodule path '%s'", entry->value);
|
222
230
|
error = -1;
|
@@ -233,7 +241,12 @@ static int load_submodule_names(git_strmap **out, git_repository *repo, git_conf
|
|
233
241
|
if (!isvalid)
|
234
242
|
continue;
|
235
243
|
|
236
|
-
if ((
|
244
|
+
if ((value = git__strdup(entry->value)) == NULL) {
|
245
|
+
error = -1;
|
246
|
+
goto out;
|
247
|
+
}
|
248
|
+
|
249
|
+
if ((error = git_submodule_namemap_put(names, value, git_str_detach(&buf))) < 0) {
|
237
250
|
git_error_set(GIT_ERROR_NOMEMORY, "error inserting submodule into hash table");
|
238
251
|
error = -1;
|
239
252
|
goto out;
|
@@ -252,31 +265,43 @@ out:
|
|
252
265
|
return error;
|
253
266
|
}
|
254
267
|
|
255
|
-
|
268
|
+
GIT_HASHMAP_STR_FUNCTIONS(git_submodule_cache, GIT_HASHMAP_INLINE, git_submodule *);
|
269
|
+
|
270
|
+
int git_submodule__map(git_submodule_cache *cache, git_repository *repo);
|
271
|
+
|
272
|
+
int git_submodule_cache_init(git_submodule_cache **out, git_repository *repo)
|
256
273
|
{
|
274
|
+
git_submodule_cache *cache = NULL;
|
257
275
|
int error = 0;
|
258
|
-
|
276
|
+
|
259
277
|
GIT_ASSERT_ARG(out);
|
260
278
|
GIT_ASSERT_ARG(repo);
|
261
|
-
|
262
|
-
|
263
|
-
|
279
|
+
|
280
|
+
if ((cache = git__calloc(1, sizeof(git_submodule_cache))) == NULL)
|
281
|
+
return -1;
|
282
|
+
|
283
|
+
if ((error = git_submodule__map(cache, repo)) < 0) {
|
264
284
|
git_submodule_cache_free(cache);
|
265
285
|
return error;
|
266
286
|
}
|
287
|
+
|
267
288
|
*out = cache;
|
268
289
|
return error;
|
269
290
|
}
|
270
291
|
|
271
|
-
int git_submodule_cache_free(
|
292
|
+
int git_submodule_cache_free(git_submodule_cache *cache)
|
272
293
|
{
|
273
294
|
git_submodule *sm = NULL;
|
295
|
+
git_hashmap_iter_t iter = GIT_HASHMAP_ITER_INIT;
|
296
|
+
|
274
297
|
if (cache == NULL)
|
275
298
|
return 0;
|
276
|
-
|
299
|
+
|
300
|
+
while (git_submodule_cache_iterate(&iter, NULL, &sm, cache) == 0)
|
277
301
|
git_submodule_free(sm);
|
278
|
-
|
279
|
-
|
302
|
+
|
303
|
+
git_submodule_cache_dispose(cache);
|
304
|
+
git__free(cache);
|
280
305
|
return 0;
|
281
306
|
}
|
282
307
|
|
@@ -292,7 +317,7 @@ int git_submodule__lookup_with_cache(
|
|
292
317
|
git_submodule **out, /* NULL if user only wants to test existence */
|
293
318
|
git_repository *repo,
|
294
319
|
const char *name, /* trailing slash is allowed */
|
295
|
-
|
320
|
+
git_submodule_cache *cache)
|
296
321
|
{
|
297
322
|
int error;
|
298
323
|
unsigned int location;
|
@@ -307,7 +332,7 @@ int git_submodule__lookup_with_cache(
|
|
307
332
|
}
|
308
333
|
|
309
334
|
if (cache != NULL) {
|
310
|
-
if ((sm
|
335
|
+
if (git_submodule_cache_get(&sm, cache, name) == 0) {
|
311
336
|
if (out) {
|
312
337
|
*out = sm;
|
313
338
|
GIT_REFCOUNT_INC(*out);
|
@@ -332,7 +357,7 @@ int git_submodule__lookup_with_cache(
|
|
332
357
|
/* If it's not configured or we're looking by path */
|
333
358
|
if (location == 0 || location == GIT_SUBMODULE_STATUS_IN_WD) {
|
334
359
|
git_config_backend *mods;
|
335
|
-
const char *pattern = "submodule\\..*\\.path";
|
360
|
+
const char *pattern = "^submodule\\..*\\.path$";
|
336
361
|
git_str path = GIT_STR_INIT;
|
337
362
|
fbp_data data = { NULL, NULL };
|
338
363
|
|
@@ -434,19 +459,23 @@ static void submodule_free_dup(void *sm)
|
|
434
459
|
git_submodule_free(sm);
|
435
460
|
}
|
436
461
|
|
437
|
-
static int submodule_get_or_create(
|
462
|
+
static int submodule_get_or_create(
|
463
|
+
git_submodule **out,
|
464
|
+
git_repository *repo,
|
465
|
+
git_submodule_cache *cache,
|
466
|
+
const char *name)
|
438
467
|
{
|
439
468
|
git_submodule *sm = NULL;
|
440
469
|
int error;
|
441
470
|
|
442
|
-
if ((sm
|
471
|
+
if (git_submodule_cache_get(&sm, cache, name) == 0)
|
443
472
|
goto done;
|
444
473
|
|
445
474
|
/* if the submodule doesn't exist yet in the map, create it */
|
446
475
|
if ((error = submodule_alloc(&sm, repo, name)) < 0)
|
447
476
|
return error;
|
448
477
|
|
449
|
-
if ((error =
|
478
|
+
if ((error = git_submodule_cache_put(cache, sm->name, sm)) < 0) {
|
450
479
|
git_submodule_free(sm);
|
451
480
|
return error;
|
452
481
|
}
|
@@ -457,12 +486,15 @@ done:
|
|
457
486
|
return 0;
|
458
487
|
}
|
459
488
|
|
460
|
-
static int submodules_from_index(
|
489
|
+
static int submodules_from_index(
|
490
|
+
git_submodule_cache *cache,
|
491
|
+
git_index *idx,
|
492
|
+
git_config *cfg)
|
461
493
|
{
|
462
494
|
int error;
|
463
495
|
git_iterator *i = NULL;
|
464
496
|
const git_index_entry *entry;
|
465
|
-
|
497
|
+
git_submodule_namemap *names;
|
466
498
|
|
467
499
|
if ((error = load_submodule_names(&names, git_index_owner(idx), cfg)))
|
468
500
|
goto done;
|
@@ -473,7 +505,7 @@ static int submodules_from_index(git_strmap *map, git_index *idx, git_config *cf
|
|
473
505
|
while (!(error = git_iterator_advance(&entry, i))) {
|
474
506
|
git_submodule *sm;
|
475
507
|
|
476
|
-
if ((sm
|
508
|
+
if (git_submodule_cache_get(&sm, cache, entry->path) == 0) {
|
477
509
|
if (S_ISGITLINK(entry->mode))
|
478
510
|
submodule_update_from_index_entry(sm, entry);
|
479
511
|
else
|
@@ -481,10 +513,10 @@ static int submodules_from_index(git_strmap *map, git_index *idx, git_config *cf
|
|
481
513
|
} else if (S_ISGITLINK(entry->mode)) {
|
482
514
|
const char *name;
|
483
515
|
|
484
|
-
if ((name
|
516
|
+
if (git_submodule_namemap_get((char **)&name, names, entry->path) != 0)
|
485
517
|
name = entry->path;
|
486
518
|
|
487
|
-
if (!submodule_get_or_create(&sm, git_index_owner(idx),
|
519
|
+
if (!submodule_get_or_create(&sm, git_index_owner(idx), cache, name)) {
|
488
520
|
submodule_update_from_index_entry(sm, entry);
|
489
521
|
git_submodule_free(sm);
|
490
522
|
}
|
@@ -501,12 +533,15 @@ done:
|
|
501
533
|
return error;
|
502
534
|
}
|
503
535
|
|
504
|
-
static int submodules_from_head(
|
536
|
+
static int submodules_from_head(
|
537
|
+
git_submodule_cache *cache,
|
538
|
+
git_tree *head,
|
539
|
+
git_config *cfg)
|
505
540
|
{
|
506
541
|
int error;
|
507
542
|
git_iterator *i = NULL;
|
508
543
|
const git_index_entry *entry;
|
509
|
-
|
544
|
+
git_submodule_namemap *names;
|
510
545
|
|
511
546
|
if ((error = load_submodule_names(&names, git_tree_owner(head), cfg)))
|
512
547
|
goto done;
|
@@ -517,7 +552,7 @@ static int submodules_from_head(git_strmap *map, git_tree *head, git_config *cfg
|
|
517
552
|
while (!(error = git_iterator_advance(&entry, i))) {
|
518
553
|
git_submodule *sm;
|
519
554
|
|
520
|
-
if ((sm
|
555
|
+
if (git_submodule_cache_get(&sm, cache, entry->path) == 0) {
|
521
556
|
if (S_ISGITLINK(entry->mode))
|
522
557
|
submodule_update_from_head_data(sm, entry->mode, &entry->id);
|
523
558
|
else
|
@@ -525,10 +560,10 @@ static int submodules_from_head(git_strmap *map, git_tree *head, git_config *cfg
|
|
525
560
|
} else if (S_ISGITLINK(entry->mode)) {
|
526
561
|
const char *name;
|
527
562
|
|
528
|
-
if ((name
|
563
|
+
if (git_submodule_namemap_get((char **)&name, names, entry->path) != 0)
|
529
564
|
name = entry->path;
|
530
565
|
|
531
|
-
if (!submodule_get_or_create(&sm, git_tree_owner(head),
|
566
|
+
if (!submodule_get_or_create(&sm, git_tree_owner(head), cache, name)) {
|
532
567
|
submodule_update_from_head_data(
|
533
568
|
sm, entry->mode, &entry->id);
|
534
569
|
git_submodule_free(sm);
|
@@ -549,11 +584,11 @@ done:
|
|
549
584
|
/* If have_sm is true, sm is populated, otherwise map an repo are. */
|
550
585
|
typedef struct {
|
551
586
|
git_config *mods;
|
552
|
-
|
587
|
+
git_submodule_cache *cache;
|
553
588
|
git_repository *repo;
|
554
589
|
} lfc_data;
|
555
590
|
|
556
|
-
int git_submodule__map(
|
591
|
+
int git_submodule__map(git_submodule_cache *cache, git_repository *repo)
|
557
592
|
{
|
558
593
|
int error = 0;
|
559
594
|
git_index *idx = NULL;
|
@@ -563,8 +598,8 @@ int git_submodule__map(git_repository *repo, git_strmap *map)
|
|
563
598
|
git_config *mods = NULL;
|
564
599
|
bool has_workdir;
|
565
600
|
|
601
|
+
GIT_ASSERT_ARG(cache);
|
566
602
|
GIT_ASSERT_ARG(repo);
|
567
|
-
GIT_ASSERT_ARG(map);
|
568
603
|
|
569
604
|
/* get sources that we will need to check */
|
570
605
|
if (git_repository_index(&idx, repo) < 0)
|
@@ -581,7 +616,7 @@ int git_submodule__map(git_repository *repo, git_strmap *map)
|
|
581
616
|
/* add submodule information from .gitmodules */
|
582
617
|
if (has_workdir) {
|
583
618
|
lfc_data data = { 0 };
|
584
|
-
data.
|
619
|
+
data.cache = cache;
|
585
620
|
data.repo = repo;
|
586
621
|
|
587
622
|
if ((error = gitmodules_snapshot(&mods, repo)) < 0) {
|
@@ -597,19 +632,22 @@ int git_submodule__map(git_repository *repo, git_strmap *map)
|
|
597
632
|
}
|
598
633
|
/* add back submodule information from index */
|
599
634
|
if (mods && idx) {
|
600
|
-
if ((error = submodules_from_index(
|
635
|
+
if ((error = submodules_from_index(cache, idx, mods)) < 0)
|
601
636
|
goto cleanup;
|
602
637
|
}
|
603
638
|
/* add submodule information from HEAD */
|
604
639
|
if (mods && head) {
|
605
|
-
if ((error = submodules_from_head(
|
640
|
+
if ((error = submodules_from_head(cache, head, mods)) < 0)
|
606
641
|
goto cleanup;
|
607
642
|
}
|
608
643
|
/* shallow scan submodules in work tree as needed */
|
609
644
|
if (has_workdir) {
|
610
|
-
|
611
|
-
|
612
|
-
|
645
|
+
git_hashmap_iter_t iter = GIT_HASHMAP_ITER_INIT;
|
646
|
+
|
647
|
+
while (git_submodule_cache_iterate(&iter, NULL, &sm, cache) == 0) {
|
648
|
+
if ((error = submodule_load_from_wd_lite(sm)) < 0)
|
649
|
+
goto cleanup;
|
650
|
+
}
|
613
651
|
}
|
614
652
|
|
615
653
|
cleanup:
|
@@ -627,8 +665,9 @@ int git_submodule_foreach(
|
|
627
665
|
void *payload)
|
628
666
|
{
|
629
667
|
git_vector snapshot = GIT_VECTOR_INIT;
|
630
|
-
|
668
|
+
git_submodule_cache *submodules;
|
631
669
|
git_submodule *sm;
|
670
|
+
git_hashmap_iter_t iter;
|
632
671
|
int error;
|
633
672
|
size_t i;
|
634
673
|
|
@@ -637,20 +676,22 @@ int git_submodule_foreach(
|
|
637
676
|
return -1;
|
638
677
|
}
|
639
678
|
|
640
|
-
if ((
|
641
|
-
return
|
679
|
+
if ((submodules = git__calloc(1, sizeof(git_submodule_cache))) == NULL)
|
680
|
+
return -1;
|
642
681
|
|
643
|
-
if ((error = git_submodule__map(
|
682
|
+
if ((error = git_submodule__map(submodules, repo)) < 0)
|
644
683
|
goto done;
|
645
684
|
|
646
|
-
if (!(error = git_vector_init(
|
647
|
-
|
648
|
-
|
649
|
-
|
685
|
+
if (!(error = git_vector_init(&snapshot,
|
686
|
+
git_submodule_cache_size(submodules),
|
687
|
+
submodule_cmp))) {
|
688
|
+
for (iter = GIT_HASHMAP_ITER_INIT;
|
689
|
+
git_submodule_cache_iterate(&iter, NULL, &sm, submodules) == 0; ) {
|
650
690
|
if ((error = git_vector_insert(&snapshot, sm)) < 0)
|
651
691
|
break;
|
692
|
+
|
652
693
|
GIT_REFCOUNT_INC(sm);
|
653
|
-
}
|
694
|
+
}
|
654
695
|
}
|
655
696
|
|
656
697
|
if (error < 0)
|
@@ -668,12 +709,14 @@ int git_submodule_foreach(
|
|
668
709
|
done:
|
669
710
|
git_vector_foreach(&snapshot, i, sm)
|
670
711
|
git_submodule_free(sm);
|
671
|
-
|
712
|
+
git_vector_dispose(&snapshot);
|
672
713
|
|
673
|
-
|
714
|
+
for (iter = GIT_HASHMAP_ITER_INIT;
|
715
|
+
git_submodule_cache_iterate(&iter, NULL, &sm, submodules) == 0; )
|
674
716
|
git_submodule_free(sm);
|
675
|
-
|
676
|
-
|
717
|
+
|
718
|
+
git_submodule_cache_dispose(submodules);
|
719
|
+
git__free(submodules);
|
677
720
|
|
678
721
|
return error;
|
679
722
|
}
|
@@ -1338,11 +1381,11 @@ int git_submodule_update(git_submodule *sm, int init, git_submodule_update_optio
|
|
1338
1381
|
/* Get the status of the submodule to determine if it is already initialized */
|
1339
1382
|
if ((error = git_submodule_status(&submodule_status, sm->repo, sm->name, GIT_SUBMODULE_IGNORE_UNSPECIFIED)) < 0)
|
1340
1383
|
goto done;
|
1341
|
-
|
1384
|
+
|
1342
1385
|
/* If the submodule is configured but hasn't been added, skip it */
|
1343
1386
|
if (submodule_status == GIT_SUBMODULE_STATUS_IN_CONFIG)
|
1344
1387
|
goto done;
|
1345
|
-
|
1388
|
+
|
1346
1389
|
/*
|
1347
1390
|
* If submodule work dir is not already initialized, check to see
|
1348
1391
|
* what we need to do (initialize, clone, return error...)
|
@@ -2049,7 +2092,7 @@ static int submodule_load_each(const git_config_entry *entry, void *payload)
|
|
2049
2092
|
{
|
2050
2093
|
lfc_data *data = payload;
|
2051
2094
|
const char *namestart, *property;
|
2052
|
-
|
2095
|
+
git_submodule_cache *cache = data->cache;
|
2053
2096
|
git_str name = GIT_STR_INIT;
|
2054
2097
|
git_submodule *sm;
|
2055
2098
|
int error, isvalid;
|
@@ -2080,7 +2123,7 @@ static int submodule_load_each(const git_config_entry *entry, void *payload)
|
|
2080
2123
|
* a new submodule, load the config and insert it. If it's
|
2081
2124
|
* already inserted, we've already loaded it, so we skip.
|
2082
2125
|
*/
|
2083
|
-
if (
|
2126
|
+
if (git_submodule_cache_contains(cache, name.ptr)) {
|
2084
2127
|
error = 0;
|
2085
2128
|
goto done;
|
2086
2129
|
}
|
@@ -2093,7 +2136,7 @@ static int submodule_load_each(const git_config_entry *entry, void *payload)
|
|
2093
2136
|
goto done;
|
2094
2137
|
}
|
2095
2138
|
|
2096
|
-
if ((error =
|
2139
|
+
if ((error = git_submodule_cache_put(cache, sm->name, sm)) < 0)
|
2097
2140
|
goto done;
|
2098
2141
|
|
2099
2142
|
error = 0;
|
@@ -12,6 +12,7 @@
|
|
12
12
|
#include "git2/submodule.h"
|
13
13
|
#include "git2/repository.h"
|
14
14
|
#include "futils.h"
|
15
|
+
#include "hashmap.h"
|
15
16
|
|
16
17
|
/* Notes:
|
17
18
|
*
|
@@ -69,9 +70,9 @@
|
|
69
70
|
* - `repo` is the parent repository that contains this submodule.
|
70
71
|
* - `flags` after for internal use, tracking where this submodule has been
|
71
72
|
* found (head, index, config, workdir) and known status info, etc.
|
72
|
-
* - `head_oid` is the
|
73
|
-
* - `index_oid` is the
|
74
|
-
* - `wd_oid` is the
|
73
|
+
* - `head_oid` is the oid for the submodule path in the repo HEAD.
|
74
|
+
* - `index_oid` is the oid for the submodule recorded in the index.
|
75
|
+
* - `wd_oid` is the oid for the HEAD of the checked out submodule.
|
75
76
|
*
|
76
77
|
* If the submodule has been added to .gitmodules but not yet git added,
|
77
78
|
* then the `index_oid` will be zero but still marked valid. If the
|
@@ -116,15 +117,17 @@ enum {
|
|
116
117
|
#define GIT_SUBMODULE_STATUS__CLEAR_INTERNAL(S) \
|
117
118
|
((S) & ~(0xFFFFFFFFu << 20))
|
118
119
|
|
120
|
+
GIT_HASHMAP_STR_STRUCT(git_submodule_cache, git_submodule *);
|
121
|
+
|
119
122
|
/* Initialize an external submodule cache for the provided repo. */
|
120
|
-
extern int git_submodule_cache_init(
|
123
|
+
extern int git_submodule_cache_init(git_submodule_cache **out, git_repository *repo);
|
121
124
|
|
122
125
|
/* Release the resources of the submodule cache. */
|
123
|
-
extern int git_submodule_cache_free(
|
126
|
+
extern int git_submodule_cache_free(git_submodule_cache *cache);
|
124
127
|
|
125
128
|
/* Submodule lookup with an explicit cache */
|
126
129
|
extern int git_submodule__lookup_with_cache(
|
127
|
-
git_submodule **out, git_repository *repo, const char *path,
|
130
|
+
git_submodule **out, git_repository *repo, const char *path, git_submodule_cache *cache);
|
128
131
|
|
129
132
|
/* Internal status fn returns status and optionally the various OIDs */
|
130
133
|
extern int git_submodule__status(
|
@@ -145,10 +148,6 @@ extern int git_submodule_parse_ignore(
|
|
145
148
|
extern int git_submodule_parse_update(
|
146
149
|
git_submodule_update_t *out, const char *value);
|
147
150
|
|
148
|
-
extern int git_submodule__map(
|
149
|
-
git_repository *repo,
|
150
|
-
git_strmap *map);
|
151
|
-
|
152
151
|
/**
|
153
152
|
* Check whether a submodule's name is valid.
|
154
153
|
*
|
@@ -548,7 +548,7 @@ int git_tag_list_match(git_strarray *tag_names, const char *pattern, git_reposit
|
|
548
548
|
error = git_tag_foreach(repo, &tag_list_cb, (void *)&filter);
|
549
549
|
|
550
550
|
if (error < 0)
|
551
|
-
|
551
|
+
git_vector_dispose(&taglist);
|
552
552
|
|
553
553
|
tag_names->strings =
|
554
554
|
(char **)git_vector_detach(&tag_names->count, NULL, &taglist);
|
@@ -24,7 +24,7 @@ static const char *const git_generated_prefixes[] = {
|
|
24
24
|
static int is_blank_line(const char *str)
|
25
25
|
{
|
26
26
|
const char *s = str;
|
27
|
-
while (*s && *s != '\n' &&
|
27
|
+
while (*s && *s != '\n' && git__isspace(*s))
|
28
28
|
s++;
|
29
29
|
return !*s || *s == '\n';
|
30
30
|
}
|
@@ -93,7 +93,7 @@ static bool find_separator(size_t *out, const char *line, const char *separators
|
|
93
93
|
return true;
|
94
94
|
}
|
95
95
|
|
96
|
-
if (!whitespace_found && (
|
96
|
+
if (!whitespace_found && (git__isalnum(*c) || *c == '-'))
|
97
97
|
continue;
|
98
98
|
if (c != line && (*c == ' ' || *c == '\t')) {
|
99
99
|
whitespace_found = 1;
|
@@ -158,7 +158,7 @@ static size_t find_patch_start(const char *str)
|
|
158
158
|
const char *s;
|
159
159
|
|
160
160
|
for (s = str; *s; s = next_line(s)) {
|
161
|
-
if (git__prefixcmp(s, "---") == 0)
|
161
|
+
if (git__prefixcmp(s, "---") == 0 && git__isspace(s[3]))
|
162
162
|
return s - str;
|
163
163
|
}
|
164
164
|
|
@@ -233,12 +233,12 @@ static size_t find_trailer_start(const char *buf, size_t len)
|
|
233
233
|
}
|
234
234
|
|
235
235
|
find_separator(&separator_pos, bol, TRAILER_SEPARATORS);
|
236
|
-
if (separator_pos >= 1 && !
|
236
|
+
if (separator_pos >= 1 && !git__isspace(bol[0])) {
|
237
237
|
trailer_lines++;
|
238
238
|
possible_continuation_lines = 0;
|
239
239
|
if (recognized_prefix)
|
240
240
|
continue;
|
241
|
-
} else if (
|
241
|
+
} else if (git__isspace(bol[0]))
|
242
242
|
possible_continuation_lines++;
|
243
243
|
else {
|
244
244
|
non_trailer_lines++;
|
@@ -323,7 +323,7 @@ int git_message_trailers(git_message_trailer_array *trailer_arr, const char *mes
|
|
323
323
|
goto ret;
|
324
324
|
}
|
325
325
|
|
326
|
-
if (
|
326
|
+
if (git__isalnum(*ptr) || *ptr == '-') {
|
327
327
|
/* legal key character */
|
328
328
|
NEXT(S_KEY);
|
329
329
|
}
|
@@ -8,7 +8,6 @@
|
|
8
8
|
#include "transaction.h"
|
9
9
|
|
10
10
|
#include "repository.h"
|
11
|
-
#include "strmap.h"
|
12
11
|
#include "refdb.h"
|
13
12
|
#include "pool.h"
|
14
13
|
#include "reflog.h"
|
@@ -44,17 +43,23 @@ typedef struct {
|
|
44
43
|
remove :1;
|
45
44
|
} transaction_node;
|
46
45
|
|
46
|
+
GIT_HASHMAP_STR_SETUP(git_transaction_nodemap, transaction_node *);
|
47
|
+
|
47
48
|
struct git_transaction {
|
48
49
|
transaction_t type;
|
49
50
|
git_repository *repo;
|
50
51
|
git_refdb *db;
|
51
52
|
git_config *cfg;
|
53
|
+
void *cfg_data;
|
52
54
|
|
53
|
-
|
55
|
+
git_transaction_nodemap locks;
|
54
56
|
git_pool pool;
|
55
57
|
};
|
56
58
|
|
57
|
-
int git_transaction_config_new(
|
59
|
+
int git_transaction_config_new(
|
60
|
+
git_transaction **out,
|
61
|
+
git_config *cfg,
|
62
|
+
void *data)
|
58
63
|
{
|
59
64
|
git_transaction *tx;
|
60
65
|
|
@@ -66,6 +71,8 @@ int git_transaction_config_new(git_transaction **out, git_config *cfg)
|
|
66
71
|
|
67
72
|
tx->type = TRANSACTION_CONFIG;
|
68
73
|
tx->cfg = cfg;
|
74
|
+
tx->cfg_data = data;
|
75
|
+
|
69
76
|
*out = tx;
|
70
77
|
return 0;
|
71
78
|
}
|
@@ -88,11 +95,6 @@ int git_transaction_new(git_transaction **out, git_repository *repo)
|
|
88
95
|
goto on_error;
|
89
96
|
}
|
90
97
|
|
91
|
-
if ((error = git_strmap_new(&tx->locks)) < 0) {
|
92
|
-
error = -1;
|
93
|
-
goto on_error;
|
94
|
-
}
|
95
|
-
|
96
98
|
if ((error = git_repository_refdb(&tx->db, repo)) < 0)
|
97
99
|
goto on_error;
|
98
100
|
|
@@ -124,7 +126,7 @@ int git_transaction_lock_ref(git_transaction *tx, const char *refname)
|
|
124
126
|
if ((error = git_refdb_lock(&node->payload, tx->db, refname)) < 0)
|
125
127
|
return error;
|
126
128
|
|
127
|
-
if ((error =
|
129
|
+
if ((error = git_transaction_nodemap_put(&tx->locks, node->name, node)) < 0)
|
128
130
|
goto cleanup;
|
129
131
|
|
130
132
|
return 0;
|
@@ -138,8 +140,11 @@ cleanup:
|
|
138
140
|
static int find_locked(transaction_node **out, git_transaction *tx, const char *refname)
|
139
141
|
{
|
140
142
|
transaction_node *node;
|
143
|
+
int error;
|
144
|
+
|
145
|
+
error = git_transaction_nodemap_get(&node, &tx->locks, refname);
|
141
146
|
|
142
|
-
if (
|
147
|
+
if (error != 0) {
|
143
148
|
git_error_set(GIT_ERROR_REFERENCE, "the specified reference is not locked");
|
144
149
|
return GIT_ENOTFOUND;
|
145
150
|
}
|
@@ -328,18 +333,20 @@ static int update_target(git_refdb *db, transaction_node *node)
|
|
328
333
|
int git_transaction_commit(git_transaction *tx)
|
329
334
|
{
|
330
335
|
transaction_node *node;
|
336
|
+
git_hashmap_iter_t iter = GIT_HASHMAP_ITER_INIT;
|
331
337
|
int error = 0;
|
332
338
|
|
333
339
|
GIT_ASSERT_ARG(tx);
|
334
340
|
|
335
341
|
if (tx->type == TRANSACTION_CONFIG) {
|
336
|
-
error = git_config_unlock(tx->cfg, true);
|
342
|
+
error = git_config_unlock(tx->cfg, tx->cfg_data, true);
|
337
343
|
tx->cfg = NULL;
|
344
|
+
tx->cfg_data = NULL;
|
338
345
|
|
339
346
|
return error;
|
340
347
|
}
|
341
348
|
|
342
|
-
|
349
|
+
while (git_transaction_nodemap_iterate(&iter, NULL, &node, &tx->locks) == 0) {
|
343
350
|
if (node->reflog) {
|
344
351
|
if ((error = tx->db->backend->reflog_write(tx->db->backend, node->reflog)) < 0)
|
345
352
|
return error;
|
@@ -355,7 +362,7 @@ int git_transaction_commit(git_transaction *tx)
|
|
355
362
|
if ((error = update_target(tx->db, node)) < 0)
|
356
363
|
return error;
|
357
364
|
}
|
358
|
-
}
|
365
|
+
}
|
359
366
|
|
360
367
|
return 0;
|
361
368
|
}
|
@@ -364,30 +371,29 @@ void git_transaction_free(git_transaction *tx)
|
|
364
371
|
{
|
365
372
|
transaction_node *node;
|
366
373
|
git_pool pool;
|
374
|
+
git_hashmap_iter_t iter = GIT_HASHMAP_ITER_INIT;
|
367
375
|
|
368
376
|
if (!tx)
|
369
377
|
return;
|
370
378
|
|
371
379
|
if (tx->type == TRANSACTION_CONFIG) {
|
372
|
-
if (tx->cfg)
|
373
|
-
git_config_unlock(tx->cfg, false);
|
374
|
-
git_config_free(tx->cfg);
|
375
|
-
}
|
380
|
+
if (tx->cfg)
|
381
|
+
git_config_unlock(tx->cfg, tx->cfg_data, false);
|
376
382
|
|
377
383
|
git__free(tx);
|
378
384
|
return;
|
379
385
|
}
|
380
386
|
|
381
387
|
/* start by unlocking the ones we've left hanging, if any */
|
382
|
-
|
388
|
+
while (git_transaction_nodemap_iterate(&iter, NULL, &node, &tx->locks) == 0) {
|
383
389
|
if (node->committed)
|
384
390
|
continue;
|
385
391
|
|
386
392
|
git_refdb_unlock(tx->db, node->payload, false, false, NULL, NULL, NULL);
|
387
|
-
}
|
393
|
+
}
|
388
394
|
|
389
395
|
git_refdb_free(tx->db);
|
390
|
-
|
396
|
+
git_transaction_nodemap_dispose(&tx->locks);
|
391
397
|
|
392
398
|
/* tx is inside the pool, so we need to extract the data */
|
393
399
|
memcpy(&pool, &tx->pool, sizeof(git_pool));
|