rugged 1.7.2 → 1.9.6
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/extconf.rb +4 -4
- data/ext/rugged/rugged.c +12 -1
- data/ext/rugged/rugged_blame.c +22 -6
- data/ext/rugged/rugged_blob.c +24 -9
- data/ext/rugged/rugged_branch.c +10 -7
- data/ext/rugged/rugged_branch_collection.c +8 -6
- data/ext/rugged/rugged_commit.c +7 -6
- data/ext/rugged/rugged_config.c +20 -11
- data/ext/rugged/rugged_diff.c +26 -12
- data/ext/rugged/rugged_diff_hunk.c +2 -1
- data/ext/rugged/rugged_index.c +39 -29
- data/ext/rugged/rugged_note.c +7 -6
- data/ext/rugged/rugged_object.c +3 -2
- data/ext/rugged/rugged_patch.c +23 -9
- data/ext/rugged/rugged_rebase.c +22 -10
- data/ext/rugged/rugged_reference.c +22 -13
- data/ext/rugged/rugged_reference_collection.c +9 -7
- data/ext/rugged/rugged_remote.c +23 -12
- data/ext/rugged/rugged_remote_collection.c +11 -9
- data/ext/rugged/rugged_repo.c +60 -45
- data/ext/rugged/rugged_revwalk.c +22 -12
- data/ext/rugged/rugged_submodule.c +23 -20
- data/ext/rugged/rugged_submodule_collection.c +20 -9
- data/ext/rugged/rugged_tag.c +6 -4
- data/ext/rugged/rugged_tag_collection.c +7 -5
- data/ext/rugged/rugged_tree.c +27 -15
- data/lib/rugged/version.rb +1 -1
- data/vendor/libgit2/AUTHORS +3 -0
- data/vendor/libgit2/CMakeLists.txt +23 -10
- data/vendor/libgit2/COPYING +278 -12
- data/vendor/libgit2/cmake/DefaultCFlags.cmake +8 -3
- data/vendor/libgit2/cmake/{FindIconv.cmake → FindIntlIconv.cmake} +6 -0
- data/vendor/libgit2/cmake/FindLLHTTP.cmake +39 -0
- data/vendor/libgit2/cmake/SelectGSSAPI.cmake +1 -1
- data/vendor/libgit2/cmake/SelectHTTPParser.cmake +23 -8
- data/vendor/libgit2/cmake/SelectHTTPSBackend.cmake +17 -8
- data/vendor/libgit2/cmake/SelectHashes.cmake +28 -11
- data/vendor/libgit2/cmake/SelectRegex.cmake +14 -4
- data/vendor/libgit2/cmake/SelectSSH.cmake +30 -19
- 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/pcre2/CMakeLists.txt +110 -0
- data/vendor/libgit2/deps/pcre2/LICENCE.md +104 -0
- data/vendor/libgit2/deps/pcre2/config.h.in +54 -0
- data/vendor/libgit2/deps/pcre2/pcre2.h +1079 -0
- data/vendor/libgit2/deps/pcre2/pcre2_auto_possess.c +1416 -0
- data/vendor/libgit2/deps/{pcre/pcre_chartables.c → pcre2/pcre2_chartables.c} +41 -47
- data/vendor/libgit2/deps/{pcre/pcre_ord2utf8.c → pcre2/pcre2_chkdint.c} +36 -36
- data/vendor/libgit2/deps/pcre2/pcre2_compile.c +11345 -0
- data/vendor/libgit2/deps/pcre2/pcre2_compile.h +356 -0
- data/vendor/libgit2/deps/pcre2/pcre2_compile_cgroup.c +632 -0
- data/vendor/libgit2/deps/pcre2/pcre2_compile_class.c +2777 -0
- data/vendor/libgit2/deps/pcre2/pcre2_config.c +250 -0
- data/vendor/libgit2/deps/pcre2/pcre2_context.c +557 -0
- data/vendor/libgit2/deps/pcre2/pcre2_convert.c +1263 -0
- data/vendor/libgit2/deps/{pcre/pcre_dfa_exec.c → pcre2/pcre2_dfa_match.c} +1402 -943
- data/vendor/libgit2/deps/pcre2/pcre2_error.c +384 -0
- data/vendor/libgit2/deps/pcre2/pcre2_extuni.c +159 -0
- data/vendor/libgit2/deps/pcre2/pcre2_find_bracket.c +217 -0
- data/vendor/libgit2/deps/pcre2/pcre2_fuzzsupport.c +844 -0
- data/vendor/libgit2/deps/pcre2/pcre2_internal.h +2353 -0
- data/vendor/libgit2/deps/pcre2/pcre2_intmodedep.h +1044 -0
- data/vendor/libgit2/deps/pcre2/pcre2_maketables.c +177 -0
- data/vendor/libgit2/deps/pcre2/pcre2_match.c +8244 -0
- data/vendor/libgit2/deps/pcre2/pcre2_match_data.c +184 -0
- data/vendor/libgit2/deps/pcre2/pcre2_match_next.c +171 -0
- data/vendor/libgit2/deps/{pcre/pcre_newline.c → pcre2/pcre2_newline.c} +92 -63
- data/vendor/libgit2/deps/{pcre/pcre_refcount.c → pcre2/pcre2_ord2utf.c} +64 -38
- data/vendor/libgit2/deps/pcre2/pcre2_pattern_info.c +430 -0
- data/vendor/libgit2/deps/pcre2/pcre2_printint_inc.h +1098 -0
- data/vendor/libgit2/deps/pcre2/pcre2_script_run.c +344 -0
- data/vendor/libgit2/deps/pcre2/pcre2_serialize.c +284 -0
- data/vendor/libgit2/deps/pcre2/pcre2_string_utils.c +199 -0
- data/vendor/libgit2/deps/pcre2/pcre2_study.c +2087 -0
- data/vendor/libgit2/deps/pcre2/pcre2_substitute.c +1761 -0
- data/vendor/libgit2/deps/pcre2/pcre2_substring.c +553 -0
- data/vendor/libgit2/deps/pcre2/pcre2_tables.c +310 -0
- data/vendor/libgit2/deps/pcre2/pcre2_ucd.c +5805 -0
- data/vendor/libgit2/deps/pcre2/pcre2_ucp.h +408 -0
- data/vendor/libgit2/deps/pcre2/pcre2_ucptables_inc.h +1596 -0
- data/vendor/libgit2/deps/pcre2/pcre2_util.h +179 -0
- data/vendor/libgit2/deps/pcre2/pcre2_valid_utf.c +397 -0
- data/vendor/libgit2/deps/pcre2/pcre2_xclass.c +547 -0
- data/vendor/libgit2/deps/xdiff/CMakeLists.txt +1 -1
- data/vendor/libgit2/deps/xdiff/xmerge.c +16 -12
- 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 +132 -63
- 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 +134 -4
- data/vendor/libgit2/include/git2/describe.h +13 -1
- data/vendor/libgit2/include/git2/diff.h +38 -8
- data/vendor/libgit2/include/git2/email.h +9 -29
- data/vendor/libgit2/include/git2/errors.h +46 -73
- 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 -15
- 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 +50 -3
- 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 +23 -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 +12 -3
- 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 +113 -25
- data/vendor/libgit2/include/git2/repository.h +57 -21
- 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 -0
- data/vendor/libgit2/include/git2/sys/commit.h +77 -3
- data/vendor/libgit2/include/git2/sys/commit_graph.h +103 -62
- 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 +43 -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 +11 -2
- data/vendor/libgit2/include/git2/sys/transport.h +25 -4
- 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 +46 -8
- data/vendor/libgit2/include/git2/worktree.h +16 -6
- data/vendor/libgit2/src/CMakeLists.txt +6 -4
- data/vendor/libgit2/src/cli/CMakeLists.txt +3 -4
- 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 +5 -7
- 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 +31 -5
- 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 +51 -2
- data/vendor/libgit2/src/cli/progress.h +12 -0
- 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 +55 -21
- data/vendor/libgit2/src/libgit2/apply.c +10 -13
- data/vendor/libgit2/src/libgit2/attr.c +30 -13
- data/vendor/libgit2/src/libgit2/attr_file.c +17 -5
- 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 +135 -43
- data/vendor/libgit2/src/libgit2/blame.h +1 -0
- 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 +1 -2
- data/vendor/libgit2/src/libgit2/clone.c +192 -166
- data/vendor/libgit2/src/libgit2/clone.h +4 -1
- data/vendor/libgit2/src/libgit2/commit.c +93 -1
- data/vendor/libgit2/src/libgit2/commit_graph.c +68 -58
- data/vendor/libgit2/src/libgit2/commit_graph.h +1 -2
- data/vendor/libgit2/src/libgit2/config.c +390 -299
- 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 +101 -89
- 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 +195 -40
- data/vendor/libgit2/src/libgit2/config_parse.c +12 -10
- data/vendor/libgit2/src/libgit2/config_snapshot.c +24 -31
- data/vendor/libgit2/src/libgit2/delta.c +13 -1
- data/vendor/libgit2/src/libgit2/describe.c +24 -24
- data/vendor/libgit2/src/libgit2/diff.c +1 -1
- data/vendor/libgit2/src/libgit2/diff_driver.c +13 -20
- data/vendor/libgit2/src/libgit2/diff_driver.h +2 -2
- data/vendor/libgit2/src/libgit2/diff_generate.c +3 -3
- data/vendor/libgit2/src/libgit2/diff_parse.c +2 -2
- data/vendor/libgit2/src/libgit2/diff_print.c +65 -9
- data/vendor/libgit2/src/libgit2/diff_stats.c +19 -12
- data/vendor/libgit2/src/libgit2/diff_tform.c +36 -8
- data/vendor/libgit2/src/libgit2/email.c +1 -0
- data/vendor/libgit2/src/libgit2/fetch.c +5 -3
- data/vendor/libgit2/src/libgit2/fetchhead.c +1 -1
- 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 +18 -20
- data/vendor/libgit2/src/libgit2/grafts.h +0 -1
- data/vendor/libgit2/src/libgit2/graph.c +1 -1
- data/vendor/libgit2/src/libgit2/hashmap_oid.h +30 -0
- data/vendor/libgit2/src/libgit2/ignore.c +9 -5
- data/vendor/libgit2/src/libgit2/index.c +76 -98
- data/vendor/libgit2/src/libgit2/index.h +5 -2
- 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 +38 -41
- data/vendor/libgit2/src/libgit2/iterator.c +14 -8
- data/vendor/libgit2/src/libgit2/libgit2.c +153 -368
- data/vendor/libgit2/src/libgit2/mailmap.c +1 -1
- data/vendor/libgit2/src/libgit2/merge.c +43 -38
- data/vendor/libgit2/src/libgit2/merge.h +4 -0
- data/vendor/libgit2/src/libgit2/merge_driver.c +2 -2
- data/vendor/libgit2/src/libgit2/merge_file.c +43 -30
- data/vendor/libgit2/src/libgit2/message.c +1 -1
- data/vendor/libgit2/src/libgit2/midx.c +30 -18
- data/vendor/libgit2/src/libgit2/mwindow.c +38 -45
- data/vendor/libgit2/src/libgit2/mwindow.h +4 -0
- data/vendor/libgit2/src/libgit2/object.c +6 -5
- data/vendor/libgit2/src/libgit2/odb.c +7 -10
- data/vendor/libgit2/src/libgit2/odb_loose.c +24 -14
- data/vendor/libgit2/src/libgit2/odb_mempack.c +49 -17
- data/vendor/libgit2/src/libgit2/odb_pack.c +13 -5
- data/vendor/libgit2/src/libgit2/oid.c +36 -10
- data/vendor/libgit2/src/libgit2/oid.h +11 -0
- data/vendor/libgit2/src/libgit2/pack-objects.c +59 -34
- data/vendor/libgit2/src/libgit2/pack-objects.h +12 -4
- data/vendor/libgit2/src/libgit2/pack.c +33 -24
- data/vendor/libgit2/src/libgit2/pack.h +15 -10
- data/vendor/libgit2/src/libgit2/patch_parse.c +2 -2
- 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 +79 -28
- data/vendor/libgit2/src/libgit2/push.h +1 -0
- data/vendor/libgit2/src/libgit2/refdb_fs.c +128 -61
- 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 +41 -13
- 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 +125 -62
- data/vendor/libgit2/src/libgit2/remote.h +0 -1
- data/vendor/libgit2/src/libgit2/repository.c +235 -54
- data/vendor/libgit2/src/libgit2/repository.h +10 -6
- data/vendor/libgit2/src/libgit2/revert.c +1 -2
- data/vendor/libgit2/src/libgit2/revparse.c +2 -2
- data/vendor/libgit2/src/libgit2/revwalk.c +13 -10
- data/vendor/libgit2/src/libgit2/revwalk.h +3 -3
- data/vendor/libgit2/src/libgit2/settings.c +477 -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/status.c +1 -1
- data/vendor/libgit2/src/libgit2/streams/mbedtls.c +54 -60
- data/vendor/libgit2/src/libgit2/streams/openssl.c +36 -8
- 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/socket.c +30 -0
- data/vendor/libgit2/src/libgit2/streams/stransport.c +39 -7
- data/vendor/libgit2/src/libgit2/submodule.c +195 -80
- data/vendor/libgit2/src/libgit2/submodule.h +6 -7
- data/vendor/libgit2/src/libgit2/tag.c +4 -2
- 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_sspi.c +2 -0
- data/vendor/libgit2/src/libgit2/transports/credential.c +2 -2
- data/vendor/libgit2/src/libgit2/transports/git.c +1 -1
- data/vendor/libgit2/src/libgit2/transports/http.c +5 -6
- data/vendor/libgit2/src/libgit2/transports/http.h +0 -10
- data/vendor/libgit2/src/libgit2/transports/httpclient.c +124 -81
- 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 +16 -8
- data/vendor/libgit2/src/libgit2/transports/smart.c +25 -13
- data/vendor/libgit2/src/libgit2/transports/smart.h +4 -2
- data/vendor/libgit2/src/libgit2/transports/smart_pkt.c +7 -6
- data/vendor/libgit2/src/libgit2/transports/smart_protocol.c +55 -10
- data/vendor/libgit2/src/libgit2/transports/ssh.c +41 -1103
- data/vendor/libgit2/src/libgit2/transports/ssh_exec.c +386 -0
- data/vendor/libgit2/src/libgit2/transports/ssh_exec.h +26 -0
- data/vendor/libgit2/src/libgit2/transports/ssh_libssh2.c +1132 -0
- data/vendor/libgit2/src/libgit2/transports/ssh_libssh2.h +28 -0
- data/vendor/libgit2/src/libgit2/transports/winhttp.c +35 -7
- data/vendor/libgit2/src/libgit2/tree.c +34 -26
- data/vendor/libgit2/src/libgit2/tree.h +3 -2
- data/vendor/libgit2/src/libgit2/worktree.c +14 -17
- data/vendor/libgit2/src/util/CMakeLists.txt +7 -10
- data/vendor/libgit2/src/util/alloc.c +4 -1
- 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/stdalloc.c +0 -10
- data/vendor/libgit2/src/util/array.h +18 -17
- data/vendor/libgit2/src/util/cc-compat.h +2 -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/fs_path.c +81 -10
- data/vendor/libgit2/src/util/fs_path.h +39 -10
- data/vendor/libgit2/src/util/futils.c +6 -5
- data/vendor/libgit2/src/util/futils.h +24 -7
- data/vendor/libgit2/src/util/git2_features.h.in +12 -1
- data/vendor/libgit2/src/util/git2_util.h +6 -0
- data/vendor/libgit2/src/util/hash/builtin.c +14 -4
- data/vendor/libgit2/src/util/hash/openssl.c +148 -0
- data/vendor/libgit2/src/util/hash/openssl.h +17 -1
- data/vendor/libgit2/src/util/hash/rfc6234/sha224-256.c +8 -6
- data/vendor/libgit2/src/util/hash/sha.h +4 -1
- data/vendor/libgit2/src/util/hashmap.h +425 -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 +17 -11
- data/vendor/libgit2/src/util/net.h +2 -0
- data/vendor/libgit2/src/util/pool.c +1 -1
- data/vendor/libgit2/src/util/pool.h +5 -0
- data/vendor/libgit2/src/util/pqueue.h +1 -1
- data/vendor/libgit2/src/util/process.h +223 -0
- data/vendor/libgit2/src/util/rand.c +1 -7
- data/vendor/libgit2/src/util/regexp.c +28 -13
- data/vendor/libgit2/src/util/regexp.h +7 -2
- data/vendor/libgit2/src/util/runtime.c +2 -2
- data/vendor/libgit2/src/util/sortedcache.c +14 -13
- data/vendor/libgit2/src/util/sortedcache.h +3 -3
- data/vendor/libgit2/src/util/str.c +20 -8
- data/vendor/libgit2/src/util/str.h +5 -3
- 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 +706 -0
- data/vendor/libgit2/src/util/unix/realpath.c +23 -5
- data/vendor/libgit2/src/util/util.c +18 -5
- data/vendor/libgit2/src/util/util.h +5 -38
- data/vendor/libgit2/src/util/vector.c +3 -3
- data/vendor/libgit2/src/util/vector.h +2 -2
- data/vendor/libgit2/src/util/win32/path_w32.c +81 -5
- data/vendor/libgit2/src/util/win32/posix_w32.c +29 -6
- data/vendor/libgit2/src/util/win32/process.c +522 -0
- metadata +102 -67
- 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/pcre/CMakeLists.txt +0 -140
- data/vendor/libgit2/deps/pcre/COPYING +0 -5
- data/vendor/libgit2/deps/pcre/LICENCE +0 -93
- data/vendor/libgit2/deps/pcre/cmake/COPYING-CMAKE-SCRIPTS +0 -22
- data/vendor/libgit2/deps/pcre/cmake/FindEditline.cmake +0 -17
- data/vendor/libgit2/deps/pcre/cmake/FindPackageHandleStandardArgs.cmake +0 -58
- data/vendor/libgit2/deps/pcre/cmake/FindReadline.cmake +0 -29
- data/vendor/libgit2/deps/pcre/config.h.in +0 -57
- data/vendor/libgit2/deps/pcre/pcre.h +0 -641
- data/vendor/libgit2/deps/pcre/pcre_byte_order.c +0 -319
- data/vendor/libgit2/deps/pcre/pcre_compile.c +0 -9815
- data/vendor/libgit2/deps/pcre/pcre_config.c +0 -190
- data/vendor/libgit2/deps/pcre/pcre_exec.c +0 -7173
- data/vendor/libgit2/deps/pcre/pcre_fullinfo.c +0 -245
- data/vendor/libgit2/deps/pcre/pcre_get.c +0 -669
- data/vendor/libgit2/deps/pcre/pcre_globals.c +0 -86
- data/vendor/libgit2/deps/pcre/pcre_internal.h +0 -2787
- data/vendor/libgit2/deps/pcre/pcre_jit_compile.c +0 -11913
- data/vendor/libgit2/deps/pcre/pcre_maketables.c +0 -156
- data/vendor/libgit2/deps/pcre/pcre_printint.c +0 -834
- data/vendor/libgit2/deps/pcre/pcre_string_utils.c +0 -211
- data/vendor/libgit2/deps/pcre/pcre_study.c +0 -1686
- data/vendor/libgit2/deps/pcre/pcre_tables.c +0 -727
- data/vendor/libgit2/deps/pcre/pcre_ucd.c +0 -3644
- data/vendor/libgit2/deps/pcre/pcre_valid_utf8.c +0 -301
- data/vendor/libgit2/deps/pcre/pcre_version.c +0 -98
- data/vendor/libgit2/deps/pcre/pcre_xclass.c +0 -268
- data/vendor/libgit2/deps/pcre/pcreposix.c +0 -420
- data/vendor/libgit2/deps/pcre/pcreposix.h +0 -117
- data/vendor/libgit2/deps/pcre/ucp.h +0 -224
- 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 -293
- 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/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 -97
- data/vendor/libgit2/src/libgit2/threadstate.h +0 -22
- 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
|
@@ -77,6 +77,7 @@ static void submodule_get_index_status(unsigned int *, git_submodule *);
|
|
|
77
77
|
static void submodule_get_wd_status(unsigned int *, git_submodule *, git_repository *, git_submodule_ignore_t);
|
|
78
78
|
static void submodule_update_from_index_entry(git_submodule *sm, const git_index_entry *ie);
|
|
79
79
|
static void submodule_update_from_head_data(git_submodule *sm, mode_t mode, const git_oid *id);
|
|
80
|
+
static int path_is_valid(git_repository *repo, const char *path);
|
|
80
81
|
|
|
81
82
|
static int submodule_cmp(const void *a, const void *b)
|
|
82
83
|
{
|
|
@@ -169,22 +170,27 @@ out:
|
|
|
169
170
|
return error;
|
|
170
171
|
}
|
|
171
172
|
|
|
173
|
+
GIT_HASHMAP_STR_SETUP(git_submodule_namemap, char *);
|
|
174
|
+
|
|
172
175
|
/**
|
|
173
176
|
* Release the name map returned by 'load_submodule_names'.
|
|
174
177
|
*/
|
|
175
|
-
static void free_submodule_names(
|
|
178
|
+
static void free_submodule_names(git_submodule_namemap *names)
|
|
176
179
|
{
|
|
180
|
+
git_hashmap_iter_t iter = GIT_HASHMAP_ITER_INIT;
|
|
177
181
|
const char *key;
|
|
178
182
|
char *value;
|
|
179
183
|
|
|
180
184
|
if (names == NULL)
|
|
181
185
|
return;
|
|
182
186
|
|
|
183
|
-
|
|
184
|
-
git__free((char *)
|
|
187
|
+
while (git_submodule_namemap_iterate(&iter, &key, &value, names) == 0) {
|
|
188
|
+
git__free((char *)key);
|
|
185
189
|
git__free(value);
|
|
186
|
-
}
|
|
187
|
-
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
git_submodule_namemap_dispose(names);
|
|
193
|
+
git__free(names);
|
|
188
194
|
|
|
189
195
|
return;
|
|
190
196
|
}
|
|
@@ -194,29 +200,33 @@ static void free_submodule_names(git_strmap *names)
|
|
|
194
200
|
* TODO: for some use-cases, this might need case-folding on a
|
|
195
201
|
* case-insensitive filesystem
|
|
196
202
|
*/
|
|
197
|
-
static int load_submodule_names(
|
|
203
|
+
static int load_submodule_names(git_submodule_namemap **out, git_repository *repo, git_config *cfg)
|
|
198
204
|
{
|
|
199
|
-
const char *key = "submodule\\..*\\.path";
|
|
205
|
+
const char *key = "^submodule\\..*\\.path$";
|
|
206
|
+
char *value;
|
|
200
207
|
git_config_iterator *iter = NULL;
|
|
201
208
|
git_config_entry *entry;
|
|
202
209
|
git_str buf = GIT_STR_INIT;
|
|
203
|
-
|
|
210
|
+
git_submodule_namemap *names;
|
|
204
211
|
int isvalid, error;
|
|
205
212
|
|
|
206
213
|
*out = NULL;
|
|
207
214
|
|
|
208
|
-
if ((
|
|
215
|
+
if ((names = git__calloc(1, sizeof(git_submodule_namemap))) == NULL) {
|
|
216
|
+
error = -1;
|
|
209
217
|
goto out;
|
|
218
|
+
}
|
|
210
219
|
|
|
211
220
|
if ((error = git_config_iterator_glob_new(&iter, cfg, key)) < 0)
|
|
212
221
|
goto out;
|
|
213
222
|
|
|
214
223
|
while ((error = git_config_next(&entry, iter)) == 0) {
|
|
215
224
|
const char *fdot, *ldot;
|
|
225
|
+
|
|
216
226
|
fdot = strchr(entry->name, '.');
|
|
217
227
|
ldot = strrchr(entry->name, '.');
|
|
218
228
|
|
|
219
|
-
if (
|
|
229
|
+
if (git_submodule_namemap_contains(names, entry->value)) {
|
|
220
230
|
git_error_set(GIT_ERROR_SUBMODULE,
|
|
221
231
|
"duplicated submodule path '%s'", entry->value);
|
|
222
232
|
error = -1;
|
|
@@ -225,6 +235,7 @@ static int load_submodule_names(git_strmap **out, git_repository *repo, git_conf
|
|
|
225
235
|
|
|
226
236
|
git_str_clear(&buf);
|
|
227
237
|
git_str_put(&buf, fdot + 1, ldot - fdot - 1);
|
|
238
|
+
|
|
228
239
|
isvalid = git_submodule_name_is_valid(repo, buf.ptr, 0);
|
|
229
240
|
if (isvalid < 0) {
|
|
230
241
|
error = isvalid;
|
|
@@ -233,7 +244,20 @@ static int load_submodule_names(git_strmap **out, git_repository *repo, git_conf
|
|
|
233
244
|
if (!isvalid)
|
|
234
245
|
continue;
|
|
235
246
|
|
|
236
|
-
|
|
247
|
+
isvalid = path_is_valid(repo, entry->value);
|
|
248
|
+
if (isvalid < 0) {
|
|
249
|
+
error = isvalid;
|
|
250
|
+
goto out;
|
|
251
|
+
}
|
|
252
|
+
if (!isvalid)
|
|
253
|
+
continue;
|
|
254
|
+
|
|
255
|
+
if ((value = git__strdup(entry->value)) == NULL) {
|
|
256
|
+
error = -1;
|
|
257
|
+
goto out;
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
if ((error = git_submodule_namemap_put(names, value, git_str_detach(&buf))) < 0) {
|
|
237
261
|
git_error_set(GIT_ERROR_NOMEMORY, "error inserting submodule into hash table");
|
|
238
262
|
error = -1;
|
|
239
263
|
goto out;
|
|
@@ -252,31 +276,43 @@ out:
|
|
|
252
276
|
return error;
|
|
253
277
|
}
|
|
254
278
|
|
|
255
|
-
|
|
279
|
+
GIT_HASHMAP_STR_FUNCTIONS(git_submodule_cache, GIT_HASHMAP_INLINE, git_submodule *);
|
|
280
|
+
|
|
281
|
+
int git_submodule__map(git_submodule_cache *cache, git_repository *repo);
|
|
282
|
+
|
|
283
|
+
int git_submodule_cache_init(git_submodule_cache **out, git_repository *repo)
|
|
256
284
|
{
|
|
285
|
+
git_submodule_cache *cache = NULL;
|
|
257
286
|
int error = 0;
|
|
258
|
-
|
|
287
|
+
|
|
259
288
|
GIT_ASSERT_ARG(out);
|
|
260
289
|
GIT_ASSERT_ARG(repo);
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
290
|
+
|
|
291
|
+
if ((cache = git__calloc(1, sizeof(git_submodule_cache))) == NULL)
|
|
292
|
+
return -1;
|
|
293
|
+
|
|
294
|
+
if ((error = git_submodule__map(cache, repo)) < 0) {
|
|
264
295
|
git_submodule_cache_free(cache);
|
|
265
296
|
return error;
|
|
266
297
|
}
|
|
298
|
+
|
|
267
299
|
*out = cache;
|
|
268
300
|
return error;
|
|
269
301
|
}
|
|
270
302
|
|
|
271
|
-
int git_submodule_cache_free(
|
|
303
|
+
int git_submodule_cache_free(git_submodule_cache *cache)
|
|
272
304
|
{
|
|
273
305
|
git_submodule *sm = NULL;
|
|
306
|
+
git_hashmap_iter_t iter = GIT_HASHMAP_ITER_INIT;
|
|
307
|
+
|
|
274
308
|
if (cache == NULL)
|
|
275
309
|
return 0;
|
|
276
|
-
|
|
310
|
+
|
|
311
|
+
while (git_submodule_cache_iterate(&iter, NULL, &sm, cache) == 0)
|
|
277
312
|
git_submodule_free(sm);
|
|
278
|
-
|
|
279
|
-
|
|
313
|
+
|
|
314
|
+
git_submodule_cache_dispose(cache);
|
|
315
|
+
git__free(cache);
|
|
280
316
|
return 0;
|
|
281
317
|
}
|
|
282
318
|
|
|
@@ -292,11 +328,11 @@ int git_submodule__lookup_with_cache(
|
|
|
292
328
|
git_submodule **out, /* NULL if user only wants to test existence */
|
|
293
329
|
git_repository *repo,
|
|
294
330
|
const char *name, /* trailing slash is allowed */
|
|
295
|
-
|
|
331
|
+
git_submodule_cache *cache)
|
|
296
332
|
{
|
|
297
|
-
int error;
|
|
298
|
-
unsigned int location;
|
|
299
333
|
git_submodule *sm;
|
|
334
|
+
unsigned int location;
|
|
335
|
+
int error;
|
|
300
336
|
|
|
301
337
|
GIT_ASSERT_ARG(repo);
|
|
302
338
|
GIT_ASSERT_ARG(name);
|
|
@@ -307,7 +343,7 @@ int git_submodule__lookup_with_cache(
|
|
|
307
343
|
}
|
|
308
344
|
|
|
309
345
|
if (cache != NULL) {
|
|
310
|
-
if ((sm
|
|
346
|
+
if (git_submodule_cache_get(&sm, cache, name) == 0) {
|
|
311
347
|
if (out) {
|
|
312
348
|
*out = sm;
|
|
313
349
|
GIT_REFCOUNT_INC(*out);
|
|
@@ -319,7 +355,17 @@ int git_submodule__lookup_with_cache(
|
|
|
319
355
|
if ((error = submodule_alloc(&sm, repo, name)) < 0)
|
|
320
356
|
return error;
|
|
321
357
|
|
|
322
|
-
|
|
358
|
+
/*
|
|
359
|
+
* Only try to reload if they gave us a valid _name_; if this is a
|
|
360
|
+
* path, we'll do some lookups then try to reload to populate.
|
|
361
|
+
*/
|
|
362
|
+
if (git_submodule_name_is_valid(sm->repo, name, 0) <= 0) {
|
|
363
|
+
error = GIT_ENOTFOUND;
|
|
364
|
+
} else {
|
|
365
|
+
error = git_submodule_reload(sm, false);
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
if (error < 0 && error != GIT_ENOTFOUND) {
|
|
323
369
|
git_submodule_free(sm);
|
|
324
370
|
return error;
|
|
325
371
|
}
|
|
@@ -332,7 +378,7 @@ int git_submodule__lookup_with_cache(
|
|
|
332
378
|
/* If it's not configured or we're looking by path */
|
|
333
379
|
if (location == 0 || location == GIT_SUBMODULE_STATUS_IN_WD) {
|
|
334
380
|
git_config_backend *mods;
|
|
335
|
-
const char *pattern = "submodule\\..*\\.path";
|
|
381
|
+
const char *pattern = "^submodule\\..*\\.path$";
|
|
336
382
|
git_str path = GIT_STR_INIT;
|
|
337
383
|
fbp_data data = { NULL, NULL };
|
|
338
384
|
|
|
@@ -378,6 +424,7 @@ int git_submodule__lookup_with_cache(
|
|
|
378
424
|
/* If we still haven't found it, do the WD check */
|
|
379
425
|
if (location == 0 || location == GIT_SUBMODULE_STATUS_IN_WD) {
|
|
380
426
|
git_submodule_free(sm);
|
|
427
|
+
git_error_set(GIT_ERROR_SUBMODULE, "invalid submodule name: '%s'", name);
|
|
381
428
|
error = GIT_ENOTFOUND;
|
|
382
429
|
|
|
383
430
|
/* If it's not configured, we still check if there's a repo at the path */
|
|
@@ -429,24 +476,49 @@ int git_submodule_name_is_valid(git_repository *repo, const char *name, int flag
|
|
|
429
476
|
return isvalid;
|
|
430
477
|
}
|
|
431
478
|
|
|
479
|
+
static int path_is_valid(git_repository *repo, const char *path)
|
|
480
|
+
{
|
|
481
|
+
git_str buf = GIT_STR_INIT;
|
|
482
|
+
int flags = GIT_FS_PATH_REJECT_FILESYSTEM_DEFAULTS &
|
|
483
|
+
~GIT_FS_PATH_REJECT_EMPTY_COMPONENT;
|
|
484
|
+
int error, isvalid;
|
|
485
|
+
|
|
486
|
+
/* Avoid allocating a new string if we can avoid it */
|
|
487
|
+
if (strchr(path, '\\') != NULL) {
|
|
488
|
+
if ((error = git_fs_path_normalize_slashes(&buf, path)) < 0)
|
|
489
|
+
return error;
|
|
490
|
+
} else {
|
|
491
|
+
git_str_attach_notowned(&buf, path, strlen(path));
|
|
492
|
+
}
|
|
493
|
+
|
|
494
|
+
isvalid = git_path_is_valid(repo, buf.ptr, 0, flags);
|
|
495
|
+
git_str_dispose(&buf);
|
|
496
|
+
|
|
497
|
+
return isvalid;
|
|
498
|
+
}
|
|
499
|
+
|
|
432
500
|
static void submodule_free_dup(void *sm)
|
|
433
501
|
{
|
|
434
502
|
git_submodule_free(sm);
|
|
435
503
|
}
|
|
436
504
|
|
|
437
|
-
static int submodule_get_or_create(
|
|
505
|
+
static int submodule_get_or_create(
|
|
506
|
+
git_submodule **out,
|
|
507
|
+
git_repository *repo,
|
|
508
|
+
git_submodule_cache *cache,
|
|
509
|
+
const char *name)
|
|
438
510
|
{
|
|
439
511
|
git_submodule *sm = NULL;
|
|
440
512
|
int error;
|
|
441
513
|
|
|
442
|
-
if ((sm
|
|
514
|
+
if (git_submodule_cache_get(&sm, cache, name) == 0)
|
|
443
515
|
goto done;
|
|
444
516
|
|
|
445
517
|
/* if the submodule doesn't exist yet in the map, create it */
|
|
446
518
|
if ((error = submodule_alloc(&sm, repo, name)) < 0)
|
|
447
519
|
return error;
|
|
448
520
|
|
|
449
|
-
if ((error =
|
|
521
|
+
if ((error = git_submodule_cache_put(cache, sm->name, sm)) < 0) {
|
|
450
522
|
git_submodule_free(sm);
|
|
451
523
|
return error;
|
|
452
524
|
}
|
|
@@ -457,12 +529,15 @@ done:
|
|
|
457
529
|
return 0;
|
|
458
530
|
}
|
|
459
531
|
|
|
460
|
-
static int submodules_from_index(
|
|
532
|
+
static int submodules_from_index(
|
|
533
|
+
git_submodule_cache *cache,
|
|
534
|
+
git_index *idx,
|
|
535
|
+
git_config *cfg)
|
|
461
536
|
{
|
|
462
537
|
int error;
|
|
463
538
|
git_iterator *i = NULL;
|
|
464
539
|
const git_index_entry *entry;
|
|
465
|
-
|
|
540
|
+
git_submodule_namemap *names;
|
|
466
541
|
|
|
467
542
|
if ((error = load_submodule_names(&names, git_index_owner(idx), cfg)))
|
|
468
543
|
goto done;
|
|
@@ -473,7 +548,7 @@ static int submodules_from_index(git_strmap *map, git_index *idx, git_config *cf
|
|
|
473
548
|
while (!(error = git_iterator_advance(&entry, i))) {
|
|
474
549
|
git_submodule *sm;
|
|
475
550
|
|
|
476
|
-
if ((sm
|
|
551
|
+
if (git_submodule_cache_get(&sm, cache, entry->path) == 0) {
|
|
477
552
|
if (S_ISGITLINK(entry->mode))
|
|
478
553
|
submodule_update_from_index_entry(sm, entry);
|
|
479
554
|
else
|
|
@@ -481,10 +556,10 @@ static int submodules_from_index(git_strmap *map, git_index *idx, git_config *cf
|
|
|
481
556
|
} else if (S_ISGITLINK(entry->mode)) {
|
|
482
557
|
const char *name;
|
|
483
558
|
|
|
484
|
-
if ((name
|
|
559
|
+
if (git_submodule_namemap_get((char **)&name, names, entry->path) != 0)
|
|
485
560
|
name = entry->path;
|
|
486
561
|
|
|
487
|
-
if (!submodule_get_or_create(&sm, git_index_owner(idx),
|
|
562
|
+
if (!submodule_get_or_create(&sm, git_index_owner(idx), cache, name)) {
|
|
488
563
|
submodule_update_from_index_entry(sm, entry);
|
|
489
564
|
git_submodule_free(sm);
|
|
490
565
|
}
|
|
@@ -501,12 +576,15 @@ done:
|
|
|
501
576
|
return error;
|
|
502
577
|
}
|
|
503
578
|
|
|
504
|
-
static int submodules_from_head(
|
|
579
|
+
static int submodules_from_head(
|
|
580
|
+
git_submodule_cache *cache,
|
|
581
|
+
git_tree *head,
|
|
582
|
+
git_config *cfg)
|
|
505
583
|
{
|
|
506
584
|
int error;
|
|
507
585
|
git_iterator *i = NULL;
|
|
508
586
|
const git_index_entry *entry;
|
|
509
|
-
|
|
587
|
+
git_submodule_namemap *names;
|
|
510
588
|
|
|
511
589
|
if ((error = load_submodule_names(&names, git_tree_owner(head), cfg)))
|
|
512
590
|
goto done;
|
|
@@ -517,7 +595,7 @@ static int submodules_from_head(git_strmap *map, git_tree *head, git_config *cfg
|
|
|
517
595
|
while (!(error = git_iterator_advance(&entry, i))) {
|
|
518
596
|
git_submodule *sm;
|
|
519
597
|
|
|
520
|
-
if ((sm
|
|
598
|
+
if (git_submodule_cache_get(&sm, cache, entry->path) == 0) {
|
|
521
599
|
if (S_ISGITLINK(entry->mode))
|
|
522
600
|
submodule_update_from_head_data(sm, entry->mode, &entry->id);
|
|
523
601
|
else
|
|
@@ -525,10 +603,10 @@ static int submodules_from_head(git_strmap *map, git_tree *head, git_config *cfg
|
|
|
525
603
|
} else if (S_ISGITLINK(entry->mode)) {
|
|
526
604
|
const char *name;
|
|
527
605
|
|
|
528
|
-
if ((name
|
|
606
|
+
if (git_submodule_namemap_get((char **)&name, names, entry->path) != 0)
|
|
529
607
|
name = entry->path;
|
|
530
608
|
|
|
531
|
-
if (!submodule_get_or_create(&sm, git_tree_owner(head),
|
|
609
|
+
if (!submodule_get_or_create(&sm, git_tree_owner(head), cache, name)) {
|
|
532
610
|
submodule_update_from_head_data(
|
|
533
611
|
sm, entry->mode, &entry->id);
|
|
534
612
|
git_submodule_free(sm);
|
|
@@ -549,11 +627,11 @@ done:
|
|
|
549
627
|
/* If have_sm is true, sm is populated, otherwise map an repo are. */
|
|
550
628
|
typedef struct {
|
|
551
629
|
git_config *mods;
|
|
552
|
-
|
|
630
|
+
git_submodule_cache *cache;
|
|
553
631
|
git_repository *repo;
|
|
554
632
|
} lfc_data;
|
|
555
633
|
|
|
556
|
-
int git_submodule__map(
|
|
634
|
+
int git_submodule__map(git_submodule_cache *cache, git_repository *repo)
|
|
557
635
|
{
|
|
558
636
|
int error = 0;
|
|
559
637
|
git_index *idx = NULL;
|
|
@@ -563,8 +641,8 @@ int git_submodule__map(git_repository *repo, git_strmap *map)
|
|
|
563
641
|
git_config *mods = NULL;
|
|
564
642
|
bool has_workdir;
|
|
565
643
|
|
|
644
|
+
GIT_ASSERT_ARG(cache);
|
|
566
645
|
GIT_ASSERT_ARG(repo);
|
|
567
|
-
GIT_ASSERT_ARG(map);
|
|
568
646
|
|
|
569
647
|
/* get sources that we will need to check */
|
|
570
648
|
if (git_repository_index(&idx, repo) < 0)
|
|
@@ -581,7 +659,7 @@ int git_submodule__map(git_repository *repo, git_strmap *map)
|
|
|
581
659
|
/* add submodule information from .gitmodules */
|
|
582
660
|
if (has_workdir) {
|
|
583
661
|
lfc_data data = { 0 };
|
|
584
|
-
data.
|
|
662
|
+
data.cache = cache;
|
|
585
663
|
data.repo = repo;
|
|
586
664
|
|
|
587
665
|
if ((error = gitmodules_snapshot(&mods, repo)) < 0) {
|
|
@@ -597,19 +675,22 @@ int git_submodule__map(git_repository *repo, git_strmap *map)
|
|
|
597
675
|
}
|
|
598
676
|
/* add back submodule information from index */
|
|
599
677
|
if (mods && idx) {
|
|
600
|
-
if ((error = submodules_from_index(
|
|
678
|
+
if ((error = submodules_from_index(cache, idx, mods)) < 0)
|
|
601
679
|
goto cleanup;
|
|
602
680
|
}
|
|
603
681
|
/* add submodule information from HEAD */
|
|
604
682
|
if (mods && head) {
|
|
605
|
-
if ((error = submodules_from_head(
|
|
683
|
+
if ((error = submodules_from_head(cache, head, mods)) < 0)
|
|
606
684
|
goto cleanup;
|
|
607
685
|
}
|
|
608
686
|
/* shallow scan submodules in work tree as needed */
|
|
609
687
|
if (has_workdir) {
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
688
|
+
git_hashmap_iter_t iter = GIT_HASHMAP_ITER_INIT;
|
|
689
|
+
|
|
690
|
+
while (git_submodule_cache_iterate(&iter, NULL, &sm, cache) == 0) {
|
|
691
|
+
if ((error = submodule_load_from_wd_lite(sm)) < 0)
|
|
692
|
+
goto cleanup;
|
|
693
|
+
}
|
|
613
694
|
}
|
|
614
695
|
|
|
615
696
|
cleanup:
|
|
@@ -627,8 +708,9 @@ int git_submodule_foreach(
|
|
|
627
708
|
void *payload)
|
|
628
709
|
{
|
|
629
710
|
git_vector snapshot = GIT_VECTOR_INIT;
|
|
630
|
-
|
|
711
|
+
git_submodule_cache *submodules;
|
|
631
712
|
git_submodule *sm;
|
|
713
|
+
git_hashmap_iter_t iter;
|
|
632
714
|
int error;
|
|
633
715
|
size_t i;
|
|
634
716
|
|
|
@@ -637,20 +719,22 @@ int git_submodule_foreach(
|
|
|
637
719
|
return -1;
|
|
638
720
|
}
|
|
639
721
|
|
|
640
|
-
if ((
|
|
641
|
-
return
|
|
722
|
+
if ((submodules = git__calloc(1, sizeof(git_submodule_cache))) == NULL)
|
|
723
|
+
return -1;
|
|
642
724
|
|
|
643
|
-
if ((error = git_submodule__map(
|
|
725
|
+
if ((error = git_submodule__map(submodules, repo)) < 0)
|
|
644
726
|
goto done;
|
|
645
727
|
|
|
646
|
-
if (!(error = git_vector_init(
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
728
|
+
if (!(error = git_vector_init(&snapshot,
|
|
729
|
+
git_submodule_cache_size(submodules),
|
|
730
|
+
submodule_cmp))) {
|
|
731
|
+
for (iter = GIT_HASHMAP_ITER_INIT;
|
|
732
|
+
git_submodule_cache_iterate(&iter, NULL, &sm, submodules) == 0; ) {
|
|
650
733
|
if ((error = git_vector_insert(&snapshot, sm)) < 0)
|
|
651
734
|
break;
|
|
735
|
+
|
|
652
736
|
GIT_REFCOUNT_INC(sm);
|
|
653
|
-
}
|
|
737
|
+
}
|
|
654
738
|
}
|
|
655
739
|
|
|
656
740
|
if (error < 0)
|
|
@@ -668,12 +752,14 @@ int git_submodule_foreach(
|
|
|
668
752
|
done:
|
|
669
753
|
git_vector_foreach(&snapshot, i, sm)
|
|
670
754
|
git_submodule_free(sm);
|
|
671
|
-
|
|
755
|
+
git_vector_dispose(&snapshot);
|
|
672
756
|
|
|
673
|
-
|
|
757
|
+
for (iter = GIT_HASHMAP_ITER_INIT;
|
|
758
|
+
git_submodule_cache_iterate(&iter, NULL, &sm, submodules) == 0; )
|
|
674
759
|
git_submodule_free(sm);
|
|
675
|
-
|
|
676
|
-
|
|
760
|
+
|
|
761
|
+
git_submodule_cache_dispose(submodules);
|
|
762
|
+
git__free(submodules);
|
|
677
763
|
|
|
678
764
|
return error;
|
|
679
765
|
}
|
|
@@ -1032,16 +1118,23 @@ int git_submodule_add_to_index(git_submodule *sm, int write_index)
|
|
|
1032
1118
|
git_commit_free(head);
|
|
1033
1119
|
|
|
1034
1120
|
/* add it */
|
|
1035
|
-
error = git_index_add(index, &entry)
|
|
1121
|
+
if ((error = git_index_add(index, &entry)) < 0)
|
|
1122
|
+
goto cleanup;
|
|
1123
|
+
|
|
1124
|
+
/* Adding implies conflict was resolved, move conflict entries to REUC */
|
|
1125
|
+
if ((error = git_index__conflict_to_reuc(index, entry.path)) < 0 && error != GIT_ENOTFOUND)
|
|
1126
|
+
goto cleanup;
|
|
1036
1127
|
|
|
1037
1128
|
/* write it, if requested */
|
|
1038
|
-
if (
|
|
1039
|
-
error = git_index_write(index)
|
|
1129
|
+
if (write_index) {
|
|
1130
|
+
if ((error = git_index_write(index)) < 0)
|
|
1131
|
+
goto cleanup;
|
|
1040
1132
|
|
|
1041
|
-
|
|
1042
|
-
git_oid_cpy(&sm->index_oid, &sm->wd_oid);
|
|
1133
|
+
git_oid_cpy(&sm->index_oid, &sm->wd_oid);
|
|
1043
1134
|
}
|
|
1044
1135
|
|
|
1136
|
+
error = 0;
|
|
1137
|
+
|
|
1045
1138
|
cleanup:
|
|
1046
1139
|
git_repository_free(sm_repo);
|
|
1047
1140
|
git_str_dispose(&path);
|
|
@@ -1338,11 +1431,11 @@ int git_submodule_update(git_submodule *sm, int init, git_submodule_update_optio
|
|
|
1338
1431
|
/* Get the status of the submodule to determine if it is already initialized */
|
|
1339
1432
|
if ((error = git_submodule_status(&submodule_status, sm->repo, sm->name, GIT_SUBMODULE_IGNORE_UNSPECIFIED)) < 0)
|
|
1340
1433
|
goto done;
|
|
1341
|
-
|
|
1434
|
+
|
|
1342
1435
|
/* If the submodule is configured but hasn't been added, skip it */
|
|
1343
1436
|
if (submodule_status == GIT_SUBMODULE_STATUS_IN_CONFIG)
|
|
1344
1437
|
goto done;
|
|
1345
|
-
|
|
1438
|
+
|
|
1346
1439
|
/*
|
|
1347
1440
|
* If submodule work dir is not already initialized, check to see
|
|
1348
1441
|
* what we need to do (initialize, clone, return error...)
|
|
@@ -1671,18 +1764,34 @@ static int submodule_update_head(git_submodule *submodule)
|
|
|
1671
1764
|
return 0;
|
|
1672
1765
|
}
|
|
1673
1766
|
|
|
1767
|
+
static int submodule_name_error(const char *name)
|
|
1768
|
+
{
|
|
1769
|
+
git_error_set(GIT_ERROR_SUBMODULE,
|
|
1770
|
+
"invalid value for submodule name: '%s'", name);
|
|
1771
|
+
return GIT_EINVALID;
|
|
1772
|
+
}
|
|
1773
|
+
|
|
1774
|
+
static int submodule_config_error(const char *property, const char *value)
|
|
1775
|
+
{
|
|
1776
|
+
git_error_set(GIT_ERROR_SUBMODULE,
|
|
1777
|
+
"invalid value for submodule '%s' property: '%s'", property, value);
|
|
1778
|
+
return GIT_EINVALID;
|
|
1779
|
+
}
|
|
1780
|
+
|
|
1674
1781
|
int git_submodule_reload(git_submodule *sm, int force)
|
|
1675
1782
|
{
|
|
1676
1783
|
git_config *mods = NULL;
|
|
1677
|
-
int error;
|
|
1784
|
+
int valid, error = 0;
|
|
1678
1785
|
|
|
1679
1786
|
GIT_UNUSED(force);
|
|
1680
1787
|
|
|
1681
1788
|
GIT_ASSERT_ARG(sm);
|
|
1682
1789
|
|
|
1683
|
-
if ((
|
|
1790
|
+
if ((valid = git_submodule_name_is_valid(sm->repo, sm->name, 0)) <= 0) {
|
|
1684
1791
|
/* This should come with a warning, but we've no API for that */
|
|
1792
|
+
error = valid ? valid : submodule_name_error(sm->name);
|
|
1685
1793
|
goto out;
|
|
1794
|
+
}
|
|
1686
1795
|
|
|
1687
1796
|
if (git_repository_is_bare(sm->repo))
|
|
1688
1797
|
goto out;
|
|
@@ -1705,6 +1814,12 @@ int git_submodule_reload(git_submodule *sm, int force)
|
|
|
1705
1814
|
(error = submodule_update_head(sm)) < 0)
|
|
1706
1815
|
goto out;
|
|
1707
1816
|
|
|
1817
|
+
if ((valid = path_is_valid(sm->repo, sm->path)) <= 0) {
|
|
1818
|
+
/* This should come with a warning, but we've no API for that */
|
|
1819
|
+
error = valid ? valid : submodule_config_error("path", sm->path);
|
|
1820
|
+
goto out;
|
|
1821
|
+
}
|
|
1822
|
+
|
|
1708
1823
|
out:
|
|
1709
1824
|
git_config_free(mods);
|
|
1710
1825
|
return error;
|
|
@@ -1888,13 +2003,6 @@ void git_submodule_free(git_submodule *sm)
|
|
|
1888
2003
|
GIT_REFCOUNT_DEC(sm, submodule_release);
|
|
1889
2004
|
}
|
|
1890
2005
|
|
|
1891
|
-
static int submodule_config_error(const char *property, const char *value)
|
|
1892
|
-
{
|
|
1893
|
-
git_error_set(GIT_ERROR_INVALID,
|
|
1894
|
-
"invalid value for submodule '%s' property: '%s'", property, value);
|
|
1895
|
-
return -1;
|
|
1896
|
-
}
|
|
1897
|
-
|
|
1898
2006
|
int git_submodule_parse_ignore(git_submodule_ignore_t *out, const char *value)
|
|
1899
2007
|
{
|
|
1900
2008
|
int val;
|
|
@@ -2049,7 +2157,7 @@ static int submodule_load_each(const git_config_entry *entry, void *payload)
|
|
|
2049
2157
|
{
|
|
2050
2158
|
lfc_data *data = payload;
|
|
2051
2159
|
const char *namestart, *property;
|
|
2052
|
-
|
|
2160
|
+
git_submodule_cache *cache = data->cache;
|
|
2053
2161
|
git_str name = GIT_STR_INIT;
|
|
2054
2162
|
git_submodule *sm;
|
|
2055
2163
|
int error, isvalid;
|
|
@@ -2080,7 +2188,7 @@ static int submodule_load_each(const git_config_entry *entry, void *payload)
|
|
|
2080
2188
|
* a new submodule, load the config and insert it. If it's
|
|
2081
2189
|
* already inserted, we've already loaded it, so we skip.
|
|
2082
2190
|
*/
|
|
2083
|
-
if (
|
|
2191
|
+
if (git_submodule_cache_contains(cache, name.ptr)) {
|
|
2084
2192
|
error = 0;
|
|
2085
2193
|
goto done;
|
|
2086
2194
|
}
|
|
@@ -2093,7 +2201,14 @@ static int submodule_load_each(const git_config_entry *entry, void *payload)
|
|
|
2093
2201
|
goto done;
|
|
2094
2202
|
}
|
|
2095
2203
|
|
|
2096
|
-
|
|
2204
|
+
isvalid = path_is_valid(data->repo, sm->path);
|
|
2205
|
+
if (isvalid <= 0) {
|
|
2206
|
+
git_submodule_free(sm);
|
|
2207
|
+
error = isvalid;
|
|
2208
|
+
goto done;
|
|
2209
|
+
}
|
|
2210
|
+
|
|
2211
|
+
if ((error = git_submodule_cache_put(cache, sm->name, sm)) < 0)
|
|
2097
2212
|
goto done;
|
|
2098
2213
|
|
|
2099
2214
|
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
|
*
|
|
@@ -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
|
*
|
|
@@ -263,8 +263,10 @@ static bool tag_name_is_valid(const char *tag_name)
|
|
|
263
263
|
/*
|
|
264
264
|
* Discourage tag name starting with dash,
|
|
265
265
|
* https://github.com/git/git/commit/4f0accd638b8d2
|
|
266
|
+
* and refuse to use HEAD as a tagname,
|
|
267
|
+
* https://github.com/git/git/commit/bbd445d5efd415
|
|
266
268
|
*/
|
|
267
|
-
return tag_name[0] != '-';
|
|
269
|
+
return tag_name[0] != '-' && git__strcmp(tag_name, "HEAD");
|
|
268
270
|
}
|
|
269
271
|
|
|
270
272
|
static int git_tag_create__internal(
|
|
@@ -548,7 +550,7 @@ int git_tag_list_match(git_strarray *tag_names, const char *pattern, git_reposit
|
|
|
548
550
|
error = git_tag_foreach(repo, &tag_list_cb, (void *)&filter);
|
|
549
551
|
|
|
550
552
|
if (error < 0)
|
|
551
|
-
|
|
553
|
+
git_vector_dispose(&taglist);
|
|
552
554
|
|
|
553
555
|
tag_names->strings =
|
|
554
556
|
(char **)git_vector_detach(&tag_names->count, NULL, &taglist);
|