rugged 1.3.1 → 1.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +34 -2
- data/ext/rugged/extconf.rb +6 -3
- data/ext/rugged/rugged.c +16 -0
- data/ext/rugged/rugged.h +4 -0
- data/ext/rugged/rugged_allocator.c +0 -54
- data/ext/rugged/rugged_blame.c +2 -0
- data/ext/rugged/rugged_blob.c +3 -0
- data/ext/rugged/rugged_commit.c +1 -0
- data/ext/rugged/rugged_config.c +9 -2
- data/ext/rugged/rugged_diff.c +1 -0
- data/ext/rugged/rugged_index.c +2 -0
- data/ext/rugged/rugged_patch.c +1 -0
- data/ext/rugged/rugged_rebase.c +1 -0
- data/ext/rugged/rugged_reference.c +1 -0
- data/ext/rugged/rugged_remote.c +28 -10
- data/ext/rugged/rugged_repo.c +7 -9
- data/ext/rugged/rugged_revwalk.c +5 -1
- data/ext/rugged/rugged_settings.c +5 -0
- data/ext/rugged/rugged_submodule.c +1 -0
- data/ext/rugged/rugged_tag.c +1 -0
- data/ext/rugged/rugged_tree.c +4 -0
- data/lib/rugged/index.rb +1 -1
- data/lib/rugged/tree.rb +5 -1
- data/lib/rugged/version.rb +1 -1
- data/vendor/libgit2/AUTHORS +1 -0
- data/vendor/libgit2/CMakeLists.txt +141 -289
- data/vendor/libgit2/COPYING +301 -20
- data/vendor/libgit2/cmake/AddCFlagIfSupported.cmake +21 -21
- data/vendor/libgit2/cmake/AddClarTest.cmake +7 -0
- data/vendor/libgit2/cmake/CheckPrototypeDefinitionSafe.cmake +16 -0
- data/vendor/libgit2/cmake/DefaultCFlags.cmake +154 -0
- data/vendor/libgit2/cmake/EnableWarnings.cmake +13 -13
- data/vendor/libgit2/cmake/ExperimentalFeatures.cmake +23 -0
- data/vendor/libgit2/cmake/FindCoreFoundation.cmake +13 -13
- data/vendor/libgit2/cmake/FindGSSAPI.cmake +171 -287
- data/vendor/libgit2/cmake/FindGSSFramework.cmake +13 -13
- data/vendor/libgit2/cmake/FindHTTP_Parser.cmake +17 -17
- data/vendor/libgit2/cmake/FindIntlIconv.cmake +51 -0
- data/vendor/libgit2/cmake/FindLLHTTP.cmake +39 -0
- data/vendor/libgit2/cmake/FindLibSSH2.cmake +5 -5
- data/vendor/libgit2/cmake/FindPCRE.cmake +12 -13
- data/vendor/libgit2/cmake/FindPCRE2.cmake +12 -12
- data/vendor/libgit2/cmake/FindPkgLibraries.cmake +19 -19
- data/vendor/libgit2/cmake/FindSecurity.cmake +14 -14
- data/vendor/libgit2/cmake/FindStatNsec.cmake +12 -18
- data/vendor/libgit2/cmake/Findfutimens.cmake +8 -8
- data/vendor/libgit2/cmake/FindmbedTLS.cmake +63 -70
- data/vendor/libgit2/cmake/IdeSplitSources.cmake +18 -18
- data/vendor/libgit2/cmake/PkgBuildConfig.cmake +60 -60
- data/vendor/libgit2/cmake/SanitizeBool.cmake +20 -20
- data/vendor/libgit2/cmake/SelectGSSAPI.cmake +37 -37
- data/vendor/libgit2/cmake/SelectHTTPParser.cmake +34 -0
- data/vendor/libgit2/cmake/SelectHTTPSBackend.cmake +129 -101
- data/vendor/libgit2/cmake/SelectHashes.cmake +113 -54
- data/vendor/libgit2/cmake/SelectRegex.cmake +56 -0
- data/vendor/libgit2/cmake/SelectSSH.cmake +46 -0
- data/vendor/libgit2/cmake/SelectXdiff.cmake +9 -0
- data/vendor/libgit2/cmake/SelectZlib.cmake +38 -0
- data/vendor/libgit2/deps/chromium-zlib/CMakeLists.txt +6 -6
- 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 +33 -31
- 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 +7 -5
- data/vendor/libgit2/deps/ntlmclient/ntlm.c +25 -25
- data/vendor/libgit2/deps/ntlmclient/ntlm.h +4 -4
- data/vendor/libgit2/deps/ntlmclient/ntlmclient.h +2 -2
- 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 +89 -88
- data/vendor/libgit2/deps/pcre/LICENCE +5 -5
- data/vendor/libgit2/deps/pcre/pcre.h +2 -2
- data/vendor/libgit2/deps/pcre/pcre_compile.c +6 -3
- data/vendor/libgit2/deps/pcre/pcre_exec.c +2 -2
- data/vendor/libgit2/deps/winhttp/CMakeLists.txt +14 -16
- data/vendor/libgit2/deps/xdiff/CMakeLists.txt +28 -0
- data/vendor/libgit2/deps/xdiff/git-xdiff.h +56 -0
- data/vendor/libgit2/{src → deps}/xdiff/xdiff.h +15 -15
- data/vendor/libgit2/{src → deps}/xdiff/xdiffi.c +152 -125
- data/vendor/libgit2/{src → deps}/xdiff/xdiffi.h +2 -4
- data/vendor/libgit2/{src → deps}/xdiff/xemit.c +26 -10
- data/vendor/libgit2/{src → deps}/xdiff/xhistogram.c +92 -94
- data/vendor/libgit2/{src → deps}/xdiff/xinclude.h +1 -12
- data/vendor/libgit2/{src → deps}/xdiff/xmacros.h +18 -1
- data/vendor/libgit2/{src → deps}/xdiff/xmerge.c +126 -137
- data/vendor/libgit2/{src → deps}/xdiff/xpatience.c +26 -46
- data/vendor/libgit2/{src → deps}/xdiff/xprepare.c +24 -46
- data/vendor/libgit2/{src → deps}/xdiff/xutils.c +36 -8
- data/vendor/libgit2/{src → deps}/xdiff/xutils.h +2 -1
- data/vendor/libgit2/deps/zlib/CMakeLists.txt +6 -1
- data/vendor/libgit2/deps/zlib/LICENSE +22 -0
- data/vendor/libgit2/deps/zlib/adler32.c +7 -22
- data/vendor/libgit2/deps/zlib/crc32.c +931 -317
- data/vendor/libgit2/deps/zlib/crc32.h +9441 -436
- data/vendor/libgit2/deps/zlib/deflate.c +428 -453
- data/vendor/libgit2/deps/zlib/deflate.h +51 -23
- data/vendor/libgit2/deps/zlib/gzguts.h +15 -19
- data/vendor/libgit2/deps/zlib/infback.c +19 -31
- data/vendor/libgit2/deps/zlib/inffast.c +15 -18
- data/vendor/libgit2/deps/zlib/inffast.h +1 -1
- data/vendor/libgit2/deps/zlib/inflate.c +75 -110
- data/vendor/libgit2/deps/zlib/inflate.h +3 -2
- 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 +294 -380
- data/vendor/libgit2/deps/zlib/zconf.h +23 -14
- data/vendor/libgit2/deps/zlib/zlib.h +310 -284
- data/vendor/libgit2/deps/zlib/zutil.c +20 -46
- data/vendor/libgit2/deps/zlib/zutil.h +24 -41
- data/vendor/libgit2/include/git2/annotated_commit.h +12 -5
- data/vendor/libgit2/include/git2/apply.h +43 -8
- data/vendor/libgit2/include/git2/attr.h +28 -6
- data/vendor/libgit2/include/git2/blame.h +137 -29
- data/vendor/libgit2/include/git2/blob.h +85 -29
- data/vendor/libgit2/include/git2/branch.h +25 -16
- data/vendor/libgit2/include/git2/buffer.h +24 -82
- data/vendor/libgit2/include/git2/cert.h +4 -3
- data/vendor/libgit2/include/git2/checkout.h +88 -34
- data/vendor/libgit2/include/git2/cherrypick.h +10 -3
- data/vendor/libgit2/include/git2/clone.h +28 -12
- data/vendor/libgit2/include/git2/commit.h +134 -3
- data/vendor/libgit2/include/git2/common.h +172 -59
- data/vendor/libgit2/include/git2/config.h +118 -32
- data/vendor/libgit2/include/git2/credential.h +32 -3
- data/vendor/libgit2/include/git2/credential_helpers.h +2 -0
- data/vendor/libgit2/include/git2/deprecated.h +141 -3
- data/vendor/libgit2/include/git2/describe.h +20 -3
- data/vendor/libgit2/include/git2/diff.h +95 -19
- data/vendor/libgit2/include/git2/email.h +10 -30
- data/vendor/libgit2/include/git2/errors.h +51 -61
- data/vendor/libgit2/include/git2/experimental.h +20 -0
- data/vendor/libgit2/include/git2/filter.h +21 -9
- data/vendor/libgit2/include/git2/global.h +8 -1
- data/vendor/libgit2/include/git2/graph.h +4 -2
- data/vendor/libgit2/include/git2/ignore.h +11 -1
- data/vendor/libgit2/include/git2/index.h +111 -11
- data/vendor/libgit2/include/git2/indexer.h +67 -2
- data/vendor/libgit2/include/git2/mailmap.h +7 -1
- data/vendor/libgit2/include/git2/merge.h +70 -5
- data/vendor/libgit2/include/git2/message.h +4 -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 +57 -7
- data/vendor/libgit2/include/git2/odb.h +156 -33
- data/vendor/libgit2/include/git2/odb_backend.h +132 -16
- data/vendor/libgit2/include/git2/oid.h +116 -17
- data/vendor/libgit2/include/git2/oidarray.h +7 -1
- data/vendor/libgit2/include/git2/pack.h +37 -9
- data/vendor/libgit2/include/git2/patch.h +10 -3
- data/vendor/libgit2/include/git2/pathspec.h +10 -1
- data/vendor/libgit2/include/git2/proxy.h +11 -1
- data/vendor/libgit2/include/git2/rebase.h +18 -7
- data/vendor/libgit2/include/git2/refdb.h +5 -2
- data/vendor/libgit2/include/git2/reflog.h +4 -3
- data/vendor/libgit2/include/git2/refs.h +11 -8
- data/vendor/libgit2/include/git2/refspec.h +14 -4
- data/vendor/libgit2/include/git2/remote.h +295 -54
- data/vendor/libgit2/include/git2/repository.h +95 -25
- data/vendor/libgit2/include/git2/reset.h +18 -5
- data/vendor/libgit2/include/git2/revert.h +9 -4
- data/vendor/libgit2/include/git2/revparse.h +4 -4
- data/vendor/libgit2/include/git2/revwalk.h +7 -3
- data/vendor/libgit2/include/git2/signature.h +47 -2
- data/vendor/libgit2/include/git2/stash.h +78 -10
- data/vendor/libgit2/include/git2/status.h +24 -11
- data/vendor/libgit2/include/git2/stdint.h +87 -85
- data/vendor/libgit2/include/git2/strarray.h +2 -16
- data/vendor/libgit2/include/git2/submodule.h +27 -11
- data/vendor/libgit2/include/git2/sys/alloc.h +12 -34
- data/vendor/libgit2/include/git2/sys/commit.h +77 -3
- data/vendor/libgit2/include/git2/sys/commit_graph.h +110 -59
- data/vendor/libgit2/include/git2/sys/config.h +80 -4
- data/vendor/libgit2/include/git2/sys/credential.h +4 -3
- data/vendor/libgit2/include/git2/sys/diff.h +21 -1
- data/vendor/libgit2/include/git2/sys/email.h +7 -0
- data/vendor/libgit2/include/git2/sys/errors.h +76 -0
- data/vendor/libgit2/include/git2/sys/filter.h +66 -3
- data/vendor/libgit2/include/git2/sys/hashsig.h +11 -0
- data/vendor/libgit2/include/git2/sys/index.h +3 -2
- data/vendor/libgit2/include/git2/sys/mempack.h +32 -2
- data/vendor/libgit2/include/git2/sys/merge.h +55 -7
- data/vendor/libgit2/include/git2/sys/midx.h +47 -4
- data/vendor/libgit2/include/git2/sys/odb_backend.h +10 -9
- 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 +53 -0
- data/vendor/libgit2/include/git2/sys/repository.h +63 -3
- data/vendor/libgit2/include/git2/sys/stream.h +26 -3
- data/vendor/libgit2/include/git2/sys/transport.h +87 -41
- data/vendor/libgit2/include/git2/tag.h +4 -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 +20 -8
- data/vendor/libgit2/include/git2/types.h +26 -10
- data/vendor/libgit2/include/git2/version.h +63 -6
- data/vendor/libgit2/include/git2/worktree.h +30 -8
- data/vendor/libgit2/include/git2.h +1 -0
- data/vendor/libgit2/src/CMakeLists.txt +203 -420
- data/vendor/libgit2/src/README.md +12 -0
- data/vendor/libgit2/src/cli/CMakeLists.txt +56 -0
- data/vendor/libgit2/src/cli/README.md +26 -0
- data/vendor/libgit2/src/{branch.h → cli/cmd.c} +10 -8
- data/vendor/libgit2/src/cli/cmd.h +37 -0
- data/vendor/libgit2/src/cli/cmd_blame.c +287 -0
- data/vendor/libgit2/src/cli/cmd_cat_file.c +202 -0
- data/vendor/libgit2/src/cli/cmd_clone.c +190 -0
- data/vendor/libgit2/src/cli/cmd_config.c +241 -0
- data/vendor/libgit2/src/cli/cmd_hash_object.c +152 -0
- data/vendor/libgit2/src/cli/cmd_help.c +85 -0
- 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 +51 -0
- data/vendor/libgit2/src/cli/main.c +134 -0
- data/vendor/libgit2/src/cli/opt.c +695 -0
- data/vendor/libgit2/src/cli/opt.h +367 -0
- data/vendor/libgit2/src/cli/opt_usage.c +263 -0
- data/vendor/libgit2/src/cli/opt_usage.h +40 -0
- data/vendor/libgit2/src/cli/progress.c +395 -0
- data/vendor/libgit2/src/cli/progress.h +129 -0
- data/vendor/libgit2/src/cli/sighandler.h +20 -0
- data/vendor/libgit2/src/cli/unix/sighandler.c +37 -0
- data/vendor/libgit2/src/cli/win32/precompiled.h +3 -0
- data/vendor/libgit2/src/cli/win32/sighandler.c +37 -0
- data/vendor/libgit2/src/libgit2/CMakeLists.txt +140 -0
- data/vendor/libgit2/src/{annotated_commit.c → libgit2/annotated_commit.c} +2 -2
- data/vendor/libgit2/src/{annotated_commit.h → libgit2/annotated_commit.h} +2 -2
- data/vendor/libgit2/src/{apply.c → libgit2/apply.c} +32 -34
- data/vendor/libgit2/src/{apply.h → libgit2/apply.h} +2 -2
- data/vendor/libgit2/src/{attr.c → libgit2/attr.c} +48 -31
- data/vendor/libgit2/src/{attr_file.c → libgit2/attr_file.c} +25 -20
- data/vendor/libgit2/src/{attr_file.h → libgit2/attr_file.h} +6 -4
- data/vendor/libgit2/src/{attrcache.c → libgit2/attrcache.c} +87 -46
- data/vendor/libgit2/src/{attrcache.h → libgit2/attrcache.h} +5 -9
- data/vendor/libgit2/src/{blame.c → libgit2/blame.c} +152 -57
- data/vendor/libgit2/src/{blame.h → libgit2/blame.h} +1 -0
- data/vendor/libgit2/src/{blame_git.c → libgit2/blame_git.c} +1 -2
- data/vendor/libgit2/src/{blob.c → libgit2/blob.c} +38 -29
- data/vendor/libgit2/src/{blob.h → libgit2/blob.h} +3 -3
- data/vendor/libgit2/src/{branch.c → libgit2/branch.c} +164 -118
- data/vendor/libgit2/src/libgit2/branch.h +31 -0
- data/vendor/libgit2/src/libgit2/buf.c +126 -0
- data/vendor/libgit2/src/libgit2/buf.h +50 -0
- data/vendor/libgit2/src/{cache.c → libgit2/cache.c} +22 -17
- data/vendor/libgit2/src/{cache.h → libgit2/cache.h} +7 -9
- data/vendor/libgit2/src/{checkout.c → libgit2/checkout.c} +107 -91
- data/vendor/libgit2/src/{checkout.h → libgit2/checkout.h} +0 -2
- data/vendor/libgit2/src/{cherrypick.c → libgit2/cherrypick.c} +14 -15
- data/vendor/libgit2/src/{clone.c → libgit2/clone.c} +254 -203
- data/vendor/libgit2/src/{clone.h → libgit2/clone.h} +4 -1
- data/vendor/libgit2/src/{commit.c → libgit2/commit.c} +296 -77
- data/vendor/libgit2/src/libgit2/commit.h +87 -0
- data/vendor/libgit2/src/{commit_graph.c → libgit2/commit_graph.c} +246 -135
- data/vendor/libgit2/src/{commit_graph.h → libgit2/commit_graph.h} +33 -8
- data/vendor/libgit2/src/{commit_list.c → libgit2/commit_list.c} +17 -7
- data/vendor/libgit2/src/{commit_list.h → libgit2/commit_list.h} +1 -0
- data/vendor/libgit2/src/libgit2/common.h +55 -0
- data/vendor/libgit2/src/{config.c → libgit2/config.c} +490 -360
- data/vendor/libgit2/src/libgit2/config.cmake.in +3 -0
- data/vendor/libgit2/src/{config.h → libgit2/config.h} +24 -6
- data/vendor/libgit2/src/{config_backend.h → libgit2/config_backend.h} +8 -10
- data/vendor/libgit2/src/{config_cache.c → libgit2/config_cache.c} +4 -5
- data/vendor/libgit2/src/{config_file.c → libgit2/config_file.c} +212 -183
- 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 +374 -0
- data/vendor/libgit2/src/{config_parse.c → libgit2/config_parse.c} +37 -32
- data/vendor/libgit2/src/{config_snapshot.c → libgit2/config_snapshot.c} +24 -31
- data/vendor/libgit2/src/{crlf.c → libgit2/crlf.c} +24 -21
- data/vendor/libgit2/src/{describe.c → libgit2/describe.c} +62 -51
- data/vendor/libgit2/src/{diff.c → libgit2/diff.c} +44 -14
- data/vendor/libgit2/src/{diff.h → libgit2/diff.h} +8 -10
- data/vendor/libgit2/src/{diff_driver.c → libgit2/diff_driver.c} +46 -55
- data/vendor/libgit2/src/{diff_driver.h → libgit2/diff_driver.h} +5 -5
- data/vendor/libgit2/src/{diff_file.c → libgit2/diff_file.c} +45 -27
- data/vendor/libgit2/src/{diff_generate.c → libgit2/diff_generate.c} +70 -20
- data/vendor/libgit2/src/{diff_generate.h → libgit2/diff_generate.h} +5 -3
- data/vendor/libgit2/src/{diff_parse.c → libgit2/diff_parse.c} +22 -6
- data/vendor/libgit2/src/{diff_print.c → libgit2/diff_print.c} +192 -105
- data/vendor/libgit2/src/{diff_stats.c → libgit2/diff_stats.c} +40 -29
- data/vendor/libgit2/src/libgit2/diff_stats.h +18 -0
- data/vendor/libgit2/src/{diff_tform.c → libgit2/diff_tform.c} +49 -16
- data/vendor/libgit2/src/{diff_xdiff.c → libgit2/diff_xdiff.c} +4 -8
- data/vendor/libgit2/src/{diff_xdiff.h → libgit2/diff_xdiff.h} +1 -1
- data/vendor/libgit2/src/{email.c → libgit2/email.c} +58 -40
- data/vendor/libgit2/src/{email.h → libgit2/email.h} +1 -1
- data/vendor/libgit2/src/{transports/ssh.h → libgit2/experimental.h.in} +3 -4
- data/vendor/libgit2/src/{fetch.c → libgit2/fetch.c} +105 -30
- data/vendor/libgit2/src/{fetch.h → libgit2/fetch.h} +1 -3
- data/vendor/libgit2/src/{fetchhead.c → libgit2/fetchhead.c} +30 -28
- data/vendor/libgit2/src/{filter.c → libgit2/filter.c} +132 -58
- data/vendor/libgit2/src/{filter.h → libgit2/filter.h} +26 -5
- data/vendor/libgit2/src/{win32 → libgit2}/git2.rc +3 -3
- data/vendor/libgit2/src/libgit2/grafts.c +270 -0
- data/vendor/libgit2/src/libgit2/grafts.h +35 -0
- data/vendor/libgit2/src/{graph.c → libgit2/graph.c} +1 -1
- data/vendor/libgit2/src/libgit2/hashmap_oid.h +30 -0
- data/vendor/libgit2/src/{ident.c → libgit2/ident.c} +20 -20
- data/vendor/libgit2/src/{ignore.c → libgit2/ignore.c} +44 -39
- data/vendor/libgit2/src/{ignore.h → libgit2/ignore.h} +2 -2
- data/vendor/libgit2/src/{index.c → libgit2/index.c} +460 -276
- data/vendor/libgit2/src/{index.h → libgit2/index.h} +21 -5
- data/vendor/libgit2/src/libgit2/index_map.c +95 -0
- data/vendor/libgit2/src/libgit2/index_map.h +28 -0
- data/vendor/libgit2/src/{indexer.c → libgit2/indexer.c} +208 -124
- data/vendor/libgit2/src/{iterator.c → libgit2/iterator.c} +102 -71
- data/vendor/libgit2/src/{iterator.h → libgit2/iterator.h} +8 -5
- data/vendor/libgit2/src/libgit2/libgit2.c +268 -0
- data/vendor/libgit2/src/{mailmap.c → libgit2/mailmap.c} +39 -37
- data/vendor/libgit2/src/{merge.c → libgit2/merge.c} +83 -73
- data/vendor/libgit2/src/{merge.h → libgit2/merge.h} +1 -14
- data/vendor/libgit2/src/{merge_driver.c → libgit2/merge_driver.c} +4 -4
- data/vendor/libgit2/src/{merge_file.c → libgit2/merge_file.c} +13 -5
- data/vendor/libgit2/src/{message.c → libgit2/message.c} +21 -10
- data/vendor/libgit2/src/{midx.c → libgit2/midx.c} +174 -112
- data/vendor/libgit2/src/{midx.h → libgit2/midx.h} +17 -6
- data/vendor/libgit2/src/{mwindow.c → libgit2/mwindow.c} +53 -57
- data/vendor/libgit2/src/{mwindow.h → libgit2/mwindow.h} +9 -2
- data/vendor/libgit2/src/{notes.c → libgit2/notes.c} +29 -37
- data/vendor/libgit2/src/{object.c → libgit2/object.c} +166 -35
- data/vendor/libgit2/src/{object.h → libgit2/object.h} +17 -2
- data/vendor/libgit2/src/{odb.c → libgit2/odb.c} +261 -88
- data/vendor/libgit2/src/{odb.h → libgit2/odb.h} +44 -5
- data/vendor/libgit2/src/{odb_loose.c → libgit2/odb_loose.c} +192 -134
- data/vendor/libgit2/src/{odb_mempack.c → libgit2/odb_mempack.c} +67 -22
- data/vendor/libgit2/src/{odb_pack.c → libgit2/odb_pack.c} +162 -89
- data/vendor/libgit2/src/{oid.c → libgit2/oid.c} +171 -92
- data/vendor/libgit2/src/libgit2/oid.h +284 -0
- data/vendor/libgit2/src/libgit2/oidarray.c +89 -0
- data/vendor/libgit2/src/{oidarray.h → libgit2/oidarray.h} +5 -1
- data/vendor/libgit2/src/{pack-objects.c → libgit2/pack-objects.c} +126 -66
- data/vendor/libgit2/src/{pack-objects.h → libgit2/pack-objects.h} +28 -12
- data/vendor/libgit2/src/{pack.c → libgit2/pack.c} +146 -111
- data/vendor/libgit2/src/{pack.h → libgit2/pack.h} +45 -25
- data/vendor/libgit2/src/{parse.c → libgit2/parse.c} +8 -4
- data/vendor/libgit2/src/{parse.h → libgit2/parse.h} +1 -1
- data/vendor/libgit2/src/{patch.c → libgit2/patch.c} +3 -3
- data/vendor/libgit2/src/{patch.h → libgit2/patch.h} +8 -1
- data/vendor/libgit2/src/{patch_generate.c → libgit2/patch_generate.c} +51 -16
- data/vendor/libgit2/src/{patch_generate.h → libgit2/patch_generate.h} +5 -5
- data/vendor/libgit2/src/{patch_parse.c → libgit2/patch_parse.c} +42 -34
- data/vendor/libgit2/src/libgit2/path.c +375 -0
- data/vendor/libgit2/src/libgit2/path.h +68 -0
- data/vendor/libgit2/src/{pathspec.c → libgit2/pathspec.c} +7 -7
- data/vendor/libgit2/src/{pathspec.h → libgit2/pathspec.h} +2 -2
- data/vendor/libgit2/src/{proxy.c → libgit2/proxy.c} +4 -1
- data/vendor/libgit2/src/{proxy.h → libgit2/proxy.h} +1 -1
- data/vendor/libgit2/src/{push.c → libgit2/push.c} +116 -60
- data/vendor/libgit2/src/{push.h → libgit2/push.h} +5 -16
- data/vendor/libgit2/src/{reader.c → libgit2/reader.c} +9 -9
- data/vendor/libgit2/src/{reader.h → libgit2/reader.h} +2 -2
- data/vendor/libgit2/src/{rebase.c → libgit2/rebase.c} +147 -147
- data/vendor/libgit2/src/{refdb_fs.c → libgit2/refdb_fs.c} +639 -254
- data/vendor/libgit2/src/{reflog.c → libgit2/reflog.c} +8 -7
- data/vendor/libgit2/src/{reflog.h → libgit2/reflog.h} +3 -2
- data/vendor/libgit2/src/{refs.c → libgit2/refs.c} +67 -39
- data/vendor/libgit2/src/{refs.h → libgit2/refs.h} +8 -3
- data/vendor/libgit2/src/{refspec.c → libgit2/refspec.c} +60 -38
- data/vendor/libgit2/src/{refspec.h → libgit2/refspec.h} +13 -2
- data/vendor/libgit2/src/{remote.c → libgit2/remote.c} +821 -454
- data/vendor/libgit2/src/libgit2/remote.h +101 -0
- data/vendor/libgit2/src/{repository.c → libgit2/repository.c} +1377 -594
- data/vendor/libgit2/src/{repository.h → libgit2/repository.h} +43 -12
- data/vendor/libgit2/src/{reset.c → libgit2/reset.c} +8 -5
- data/vendor/libgit2/src/{revert.c → libgit2/revert.c} +18 -22
- data/vendor/libgit2/src/{revparse.c → libgit2/revparse.c} +76 -44
- data/vendor/libgit2/src/{revwalk.c → libgit2/revwalk.c} +48 -19
- data/vendor/libgit2/src/{revwalk.h → libgit2/revwalk.h} +3 -3
- data/vendor/libgit2/src/{libgit2.c → libgit2/settings.c} +162 -95
- data/vendor/libgit2/src/{settings.h → libgit2/settings.h} +6 -2
- data/vendor/libgit2/src/{signature.c → libgit2/signature.c} +144 -21
- data/vendor/libgit2/src/{signature.h → libgit2/signature.h} +1 -2
- data/vendor/libgit2/src/{stash.c → libgit2/stash.c} +243 -68
- data/vendor/libgit2/src/{status.c → libgit2/status.c} +5 -2
- data/vendor/libgit2/src/{strarray.c → libgit2/strarray.c} +1 -0
- data/vendor/libgit2/src/libgit2/strarray.h +25 -0
- data/vendor/libgit2/src/{streams → libgit2/streams}/mbedtls.c +62 -67
- data/vendor/libgit2/src/{streams → libgit2/streams}/openssl.c +41 -24
- data/vendor/libgit2/src/{streams → libgit2/streams}/openssl.h +2 -0
- data/vendor/libgit2/src/{streams → libgit2/streams}/openssl_dynamic.c +11 -3
- data/vendor/libgit2/src/{streams → libgit2/streams}/openssl_dynamic.h +6 -3
- data/vendor/libgit2/src/libgit2/streams/schannel.c +715 -0
- data/vendor/libgit2/src/libgit2/streams/schannel.h +28 -0
- data/vendor/libgit2/src/libgit2/streams/socket.c +428 -0
- data/vendor/libgit2/src/{streams → libgit2/streams}/socket.h +3 -1
- data/vendor/libgit2/src/{streams → libgit2/streams}/stransport.c +79 -19
- data/vendor/libgit2/src/{streams → libgit2/streams}/tls.c +5 -0
- data/vendor/libgit2/src/{submodule.c → libgit2/submodule.c} +279 -220
- data/vendor/libgit2/src/{submodule.h → libgit2/submodule.h} +10 -11
- data/vendor/libgit2/src/libgit2/sysdir.c +650 -0
- data/vendor/libgit2/src/{sysdir.h → libgit2/sysdir.h} +55 -18
- data/vendor/libgit2/src/{tag.c → libgit2/tag.c} +74 -43
- data/vendor/libgit2/src/{tag.h → libgit2/tag.h} +2 -2
- data/vendor/libgit2/src/{trace.c → libgit2/trace.c} +1 -14
- data/vendor/libgit2/src/{trace.h → libgit2/trace.h} +5 -22
- data/vendor/libgit2/src/{trailer.c → libgit2/trailer.c} +7 -7
- data/vendor/libgit2/src/{transaction.c → libgit2/transaction.c} +27 -21
- data/vendor/libgit2/src/{transaction.h → libgit2/transaction.h} +4 -1
- data/vendor/libgit2/src/{transport.c → libgit2/transport.c} +14 -11
- data/vendor/libgit2/src/{transports → libgit2/transports}/auth.c +7 -9
- data/vendor/libgit2/src/{transports → libgit2/transports}/auth.h +3 -5
- data/vendor/libgit2/src/{transports/auth_negotiate.c → libgit2/transports/auth_gssapi.c} +44 -45
- data/vendor/libgit2/src/{transports → libgit2/transports}/auth_negotiate.h +1 -1
- data/vendor/libgit2/src/{transports → libgit2/transports}/auth_ntlm.h +1 -2
- data/vendor/libgit2/src/{transports/auth_ntlm.c → libgit2/transports/auth_ntlmclient.c} +22 -22
- data/vendor/libgit2/src/libgit2/transports/auth_sspi.c +341 -0
- data/vendor/libgit2/src/{transports → libgit2/transports}/credential.c +1 -1
- data/vendor/libgit2/src/{transports → libgit2/transports}/git.c +16 -19
- data/vendor/libgit2/src/{transports → libgit2/transports}/http.c +49 -24
- data/vendor/libgit2/src/{transports → libgit2/transports}/http.h +0 -11
- data/vendor/libgit2/src/{transports → libgit2/transports}/httpclient.c +188 -134
- data/vendor/libgit2/src/{transports → libgit2/transports}/httpclient.h +10 -0
- data/vendor/libgit2/src/libgit2/transports/httpparser.c +128 -0
- data/vendor/libgit2/src/libgit2/transports/httpparser.h +99 -0
- data/vendor/libgit2/src/{transports → libgit2/transports}/local.c +159 -127
- data/vendor/libgit2/src/{transports → libgit2/transports}/smart.c +142 -165
- data/vendor/libgit2/src/{transports → libgit2/transports}/smart.h +56 -36
- data/vendor/libgit2/src/{transports → libgit2/transports}/smart_pkt.c +307 -74
- data/vendor/libgit2/src/{transports → libgit2/transports}/smart_protocol.c +297 -97
- data/vendor/libgit2/src/libgit2/transports/ssh.c +85 -0
- data/vendor/libgit2/src/libgit2/transports/ssh_exec.c +347 -0
- data/vendor/libgit2/src/libgit2/transports/ssh_exec.h +26 -0
- data/vendor/libgit2/src/{transports/ssh.c → libgit2/transports/ssh_libssh2.c} +414 -268
- data/vendor/libgit2/src/libgit2/transports/ssh_libssh2.h +28 -0
- data/vendor/libgit2/src/{transports → libgit2/transports}/winhttp.c +101 -75
- data/vendor/libgit2/src/{tree-cache.c → libgit2/tree-cache.c} +30 -20
- data/vendor/libgit2/src/{tree-cache.h → libgit2/tree-cache.h} +7 -5
- data/vendor/libgit2/src/{tree.c → libgit2/tree.c} +128 -110
- data/vendor/libgit2/src/{tree.h → libgit2/tree.h} +7 -6
- data/vendor/libgit2/src/{worktree.c → libgit2/worktree.c} +160 -121
- data/vendor/libgit2/src/{worktree.h → libgit2/worktree.h} +1 -1
- data/vendor/libgit2/src/util/CMakeLists.txt +77 -0
- data/vendor/libgit2/src/{alloc.c → util/alloc.c} +69 -7
- data/vendor/libgit2/src/util/alloc.h +65 -0
- data/vendor/libgit2/src/util/allocators/debugalloc.c +73 -0
- data/vendor/libgit2/src/util/allocators/debugalloc.h +17 -0
- data/vendor/libgit2/src/util/allocators/failalloc.c +32 -0
- data/vendor/libgit2/src/util/allocators/failalloc.h +17 -0
- data/vendor/libgit2/src/util/allocators/stdalloc.c +37 -0
- data/vendor/libgit2/src/{allocators → util/allocators}/stdalloc.h +1 -1
- data/vendor/libgit2/src/util/allocators/win32_leakcheck.c +50 -0
- data/vendor/libgit2/src/{allocators → util/allocators}/win32_leakcheck.h +1 -1
- data/vendor/libgit2/src/{array.h → util/array.h} +25 -19
- data/vendor/libgit2/src/{assert_safe.h → util/assert_safe.h} +16 -0
- data/vendor/libgit2/src/{cc-compat.h → util/cc-compat.h} +5 -1
- data/vendor/libgit2/src/util/ctype_compat.h +70 -0
- data/vendor/libgit2/src/{date.c → util/date.c} +35 -33
- data/vendor/libgit2/src/util/date.h +45 -0
- data/vendor/libgit2/src/util/errors.c +401 -0
- data/vendor/libgit2/src/{errors.h → util/errors.h} +22 -19
- data/vendor/libgit2/src/{filebuf.c → util/filebuf.c} +35 -30
- data/vendor/libgit2/src/{filebuf.h → util/filebuf.h} +21 -8
- data/vendor/libgit2/src/{path.c → util/fs_path.c} +591 -615
- data/vendor/libgit2/src/{path.h → util/fs_path.h} +257 -181
- data/vendor/libgit2/src/{futils.c → util/futils.c} +144 -95
- data/vendor/libgit2/src/{futils.h → util/futils.h} +40 -18
- data/vendor/libgit2/src/{features.h.in → util/git2_features.h.in} +33 -2
- data/vendor/libgit2/src/{common.h → util/git2_util.h} +26 -59
- data/vendor/libgit2/src/util/hash/builtin.c +53 -0
- data/vendor/libgit2/src/{hash/sha1/openssl.h → util/hash/builtin.h} +6 -6
- data/vendor/libgit2/src/{hash/sha1 → util/hash}/collisiondetect.c +3 -3
- data/vendor/libgit2/src/{hash/sha1 → util/hash}/collisiondetect.h +3 -3
- data/vendor/libgit2/src/util/hash/common_crypto.c +112 -0
- data/vendor/libgit2/src/{hash/sha1 → util/hash}/common_crypto.h +11 -3
- data/vendor/libgit2/src/util/hash/mbedtls.c +92 -0
- data/vendor/libgit2/src/{hash/sha1 → util/hash}/mbedtls.h +14 -4
- data/vendor/libgit2/src/util/hash/openssl.c +347 -0
- data/vendor/libgit2/src/util/hash/openssl.h +61 -0
- data/vendor/libgit2/src/util/hash/rfc6234/sha.h +243 -0
- data/vendor/libgit2/src/util/hash/rfc6234/sha224-256.c +601 -0
- data/vendor/libgit2/src/util/hash/sha.h +73 -0
- data/vendor/libgit2/src/{hash/sha1 → util/hash}/sha1dc/sha1.c +1 -1
- data/vendor/libgit2/src/util/hash/win32.c +549 -0
- data/vendor/libgit2/src/util/hash/win32.h +60 -0
- data/vendor/libgit2/src/util/hash.c +158 -0
- data/vendor/libgit2/src/util/hash.h +61 -0
- data/vendor/libgit2/src/util/hashmap.h +424 -0
- data/vendor/libgit2/src/util/hashmap_str.h +43 -0
- data/vendor/libgit2/src/{integer.h → util/integer.h} +3 -1
- data/vendor/libgit2/src/{map.h → util/map.h} +1 -1
- data/vendor/libgit2/src/util/net.c +1160 -0
- data/vendor/libgit2/src/{net.h → util/net.h} +45 -4
- data/vendor/libgit2/src/{pool.c → util/pool.c} +1 -1
- data/vendor/libgit2/src/{pool.h → util/pool.h} +6 -1
- data/vendor/libgit2/src/{posix.c → util/posix.c} +57 -3
- data/vendor/libgit2/src/{posix.h → util/posix.h} +26 -1
- data/vendor/libgit2/src/{pqueue.h → util/pqueue.h} +3 -3
- data/vendor/libgit2/src/util/process.h +222 -0
- data/vendor/libgit2/src/util/rand.c +230 -0
- data/vendor/libgit2/src/util/rand.h +37 -0
- data/vendor/libgit2/src/{regexp.c → util/regexp.c} +5 -5
- data/vendor/libgit2/src/{regexp.h → util/regexp.h} +1 -1
- data/vendor/libgit2/src/{runtime.c → util/runtime.c} +1 -1
- data/vendor/libgit2/src/{runtime.h → util/runtime.h} +1 -1
- data/vendor/libgit2/src/{sortedcache.c → util/sortedcache.c} +15 -14
- data/vendor/libgit2/src/{sortedcache.h → util/sortedcache.h} +5 -5
- data/vendor/libgit2/src/util/staticstr.h +66 -0
- data/vendor/libgit2/src/{buffer.c → util/str.c} +159 -153
- data/vendor/libgit2/src/util/str.h +357 -0
- data/vendor/libgit2/src/util/strlist.c +108 -0
- data/vendor/libgit2/src/util/strlist.h +36 -0
- data/vendor/libgit2/src/{thread.c → util/thread.c} +1 -1
- data/vendor/libgit2/src/{thread.h → util/thread.h} +23 -22
- data/vendor/libgit2/src/{tsort.c → util/tsort.c} +1 -1
- data/vendor/libgit2/src/{unix → util/unix}/map.c +1 -3
- data/vendor/libgit2/src/{unix → util/unix}/posix.h +1 -6
- data/vendor/libgit2/src/util/unix/process.c +629 -0
- data/vendor/libgit2/src/{unix → util/unix}/realpath.c +24 -8
- data/vendor/libgit2/src/{utf8.c → util/utf8.c} +1 -1
- data/vendor/libgit2/src/{utf8.h → util/utf8.h} +1 -1
- data/vendor/libgit2/src/{util.c → util/util.c} +24 -19
- data/vendor/libgit2/src/{util.h → util/util.h} +30 -81
- data/vendor/libgit2/src/{varint.h → util/varint.h} +1 -1
- data/vendor/libgit2/src/{vector.c → util/vector.c} +3 -3
- data/vendor/libgit2/src/{vector.h → util/vector.h} +4 -4
- data/vendor/libgit2/src/{wildmatch.h → util/wildmatch.h} +1 -1
- data/vendor/libgit2/src/{win32 → util/win32}/dir.h +1 -1
- data/vendor/libgit2/src/{win32 → util/win32}/error.c +1 -1
- data/vendor/libgit2/src/{win32 → util/win32}/error.h +1 -1
- data/vendor/libgit2/src/{win32 → util/win32}/map.c +1 -1
- data/vendor/libgit2/src/{win32 → util/win32}/path_w32.c +148 -17
- data/vendor/libgit2/src/{win32 → util/win32}/path_w32.h +3 -1
- data/vendor/libgit2/src/{win32 → util/win32}/posix.h +1 -2
- data/vendor/libgit2/src/{win32 → util/win32}/posix_w32.c +42 -35
- data/vendor/libgit2/src/util/win32/precompiled.c +1 -0
- data/vendor/libgit2/src/{win32 → util/win32}/precompiled.h +1 -1
- data/vendor/libgit2/src/util/win32/process.c +506 -0
- data/vendor/libgit2/src/{win32 → util/win32}/thread.h +1 -1
- data/vendor/libgit2/src/util/win32/utf-conv.c +144 -0
- data/vendor/libgit2/src/util/win32/utf-conv.h +127 -0
- data/vendor/libgit2/src/{win32 → util/win32}/w32_buffer.c +2 -3
- data/vendor/libgit2/src/{win32 → util/win32}/w32_buffer.h +3 -4
- data/vendor/libgit2/src/{win32 → util/win32}/w32_leakcheck.c +1 -1
- data/vendor/libgit2/src/{win32 → util/win32}/w32_leakcheck.h +1 -1
- data/vendor/libgit2/src/{win32 → util/win32}/w32_util.c +1 -1
- data/vendor/libgit2/src/{win32 → util/win32}/w32_util.h +1 -1
- data/vendor/libgit2/src/{zstream.c → util/zstream.c} +5 -5
- data/vendor/libgit2/src/{zstream.h → util/zstream.h} +5 -5
- metadata +431 -362
- data/vendor/libgit2/cmake/FindIconv.cmake +0 -45
- 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/alloc.h +0 -40
- data/vendor/libgit2/src/allocators/failalloc.c +0 -92
- data/vendor/libgit2/src/allocators/failalloc.h +0 -23
- data/vendor/libgit2/src/allocators/stdalloc.c +0 -150
- data/vendor/libgit2/src/allocators/win32_leakcheck.c +0 -118
- data/vendor/libgit2/src/buffer.h +0 -374
- data/vendor/libgit2/src/commit.h +0 -46
- data/vendor/libgit2/src/config_entries.c +0 -237
- data/vendor/libgit2/src/config_entries.h +0 -24
- data/vendor/libgit2/src/config_mem.c +0 -220
- data/vendor/libgit2/src/errors.c +0 -238
- data/vendor/libgit2/src/hash/sha1/common_crypto.c +0 -57
- data/vendor/libgit2/src/hash/sha1/generic.c +0 -300
- data/vendor/libgit2/src/hash/sha1/generic.h +0 -19
- data/vendor/libgit2/src/hash/sha1/mbedtls.c +0 -46
- data/vendor/libgit2/src/hash/sha1/openssl.c +0 -59
- data/vendor/libgit2/src/hash/sha1/win32.c +0 -333
- data/vendor/libgit2/src/hash/sha1/win32.h +0 -128
- data/vendor/libgit2/src/hash/sha1.h +0 -38
- data/vendor/libgit2/src/hash.c +0 -110
- data/vendor/libgit2/src/hash.h +0 -46
- data/vendor/libgit2/src/idxmap.c +0 -157
- data/vendor/libgit2/src/idxmap.h +0 -177
- data/vendor/libgit2/src/khash.h +0 -615
- data/vendor/libgit2/src/libgit2.h +0 -15
- data/vendor/libgit2/src/message.h +0 -17
- data/vendor/libgit2/src/net.c +0 -540
- data/vendor/libgit2/src/netops.c +0 -125
- data/vendor/libgit2/src/netops.h +0 -68
- data/vendor/libgit2/src/offmap.c +0 -101
- data/vendor/libgit2/src/offmap.h +0 -133
- data/vendor/libgit2/src/oid.h +0 -51
- data/vendor/libgit2/src/oidarray.c +0 -43
- data/vendor/libgit2/src/oidmap.c +0 -107
- data/vendor/libgit2/src/oidmap.h +0 -128
- data/vendor/libgit2/src/remote.h +0 -55
- data/vendor/libgit2/src/streams/socket.c +0 -239
- data/vendor/libgit2/src/strmap.c +0 -100
- data/vendor/libgit2/src/strmap.h +0 -131
- data/vendor/libgit2/src/sysdir.c +0 -347
- data/vendor/libgit2/src/threadstate.c +0 -84
- data/vendor/libgit2/src/threadstate.h +0 -24
- data/vendor/libgit2/src/win32/findfile.c +0 -230
- data/vendor/libgit2/src/win32/findfile.h +0 -19
- data/vendor/libgit2/src/win32/utf-conv.c +0 -146
- data/vendor/libgit2/src/win32/utf-conv.h +0 -60
- /data/vendor/libgit2/{src → deps}/xdiff/xemit.h +0 -0
- /data/vendor/libgit2/{src → deps}/xdiff/xprepare.h +0 -0
- /data/vendor/libgit2/{src → deps}/xdiff/xtypes.h +0 -0
- /data/vendor/libgit2/src/{win32 → cli/win32}/precompiled.c +0 -0
- /data/vendor/libgit2/src/{attr.h → libgit2/attr.h} +0 -0
- /data/vendor/libgit2/src/{blame_git.h → libgit2/blame_git.h} +0 -0
- /data/vendor/libgit2/src/{config_parse.h → libgit2/config_parse.h} +0 -0
- /data/vendor/libgit2/src/{delta.c → libgit2/delta.c} +0 -0
- /data/vendor/libgit2/src/{delta.h → libgit2/delta.h} +0 -0
- /data/vendor/libgit2/src/{diff_file.h → libgit2/diff_file.h} +0 -0
- /data/vendor/libgit2/src/{diff_parse.h → libgit2/diff_parse.h} +0 -0
- /data/vendor/libgit2/src/{diff_tform.h → libgit2/diff_tform.h} +0 -0
- /data/vendor/libgit2/src/{fetchhead.h → libgit2/fetchhead.h} +0 -0
- /data/vendor/libgit2/src/{hashsig.c → libgit2/hashsig.c} +0 -0
- /data/vendor/libgit2/src/{indexer.h → libgit2/indexer.h} +0 -0
- /data/vendor/libgit2/src/{mailmap.h → libgit2/mailmap.h} +0 -0
- /data/vendor/libgit2/src/{merge_driver.h → libgit2/merge_driver.h} +0 -0
- /data/vendor/libgit2/src/{notes.h → libgit2/notes.h} +0 -0
- /data/vendor/libgit2/src/{object_api.c → libgit2/object_api.c} +0 -0
- /data/vendor/libgit2/src/{patch_parse.h → libgit2/patch_parse.h} +0 -0
- /data/vendor/libgit2/src/{refdb.c → libgit2/refdb.c} +0 -0
- /data/vendor/libgit2/src/{refdb.h → libgit2/refdb.h} +0 -0
- /data/vendor/libgit2/src/{repo_template.h → libgit2/repo_template.h} +0 -0
- /data/vendor/libgit2/src/{status.h → libgit2/status.h} +0 -0
- /data/vendor/libgit2/src/{stream.h → libgit2/stream.h} +0 -0
- /data/vendor/libgit2/src/{streams → libgit2/streams}/mbedtls.h +0 -0
- /data/vendor/libgit2/src/{streams → libgit2/streams}/openssl_legacy.c +0 -0
- /data/vendor/libgit2/src/{streams → libgit2/streams}/openssl_legacy.h +0 -0
- /data/vendor/libgit2/src/{streams → libgit2/streams}/registry.c +0 -0
- /data/vendor/libgit2/src/{streams → libgit2/streams}/registry.h +0 -0
- /data/vendor/libgit2/src/{streams → libgit2/streams}/stransport.h +0 -0
- /data/vendor/libgit2/src/{streams → libgit2/streams}/tls.h +0 -0
- /data/vendor/libgit2/src/{transports → libgit2/transports}/credential_helpers.c +0 -0
- /data/vendor/libgit2/src/{userdiff.h → libgit2/userdiff.h} +0 -0
- /data/vendor/libgit2/src/{bitvec.h → util/bitvec.h} +0 -0
- /data/vendor/libgit2/src/{hash/sha1 → util/hash}/sha1dc/sha1.h +0 -0
- /data/vendor/libgit2/src/{hash/sha1 → util/hash}/sha1dc/ubc_check.c +0 -0
- /data/vendor/libgit2/src/{hash/sha1 → util/hash}/sha1dc/ubc_check.h +0 -0
- /data/vendor/libgit2/src/{pqueue.c → util/pqueue.c} +0 -0
- /data/vendor/libgit2/src/{strnlen.h → util/strnlen.h} +0 -0
- /data/vendor/libgit2/src/{unix → util/unix}/pthread.h +0 -0
- /data/vendor/libgit2/src/{varint.c → util/varint.c} +0 -0
- /data/vendor/libgit2/src/{wildmatch.c → util/wildmatch.c} +0 -0
- /data/vendor/libgit2/src/{win32 → util/win32}/dir.c +0 -0
- /data/vendor/libgit2/src/{win32 → util/win32}/mingw-compat.h +0 -0
- /data/vendor/libgit2/src/{win32 → util/win32}/msvc-compat.h +0 -0
- /data/vendor/libgit2/src/{win32 → util/win32}/reparse.h +0 -0
- /data/vendor/libgit2/src/{win32 → util/win32}/thread.c +0 -0
- /data/vendor/libgit2/src/{win32 → util/win32}/version.h +0 -0
- /data/vendor/libgit2/src/{win32 → util/win32}/w32_common.h +0 -0
- /data/vendor/libgit2/src/{win32 → util/win32}/win32-compat.h +0 -0
@@ -7,11 +7,8 @@
|
|
7
7
|
|
8
8
|
#include "submodule.h"
|
9
9
|
|
10
|
-
#include "
|
11
|
-
#include "
|
12
|
-
#include "git2/types.h"
|
13
|
-
#include "git2/index.h"
|
14
|
-
#include "buffer.h"
|
10
|
+
#include "buf.h"
|
11
|
+
#include "branch.h"
|
15
12
|
#include "vector.h"
|
16
13
|
#include "posix.h"
|
17
14
|
#include "config_backend.h"
|
@@ -19,10 +16,17 @@
|
|
19
16
|
#include "repository.h"
|
20
17
|
#include "tree.h"
|
21
18
|
#include "iterator.h"
|
22
|
-
#include "
|
19
|
+
#include "fs_path.h"
|
20
|
+
#include "str.h"
|
23
21
|
#include "index.h"
|
24
22
|
#include "worktree.h"
|
25
23
|
#include "clone.h"
|
24
|
+
#include "path.h"
|
25
|
+
|
26
|
+
#include "git2/config.h"
|
27
|
+
#include "git2/sys/config.h"
|
28
|
+
#include "git2/types.h"
|
29
|
+
#include "git2/index.h"
|
26
30
|
|
27
31
|
#define GIT_MODULES_FILE ".gitmodules"
|
28
32
|
|
@@ -57,14 +61,14 @@ enum {
|
|
57
61
|
};
|
58
62
|
enum {
|
59
63
|
GITMODULES_EXISTING = 0,
|
60
|
-
GITMODULES_CREATE = 1
|
64
|
+
GITMODULES_CREATE = 1
|
61
65
|
};
|
62
66
|
|
63
67
|
static int submodule_alloc(git_submodule **out, git_repository *repo, const char *name);
|
64
68
|
static git_config_backend *open_gitmodules(git_repository *repo, int gitmod);
|
65
69
|
static int gitmodules_snapshot(git_config **snap, git_repository *repo);
|
66
|
-
static int get_url_base(
|
67
|
-
static int lookup_head_remote_key(
|
70
|
+
static int get_url_base(git_str *url, git_repository *repo);
|
71
|
+
static int lookup_head_remote_key(git_str *remote_key, git_repository *repo);
|
68
72
|
static int lookup_default_remote(git_remote **remote, git_repository *repo);
|
69
73
|
static int submodule_load_each(const git_config_entry *entry, void *payload);
|
70
74
|
static int submodule_read_config(git_submodule *sm, git_config *cfg);
|
@@ -79,11 +83,11 @@ static int submodule_cmp(const void *a, const void *b)
|
|
79
83
|
return strcmp(((git_submodule *)a)->name, ((git_submodule *)b)->name);
|
80
84
|
}
|
81
85
|
|
82
|
-
static int submodule_config_key_trunc_puts(
|
86
|
+
static int submodule_config_key_trunc_puts(git_str *key, const char *suffix)
|
83
87
|
{
|
84
|
-
ssize_t idx =
|
85
|
-
|
86
|
-
return
|
88
|
+
ssize_t idx = git_str_rfind(key, '.');
|
89
|
+
git_str_truncate(key, (size_t)(idx + 1));
|
90
|
+
return git_str_puts(key, suffix);
|
87
91
|
}
|
88
92
|
|
89
93
|
/*
|
@@ -128,7 +132,7 @@ static int is_path_occupied(bool *occupied, git_repository *repo, const char *pa
|
|
128
132
|
{
|
129
133
|
int error = 0;
|
130
134
|
git_index *index;
|
131
|
-
|
135
|
+
git_str dir = GIT_STR_INIT;
|
132
136
|
*occupied = false;
|
133
137
|
|
134
138
|
if ((error = git_repository_index__weakptr(&index, repo)) < 0)
|
@@ -143,10 +147,10 @@ static int is_path_occupied(bool *occupied, git_repository *repo, const char *pa
|
|
143
147
|
goto out;
|
144
148
|
}
|
145
149
|
|
146
|
-
if ((error =
|
150
|
+
if ((error = git_str_sets(&dir, path)) < 0)
|
147
151
|
goto out;
|
148
152
|
|
149
|
-
if ((error =
|
153
|
+
if ((error = git_fs_path_to_dir(&dir)) < 0)
|
150
154
|
goto out;
|
151
155
|
|
152
156
|
if ((error = git_index_find_prefix(NULL, index, dir.ptr)) != GIT_ENOTFOUND) {
|
@@ -161,26 +165,31 @@ static int is_path_occupied(bool *occupied, git_repository *repo, const char *pa
|
|
161
165
|
error = 0;
|
162
166
|
|
163
167
|
out:
|
164
|
-
|
168
|
+
git_str_dispose(&dir);
|
165
169
|
return error;
|
166
170
|
}
|
167
171
|
|
172
|
+
GIT_HASHMAP_STR_SETUP(git_submodule_namemap, char *);
|
173
|
+
|
168
174
|
/**
|
169
175
|
* Release the name map returned by 'load_submodule_names'.
|
170
176
|
*/
|
171
|
-
static void free_submodule_names(
|
177
|
+
static void free_submodule_names(git_submodule_namemap *names)
|
172
178
|
{
|
179
|
+
git_hashmap_iter_t iter = GIT_HASHMAP_ITER_INIT;
|
173
180
|
const char *key;
|
174
181
|
char *value;
|
175
182
|
|
176
183
|
if (names == NULL)
|
177
184
|
return;
|
178
185
|
|
179
|
-
|
180
|
-
git__free((char *)
|
186
|
+
while (git_submodule_namemap_iterate(&iter, &key, &value, names) == 0) {
|
187
|
+
git__free((char *)key);
|
181
188
|
git__free(value);
|
182
|
-
}
|
183
|
-
|
189
|
+
}
|
190
|
+
|
191
|
+
git_submodule_namemap_dispose(names);
|
192
|
+
git__free(names);
|
184
193
|
|
185
194
|
return;
|
186
195
|
}
|
@@ -190,19 +199,22 @@ static void free_submodule_names(git_strmap *names)
|
|
190
199
|
* TODO: for some use-cases, this might need case-folding on a
|
191
200
|
* case-insensitive filesystem
|
192
201
|
*/
|
193
|
-
static int load_submodule_names(
|
202
|
+
static int load_submodule_names(git_submodule_namemap **out, git_repository *repo, git_config *cfg)
|
194
203
|
{
|
195
|
-
const char *key = "submodule\\..*\\.path";
|
204
|
+
const char *key = "^submodule\\..*\\.path$";
|
205
|
+
char *value;
|
196
206
|
git_config_iterator *iter = NULL;
|
197
207
|
git_config_entry *entry;
|
198
|
-
|
199
|
-
|
208
|
+
git_str buf = GIT_STR_INIT;
|
209
|
+
git_submodule_namemap *names;
|
200
210
|
int isvalid, error;
|
201
211
|
|
202
212
|
*out = NULL;
|
203
213
|
|
204
|
-
if ((
|
214
|
+
if ((names = git__calloc(1, sizeof(git_submodule_namemap))) == NULL) {
|
215
|
+
error = -1;
|
205
216
|
goto out;
|
217
|
+
}
|
206
218
|
|
207
219
|
if ((error = git_config_iterator_glob_new(&iter, cfg, key)) < 0)
|
208
220
|
goto out;
|
@@ -212,15 +224,15 @@ static int load_submodule_names(git_strmap **out, git_repository *repo, git_conf
|
|
212
224
|
fdot = strchr(entry->name, '.');
|
213
225
|
ldot = strrchr(entry->name, '.');
|
214
226
|
|
215
|
-
if (
|
227
|
+
if (git_submodule_namemap_contains(names, entry->value)) {
|
216
228
|
git_error_set(GIT_ERROR_SUBMODULE,
|
217
229
|
"duplicated submodule path '%s'", entry->value);
|
218
230
|
error = -1;
|
219
231
|
goto out;
|
220
232
|
}
|
221
233
|
|
222
|
-
|
223
|
-
|
234
|
+
git_str_clear(&buf);
|
235
|
+
git_str_put(&buf, fdot + 1, ldot - fdot - 1);
|
224
236
|
isvalid = git_submodule_name_is_valid(repo, buf.ptr, 0);
|
225
237
|
if (isvalid < 0) {
|
226
238
|
error = isvalid;
|
@@ -229,7 +241,12 @@ static int load_submodule_names(git_strmap **out, git_repository *repo, git_conf
|
|
229
241
|
if (!isvalid)
|
230
242
|
continue;
|
231
243
|
|
232
|
-
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) {
|
233
250
|
git_error_set(GIT_ERROR_NOMEMORY, "error inserting submodule into hash table");
|
234
251
|
error = -1;
|
235
252
|
goto out;
|
@@ -243,36 +260,48 @@ static int load_submodule_names(git_strmap **out, git_repository *repo, git_conf
|
|
243
260
|
|
244
261
|
out:
|
245
262
|
free_submodule_names(names);
|
246
|
-
|
263
|
+
git_str_dispose(&buf);
|
247
264
|
git_config_iterator_free(iter);
|
248
265
|
return error;
|
249
266
|
}
|
250
267
|
|
251
|
-
|
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)
|
252
273
|
{
|
274
|
+
git_submodule_cache *cache = NULL;
|
253
275
|
int error = 0;
|
254
|
-
|
276
|
+
|
255
277
|
GIT_ASSERT_ARG(out);
|
256
278
|
GIT_ASSERT_ARG(repo);
|
257
|
-
|
258
|
-
|
259
|
-
|
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) {
|
260
284
|
git_submodule_cache_free(cache);
|
261
285
|
return error;
|
262
286
|
}
|
287
|
+
|
263
288
|
*out = cache;
|
264
289
|
return error;
|
265
290
|
}
|
266
291
|
|
267
|
-
int git_submodule_cache_free(
|
292
|
+
int git_submodule_cache_free(git_submodule_cache *cache)
|
268
293
|
{
|
269
294
|
git_submodule *sm = NULL;
|
295
|
+
git_hashmap_iter_t iter = GIT_HASHMAP_ITER_INIT;
|
296
|
+
|
270
297
|
if (cache == NULL)
|
271
298
|
return 0;
|
272
|
-
|
299
|
+
|
300
|
+
while (git_submodule_cache_iterate(&iter, NULL, &sm, cache) == 0)
|
273
301
|
git_submodule_free(sm);
|
274
|
-
|
275
|
-
|
302
|
+
|
303
|
+
git_submodule_cache_dispose(cache);
|
304
|
+
git__free(cache);
|
276
305
|
return 0;
|
277
306
|
}
|
278
307
|
|
@@ -288,7 +317,7 @@ int git_submodule__lookup_with_cache(
|
|
288
317
|
git_submodule **out, /* NULL if user only wants to test existence */
|
289
318
|
git_repository *repo,
|
290
319
|
const char *name, /* trailing slash is allowed */
|
291
|
-
|
320
|
+
git_submodule_cache *cache)
|
292
321
|
{
|
293
322
|
int error;
|
294
323
|
unsigned int location;
|
@@ -303,7 +332,7 @@ int git_submodule__lookup_with_cache(
|
|
303
332
|
}
|
304
333
|
|
305
334
|
if (cache != NULL) {
|
306
|
-
if ((sm
|
335
|
+
if (git_submodule_cache_get(&sm, cache, name) == 0) {
|
307
336
|
if (out) {
|
308
337
|
*out = sm;
|
309
338
|
GIT_REFCOUNT_INC(*out);
|
@@ -328,11 +357,11 @@ int git_submodule__lookup_with_cache(
|
|
328
357
|
/* If it's not configured or we're looking by path */
|
329
358
|
if (location == 0 || location == GIT_SUBMODULE_STATUS_IN_WD) {
|
330
359
|
git_config_backend *mods;
|
331
|
-
const char *pattern = "submodule\\..*\\.path";
|
332
|
-
|
360
|
+
const char *pattern = "^submodule\\..*\\.path$";
|
361
|
+
git_str path = GIT_STR_INIT;
|
333
362
|
fbp_data data = { NULL, NULL };
|
334
363
|
|
335
|
-
|
364
|
+
git_str_puts(&path, name);
|
336
365
|
while (path.ptr[path.size-1] == '/') {
|
337
366
|
path.ptr[--path.size] = '\0';
|
338
367
|
}
|
@@ -347,14 +376,14 @@ int git_submodule__lookup_with_cache(
|
|
347
376
|
|
348
377
|
if (error < 0) {
|
349
378
|
git_submodule_free(sm);
|
350
|
-
|
379
|
+
git_str_dispose(&path);
|
351
380
|
return error;
|
352
381
|
}
|
353
382
|
|
354
383
|
if (data.name) {
|
355
384
|
git__free(sm->name);
|
356
385
|
sm->name = data.name;
|
357
|
-
sm->path =
|
386
|
+
sm->path = git_str_detach(&path);
|
358
387
|
|
359
388
|
/* Try to load again with the right name */
|
360
389
|
if ((error = git_submodule_reload(sm, false)) < 0) {
|
@@ -363,7 +392,7 @@ int git_submodule__lookup_with_cache(
|
|
363
392
|
}
|
364
393
|
}
|
365
394
|
|
366
|
-
|
395
|
+
git_str_dispose(&path);
|
367
396
|
}
|
368
397
|
|
369
398
|
if ((error = git_submodule_location(&location, sm)) < 0) {
|
@@ -378,17 +407,17 @@ int git_submodule__lookup_with_cache(
|
|
378
407
|
|
379
408
|
/* If it's not configured, we still check if there's a repo at the path */
|
380
409
|
if (git_repository_workdir(repo)) {
|
381
|
-
|
382
|
-
if (
|
410
|
+
git_str path = GIT_STR_INIT;
|
411
|
+
if (git_str_join3(&path, '/',
|
383
412
|
git_repository_workdir(repo),
|
384
413
|
name, DOT_GIT) < 0 ||
|
385
|
-
|
414
|
+
git_path_validate_str_length(NULL, &path) < 0)
|
386
415
|
return -1;
|
387
416
|
|
388
|
-
if (
|
417
|
+
if (git_fs_path_exists(path.ptr))
|
389
418
|
error = GIT_EEXISTS;
|
390
419
|
|
391
|
-
|
420
|
+
git_str_dispose(&path);
|
392
421
|
}
|
393
422
|
|
394
423
|
submodule_set_lookup_error(error, name);
|
@@ -405,22 +434,22 @@ int git_submodule__lookup_with_cache(
|
|
405
434
|
|
406
435
|
int git_submodule_name_is_valid(git_repository *repo, const char *name, int flags)
|
407
436
|
{
|
408
|
-
|
437
|
+
git_str buf = GIT_STR_INIT;
|
409
438
|
int error, isvalid;
|
410
439
|
|
411
440
|
if (flags == 0)
|
412
|
-
flags =
|
441
|
+
flags = GIT_FS_PATH_REJECT_FILESYSTEM_DEFAULTS;
|
413
442
|
|
414
443
|
/* Avoid allocating a new string if we can avoid it */
|
415
444
|
if (strchr(name, '\\') != NULL) {
|
416
|
-
if ((error =
|
445
|
+
if ((error = git_fs_path_normalize_slashes(&buf, name)) < 0)
|
417
446
|
return error;
|
418
447
|
} else {
|
419
|
-
|
448
|
+
git_str_attach_notowned(&buf, name, strlen(name));
|
420
449
|
}
|
421
450
|
|
422
|
-
isvalid =
|
423
|
-
|
451
|
+
isvalid = git_path_is_valid(repo, buf.ptr, 0, flags);
|
452
|
+
git_str_dispose(&buf);
|
424
453
|
|
425
454
|
return isvalid;
|
426
455
|
}
|
@@ -430,19 +459,23 @@ static void submodule_free_dup(void *sm)
|
|
430
459
|
git_submodule_free(sm);
|
431
460
|
}
|
432
461
|
|
433
|
-
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)
|
434
467
|
{
|
435
468
|
git_submodule *sm = NULL;
|
436
469
|
int error;
|
437
470
|
|
438
|
-
if ((sm
|
471
|
+
if (git_submodule_cache_get(&sm, cache, name) == 0)
|
439
472
|
goto done;
|
440
473
|
|
441
474
|
/* if the submodule doesn't exist yet in the map, create it */
|
442
475
|
if ((error = submodule_alloc(&sm, repo, name)) < 0)
|
443
476
|
return error;
|
444
477
|
|
445
|
-
if ((error =
|
478
|
+
if ((error = git_submodule_cache_put(cache, sm->name, sm)) < 0) {
|
446
479
|
git_submodule_free(sm);
|
447
480
|
return error;
|
448
481
|
}
|
@@ -453,12 +486,15 @@ done:
|
|
453
486
|
return 0;
|
454
487
|
}
|
455
488
|
|
456
|
-
static int submodules_from_index(
|
489
|
+
static int submodules_from_index(
|
490
|
+
git_submodule_cache *cache,
|
491
|
+
git_index *idx,
|
492
|
+
git_config *cfg)
|
457
493
|
{
|
458
494
|
int error;
|
459
495
|
git_iterator *i = NULL;
|
460
496
|
const git_index_entry *entry;
|
461
|
-
|
497
|
+
git_submodule_namemap *names;
|
462
498
|
|
463
499
|
if ((error = load_submodule_names(&names, git_index_owner(idx), cfg)))
|
464
500
|
goto done;
|
@@ -469,7 +505,7 @@ static int submodules_from_index(git_strmap *map, git_index *idx, git_config *cf
|
|
469
505
|
while (!(error = git_iterator_advance(&entry, i))) {
|
470
506
|
git_submodule *sm;
|
471
507
|
|
472
|
-
if ((sm
|
508
|
+
if (git_submodule_cache_get(&sm, cache, entry->path) == 0) {
|
473
509
|
if (S_ISGITLINK(entry->mode))
|
474
510
|
submodule_update_from_index_entry(sm, entry);
|
475
511
|
else
|
@@ -477,10 +513,10 @@ static int submodules_from_index(git_strmap *map, git_index *idx, git_config *cf
|
|
477
513
|
} else if (S_ISGITLINK(entry->mode)) {
|
478
514
|
const char *name;
|
479
515
|
|
480
|
-
if ((name
|
516
|
+
if (git_submodule_namemap_get((char **)&name, names, entry->path) != 0)
|
481
517
|
name = entry->path;
|
482
518
|
|
483
|
-
if (!submodule_get_or_create(&sm, git_index_owner(idx),
|
519
|
+
if (!submodule_get_or_create(&sm, git_index_owner(idx), cache, name)) {
|
484
520
|
submodule_update_from_index_entry(sm, entry);
|
485
521
|
git_submodule_free(sm);
|
486
522
|
}
|
@@ -497,12 +533,15 @@ done:
|
|
497
533
|
return error;
|
498
534
|
}
|
499
535
|
|
500
|
-
static int submodules_from_head(
|
536
|
+
static int submodules_from_head(
|
537
|
+
git_submodule_cache *cache,
|
538
|
+
git_tree *head,
|
539
|
+
git_config *cfg)
|
501
540
|
{
|
502
541
|
int error;
|
503
542
|
git_iterator *i = NULL;
|
504
543
|
const git_index_entry *entry;
|
505
|
-
|
544
|
+
git_submodule_namemap *names;
|
506
545
|
|
507
546
|
if ((error = load_submodule_names(&names, git_tree_owner(head), cfg)))
|
508
547
|
goto done;
|
@@ -513,7 +552,7 @@ static int submodules_from_head(git_strmap *map, git_tree *head, git_config *cfg
|
|
513
552
|
while (!(error = git_iterator_advance(&entry, i))) {
|
514
553
|
git_submodule *sm;
|
515
554
|
|
516
|
-
if ((sm
|
555
|
+
if (git_submodule_cache_get(&sm, cache, entry->path) == 0) {
|
517
556
|
if (S_ISGITLINK(entry->mode))
|
518
557
|
submodule_update_from_head_data(sm, entry->mode, &entry->id);
|
519
558
|
else
|
@@ -521,10 +560,10 @@ static int submodules_from_head(git_strmap *map, git_tree *head, git_config *cfg
|
|
521
560
|
} else if (S_ISGITLINK(entry->mode)) {
|
522
561
|
const char *name;
|
523
562
|
|
524
|
-
if ((name
|
563
|
+
if (git_submodule_namemap_get((char **)&name, names, entry->path) != 0)
|
525
564
|
name = entry->path;
|
526
565
|
|
527
|
-
if (!submodule_get_or_create(&sm, git_tree_owner(head),
|
566
|
+
if (!submodule_get_or_create(&sm, git_tree_owner(head), cache, name)) {
|
528
567
|
submodule_update_from_head_data(
|
529
568
|
sm, entry->mode, &entry->id);
|
530
569
|
git_submodule_free(sm);
|
@@ -545,22 +584,22 @@ done:
|
|
545
584
|
/* If have_sm is true, sm is populated, otherwise map an repo are. */
|
546
585
|
typedef struct {
|
547
586
|
git_config *mods;
|
548
|
-
|
587
|
+
git_submodule_cache *cache;
|
549
588
|
git_repository *repo;
|
550
589
|
} lfc_data;
|
551
590
|
|
552
|
-
int git_submodule__map(
|
591
|
+
int git_submodule__map(git_submodule_cache *cache, git_repository *repo)
|
553
592
|
{
|
554
593
|
int error = 0;
|
555
594
|
git_index *idx = NULL;
|
556
595
|
git_tree *head = NULL;
|
557
|
-
|
596
|
+
git_str path = GIT_STR_INIT;
|
558
597
|
git_submodule *sm;
|
559
598
|
git_config *mods = NULL;
|
560
599
|
bool has_workdir;
|
561
600
|
|
601
|
+
GIT_ASSERT_ARG(cache);
|
562
602
|
GIT_ASSERT_ARG(repo);
|
563
|
-
GIT_ASSERT_ARG(map);
|
564
603
|
|
565
604
|
/* get sources that we will need to check */
|
566
605
|
if (git_repository_index(&idx, repo) < 0)
|
@@ -577,7 +616,7 @@ int git_submodule__map(git_repository *repo, git_strmap *map)
|
|
577
616
|
/* add submodule information from .gitmodules */
|
578
617
|
if (has_workdir) {
|
579
618
|
lfc_data data = { 0 };
|
580
|
-
data.
|
619
|
+
data.cache = cache;
|
581
620
|
data.repo = repo;
|
582
621
|
|
583
622
|
if ((error = gitmodules_snapshot(&mods, repo)) < 0) {
|
@@ -593,19 +632,22 @@ int git_submodule__map(git_repository *repo, git_strmap *map)
|
|
593
632
|
}
|
594
633
|
/* add back submodule information from index */
|
595
634
|
if (mods && idx) {
|
596
|
-
if ((error = submodules_from_index(
|
635
|
+
if ((error = submodules_from_index(cache, idx, mods)) < 0)
|
597
636
|
goto cleanup;
|
598
637
|
}
|
599
638
|
/* add submodule information from HEAD */
|
600
639
|
if (mods && head) {
|
601
|
-
if ((error = submodules_from_head(
|
640
|
+
if ((error = submodules_from_head(cache, head, mods)) < 0)
|
602
641
|
goto cleanup;
|
603
642
|
}
|
604
643
|
/* shallow scan submodules in work tree as needed */
|
605
644
|
if (has_workdir) {
|
606
|
-
|
607
|
-
|
608
|
-
|
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
|
+
}
|
609
651
|
}
|
610
652
|
|
611
653
|
cleanup:
|
@@ -613,7 +655,7 @@ cleanup:
|
|
613
655
|
/* TODO: if we got an error, mark submodule config as invalid? */
|
614
656
|
git_index_free(idx);
|
615
657
|
git_tree_free(head);
|
616
|
-
|
658
|
+
git_str_dispose(&path);
|
617
659
|
return error;
|
618
660
|
}
|
619
661
|
|
@@ -623,8 +665,9 @@ int git_submodule_foreach(
|
|
623
665
|
void *payload)
|
624
666
|
{
|
625
667
|
git_vector snapshot = GIT_VECTOR_INIT;
|
626
|
-
|
668
|
+
git_submodule_cache *submodules;
|
627
669
|
git_submodule *sm;
|
670
|
+
git_hashmap_iter_t iter;
|
628
671
|
int error;
|
629
672
|
size_t i;
|
630
673
|
|
@@ -633,20 +676,22 @@ int git_submodule_foreach(
|
|
633
676
|
return -1;
|
634
677
|
}
|
635
678
|
|
636
|
-
if ((
|
637
|
-
return
|
679
|
+
if ((submodules = git__calloc(1, sizeof(git_submodule_cache))) == NULL)
|
680
|
+
return -1;
|
638
681
|
|
639
|
-
if ((error = git_submodule__map(
|
682
|
+
if ((error = git_submodule__map(submodules, repo)) < 0)
|
640
683
|
goto done;
|
641
684
|
|
642
|
-
if (!(error = git_vector_init(
|
643
|
-
|
644
|
-
|
645
|
-
|
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; ) {
|
646
690
|
if ((error = git_vector_insert(&snapshot, sm)) < 0)
|
647
691
|
break;
|
692
|
+
|
648
693
|
GIT_REFCOUNT_INC(sm);
|
649
|
-
}
|
694
|
+
}
|
650
695
|
}
|
651
696
|
|
652
697
|
if (error < 0)
|
@@ -664,12 +709,14 @@ int git_submodule_foreach(
|
|
664
709
|
done:
|
665
710
|
git_vector_foreach(&snapshot, i, sm)
|
666
711
|
git_submodule_free(sm);
|
667
|
-
|
712
|
+
git_vector_dispose(&snapshot);
|
668
713
|
|
669
|
-
|
714
|
+
for (iter = GIT_HASHMAP_ITER_INIT;
|
715
|
+
git_submodule_cache_iterate(&iter, NULL, &sm, submodules) == 0; )
|
670
716
|
git_submodule_free(sm);
|
671
|
-
|
672
|
-
|
717
|
+
|
718
|
+
git_submodule_cache_dispose(submodules);
|
719
|
+
git__free(submodules);
|
673
720
|
|
674
721
|
return error;
|
675
722
|
}
|
@@ -682,7 +729,7 @@ static int submodule_repo_init(
|
|
682
729
|
bool use_gitlink)
|
683
730
|
{
|
684
731
|
int error = 0;
|
685
|
-
|
732
|
+
git_str workdir = GIT_STR_INIT, repodir = GIT_STR_INIT;
|
686
733
|
git_repository_init_options initopt = GIT_REPOSITORY_INIT_OPTIONS_INIT;
|
687
734
|
git_repository *subrepo = NULL;
|
688
735
|
|
@@ -701,10 +748,10 @@ static int submodule_repo_init(
|
|
701
748
|
* Old style: sub-repo goes directly into repo/<name>/.git/
|
702
749
|
*/
|
703
750
|
if (use_gitlink) {
|
704
|
-
error =
|
751
|
+
error = git_repository__item_path(&repodir, parent_repo, GIT_REPOSITORY_ITEM_MODULES);
|
705
752
|
if (error < 0)
|
706
753
|
goto cleanup;
|
707
|
-
error =
|
754
|
+
error = git_str_joinpath(&repodir, repodir.ptr, path);
|
708
755
|
if (error < 0)
|
709
756
|
goto cleanup;
|
710
757
|
|
@@ -718,14 +765,57 @@ static int submodule_repo_init(
|
|
718
765
|
error = git_repository_init_ext(&subrepo, workdir.ptr, &initopt);
|
719
766
|
|
720
767
|
cleanup:
|
721
|
-
|
722
|
-
|
768
|
+
git_str_dispose(&workdir);
|
769
|
+
git_str_dispose(&repodir);
|
723
770
|
|
724
771
|
*out = subrepo;
|
725
772
|
|
726
773
|
return error;
|
727
774
|
}
|
728
775
|
|
776
|
+
static int git_submodule__resolve_url(
|
777
|
+
git_str *out,
|
778
|
+
git_repository *repo,
|
779
|
+
const char *url)
|
780
|
+
{
|
781
|
+
int error = 0;
|
782
|
+
git_str normalized = GIT_STR_INIT;
|
783
|
+
|
784
|
+
GIT_ASSERT_ARG(out);
|
785
|
+
GIT_ASSERT_ARG(repo);
|
786
|
+
GIT_ASSERT_ARG(url);
|
787
|
+
|
788
|
+
/* We do this in all platforms in case someone on Windows created the .gitmodules */
|
789
|
+
if (strchr(url, '\\')) {
|
790
|
+
if ((error = git_fs_path_normalize_slashes(&normalized, url)) < 0)
|
791
|
+
return error;
|
792
|
+
|
793
|
+
url = normalized.ptr;
|
794
|
+
}
|
795
|
+
|
796
|
+
|
797
|
+
if (git_fs_path_is_relative(url)) {
|
798
|
+
if (!(error = get_url_base(out, repo)))
|
799
|
+
error = git_fs_path_apply_relative(out, url);
|
800
|
+
} else if (strchr(url, ':') != NULL || url[0] == '/') {
|
801
|
+
error = git_str_sets(out, url);
|
802
|
+
} else {
|
803
|
+
git_error_set(GIT_ERROR_SUBMODULE, "invalid format for submodule URL");
|
804
|
+
error = -1;
|
805
|
+
}
|
806
|
+
|
807
|
+
git_str_dispose(&normalized);
|
808
|
+
return error;
|
809
|
+
}
|
810
|
+
|
811
|
+
int git_submodule_resolve_url(
|
812
|
+
git_buf *out,
|
813
|
+
git_repository *repo,
|
814
|
+
const char *url)
|
815
|
+
{
|
816
|
+
GIT_BUF_WRAP_PRIVATE(out, git_submodule__resolve_url, repo, url);
|
817
|
+
}
|
818
|
+
|
729
819
|
int git_submodule_add_setup(
|
730
820
|
git_submodule **out,
|
731
821
|
git_repository *repo,
|
@@ -736,7 +826,7 @@ int git_submodule_add_setup(
|
|
736
826
|
int error = 0;
|
737
827
|
git_config_backend *mods = NULL;
|
738
828
|
git_submodule *sm = NULL;
|
739
|
-
|
829
|
+
git_str name = GIT_STR_INIT, real_url = GIT_STR_INIT;
|
740
830
|
git_repository *subrepo = NULL;
|
741
831
|
bool path_occupied;
|
742
832
|
|
@@ -759,7 +849,7 @@ int git_submodule_add_setup(
|
|
759
849
|
if (git__prefixcmp(path, git_repository_workdir(repo)) == 0)
|
760
850
|
path += strlen(git_repository_workdir(repo));
|
761
851
|
|
762
|
-
if (
|
852
|
+
if (git_fs_path_root(path) >= 0) {
|
763
853
|
git_error_set(GIT_ERROR_SUBMODULE, "submodule path must be a relative path");
|
764
854
|
error = -1;
|
765
855
|
goto cleanup;
|
@@ -781,7 +871,7 @@ int git_submodule_add_setup(
|
|
781
871
|
return -1;
|
782
872
|
}
|
783
873
|
|
784
|
-
if ((error =
|
874
|
+
if ((error = git_str_printf(&name, "submodule.%s.path", path)) < 0 ||
|
785
875
|
(error = git_config_backend_set_string(mods, name.ptr, path)) < 0)
|
786
876
|
goto cleanup;
|
787
877
|
|
@@ -789,7 +879,7 @@ int git_submodule_add_setup(
|
|
789
879
|
(error = git_config_backend_set_string(mods, name.ptr, url)) < 0)
|
790
880
|
goto cleanup;
|
791
881
|
|
792
|
-
|
882
|
+
git_str_clear(&name);
|
793
883
|
|
794
884
|
/* init submodule repository and add origin remote as needed */
|
795
885
|
|
@@ -800,11 +890,11 @@ int git_submodule_add_setup(
|
|
800
890
|
/* if the repo does not already exist, then init a new repo and add it.
|
801
891
|
* Otherwise, just add the existing repo.
|
802
892
|
*/
|
803
|
-
if (!(
|
804
|
-
|
893
|
+
if (!(git_fs_path_exists(name.ptr) &&
|
894
|
+
git_fs_path_contains(&name, DOT_GIT))) {
|
805
895
|
|
806
896
|
/* resolve the actual URL to use */
|
807
|
-
if ((error =
|
897
|
+
if ((error = git_submodule__resolve_url(&real_url, repo, url)) < 0)
|
808
898
|
goto cleanup;
|
809
899
|
|
810
900
|
if ((error = submodule_repo_init(&subrepo, repo, path, real_url.ptr, use_gitlink)) < 0)
|
@@ -826,8 +916,8 @@ cleanup:
|
|
826
916
|
|
827
917
|
git_config_backend_free(mods);
|
828
918
|
git_repository_free(subrepo);
|
829
|
-
|
830
|
-
|
919
|
+
git_str_dispose(&real_url);
|
920
|
+
git_str_dispose(&name);
|
831
921
|
|
832
922
|
return error;
|
833
923
|
}
|
@@ -841,13 +931,13 @@ int git_submodule_repo_init(
|
|
841
931
|
git_repository *sub_repo = NULL;
|
842
932
|
const char *configured_url;
|
843
933
|
git_config *cfg = NULL;
|
844
|
-
|
934
|
+
git_str buf = GIT_STR_INIT;
|
845
935
|
|
846
936
|
GIT_ASSERT_ARG(out);
|
847
937
|
GIT_ASSERT_ARG(sm);
|
848
938
|
|
849
939
|
/* get the configured remote url of the submodule */
|
850
|
-
if ((error =
|
940
|
+
if ((error = git_str_printf(&buf, "submodule.%s.url", sm->name)) < 0 ||
|
851
941
|
(error = git_repository_config_snapshot(&cfg, sm->repo)) < 0 ||
|
852
942
|
(error = git_config_get_string(&configured_url, cfg, buf.ptr)) < 0 ||
|
853
943
|
(error = submodule_repo_init(&sub_repo, sm->repo, sm->path, configured_url, use_gitlink)) < 0)
|
@@ -857,7 +947,7 @@ int git_submodule_repo_init(
|
|
857
947
|
|
858
948
|
done:
|
859
949
|
git_config_free(cfg);
|
860
|
-
|
950
|
+
git_str_dispose(&buf);
|
861
951
|
return error;
|
862
952
|
}
|
863
953
|
|
@@ -881,7 +971,7 @@ int git_submodule_clone(git_repository **out, git_submodule *submodule, const gi
|
|
881
971
|
{
|
882
972
|
int error;
|
883
973
|
git_repository *clone;
|
884
|
-
|
974
|
+
git_str rel_path = GIT_STR_INIT;
|
885
975
|
git_submodule_update_options sub_opts = GIT_SUBMODULE_UPDATE_OPTIONS_INIT;
|
886
976
|
git_clone_options opts = GIT_CLONE_OPTIONS_INIT;
|
887
977
|
|
@@ -903,7 +993,7 @@ int git_submodule_clone(git_repository **out, git_submodule *submodule, const gi
|
|
903
993
|
if (error < 0)
|
904
994
|
goto cleanup;
|
905
995
|
|
906
|
-
error = git_clone__submodule(&clone, git_submodule_url(submodule),
|
996
|
+
error = git_clone__submodule(&clone, git_submodule_url(submodule), git_str_cstr(&rel_path), &opts);
|
907
997
|
if (error < 0)
|
908
998
|
goto cleanup;
|
909
999
|
|
@@ -913,7 +1003,7 @@ int git_submodule_clone(git_repository **out, git_submodule *submodule, const gi
|
|
913
1003
|
*out = clone;
|
914
1004
|
|
915
1005
|
cleanup:
|
916
|
-
|
1006
|
+
git_str_dispose(&rel_path);
|
917
1007
|
|
918
1008
|
return error;
|
919
1009
|
}
|
@@ -937,7 +1027,7 @@ int git_submodule_add_to_index(git_submodule *sm, int write_index)
|
|
937
1027
|
int error;
|
938
1028
|
git_repository *sm_repo = NULL;
|
939
1029
|
git_index *index;
|
940
|
-
|
1030
|
+
git_str path = GIT_STR_INIT;
|
941
1031
|
git_commit *head;
|
942
1032
|
git_index_entry entry;
|
943
1033
|
struct stat st;
|
@@ -997,7 +1087,7 @@ int git_submodule_add_to_index(git_submodule *sm, int write_index)
|
|
997
1087
|
|
998
1088
|
cleanup:
|
999
1089
|
git_repository_free(sm_repo);
|
1000
|
-
|
1090
|
+
git_str_dispose(&path);
|
1001
1091
|
return error;
|
1002
1092
|
}
|
1003
1093
|
|
@@ -1034,44 +1124,9 @@ const char *git_submodule_url(git_submodule *submodule)
|
|
1034
1124
|
return submodule->url;
|
1035
1125
|
}
|
1036
1126
|
|
1037
|
-
int git_submodule_resolve_url(git_buf *out, git_repository *repo, const char *url)
|
1038
|
-
{
|
1039
|
-
int error = 0;
|
1040
|
-
git_buf normalized = GIT_BUF_INIT;
|
1041
|
-
|
1042
|
-
GIT_ASSERT_ARG(out);
|
1043
|
-
GIT_ASSERT_ARG(repo);
|
1044
|
-
GIT_ASSERT_ARG(url);
|
1045
|
-
|
1046
|
-
if ((error = git_buf_sanitize(out)) < 0)
|
1047
|
-
return error;
|
1048
|
-
|
1049
|
-
/* We do this in all platforms in case someone on Windows created the .gitmodules */
|
1050
|
-
if (strchr(url, '\\')) {
|
1051
|
-
if ((error = git_path_normalize_slashes(&normalized, url)) < 0)
|
1052
|
-
return error;
|
1053
|
-
|
1054
|
-
url = normalized.ptr;
|
1055
|
-
}
|
1056
|
-
|
1057
|
-
|
1058
|
-
if (git_path_is_relative(url)) {
|
1059
|
-
if (!(error = get_url_base(out, repo)))
|
1060
|
-
error = git_path_apply_relative(out, url);
|
1061
|
-
} else if (strchr(url, ':') != NULL || url[0] == '/') {
|
1062
|
-
error = git_buf_sets(out, url);
|
1063
|
-
} else {
|
1064
|
-
git_error_set(GIT_ERROR_SUBMODULE, "invalid format for submodule URL");
|
1065
|
-
error = -1;
|
1066
|
-
}
|
1067
|
-
|
1068
|
-
git_buf_dispose(&normalized);
|
1069
|
-
return error;
|
1070
|
-
}
|
1071
|
-
|
1072
1127
|
static int write_var(git_repository *repo, const char *name, const char *var, const char *val)
|
1073
1128
|
{
|
1074
|
-
|
1129
|
+
git_str key = GIT_STR_INIT;
|
1075
1130
|
git_config_backend *mods;
|
1076
1131
|
int error;
|
1077
1132
|
|
@@ -1079,7 +1134,7 @@ static int write_var(git_repository *repo, const char *name, const char *var, co
|
|
1079
1134
|
if (!mods)
|
1080
1135
|
return -1;
|
1081
1136
|
|
1082
|
-
if ((error =
|
1137
|
+
if ((error = git_str_printf(&key, "submodule.%s.%s", name, var)) < 0)
|
1083
1138
|
goto cleanup;
|
1084
1139
|
|
1085
1140
|
if (val)
|
@@ -1087,7 +1142,7 @@ static int write_var(git_repository *repo, const char *name, const char *var, co
|
|
1087
1142
|
else
|
1088
1143
|
error = git_config_backend_delete(mods, key.ptr);
|
1089
1144
|
|
1090
|
-
|
1145
|
+
git_str_dispose(&key);
|
1091
1146
|
|
1092
1147
|
cleanup:
|
1093
1148
|
git_config_backend_free(mods);
|
@@ -1227,7 +1282,7 @@ static int submodule_repo_create(
|
|
1227
1282
|
const char *path)
|
1228
1283
|
{
|
1229
1284
|
int error = 0;
|
1230
|
-
|
1285
|
+
git_str workdir = GIT_STR_INIT, repodir = GIT_STR_INIT;
|
1231
1286
|
git_repository_init_options initopt = GIT_REPOSITORY_INIT_OPTIONS_INIT;
|
1232
1287
|
git_repository *subrepo = NULL;
|
1233
1288
|
|
@@ -1249,18 +1304,18 @@ static int submodule_repo_create(
|
|
1249
1304
|
* <repo-dir>/modules/<name>/ with a gitlink in the
|
1250
1305
|
* sub-repo workdir directory to that repository.
|
1251
1306
|
*/
|
1252
|
-
error =
|
1307
|
+
error = git_repository__item_path(&repodir, parent_repo, GIT_REPOSITORY_ITEM_MODULES);
|
1253
1308
|
if (error < 0)
|
1254
1309
|
goto cleanup;
|
1255
|
-
error =
|
1310
|
+
error = git_str_joinpath(&repodir, repodir.ptr, path);
|
1256
1311
|
if (error < 0)
|
1257
1312
|
goto cleanup;
|
1258
1313
|
|
1259
1314
|
error = git_repository_init_ext(&subrepo, repodir.ptr, &initopt);
|
1260
1315
|
|
1261
1316
|
cleanup:
|
1262
|
-
|
1263
|
-
|
1317
|
+
git_str_dispose(&workdir);
|
1318
|
+
git_str_dispose(&repodir);
|
1264
1319
|
|
1265
1320
|
*out = subrepo;
|
1266
1321
|
|
@@ -1309,7 +1364,7 @@ int git_submodule_update(git_submodule *sm, int init, git_submodule_update_optio
|
|
1309
1364
|
git_repository *sub_repo = NULL;
|
1310
1365
|
git_remote *remote = NULL;
|
1311
1366
|
git_object *target_commit = NULL;
|
1312
|
-
|
1367
|
+
git_str buf = GIT_STR_INIT;
|
1313
1368
|
git_submodule_update_options update_options = GIT_SUBMODULE_UPDATE_OPTIONS_INIT;
|
1314
1369
|
git_clone_options clone_options = GIT_CLONE_OPTIONS_INIT;
|
1315
1370
|
|
@@ -1327,6 +1382,10 @@ int git_submodule_update(git_submodule *sm, int init, git_submodule_update_optio
|
|
1327
1382
|
if ((error = git_submodule_status(&submodule_status, sm->repo, sm->name, GIT_SUBMODULE_IGNORE_UNSPECIFIED)) < 0)
|
1328
1383
|
goto done;
|
1329
1384
|
|
1385
|
+
/* If the submodule is configured but hasn't been added, skip it */
|
1386
|
+
if (submodule_status == GIT_SUBMODULE_STATUS_IN_CONFIG)
|
1387
|
+
goto done;
|
1388
|
+
|
1330
1389
|
/*
|
1331
1390
|
* If submodule work dir is not already initialized, check to see
|
1332
1391
|
* what we need to do (initialize, clone, return error...)
|
@@ -1337,10 +1396,10 @@ int git_submodule_update(git_submodule *sm, int init, git_submodule_update_optio
|
|
1337
1396
|
* info has been copied into .git/config
|
1338
1397
|
*/
|
1339
1398
|
if ((error = git_repository_config_snapshot(&config, sm->repo)) < 0 ||
|
1340
|
-
(error =
|
1399
|
+
(error = git_str_printf(&buf, "submodule.%s.url", git_submodule_name(sm))) < 0)
|
1341
1400
|
goto done;
|
1342
1401
|
|
1343
|
-
if ((error = git_config_get_string(&submodule_url, config,
|
1402
|
+
if ((error = git_config_get_string(&submodule_url, config, git_str_cstr(&buf))) < 0) {
|
1344
1403
|
/*
|
1345
1404
|
* If the error is not "not found" or if it is "not found" and we are not
|
1346
1405
|
* initializing the submodule, then return error.
|
@@ -1362,7 +1421,7 @@ int git_submodule_update(git_submodule *sm, int init, git_submodule_update_optio
|
|
1362
1421
|
config = NULL;
|
1363
1422
|
|
1364
1423
|
if ((error = git_repository_config_snapshot(&config, sm->repo)) < 0 ||
|
1365
|
-
(error = git_config_get_string(&submodule_url, config,
|
1424
|
+
(error = git_config_get_string(&submodule_url, config, git_str_cstr(&buf))) < 0)
|
1366
1425
|
goto done;
|
1367
1426
|
}
|
1368
1427
|
|
@@ -1377,7 +1436,7 @@ int git_submodule_update(git_submodule *sm, int init, git_submodule_update_optio
|
|
1377
1436
|
*/
|
1378
1437
|
clone_options.checkout_opts.checkout_strategy = GIT_CHECKOUT_NONE;
|
1379
1438
|
|
1380
|
-
if ((error =
|
1439
|
+
if ((error = git_clone__submodule(&sub_repo, submodule_url, sm->path, &clone_options)) < 0 ||
|
1381
1440
|
(error = git_repository_set_head_detached(sub_repo, git_submodule_index_id(sm))) < 0 ||
|
1382
1441
|
(error = git_checkout_head(sub_repo, &update_options.checkout_opts)) != 0)
|
1383
1442
|
goto done;
|
@@ -1420,7 +1479,7 @@ int git_submodule_update(git_submodule *sm, int init, git_submodule_update_optio
|
|
1420
1479
|
}
|
1421
1480
|
|
1422
1481
|
done:
|
1423
|
-
|
1482
|
+
git_str_dispose(&buf);
|
1424
1483
|
git_config_free(config);
|
1425
1484
|
git_object_free(target_commit);
|
1426
1485
|
git_remote_free(remote);
|
@@ -1433,7 +1492,7 @@ int git_submodule_init(git_submodule *sm, int overwrite)
|
|
1433
1492
|
{
|
1434
1493
|
int error;
|
1435
1494
|
const char *val;
|
1436
|
-
|
1495
|
+
git_str key = GIT_STR_INIT, effective_submodule_url = GIT_STR_INIT;
|
1437
1496
|
git_config *cfg = NULL;
|
1438
1497
|
|
1439
1498
|
if (!sm->url) {
|
@@ -1447,8 +1506,8 @@ int git_submodule_init(git_submodule *sm, int overwrite)
|
|
1447
1506
|
|
1448
1507
|
/* write "submodule.NAME.url" */
|
1449
1508
|
|
1450
|
-
if ((error =
|
1451
|
-
(error =
|
1509
|
+
if ((error = git_submodule__resolve_url(&effective_submodule_url, sm->repo, sm->url)) < 0 ||
|
1510
|
+
(error = git_str_printf(&key, "submodule.%s.url", sm->name)) < 0 ||
|
1452
1511
|
(error = git_config__update_entry(
|
1453
1512
|
cfg, key.ptr, effective_submodule_url.ptr, overwrite != 0, false)) < 0)
|
1454
1513
|
goto cleanup;
|
@@ -1458,7 +1517,7 @@ int git_submodule_init(git_submodule *sm, int overwrite)
|
|
1458
1517
|
val = (sm->update == GIT_SUBMODULE_UPDATE_CHECKOUT) ?
|
1459
1518
|
NULL : submodule_update_to_str(sm->update);
|
1460
1519
|
|
1461
|
-
if ((error =
|
1520
|
+
if ((error = git_str_printf(&key, "submodule.%s.update", sm->name)) < 0 ||
|
1462
1521
|
(error = git_config__update_entry(
|
1463
1522
|
cfg, key.ptr, val, overwrite != 0, false)) < 0)
|
1464
1523
|
goto cleanup;
|
@@ -1467,15 +1526,15 @@ int git_submodule_init(git_submodule *sm, int overwrite)
|
|
1467
1526
|
|
1468
1527
|
cleanup:
|
1469
1528
|
git_config_free(cfg);
|
1470
|
-
|
1471
|
-
|
1529
|
+
git_str_dispose(&key);
|
1530
|
+
git_str_dispose(&effective_submodule_url);
|
1472
1531
|
|
1473
1532
|
return error;
|
1474
1533
|
}
|
1475
1534
|
|
1476
1535
|
int git_submodule_sync(git_submodule *sm)
|
1477
1536
|
{
|
1478
|
-
|
1537
|
+
git_str key = GIT_STR_INIT, url = GIT_STR_INIT, remote_name = GIT_STR_INIT;
|
1479
1538
|
git_repository *smrepo = NULL;
|
1480
1539
|
git_config *cfg = NULL;
|
1481
1540
|
int error = 0;
|
@@ -1487,8 +1546,8 @@ int git_submodule_sync(git_submodule *sm)
|
|
1487
1546
|
|
1488
1547
|
/* copy URL over to config only if it already exists */
|
1489
1548
|
if ((error = git_repository_config__weakptr(&cfg, sm->repo)) < 0 ||
|
1490
|
-
(error =
|
1491
|
-
(error =
|
1549
|
+
(error = git_str_printf(&key, "submodule.%s.url", sm->name)) < 0 ||
|
1550
|
+
(error = git_submodule__resolve_url(&url, sm->repo, sm->url)) < 0 ||
|
1492
1551
|
(error = git_config__update_entry(cfg, key.ptr, url.ptr, true, true)) < 0)
|
1493
1552
|
goto out;
|
1494
1553
|
|
@@ -1501,9 +1560,9 @@ int git_submodule_sync(git_submodule *sm)
|
|
1501
1560
|
goto out;
|
1502
1561
|
|
1503
1562
|
if (lookup_head_remote_key(&remote_name, smrepo) == 0) {
|
1504
|
-
if ((error =
|
1563
|
+
if ((error = git_str_join3(&key, '.', "remote", remote_name.ptr, "url")) < 0)
|
1505
1564
|
goto out;
|
1506
|
-
} else if ((error =
|
1565
|
+
} else if ((error = git_str_sets(&key, "remote.origin.url")) < 0) {
|
1507
1566
|
goto out;
|
1508
1567
|
}
|
1509
1568
|
|
@@ -1512,9 +1571,9 @@ int git_submodule_sync(git_submodule *sm)
|
|
1512
1571
|
|
1513
1572
|
out:
|
1514
1573
|
git_repository_free(smrepo);
|
1515
|
-
|
1516
|
-
|
1517
|
-
|
1574
|
+
git_str_dispose(&remote_name);
|
1575
|
+
git_str_dispose(&key);
|
1576
|
+
git_str_dispose(&url);
|
1518
1577
|
return error;
|
1519
1578
|
}
|
1520
1579
|
|
@@ -1522,7 +1581,7 @@ static int git_submodule__open(
|
|
1522
1581
|
git_repository **subrepo, git_submodule *sm, bool bare)
|
1523
1582
|
{
|
1524
1583
|
int error;
|
1525
|
-
|
1584
|
+
git_str path = GIT_STR_INIT;
|
1526
1585
|
unsigned int flags = GIT_REPOSITORY_OPEN_NO_SEARCH;
|
1527
1586
|
const char *wd;
|
1528
1587
|
|
@@ -1535,7 +1594,7 @@ static int git_submodule__open(
|
|
1535
1594
|
|
1536
1595
|
wd = git_repository_workdir(sm->repo);
|
1537
1596
|
|
1538
|
-
if (
|
1597
|
+
if (git_str_join3(&path, '/', wd, sm->path, DOT_GIT) < 0)
|
1539
1598
|
return -1;
|
1540
1599
|
|
1541
1600
|
sm->flags = sm->flags &
|
@@ -1557,17 +1616,17 @@ static int git_submodule__open(
|
|
1557
1616
|
sm->flags |= GIT_SUBMODULE_STATUS__WD_OID_VALID;
|
1558
1617
|
else
|
1559
1618
|
git_error_clear();
|
1560
|
-
} else if (
|
1619
|
+
} else if (git_fs_path_exists(path.ptr)) {
|
1561
1620
|
sm->flags |= GIT_SUBMODULE_STATUS__WD_SCANNED |
|
1562
1621
|
GIT_SUBMODULE_STATUS_IN_WD;
|
1563
1622
|
} else {
|
1564
|
-
|
1623
|
+
git_str_rtruncate_at_char(&path, '/'); /* remove "/.git" */
|
1565
1624
|
|
1566
|
-
if (
|
1625
|
+
if (git_fs_path_isdir(path.ptr))
|
1567
1626
|
sm->flags |= GIT_SUBMODULE_STATUS__WD_SCANNED;
|
1568
1627
|
}
|
1569
1628
|
|
1570
|
-
|
1629
|
+
git_str_dispose(&path);
|
1571
1630
|
|
1572
1631
|
return error;
|
1573
1632
|
}
|
@@ -1921,13 +1980,13 @@ static int submodule_parse_recurse(git_submodule_recurse_t *out, const char *val
|
|
1921
1980
|
return 0;
|
1922
1981
|
}
|
1923
1982
|
|
1924
|
-
static int get_value(const char **out, git_config *cfg,
|
1983
|
+
static int get_value(const char **out, git_config *cfg, git_str *buf, const char *name, const char *field)
|
1925
1984
|
{
|
1926
1985
|
int error;
|
1927
1986
|
|
1928
|
-
|
1987
|
+
git_str_clear(buf);
|
1929
1988
|
|
1930
|
-
if ((error =
|
1989
|
+
if ((error = git_str_printf(buf, "submodule.%s.%s", name, field)) < 0 ||
|
1931
1990
|
(error = git_config_get_string(out, cfg, buf->ptr)) < 0)
|
1932
1991
|
return error;
|
1933
1992
|
|
@@ -1944,7 +2003,7 @@ static bool looks_like_command_line_option(const char *s)
|
|
1944
2003
|
|
1945
2004
|
static int submodule_read_config(git_submodule *sm, git_config *cfg)
|
1946
2005
|
{
|
1947
|
-
|
2006
|
+
git_str key = GIT_STR_INIT;
|
1948
2007
|
const char *value;
|
1949
2008
|
int error, in_config = 0;
|
1950
2009
|
|
@@ -2025,7 +2084,7 @@ static int submodule_read_config(git_submodule *sm, git_config *cfg)
|
|
2025
2084
|
error = 0;
|
2026
2085
|
|
2027
2086
|
cleanup:
|
2028
|
-
|
2087
|
+
git_str_dispose(&key);
|
2029
2088
|
return error;
|
2030
2089
|
}
|
2031
2090
|
|
@@ -2033,8 +2092,8 @@ static int submodule_load_each(const git_config_entry *entry, void *payload)
|
|
2033
2092
|
{
|
2034
2093
|
lfc_data *data = payload;
|
2035
2094
|
const char *namestart, *property;
|
2036
|
-
|
2037
|
-
|
2095
|
+
git_submodule_cache *cache = data->cache;
|
2096
|
+
git_str name = GIT_STR_INIT;
|
2038
2097
|
git_submodule *sm;
|
2039
2098
|
int error, isvalid;
|
2040
2099
|
|
@@ -2049,7 +2108,7 @@ static int submodule_load_each(const git_config_entry *entry, void *payload)
|
|
2049
2108
|
|
2050
2109
|
property++;
|
2051
2110
|
|
2052
|
-
if ((error =
|
2111
|
+
if ((error = git_str_set(&name, namestart, property - namestart -1)) < 0)
|
2053
2112
|
return error;
|
2054
2113
|
|
2055
2114
|
isvalid = git_submodule_name_is_valid(data->repo, name.ptr, 0);
|
@@ -2064,7 +2123,7 @@ static int submodule_load_each(const git_config_entry *entry, void *payload)
|
|
2064
2123
|
* a new submodule, load the config and insert it. If it's
|
2065
2124
|
* already inserted, we've already loaded it, so we skip.
|
2066
2125
|
*/
|
2067
|
-
if (
|
2126
|
+
if (git_submodule_cache_contains(cache, name.ptr)) {
|
2068
2127
|
error = 0;
|
2069
2128
|
goto done;
|
2070
2129
|
}
|
@@ -2077,30 +2136,30 @@ static int submodule_load_each(const git_config_entry *entry, void *payload)
|
|
2077
2136
|
goto done;
|
2078
2137
|
}
|
2079
2138
|
|
2080
|
-
if ((error =
|
2139
|
+
if ((error = git_submodule_cache_put(cache, sm->name, sm)) < 0)
|
2081
2140
|
goto done;
|
2082
2141
|
|
2083
2142
|
error = 0;
|
2084
2143
|
|
2085
2144
|
done:
|
2086
|
-
|
2145
|
+
git_str_dispose(&name);
|
2087
2146
|
return error;
|
2088
2147
|
}
|
2089
2148
|
|
2090
2149
|
static int submodule_load_from_wd_lite(git_submodule *sm)
|
2091
2150
|
{
|
2092
|
-
|
2151
|
+
git_str path = GIT_STR_INIT;
|
2093
2152
|
|
2094
2153
|
if (git_repository_workdir_path(&path, sm->repo, sm->path) < 0)
|
2095
2154
|
return -1;
|
2096
2155
|
|
2097
|
-
if (
|
2156
|
+
if (git_fs_path_isdir(path.ptr))
|
2098
2157
|
sm->flags |= GIT_SUBMODULE_STATUS__WD_SCANNED;
|
2099
2158
|
|
2100
|
-
if (
|
2159
|
+
if (git_fs_path_contains(&path, DOT_GIT))
|
2101
2160
|
sm->flags |= GIT_SUBMODULE_STATUS_IN_WD;
|
2102
2161
|
|
2103
|
-
|
2162
|
+
git_str_dispose(&path);
|
2104
2163
|
return 0;
|
2105
2164
|
}
|
2106
2165
|
|
@@ -2112,7 +2171,7 @@ static int submodule_load_from_wd_lite(git_submodule *sm)
|
|
2112
2171
|
static int gitmodules_snapshot(git_config **snap, git_repository *repo)
|
2113
2172
|
{
|
2114
2173
|
git_config *mods = NULL;
|
2115
|
-
|
2174
|
+
git_str path = GIT_STR_INIT;
|
2116
2175
|
int error;
|
2117
2176
|
|
2118
2177
|
if (git_repository_workdir(repo) == NULL)
|
@@ -2123,7 +2182,7 @@ static int gitmodules_snapshot(git_config **snap, git_repository *repo)
|
|
2123
2182
|
|
2124
2183
|
if ((error = git_config_open_ondisk(&mods, path.ptr)) < 0)
|
2125
2184
|
goto cleanup;
|
2126
|
-
|
2185
|
+
git_str_dispose(&path);
|
2127
2186
|
|
2128
2187
|
if ((error = git_config_snapshot(snap, mods)) < 0)
|
2129
2188
|
goto cleanup;
|
@@ -2133,7 +2192,7 @@ static int gitmodules_snapshot(git_config **snap, git_repository *repo)
|
|
2133
2192
|
cleanup:
|
2134
2193
|
if (mods)
|
2135
2194
|
git_config_free(mods);
|
2136
|
-
|
2195
|
+
git_str_dispose(&path);
|
2137
2196
|
|
2138
2197
|
return error;
|
2139
2198
|
}
|
@@ -2142,14 +2201,14 @@ static git_config_backend *open_gitmodules(
|
|
2142
2201
|
git_repository *repo,
|
2143
2202
|
int okay_to_create)
|
2144
2203
|
{
|
2145
|
-
|
2204
|
+
git_str path = GIT_STR_INIT;
|
2146
2205
|
git_config_backend *mods = NULL;
|
2147
2206
|
|
2148
2207
|
if (git_repository_workdir(repo) != NULL) {
|
2149
2208
|
if (git_repository_workdir_path(&path, repo, GIT_MODULES_FILE) != 0)
|
2150
2209
|
return NULL;
|
2151
2210
|
|
2152
|
-
if (okay_to_create ||
|
2211
|
+
if (okay_to_create || git_fs_path_isfile(path.ptr)) {
|
2153
2212
|
/* git_config_backend_from_file should only fail if OOM */
|
2154
2213
|
if (git_config_backend_from_file(&mods, path.ptr) < 0)
|
2155
2214
|
mods = NULL;
|
@@ -2161,17 +2220,17 @@ static git_config_backend *open_gitmodules(
|
|
2161
2220
|
}
|
2162
2221
|
}
|
2163
2222
|
|
2164
|
-
|
2223
|
+
git_str_dispose(&path);
|
2165
2224
|
|
2166
2225
|
return mods;
|
2167
2226
|
}
|
2168
2227
|
|
2169
2228
|
/* Lookup name of remote of the local tracking branch HEAD points to */
|
2170
|
-
static int lookup_head_remote_key(
|
2229
|
+
static int lookup_head_remote_key(git_str *remote_name, git_repository *repo)
|
2171
2230
|
{
|
2172
2231
|
int error;
|
2173
2232
|
git_reference *head = NULL;
|
2174
|
-
|
2233
|
+
git_str upstream_name = GIT_STR_INIT;
|
2175
2234
|
|
2176
2235
|
/* lookup and dereference HEAD */
|
2177
2236
|
if ((error = git_repository_head(&head, repo)) < 0)
|
@@ -2190,18 +2249,18 @@ static int lookup_head_remote_key(git_buf *remote_name, git_repository *repo)
|
|
2190
2249
|
}
|
2191
2250
|
|
2192
2251
|
/* lookup remote tracking branch of HEAD */
|
2193
|
-
if ((error =
|
2252
|
+
if ((error = git_branch__upstream_name(
|
2194
2253
|
&upstream_name,
|
2195
2254
|
repo,
|
2196
2255
|
git_reference_name(head))) < 0)
|
2197
2256
|
goto done;
|
2198
2257
|
|
2199
2258
|
/* lookup remote of remote tracking branch */
|
2200
|
-
if ((error =
|
2259
|
+
if ((error = git_branch__remote_name(remote_name, repo, upstream_name.ptr)) < 0)
|
2201
2260
|
goto done;
|
2202
2261
|
|
2203
2262
|
done:
|
2204
|
-
|
2263
|
+
git_str_dispose(&upstream_name);
|
2205
2264
|
git_reference_free(head);
|
2206
2265
|
|
2207
2266
|
return error;
|
@@ -2211,13 +2270,13 @@ done:
|
|
2211
2270
|
static int lookup_head_remote(git_remote **remote, git_repository *repo)
|
2212
2271
|
{
|
2213
2272
|
int error;
|
2214
|
-
|
2273
|
+
git_str remote_name = GIT_STR_INIT;
|
2215
2274
|
|
2216
2275
|
/* lookup remote of remote tracking branch name */
|
2217
2276
|
if (!(error = lookup_head_remote_key(&remote_name, repo)))
|
2218
2277
|
error = git_remote_lookup(remote, repo, remote_name.ptr);
|
2219
2278
|
|
2220
|
-
|
2279
|
+
git_str_dispose(&remote_name);
|
2221
2280
|
|
2222
2281
|
return error;
|
2223
2282
|
}
|
@@ -2240,14 +2299,14 @@ static int lookup_default_remote(git_remote **remote, git_repository *repo)
|
|
2240
2299
|
return error;
|
2241
2300
|
}
|
2242
2301
|
|
2243
|
-
static int get_url_base(
|
2302
|
+
static int get_url_base(git_str *url, git_repository *repo)
|
2244
2303
|
{
|
2245
2304
|
int error;
|
2246
2305
|
git_worktree *wt = NULL;
|
2247
2306
|
git_remote *remote = NULL;
|
2248
2307
|
|
2249
2308
|
if ((error = lookup_default_remote(&remote, repo)) == 0) {
|
2250
|
-
error =
|
2309
|
+
error = git_str_sets(url, git_remote_url(remote));
|
2251
2310
|
goto out;
|
2252
2311
|
} else if (error != GIT_ENOTFOUND)
|
2253
2312
|
goto out;
|
@@ -2258,9 +2317,9 @@ static int get_url_base(git_buf *url, git_repository *repo)
|
|
2258
2317
|
if (git_repository_is_worktree(repo)) {
|
2259
2318
|
if ((error = git_worktree_open_from_repository(&wt, repo)) < 0)
|
2260
2319
|
goto out;
|
2261
|
-
error =
|
2320
|
+
error = git_str_sets(url, wt->parent_path);
|
2262
2321
|
} else {
|
2263
|
-
error =
|
2322
|
+
error = git_str_sets(url, git_repository_workdir(repo));
|
2264
2323
|
}
|
2265
2324
|
|
2266
2325
|
out:
|