rugged 1.7.2 → 1.9.4
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 +195 -1
- data/vendor/libgit2/cmake/DefaultCFlags.cmake +4 -1
- 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 +6 -1
- 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/pcre/CMakeLists.txt +3 -3
- 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 +120 -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 +130 -44
- 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 +5 -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 +36 -40
- 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 +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/status.c +1 -1
- data/vendor/libgit2/src/libgit2/streams/mbedtls.c +54 -60
- data/vendor/libgit2/src/libgit2/streams/openssl.c +32 -7
- 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 +118 -68
- 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 +1 -2
- 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 +5 -5
- 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 +1126 -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 +29 -0
- 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 +1 -1
- 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 +60 -32
- 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 -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
|
@@ -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
|
}
|
|
@@ -1032,16 +1075,23 @@ int git_submodule_add_to_index(git_submodule *sm, int write_index)
|
|
|
1032
1075
|
git_commit_free(head);
|
|
1033
1076
|
|
|
1034
1077
|
/* add it */
|
|
1035
|
-
error = git_index_add(index, &entry)
|
|
1078
|
+
if ((error = git_index_add(index, &entry)) < 0)
|
|
1079
|
+
goto cleanup;
|
|
1080
|
+
|
|
1081
|
+
/* Adding implies conflict was resolved, move conflict entries to REUC */
|
|
1082
|
+
if ((error = git_index__conflict_to_reuc(index, entry.path)) < 0 && error != GIT_ENOTFOUND)
|
|
1083
|
+
goto cleanup;
|
|
1036
1084
|
|
|
1037
1085
|
/* write it, if requested */
|
|
1038
|
-
if (
|
|
1039
|
-
error = git_index_write(index)
|
|
1086
|
+
if (write_index) {
|
|
1087
|
+
if ((error = git_index_write(index)) < 0)
|
|
1088
|
+
goto cleanup;
|
|
1040
1089
|
|
|
1041
|
-
|
|
1042
|
-
git_oid_cpy(&sm->index_oid, &sm->wd_oid);
|
|
1090
|
+
git_oid_cpy(&sm->index_oid, &sm->wd_oid);
|
|
1043
1091
|
}
|
|
1044
1092
|
|
|
1093
|
+
error = 0;
|
|
1094
|
+
|
|
1045
1095
|
cleanup:
|
|
1046
1096
|
git_repository_free(sm_repo);
|
|
1047
1097
|
git_str_dispose(&path);
|
|
@@ -1338,11 +1388,11 @@ int git_submodule_update(git_submodule *sm, int init, git_submodule_update_optio
|
|
|
1338
1388
|
/* Get the status of the submodule to determine if it is already initialized */
|
|
1339
1389
|
if ((error = git_submodule_status(&submodule_status, sm->repo, sm->name, GIT_SUBMODULE_IGNORE_UNSPECIFIED)) < 0)
|
|
1340
1390
|
goto done;
|
|
1341
|
-
|
|
1391
|
+
|
|
1342
1392
|
/* If the submodule is configured but hasn't been added, skip it */
|
|
1343
1393
|
if (submodule_status == GIT_SUBMODULE_STATUS_IN_CONFIG)
|
|
1344
1394
|
goto done;
|
|
1345
|
-
|
|
1395
|
+
|
|
1346
1396
|
/*
|
|
1347
1397
|
* If submodule work dir is not already initialized, check to see
|
|
1348
1398
|
* what we need to do (initialize, clone, return error...)
|
|
@@ -2049,7 +2099,7 @@ static int submodule_load_each(const git_config_entry *entry, void *payload)
|
|
|
2049
2099
|
{
|
|
2050
2100
|
lfc_data *data = payload;
|
|
2051
2101
|
const char *namestart, *property;
|
|
2052
|
-
|
|
2102
|
+
git_submodule_cache *cache = data->cache;
|
|
2053
2103
|
git_str name = GIT_STR_INIT;
|
|
2054
2104
|
git_submodule *sm;
|
|
2055
2105
|
int error, isvalid;
|
|
@@ -2080,7 +2130,7 @@ static int submodule_load_each(const git_config_entry *entry, void *payload)
|
|
|
2080
2130
|
* a new submodule, load the config and insert it. If it's
|
|
2081
2131
|
* already inserted, we've already loaded it, so we skip.
|
|
2082
2132
|
*/
|
|
2083
|
-
if (
|
|
2133
|
+
if (git_submodule_cache_contains(cache, name.ptr)) {
|
|
2084
2134
|
error = 0;
|
|
2085
2135
|
goto done;
|
|
2086
2136
|
}
|
|
@@ -2093,7 +2143,7 @@ static int submodule_load_each(const git_config_entry *entry, void *payload)
|
|
|
2093
2143
|
goto done;
|
|
2094
2144
|
}
|
|
2095
2145
|
|
|
2096
|
-
if ((error =
|
|
2146
|
+
if ((error = git_submodule_cache_put(cache, sm->name, sm)) < 0)
|
|
2097
2147
|
goto done;
|
|
2098
2148
|
|
|
2099
2149
|
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);
|
|
@@ -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
|
}
|