rugged 1.3.2 → 1.6.2
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 +7 -4
- data/ext/rugged/rugged.c +16 -0
- data/ext/rugged/rugged.h +4 -0
- 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/CMakeLists.txt +132 -288
- data/vendor/libgit2/COPYING +106 -19
- data/vendor/libgit2/cmake/AddCFlagIfSupported.cmake +21 -21
- data/vendor/libgit2/cmake/AddClarTest.cmake +7 -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 → FindHTTPParser.cmake} +17 -17
- data/vendor/libgit2/cmake/FindIconv.cmake +27 -27
- 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 +19 -0
- data/vendor/libgit2/cmake/SelectHTTPSBackend.cmake +100 -100
- data/vendor/libgit2/cmake/SelectHashes.cmake +91 -53
- data/vendor/libgit2/cmake/SelectRegex.cmake +51 -0
- data/vendor/libgit2/cmake/SelectSSH.cmake +41 -0
- data/vendor/libgit2/cmake/SelectWinHTTP.cmake +17 -0
- data/vendor/libgit2/cmake/SelectZlib.cmake +34 -0
- data/vendor/libgit2/deps/chromium-zlib/CMakeLists.txt +6 -6
- data/vendor/libgit2/deps/ntlmclient/CMakeLists.txt +33 -31
- data/vendor/libgit2/deps/ntlmclient/crypt_openssl.c +3 -1
- data/vendor/libgit2/deps/ntlmclient/ntlm.c +4 -4
- data/vendor/libgit2/deps/ntlmclient/ntlm.h +4 -4
- data/vendor/libgit2/deps/ntlmclient/ntlmclient.h +2 -2
- data/vendor/libgit2/deps/pcre/CMakeLists.txt +88 -88
- data/vendor/libgit2/deps/winhttp/CMakeLists.txt +14 -16
- data/vendor/libgit2/deps/zlib/adler32.c +7 -0
- data/vendor/libgit2/deps/zlib/crc32.c +975 -288
- data/vendor/libgit2/deps/zlib/crc32.h +9441 -436
- data/vendor/libgit2/deps/zlib/deflate.c +83 -31
- data/vendor/libgit2/deps/zlib/deflate.h +12 -15
- data/vendor/libgit2/deps/zlib/gzguts.h +3 -2
- data/vendor/libgit2/deps/zlib/infback.c +2 -1
- data/vendor/libgit2/deps/zlib/inffast.c +14 -14
- data/vendor/libgit2/deps/zlib/inflate.c +39 -8
- data/vendor/libgit2/deps/zlib/inflate.h +3 -2
- data/vendor/libgit2/deps/zlib/inftrees.c +3 -3
- data/vendor/libgit2/deps/zlib/trees.c +27 -48
- data/vendor/libgit2/deps/zlib/zlib.h +126 -100
- data/vendor/libgit2/deps/zlib/zutil.c +2 -2
- data/vendor/libgit2/deps/zlib/zutil.h +12 -9
- data/vendor/libgit2/include/git2/apply.h +16 -2
- data/vendor/libgit2/include/git2/attr.h +11 -2
- data/vendor/libgit2/include/git2/blame.h +4 -1
- data/vendor/libgit2/include/git2/blob.h +14 -1
- data/vendor/libgit2/include/git2/branch.h +4 -2
- data/vendor/libgit2/include/git2/buffer.h +18 -78
- data/vendor/libgit2/include/git2/cert.h +2 -2
- data/vendor/libgit2/include/git2/checkout.h +5 -2
- data/vendor/libgit2/include/git2/clone.h +3 -3
- data/vendor/libgit2/include/git2/commit.h +2 -0
- data/vendor/libgit2/include/git2/common.h +28 -7
- data/vendor/libgit2/include/git2/config.h +25 -9
- data/vendor/libgit2/include/git2/credential.h +2 -1
- data/vendor/libgit2/include/git2/credential_helpers.h +1 -0
- data/vendor/libgit2/include/git2/deprecated.h +9 -1
- data/vendor/libgit2/include/git2/describe.h +7 -2
- data/vendor/libgit2/include/git2/diff.h +18 -10
- data/vendor/libgit2/include/git2/email.h +1 -1
- data/vendor/libgit2/include/git2/errors.h +17 -3
- data/vendor/libgit2/include/git2/experimental.h +20 -0
- data/vendor/libgit2/include/git2/filter.h +7 -2
- data/vendor/libgit2/include/git2/graph.h +1 -0
- data/vendor/libgit2/include/git2/ignore.h +1 -1
- data/vendor/libgit2/include/git2/index.h +11 -5
- data/vendor/libgit2/include/git2/indexer.h +48 -0
- data/vendor/libgit2/include/git2/merge.h +24 -4
- data/vendor/libgit2/include/git2/message.h +2 -0
- data/vendor/libgit2/include/git2/object.h +49 -0
- data/vendor/libgit2/include/git2/odb.h +94 -13
- data/vendor/libgit2/include/git2/odb_backend.h +107 -19
- data/vendor/libgit2/include/git2/oid.h +115 -15
- data/vendor/libgit2/include/git2/pack.h +24 -8
- data/vendor/libgit2/include/git2/patch.h +8 -0
- data/vendor/libgit2/include/git2/pathspec.h +1 -1
- data/vendor/libgit2/include/git2/proxy.h +1 -1
- data/vendor/libgit2/include/git2/rebase.h +9 -1
- data/vendor/libgit2/include/git2/refdb.h +3 -0
- data/vendor/libgit2/include/git2/reflog.h +1 -1
- data/vendor/libgit2/include/git2/refs.h +2 -2
- data/vendor/libgit2/include/git2/remote.h +184 -37
- data/vendor/libgit2/include/git2/repository.h +34 -10
- data/vendor/libgit2/include/git2/reset.h +2 -2
- data/vendor/libgit2/include/git2/revparse.h +1 -1
- data/vendor/libgit2/include/git2/revwalk.h +4 -1
- data/vendor/libgit2/include/git2/signature.h +1 -1
- data/vendor/libgit2/include/git2/stash.h +61 -7
- data/vendor/libgit2/include/git2/status.h +14 -5
- data/vendor/libgit2/include/git2/strarray.h +0 -13
- data/vendor/libgit2/include/git2/submodule.h +7 -2
- data/vendor/libgit2/include/git2/sys/commit_graph.h +1 -1
- data/vendor/libgit2/include/git2/sys/odb_backend.h +3 -6
- data/vendor/libgit2/include/git2/sys/remote.h +46 -0
- data/vendor/libgit2/include/git2/sys/stream.h +1 -1
- data/vendor/libgit2/include/git2/sys/transport.h +46 -39
- data/vendor/libgit2/include/git2/tag.h +1 -0
- data/vendor/libgit2/include/git2/tree.h +4 -3
- data/vendor/libgit2/include/git2/types.h +7 -7
- data/vendor/libgit2/include/git2/version.h +27 -6
- data/vendor/libgit2/include/git2/worktree.h +12 -2
- data/vendor/libgit2/include/git2.h +1 -0
- data/vendor/libgit2/src/CMakeLists.txt +177 -419
- data/vendor/libgit2/src/README.md +12 -0
- data/vendor/libgit2/src/cli/CMakeLists.txt +57 -0
- data/vendor/libgit2/src/cli/README.md +26 -0
- data/vendor/libgit2/src/cli/cli.h +20 -0
- data/vendor/libgit2/src/cli/cmd.c +21 -0
- data/vendor/libgit2/src/cli/cmd.h +33 -0
- data/vendor/libgit2/src/cli/cmd_cat_file.c +204 -0
- data/vendor/libgit2/src/cli/cmd_clone.c +176 -0
- data/vendor/libgit2/src/cli/cmd_hash_object.c +154 -0
- data/vendor/libgit2/src/cli/cmd_help.c +86 -0
- data/vendor/libgit2/src/cli/error.h +51 -0
- data/vendor/libgit2/src/cli/main.c +106 -0
- data/vendor/libgit2/src/cli/opt.c +669 -0
- data/vendor/libgit2/src/cli/opt.h +349 -0
- data/vendor/libgit2/src/cli/opt_usage.c +194 -0
- data/vendor/libgit2/src/cli/opt_usage.h +35 -0
- data/vendor/libgit2/src/cli/progress.c +345 -0
- data/vendor/libgit2/src/cli/progress.h +117 -0
- data/vendor/libgit2/src/cli/sighandler.h +20 -0
- data/vendor/libgit2/src/cli/unix/sighandler.c +36 -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 +141 -0
- data/vendor/libgit2/src/{annotated_commit.c → libgit2/annotated_commit.c} +1 -1
- data/vendor/libgit2/src/{annotated_commit.h → libgit2/annotated_commit.h} +2 -2
- data/vendor/libgit2/src/{apply.c → libgit2/apply.c} +18 -18
- data/vendor/libgit2/src/{apply.h → libgit2/apply.h} +2 -2
- data/vendor/libgit2/src/{attr.c → libgit2/attr.c} +18 -18
- data/vendor/libgit2/src/{attr_file.c → libgit2/attr_file.c} +18 -18
- data/vendor/libgit2/src/{attr_file.h → libgit2/attr_file.h} +4 -4
- data/vendor/libgit2/src/{attrcache.c → libgit2/attrcache.c} +18 -13
- data/vendor/libgit2/src/{blame.c → libgit2/blame.c} +2 -0
- data/vendor/libgit2/src/{blame_git.c → libgit2/blame_git.c} +1 -1
- 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/{branch.h → libgit2/branch.h} +15 -3
- data/vendor/libgit2/src/libgit2/buf.c +126 -0
- data/vendor/libgit2/src/libgit2/buf.h +50 -0
- data/vendor/libgit2/src/{checkout.c → libgit2/checkout.c} +74 -68
- data/vendor/libgit2/src/{cherrypick.c → libgit2/cherrypick.c} +13 -13
- data/vendor/libgit2/src/{clone.c → libgit2/clone.c} +96 -67
- data/vendor/libgit2/src/{commit.c → libgit2/commit.c} +178 -73
- data/vendor/libgit2/src/libgit2/commit.h +87 -0
- data/vendor/libgit2/src/{commit_graph.c → libgit2/commit_graph.c} +122 -89
- data/vendor/libgit2/src/{commit_graph.h → libgit2/commit_graph.h} +14 -4
- data/vendor/libgit2/src/{commit_list.c → libgit2/commit_list.c} +7 -4
- data/vendor/libgit2/src/libgit2/common.h +55 -0
- data/vendor/libgit2/src/{config.c → libgit2/config.c} +101 -69
- data/vendor/libgit2/src/{config.h → libgit2/config.h} +15 -2
- data/vendor/libgit2/src/{config_file.c → libgit2/config_file.c} +105 -93
- data/vendor/libgit2/src/{config_mem.c → libgit2/config_mem.c} +9 -9
- data/vendor/libgit2/src/{config_parse.c → libgit2/config_parse.c} +27 -23
- data/vendor/libgit2/src/{crlf.c → libgit2/crlf.c} +24 -21
- data/vendor/libgit2/src/{describe.c → libgit2/describe.c} +35 -27
- data/vendor/libgit2/src/{diff.c → libgit2/diff.c} +30 -9
- data/vendor/libgit2/src/{diff.h → libgit2/diff.h} +2 -4
- data/vendor/libgit2/src/{diff_driver.c → libgit2/diff_driver.c} +34 -36
- data/vendor/libgit2/src/{diff_driver.h → libgit2/diff_driver.h} +3 -3
- data/vendor/libgit2/src/{diff_file.c → libgit2/diff_file.c} +44 -26
- data/vendor/libgit2/src/{diff_generate.c → libgit2/diff_generate.c} +47 -18
- data/vendor/libgit2/src/{diff_generate.h → libgit2/diff_generate.h} +5 -3
- data/vendor/libgit2/src/{diff_print.c → libgit2/diff_print.c} +112 -100
- 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} +13 -8
- data/vendor/libgit2/src/{diff_xdiff.c → libgit2/diff_xdiff.c} +4 -8
- data/vendor/libgit2/src/{email.c → libgit2/email.c} +55 -39
- data/vendor/libgit2/src/{email.h → libgit2/email.h} +1 -1
- data/vendor/libgit2/src/{errors.c → libgit2/errors.c} +18 -18
- data/vendor/libgit2/src/{errors.h → libgit2/errors.h} +1 -2
- data/vendor/libgit2/src/libgit2/experimental.h.in +13 -0
- data/vendor/libgit2/src/{fetch.c → libgit2/fetch.c} +72 -27
- data/vendor/libgit2/src/{fetch.h → libgit2/fetch.h} +1 -1
- data/vendor/libgit2/src/{fetchhead.c → libgit2/fetchhead.c} +23 -23
- data/vendor/libgit2/src/{filter.c → libgit2/filter.c} +127 -53
- data/vendor/libgit2/src/{filter.h → libgit2/filter.h} +26 -5
- data/vendor/libgit2/src/{ident.c → libgit2/ident.c} +20 -20
- data/vendor/libgit2/src/{ignore.c → libgit2/ignore.c} +35 -34
- data/vendor/libgit2/src/{ignore.h → libgit2/ignore.h} +2 -2
- data/vendor/libgit2/src/{index.c → libgit2/index.c} +91 -90
- data/vendor/libgit2/src/{index.h → libgit2/index.h} +6 -3
- data/vendor/libgit2/src/{indexer.c → libgit2/indexer.c} +173 -92
- data/vendor/libgit2/src/{iterator.c → libgit2/iterator.c} +71 -61
- data/vendor/libgit2/src/{iterator.h → libgit2/iterator.h} +5 -5
- data/vendor/libgit2/src/{libgit2.c → libgit2/libgit2.c} +46 -11
- data/vendor/libgit2/src/{mailmap.c → libgit2/mailmap.c} +38 -36
- data/vendor/libgit2/src/{merge.c → libgit2/merge.c} +30 -30
- data/vendor/libgit2/src/{merge.h → libgit2/merge.h} +1 -14
- data/vendor/libgit2/src/{merge_driver.c → libgit2/merge_driver.c} +2 -2
- data/vendor/libgit2/src/{merge_file.c → libgit2/merge_file.c} +13 -3
- data/vendor/libgit2/src/{message.c → libgit2/message.c} +21 -10
- data/vendor/libgit2/src/{midx.c → libgit2/midx.c} +112 -92
- data/vendor/libgit2/src/{midx.h → libgit2/midx.h} +5 -4
- data/vendor/libgit2/src/{mwindow.c → libgit2/mwindow.c} +15 -12
- data/vendor/libgit2/src/{mwindow.h → libgit2/mwindow.h} +5 -2
- data/vendor/libgit2/src/{netops.c → libgit2/netops.c} +1 -2
- data/vendor/libgit2/src/{netops.h → libgit2/netops.h} +1 -1
- data/vendor/libgit2/src/{notes.c → libgit2/notes.c} +25 -34
- data/vendor/libgit2/src/{object.c → libgit2/object.c} +135 -30
- data/vendor/libgit2/src/{object.h → libgit2/object.h} +12 -3
- data/vendor/libgit2/src/{odb.c → libgit2/odb.c} +228 -81
- 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} +18 -5
- data/vendor/libgit2/src/{odb_pack.c → libgit2/odb_pack.c} +137 -85
- data/vendor/libgit2/src/{oid.c → libgit2/oid.c} +136 -90
- data/vendor/libgit2/src/libgit2/oid.h +273 -0
- data/vendor/libgit2/src/{oidmap.c → libgit2/oidmap.c} +1 -1
- data/vendor/libgit2/src/{pack-objects.c → libgit2/pack-objects.c} +56 -30
- data/vendor/libgit2/src/{pack-objects.h → libgit2/pack-objects.h} +11 -6
- data/vendor/libgit2/src/{pack.c → libgit2/pack.c} +114 -84
- data/vendor/libgit2/src/{pack.h → libgit2/pack.h} +31 -16
- data/vendor/libgit2/src/{parse.c → libgit2/parse.c} +4 -3
- data/vendor/libgit2/src/{patch.c → libgit2/patch.c} +3 -3
- data/vendor/libgit2/src/{patch.h → libgit2/patch.h} +1 -0
- data/vendor/libgit2/src/{patch_generate.c → libgit2/patch_generate.c} +27 -11
- data/vendor/libgit2/src/{patch_generate.h → libgit2/patch_generate.h} +5 -5
- data/vendor/libgit2/src/{patch_parse.c → libgit2/patch_parse.c} +29 -29
- 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} +6 -6
- 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} +43 -38
- data/vendor/libgit2/src/{push.h → libgit2/push.h} +4 -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} +119 -107
- data/vendor/libgit2/src/{refdb_fs.c → libgit2/refdb_fs.c} +506 -197
- data/vendor/libgit2/src/{reflog.c → libgit2/reflog.c} +7 -5
- data/vendor/libgit2/src/{reflog.h → libgit2/reflog.h} +1 -2
- data/vendor/libgit2/src/{refs.c → libgit2/refs.c} +34 -32
- data/vendor/libgit2/src/{refs.h → libgit2/refs.h} +2 -2
- data/vendor/libgit2/src/{refspec.c → libgit2/refspec.c} +32 -37
- data/vendor/libgit2/src/{refspec.h → libgit2/refspec.h} +5 -2
- data/vendor/libgit2/src/{remote.c → libgit2/remote.c} +718 -420
- data/vendor/libgit2/src/libgit2/remote.h +100 -0
- data/vendor/libgit2/src/{repository.c → libgit2/repository.c} +629 -386
- data/vendor/libgit2/src/{repository.h → libgit2/repository.h} +20 -9
- data/vendor/libgit2/src/{reset.c → libgit2/reset.c} +8 -5
- data/vendor/libgit2/src/{revert.c → libgit2/revert.c} +14 -14
- data/vendor/libgit2/src/{revparse.c → libgit2/revparse.c} +71 -42
- data/vendor/libgit2/src/{revwalk.c → libgit2/revwalk.c} +12 -8
- data/vendor/libgit2/src/{signature.c → libgit2/signature.c} +12 -6
- data/vendor/libgit2/src/{signature.h → libgit2/signature.h} +1 -1
- data/vendor/libgit2/src/{stash.c → libgit2/stash.c} +235 -61
- data/vendor/libgit2/src/{status.c → libgit2/status.c} +4 -1
- 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 +8 -6
- data/vendor/libgit2/src/{streams → libgit2/streams}/openssl.c +1 -1
- data/vendor/libgit2/src/{streams → libgit2/streams}/openssl_dynamic.c +7 -3
- data/vendor/libgit2/src/{streams → libgit2/streams}/openssl_dynamic.h +3 -3
- data/vendor/libgit2/src/{streams → libgit2/streams}/socket.c +4 -1
- data/vendor/libgit2/src/{submodule.c → libgit2/submodule.c} +177 -161
- data/vendor/libgit2/src/{submodule.h → libgit2/submodule.h} +1 -1
- data/vendor/libgit2/src/libgit2/sysdir.c +650 -0
- data/vendor/libgit2/src/{sysdir.h → libgit2/sysdir.h} +53 -18
- data/vendor/libgit2/src/{tag.c → libgit2/tag.c} +73 -42
- data/vendor/libgit2/src/{tag.h → libgit2/tag.h} +2 -2
- data/vendor/libgit2/src/{threadstate.c → libgit2/threadstate.c} +3 -3
- data/vendor/libgit2/src/{threadstate.h → libgit2/threadstate.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} +1 -1
- data/vendor/libgit2/src/{transaction.c → libgit2/transaction.c} +1 -1
- data/vendor/libgit2/src/{transport.c → libgit2/transport.c} +10 -10
- data/vendor/libgit2/src/{transports → libgit2/transports}/auth.c +7 -9
- data/vendor/libgit2/src/{transports → libgit2/transports}/auth.h +2 -3
- data/vendor/libgit2/src/{transports → libgit2/transports}/auth_negotiate.c +12 -13
- data/vendor/libgit2/src/{transports → libgit2/transports}/auth_ntlm.c +10 -10
- data/vendor/libgit2/src/{transports → libgit2/transports}/auth_ntlm.h +0 -1
- data/vendor/libgit2/src/{transports → libgit2/transports}/git.c +9 -11
- data/vendor/libgit2/src/{transports → libgit2/transports}/http.c +41 -20
- data/vendor/libgit2/src/{transports → libgit2/transports}/http.h +2 -3
- data/vendor/libgit2/src/{transports → libgit2/transports}/httpclient.c +75 -66
- data/vendor/libgit2/src/{transports → libgit2/transports}/httpclient.h +10 -0
- data/vendor/libgit2/src/{transports → libgit2/transports}/local.c +138 -116
- data/vendor/libgit2/src/{transports → libgit2/transports}/smart.c +92 -133
- data/vendor/libgit2/src/{transports → libgit2/transports}/smart.h +35 -32
- data/vendor/libgit2/src/{transports → libgit2/transports}/smart_pkt.c +177 -65
- data/vendor/libgit2/src/{transports → libgit2/transports}/smart_protocol.c +97 -49
- data/vendor/libgit2/src/{transports → libgit2/transports}/ssh.c +365 -198
- data/vendor/libgit2/src/{transports → libgit2/transports}/winhttp.c +58 -59
- data/vendor/libgit2/src/{tree-cache.c → libgit2/tree-cache.c} +8 -8
- data/vendor/libgit2/src/{tree-cache.h → libgit2/tree-cache.h} +2 -2
- data/vendor/libgit2/src/{tree.c → libgit2/tree.c} +93 -83
- data/vendor/libgit2/src/{tree.h → libgit2/tree.h} +4 -4
- data/vendor/libgit2/src/{worktree.c → libgit2/worktree.c} +121 -94
- data/vendor/libgit2/src/{worktree.h → libgit2/worktree.h} +1 -1
- data/vendor/libgit2/src/libgit2/xdiff/git-xdiff.h +53 -0
- data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xdiff.h +15 -15
- data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xdiffi.c +134 -108
- data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xemit.c +23 -7
- data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xhistogram.c +87 -78
- data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xinclude.h +1 -12
- data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xmerge.c +104 -117
- data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xpatience.c +6 -17
- data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xprepare.c +15 -20
- data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xutils.c +18 -7
- data/vendor/libgit2/src/util/CMakeLists.txt +80 -0
- data/vendor/libgit2/src/{allocators → util/allocators}/failalloc.h +1 -1
- data/vendor/libgit2/src/{allocators → util/allocators}/stdalloc.h +1 -1
- data/vendor/libgit2/src/{allocators → util/allocators}/win32_leakcheck.h +1 -1
- data/vendor/libgit2/src/{array.h → util/array.h} +1 -1
- data/vendor/libgit2/src/{assert_safe.h → util/assert_safe.h} +16 -0
- data/vendor/libgit2/src/{cc-compat.h → util/cc-compat.h} +1 -1
- data/vendor/libgit2/src/{date.c → util/date.c} +14 -20
- data/vendor/libgit2/src/util/date.h +33 -0
- data/vendor/libgit2/src/{filebuf.c → util/filebuf.c} +29 -29
- data/vendor/libgit2/src/{filebuf.h → util/filebuf.h} +2 -2
- data/vendor/libgit2/src/{path.c → util/fs_path.c} +453 -647
- data/vendor/libgit2/src/{path.h → util/fs_path.h} +221 -188
- data/vendor/libgit2/src/{futils.c → util/futils.c} +135 -90
- data/vendor/libgit2/src/{futils.h → util/futils.h} +28 -15
- data/vendor/libgit2/src/{features.h.in → util/git2_features.h.in} +15 -1
- data/vendor/libgit2/src/{common.h → util/git2_util.h} +20 -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 +195 -0
- data/vendor/libgit2/src/util/hash/openssl.h +45 -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 +70 -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/{khash.h → util/khash.h} +1 -1
- data/vendor/libgit2/src/{map.h → util/map.h} +1 -1
- data/vendor/libgit2/src/util/net.c +1003 -0
- data/vendor/libgit2/src/{net.h → util/net.h} +18 -4
- data/vendor/libgit2/src/{pool.h → util/pool.h} +1 -1
- data/vendor/libgit2/src/{posix.c → util/posix.c} +3 -3
- data/vendor/libgit2/src/{posix.h → util/posix.h} +4 -1
- data/vendor/libgit2/src/{pqueue.h → util/pqueue.h} +2 -2
- data/vendor/libgit2/src/util/rand.c +234 -0
- data/vendor/libgit2/src/util/rand.h +37 -0
- data/vendor/libgit2/src/{regexp.c → util/regexp.c} +4 -4
- 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} +1 -1
- data/vendor/libgit2/src/{sortedcache.h → util/sortedcache.h} +2 -2
- data/vendor/libgit2/src/{buffer.c → util/str.c} +157 -151
- data/vendor/libgit2/src/util/str.h +357 -0
- data/vendor/libgit2/src/{strmap.h → util/strmap.h} +1 -1
- 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 -4
- data/vendor/libgit2/src/{unix → util/unix}/realpath.c +1 -3
- 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} +15 -15
- data/vendor/libgit2/src/{util.h → util/util.h} +4 -29
- data/vendor/libgit2/src/{varint.h → util/varint.h} +1 -1
- data/vendor/libgit2/src/{vector.h → util/vector.h} +2 -2
- 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.h +1 -1
- data/vendor/libgit2/src/{win32 → util/win32}/map.c +1 -1
- data/vendor/libgit2/src/{win32 → util/win32}/path_w32.c +140 -9
- 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 +12 -28
- 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/{win32 → util/win32}/thread.h +1 -1
- data/vendor/libgit2/src/{win32 → util/win32}/utf-conv.h +1 -1
- 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.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 +402 -356
- data/vendor/libgit2/src/buffer.h +0 -374
- data/vendor/libgit2/src/commit.h +0 -46
- 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/message.h +0 -17
- data/vendor/libgit2/src/net.c +0 -540
- data/vendor/libgit2/src/oid.h +0 -51
- data/vendor/libgit2/src/remote.h +0 -55
- data/vendor/libgit2/src/sysdir.c +0 -347
- data/vendor/libgit2/src/win32/findfile.c +0 -230
- data/vendor/libgit2/src/win32/findfile.h +0 -19
- /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/{attrcache.h → libgit2/attrcache.h} +0 -0
- /data/vendor/libgit2/src/{blame.h → libgit2/blame.h} +0 -0
- /data/vendor/libgit2/src/{blame_git.h → libgit2/blame_git.h} +0 -0
- /data/vendor/libgit2/src/{cache.c → libgit2/cache.c} +0 -0
- /data/vendor/libgit2/src/{cache.h → libgit2/cache.h} +0 -0
- /data/vendor/libgit2/src/{checkout.h → libgit2/checkout.h} +0 -0
- /data/vendor/libgit2/src/{clone.h → libgit2/clone.h} +0 -0
- /data/vendor/libgit2/src/{commit_list.h → libgit2/commit_list.h} +0 -0
- /data/vendor/libgit2/src/{config_backend.h → libgit2/config_backend.h} +0 -0
- /data/vendor/libgit2/src/{config_cache.c → libgit2/config_cache.c} +0 -0
- /data/vendor/libgit2/src/{config_entries.c → libgit2/config_entries.c} +0 -0
- /data/vendor/libgit2/src/{config_entries.h → libgit2/config_entries.h} +0 -0
- /data/vendor/libgit2/src/{config_parse.h → libgit2/config_parse.h} +0 -0
- /data/vendor/libgit2/src/{config_snapshot.c → libgit2/config_snapshot.c} +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.c → libgit2/diff_parse.c} +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/{diff_xdiff.h → libgit2/diff_xdiff.h} +0 -0
- /data/vendor/libgit2/src/{fetchhead.h → libgit2/fetchhead.h} +0 -0
- /data/vendor/libgit2/src/{win32 → libgit2}/git2.rc +0 -0
- /data/vendor/libgit2/src/{graph.c → libgit2/graph.c} +0 -0
- /data/vendor/libgit2/src/{hashsig.c → libgit2/hashsig.c} +0 -0
- /data/vendor/libgit2/src/{idxmap.c → libgit2/idxmap.c} +0 -0
- /data/vendor/libgit2/src/{idxmap.h → libgit2/idxmap.h} +0 -0
- /data/vendor/libgit2/src/{indexer.h → libgit2/indexer.h} +0 -0
- /data/vendor/libgit2/src/{libgit2.h → libgit2/libgit2.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/{offmap.c → libgit2/offmap.c} +0 -0
- /data/vendor/libgit2/src/{offmap.h → libgit2/offmap.h} +0 -0
- /data/vendor/libgit2/src/{oidarray.c → libgit2/oidarray.c} +0 -0
- /data/vendor/libgit2/src/{oidarray.h → libgit2/oidarray.h} +0 -0
- /data/vendor/libgit2/src/{oidmap.h → libgit2/oidmap.h} +0 -0
- /data/vendor/libgit2/src/{parse.h → libgit2/parse.h} +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/{revwalk.h → libgit2/revwalk.h} +0 -0
- /data/vendor/libgit2/src/{settings.h → libgit2/settings.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.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}/socket.h +0 -0
- /data/vendor/libgit2/src/{streams → libgit2/streams}/stransport.c +0 -0
- /data/vendor/libgit2/src/{streams → libgit2/streams}/stransport.h +0 -0
- /data/vendor/libgit2/src/{streams → libgit2/streams}/tls.c +0 -0
- /data/vendor/libgit2/src/{streams → libgit2/streams}/tls.h +0 -0
- /data/vendor/libgit2/src/{transaction.h → libgit2/transaction.h} +0 -0
- /data/vendor/libgit2/src/{transports → libgit2/transports}/auth_negotiate.h +0 -0
- /data/vendor/libgit2/src/{transports → libgit2/transports}/credential.c +0 -0
- /data/vendor/libgit2/src/{transports → libgit2/transports}/credential_helpers.c +0 -0
- /data/vendor/libgit2/src/{transports → libgit2/transports}/ssh.h +0 -0
- /data/vendor/libgit2/src/{userdiff.h → libgit2/userdiff.h} +0 -0
- /data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xdiffi.h +0 -0
- /data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xemit.h +0 -0
- /data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xmacros.h +0 -0
- /data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xprepare.h +0 -0
- /data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xtypes.h +0 -0
- /data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xutils.h +0 -0
- /data/vendor/libgit2/src/{alloc.c → util/alloc.c} +0 -0
- /data/vendor/libgit2/src/{alloc.h → util/alloc.h} +0 -0
- /data/vendor/libgit2/src/{allocators → util/allocators}/failalloc.c +0 -0
- /data/vendor/libgit2/src/{allocators → util/allocators}/stdalloc.c +0 -0
- /data/vendor/libgit2/src/{allocators → util/allocators}/win32_leakcheck.c +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/{integer.h → util/integer.h} +0 -0
- /data/vendor/libgit2/src/{pool.c → util/pool.c} +0 -0
- /data/vendor/libgit2/src/{pqueue.c → util/pqueue.c} +0 -0
- /data/vendor/libgit2/src/{strmap.c → util/strmap.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/{vector.c → util/vector.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}/error.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}/utf-conv.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}/w32_util.c +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,7 +165,7 @@ 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
|
|
|
@@ -195,7 +199,7 @@ static int load_submodule_names(git_strmap **out, git_repository *repo, git_conf
|
|
|
195
199
|
const char *key = "submodule\\..*\\.path";
|
|
196
200
|
git_config_iterator *iter = NULL;
|
|
197
201
|
git_config_entry *entry;
|
|
198
|
-
|
|
202
|
+
git_str buf = GIT_STR_INIT;
|
|
199
203
|
git_strmap *names;
|
|
200
204
|
int isvalid, error;
|
|
201
205
|
|
|
@@ -219,8 +223,8 @@ static int load_submodule_names(git_strmap **out, git_repository *repo, git_conf
|
|
|
219
223
|
goto out;
|
|
220
224
|
}
|
|
221
225
|
|
|
222
|
-
|
|
223
|
-
|
|
226
|
+
git_str_clear(&buf);
|
|
227
|
+
git_str_put(&buf, fdot + 1, ldot - fdot - 1);
|
|
224
228
|
isvalid = git_submodule_name_is_valid(repo, buf.ptr, 0);
|
|
225
229
|
if (isvalid < 0) {
|
|
226
230
|
error = isvalid;
|
|
@@ -229,7 +233,7 @@ static int load_submodule_names(git_strmap **out, git_repository *repo, git_conf
|
|
|
229
233
|
if (!isvalid)
|
|
230
234
|
continue;
|
|
231
235
|
|
|
232
|
-
if ((error = git_strmap_set(names, git__strdup(entry->value),
|
|
236
|
+
if ((error = git_strmap_set(names, git__strdup(entry->value), git_str_detach(&buf))) < 0) {
|
|
233
237
|
git_error_set(GIT_ERROR_NOMEMORY, "error inserting submodule into hash table");
|
|
234
238
|
error = -1;
|
|
235
239
|
goto out;
|
|
@@ -243,7 +247,7 @@ static int load_submodule_names(git_strmap **out, git_repository *repo, git_conf
|
|
|
243
247
|
|
|
244
248
|
out:
|
|
245
249
|
free_submodule_names(names);
|
|
246
|
-
|
|
250
|
+
git_str_dispose(&buf);
|
|
247
251
|
git_config_iterator_free(iter);
|
|
248
252
|
return error;
|
|
249
253
|
}
|
|
@@ -329,10 +333,10 @@ int git_submodule__lookup_with_cache(
|
|
|
329
333
|
if (location == 0 || location == GIT_SUBMODULE_STATUS_IN_WD) {
|
|
330
334
|
git_config_backend *mods;
|
|
331
335
|
const char *pattern = "submodule\\..*\\.path";
|
|
332
|
-
|
|
336
|
+
git_str path = GIT_STR_INIT;
|
|
333
337
|
fbp_data data = { NULL, NULL };
|
|
334
338
|
|
|
335
|
-
|
|
339
|
+
git_str_puts(&path, name);
|
|
336
340
|
while (path.ptr[path.size-1] == '/') {
|
|
337
341
|
path.ptr[--path.size] = '\0';
|
|
338
342
|
}
|
|
@@ -347,14 +351,14 @@ int git_submodule__lookup_with_cache(
|
|
|
347
351
|
|
|
348
352
|
if (error < 0) {
|
|
349
353
|
git_submodule_free(sm);
|
|
350
|
-
|
|
354
|
+
git_str_dispose(&path);
|
|
351
355
|
return error;
|
|
352
356
|
}
|
|
353
357
|
|
|
354
358
|
if (data.name) {
|
|
355
359
|
git__free(sm->name);
|
|
356
360
|
sm->name = data.name;
|
|
357
|
-
sm->path =
|
|
361
|
+
sm->path = git_str_detach(&path);
|
|
358
362
|
|
|
359
363
|
/* Try to load again with the right name */
|
|
360
364
|
if ((error = git_submodule_reload(sm, false)) < 0) {
|
|
@@ -363,7 +367,7 @@ int git_submodule__lookup_with_cache(
|
|
|
363
367
|
}
|
|
364
368
|
}
|
|
365
369
|
|
|
366
|
-
|
|
370
|
+
git_str_dispose(&path);
|
|
367
371
|
}
|
|
368
372
|
|
|
369
373
|
if ((error = git_submodule_location(&location, sm)) < 0) {
|
|
@@ -378,17 +382,17 @@ int git_submodule__lookup_with_cache(
|
|
|
378
382
|
|
|
379
383
|
/* If it's not configured, we still check if there's a repo at the path */
|
|
380
384
|
if (git_repository_workdir(repo)) {
|
|
381
|
-
|
|
382
|
-
if (
|
|
385
|
+
git_str path = GIT_STR_INIT;
|
|
386
|
+
if (git_str_join3(&path, '/',
|
|
383
387
|
git_repository_workdir(repo),
|
|
384
388
|
name, DOT_GIT) < 0 ||
|
|
385
|
-
|
|
389
|
+
git_path_validate_str_length(NULL, &path) < 0)
|
|
386
390
|
return -1;
|
|
387
391
|
|
|
388
|
-
if (
|
|
392
|
+
if (git_fs_path_exists(path.ptr))
|
|
389
393
|
error = GIT_EEXISTS;
|
|
390
394
|
|
|
391
|
-
|
|
395
|
+
git_str_dispose(&path);
|
|
392
396
|
}
|
|
393
397
|
|
|
394
398
|
submodule_set_lookup_error(error, name);
|
|
@@ -405,22 +409,22 @@ int git_submodule__lookup_with_cache(
|
|
|
405
409
|
|
|
406
410
|
int git_submodule_name_is_valid(git_repository *repo, const char *name, int flags)
|
|
407
411
|
{
|
|
408
|
-
|
|
412
|
+
git_str buf = GIT_STR_INIT;
|
|
409
413
|
int error, isvalid;
|
|
410
414
|
|
|
411
415
|
if (flags == 0)
|
|
412
|
-
flags =
|
|
416
|
+
flags = GIT_FS_PATH_REJECT_FILESYSTEM_DEFAULTS;
|
|
413
417
|
|
|
414
418
|
/* Avoid allocating a new string if we can avoid it */
|
|
415
419
|
if (strchr(name, '\\') != NULL) {
|
|
416
|
-
if ((error =
|
|
420
|
+
if ((error = git_fs_path_normalize_slashes(&buf, name)) < 0)
|
|
417
421
|
return error;
|
|
418
422
|
} else {
|
|
419
|
-
|
|
423
|
+
git_str_attach_notowned(&buf, name, strlen(name));
|
|
420
424
|
}
|
|
421
425
|
|
|
422
|
-
isvalid =
|
|
423
|
-
|
|
426
|
+
isvalid = git_path_is_valid(repo, buf.ptr, 0, flags);
|
|
427
|
+
git_str_dispose(&buf);
|
|
424
428
|
|
|
425
429
|
return isvalid;
|
|
426
430
|
}
|
|
@@ -554,7 +558,7 @@ int git_submodule__map(git_repository *repo, git_strmap *map)
|
|
|
554
558
|
int error = 0;
|
|
555
559
|
git_index *idx = NULL;
|
|
556
560
|
git_tree *head = NULL;
|
|
557
|
-
|
|
561
|
+
git_str path = GIT_STR_INIT;
|
|
558
562
|
git_submodule *sm;
|
|
559
563
|
git_config *mods = NULL;
|
|
560
564
|
bool has_workdir;
|
|
@@ -613,7 +617,7 @@ cleanup:
|
|
|
613
617
|
/* TODO: if we got an error, mark submodule config as invalid? */
|
|
614
618
|
git_index_free(idx);
|
|
615
619
|
git_tree_free(head);
|
|
616
|
-
|
|
620
|
+
git_str_dispose(&path);
|
|
617
621
|
return error;
|
|
618
622
|
}
|
|
619
623
|
|
|
@@ -682,7 +686,7 @@ static int submodule_repo_init(
|
|
|
682
686
|
bool use_gitlink)
|
|
683
687
|
{
|
|
684
688
|
int error = 0;
|
|
685
|
-
|
|
689
|
+
git_str workdir = GIT_STR_INIT, repodir = GIT_STR_INIT;
|
|
686
690
|
git_repository_init_options initopt = GIT_REPOSITORY_INIT_OPTIONS_INIT;
|
|
687
691
|
git_repository *subrepo = NULL;
|
|
688
692
|
|
|
@@ -701,10 +705,10 @@ static int submodule_repo_init(
|
|
|
701
705
|
* Old style: sub-repo goes directly into repo/<name>/.git/
|
|
702
706
|
*/
|
|
703
707
|
if (use_gitlink) {
|
|
704
|
-
error =
|
|
708
|
+
error = git_repository__item_path(&repodir, parent_repo, GIT_REPOSITORY_ITEM_MODULES);
|
|
705
709
|
if (error < 0)
|
|
706
710
|
goto cleanup;
|
|
707
|
-
error =
|
|
711
|
+
error = git_str_joinpath(&repodir, repodir.ptr, path);
|
|
708
712
|
if (error < 0)
|
|
709
713
|
goto cleanup;
|
|
710
714
|
|
|
@@ -718,14 +722,57 @@ static int submodule_repo_init(
|
|
|
718
722
|
error = git_repository_init_ext(&subrepo, workdir.ptr, &initopt);
|
|
719
723
|
|
|
720
724
|
cleanup:
|
|
721
|
-
|
|
722
|
-
|
|
725
|
+
git_str_dispose(&workdir);
|
|
726
|
+
git_str_dispose(&repodir);
|
|
723
727
|
|
|
724
728
|
*out = subrepo;
|
|
725
729
|
|
|
726
730
|
return error;
|
|
727
731
|
}
|
|
728
732
|
|
|
733
|
+
static int git_submodule__resolve_url(
|
|
734
|
+
git_str *out,
|
|
735
|
+
git_repository *repo,
|
|
736
|
+
const char *url)
|
|
737
|
+
{
|
|
738
|
+
int error = 0;
|
|
739
|
+
git_str normalized = GIT_STR_INIT;
|
|
740
|
+
|
|
741
|
+
GIT_ASSERT_ARG(out);
|
|
742
|
+
GIT_ASSERT_ARG(repo);
|
|
743
|
+
GIT_ASSERT_ARG(url);
|
|
744
|
+
|
|
745
|
+
/* We do this in all platforms in case someone on Windows created the .gitmodules */
|
|
746
|
+
if (strchr(url, '\\')) {
|
|
747
|
+
if ((error = git_fs_path_normalize_slashes(&normalized, url)) < 0)
|
|
748
|
+
return error;
|
|
749
|
+
|
|
750
|
+
url = normalized.ptr;
|
|
751
|
+
}
|
|
752
|
+
|
|
753
|
+
|
|
754
|
+
if (git_fs_path_is_relative(url)) {
|
|
755
|
+
if (!(error = get_url_base(out, repo)))
|
|
756
|
+
error = git_fs_path_apply_relative(out, url);
|
|
757
|
+
} else if (strchr(url, ':') != NULL || url[0] == '/') {
|
|
758
|
+
error = git_str_sets(out, url);
|
|
759
|
+
} else {
|
|
760
|
+
git_error_set(GIT_ERROR_SUBMODULE, "invalid format for submodule URL");
|
|
761
|
+
error = -1;
|
|
762
|
+
}
|
|
763
|
+
|
|
764
|
+
git_str_dispose(&normalized);
|
|
765
|
+
return error;
|
|
766
|
+
}
|
|
767
|
+
|
|
768
|
+
int git_submodule_resolve_url(
|
|
769
|
+
git_buf *out,
|
|
770
|
+
git_repository *repo,
|
|
771
|
+
const char *url)
|
|
772
|
+
{
|
|
773
|
+
GIT_BUF_WRAP_PRIVATE(out, git_submodule__resolve_url, repo, url);
|
|
774
|
+
}
|
|
775
|
+
|
|
729
776
|
int git_submodule_add_setup(
|
|
730
777
|
git_submodule **out,
|
|
731
778
|
git_repository *repo,
|
|
@@ -736,7 +783,7 @@ int git_submodule_add_setup(
|
|
|
736
783
|
int error = 0;
|
|
737
784
|
git_config_backend *mods = NULL;
|
|
738
785
|
git_submodule *sm = NULL;
|
|
739
|
-
|
|
786
|
+
git_str name = GIT_STR_INIT, real_url = GIT_STR_INIT;
|
|
740
787
|
git_repository *subrepo = NULL;
|
|
741
788
|
bool path_occupied;
|
|
742
789
|
|
|
@@ -759,7 +806,7 @@ int git_submodule_add_setup(
|
|
|
759
806
|
if (git__prefixcmp(path, git_repository_workdir(repo)) == 0)
|
|
760
807
|
path += strlen(git_repository_workdir(repo));
|
|
761
808
|
|
|
762
|
-
if (
|
|
809
|
+
if (git_fs_path_root(path) >= 0) {
|
|
763
810
|
git_error_set(GIT_ERROR_SUBMODULE, "submodule path must be a relative path");
|
|
764
811
|
error = -1;
|
|
765
812
|
goto cleanup;
|
|
@@ -781,7 +828,7 @@ int git_submodule_add_setup(
|
|
|
781
828
|
return -1;
|
|
782
829
|
}
|
|
783
830
|
|
|
784
|
-
if ((error =
|
|
831
|
+
if ((error = git_str_printf(&name, "submodule.%s.path", path)) < 0 ||
|
|
785
832
|
(error = git_config_backend_set_string(mods, name.ptr, path)) < 0)
|
|
786
833
|
goto cleanup;
|
|
787
834
|
|
|
@@ -789,7 +836,7 @@ int git_submodule_add_setup(
|
|
|
789
836
|
(error = git_config_backend_set_string(mods, name.ptr, url)) < 0)
|
|
790
837
|
goto cleanup;
|
|
791
838
|
|
|
792
|
-
|
|
839
|
+
git_str_clear(&name);
|
|
793
840
|
|
|
794
841
|
/* init submodule repository and add origin remote as needed */
|
|
795
842
|
|
|
@@ -800,11 +847,11 @@ int git_submodule_add_setup(
|
|
|
800
847
|
/* if the repo does not already exist, then init a new repo and add it.
|
|
801
848
|
* Otherwise, just add the existing repo.
|
|
802
849
|
*/
|
|
803
|
-
if (!(
|
|
804
|
-
|
|
850
|
+
if (!(git_fs_path_exists(name.ptr) &&
|
|
851
|
+
git_fs_path_contains(&name, DOT_GIT))) {
|
|
805
852
|
|
|
806
853
|
/* resolve the actual URL to use */
|
|
807
|
-
if ((error =
|
|
854
|
+
if ((error = git_submodule__resolve_url(&real_url, repo, url)) < 0)
|
|
808
855
|
goto cleanup;
|
|
809
856
|
|
|
810
857
|
if ((error = submodule_repo_init(&subrepo, repo, path, real_url.ptr, use_gitlink)) < 0)
|
|
@@ -826,8 +873,8 @@ cleanup:
|
|
|
826
873
|
|
|
827
874
|
git_config_backend_free(mods);
|
|
828
875
|
git_repository_free(subrepo);
|
|
829
|
-
|
|
830
|
-
|
|
876
|
+
git_str_dispose(&real_url);
|
|
877
|
+
git_str_dispose(&name);
|
|
831
878
|
|
|
832
879
|
return error;
|
|
833
880
|
}
|
|
@@ -841,13 +888,13 @@ int git_submodule_repo_init(
|
|
|
841
888
|
git_repository *sub_repo = NULL;
|
|
842
889
|
const char *configured_url;
|
|
843
890
|
git_config *cfg = NULL;
|
|
844
|
-
|
|
891
|
+
git_str buf = GIT_STR_INIT;
|
|
845
892
|
|
|
846
893
|
GIT_ASSERT_ARG(out);
|
|
847
894
|
GIT_ASSERT_ARG(sm);
|
|
848
895
|
|
|
849
896
|
/* get the configured remote url of the submodule */
|
|
850
|
-
if ((error =
|
|
897
|
+
if ((error = git_str_printf(&buf, "submodule.%s.url", sm->name)) < 0 ||
|
|
851
898
|
(error = git_repository_config_snapshot(&cfg, sm->repo)) < 0 ||
|
|
852
899
|
(error = git_config_get_string(&configured_url, cfg, buf.ptr)) < 0 ||
|
|
853
900
|
(error = submodule_repo_init(&sub_repo, sm->repo, sm->path, configured_url, use_gitlink)) < 0)
|
|
@@ -857,7 +904,7 @@ int git_submodule_repo_init(
|
|
|
857
904
|
|
|
858
905
|
done:
|
|
859
906
|
git_config_free(cfg);
|
|
860
|
-
|
|
907
|
+
git_str_dispose(&buf);
|
|
861
908
|
return error;
|
|
862
909
|
}
|
|
863
910
|
|
|
@@ -881,7 +928,7 @@ int git_submodule_clone(git_repository **out, git_submodule *submodule, const gi
|
|
|
881
928
|
{
|
|
882
929
|
int error;
|
|
883
930
|
git_repository *clone;
|
|
884
|
-
|
|
931
|
+
git_str rel_path = GIT_STR_INIT;
|
|
885
932
|
git_submodule_update_options sub_opts = GIT_SUBMODULE_UPDATE_OPTIONS_INIT;
|
|
886
933
|
git_clone_options opts = GIT_CLONE_OPTIONS_INIT;
|
|
887
934
|
|
|
@@ -903,7 +950,7 @@ int git_submodule_clone(git_repository **out, git_submodule *submodule, const gi
|
|
|
903
950
|
if (error < 0)
|
|
904
951
|
goto cleanup;
|
|
905
952
|
|
|
906
|
-
error = git_clone__submodule(&clone, git_submodule_url(submodule),
|
|
953
|
+
error = git_clone__submodule(&clone, git_submodule_url(submodule), git_str_cstr(&rel_path), &opts);
|
|
907
954
|
if (error < 0)
|
|
908
955
|
goto cleanup;
|
|
909
956
|
|
|
@@ -913,7 +960,7 @@ int git_submodule_clone(git_repository **out, git_submodule *submodule, const gi
|
|
|
913
960
|
*out = clone;
|
|
914
961
|
|
|
915
962
|
cleanup:
|
|
916
|
-
|
|
963
|
+
git_str_dispose(&rel_path);
|
|
917
964
|
|
|
918
965
|
return error;
|
|
919
966
|
}
|
|
@@ -937,7 +984,7 @@ int git_submodule_add_to_index(git_submodule *sm, int write_index)
|
|
|
937
984
|
int error;
|
|
938
985
|
git_repository *sm_repo = NULL;
|
|
939
986
|
git_index *index;
|
|
940
|
-
|
|
987
|
+
git_str path = GIT_STR_INIT;
|
|
941
988
|
git_commit *head;
|
|
942
989
|
git_index_entry entry;
|
|
943
990
|
struct stat st;
|
|
@@ -997,7 +1044,7 @@ int git_submodule_add_to_index(git_submodule *sm, int write_index)
|
|
|
997
1044
|
|
|
998
1045
|
cleanup:
|
|
999
1046
|
git_repository_free(sm_repo);
|
|
1000
|
-
|
|
1047
|
+
git_str_dispose(&path);
|
|
1001
1048
|
return error;
|
|
1002
1049
|
}
|
|
1003
1050
|
|
|
@@ -1034,44 +1081,9 @@ const char *git_submodule_url(git_submodule *submodule)
|
|
|
1034
1081
|
return submodule->url;
|
|
1035
1082
|
}
|
|
1036
1083
|
|
|
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
1084
|
static int write_var(git_repository *repo, const char *name, const char *var, const char *val)
|
|
1073
1085
|
{
|
|
1074
|
-
|
|
1086
|
+
git_str key = GIT_STR_INIT;
|
|
1075
1087
|
git_config_backend *mods;
|
|
1076
1088
|
int error;
|
|
1077
1089
|
|
|
@@ -1079,7 +1091,7 @@ static int write_var(git_repository *repo, const char *name, const char *var, co
|
|
|
1079
1091
|
if (!mods)
|
|
1080
1092
|
return -1;
|
|
1081
1093
|
|
|
1082
|
-
if ((error =
|
|
1094
|
+
if ((error = git_str_printf(&key, "submodule.%s.%s", name, var)) < 0)
|
|
1083
1095
|
goto cleanup;
|
|
1084
1096
|
|
|
1085
1097
|
if (val)
|
|
@@ -1087,7 +1099,7 @@ static int write_var(git_repository *repo, const char *name, const char *var, co
|
|
|
1087
1099
|
else
|
|
1088
1100
|
error = git_config_backend_delete(mods, key.ptr);
|
|
1089
1101
|
|
|
1090
|
-
|
|
1102
|
+
git_str_dispose(&key);
|
|
1091
1103
|
|
|
1092
1104
|
cleanup:
|
|
1093
1105
|
git_config_backend_free(mods);
|
|
@@ -1227,7 +1239,7 @@ static int submodule_repo_create(
|
|
|
1227
1239
|
const char *path)
|
|
1228
1240
|
{
|
|
1229
1241
|
int error = 0;
|
|
1230
|
-
|
|
1242
|
+
git_str workdir = GIT_STR_INIT, repodir = GIT_STR_INIT;
|
|
1231
1243
|
git_repository_init_options initopt = GIT_REPOSITORY_INIT_OPTIONS_INIT;
|
|
1232
1244
|
git_repository *subrepo = NULL;
|
|
1233
1245
|
|
|
@@ -1249,18 +1261,18 @@ static int submodule_repo_create(
|
|
|
1249
1261
|
* <repo-dir>/modules/<name>/ with a gitlink in the
|
|
1250
1262
|
* sub-repo workdir directory to that repository.
|
|
1251
1263
|
*/
|
|
1252
|
-
error =
|
|
1264
|
+
error = git_repository__item_path(&repodir, parent_repo, GIT_REPOSITORY_ITEM_MODULES);
|
|
1253
1265
|
if (error < 0)
|
|
1254
1266
|
goto cleanup;
|
|
1255
|
-
error =
|
|
1267
|
+
error = git_str_joinpath(&repodir, repodir.ptr, path);
|
|
1256
1268
|
if (error < 0)
|
|
1257
1269
|
goto cleanup;
|
|
1258
1270
|
|
|
1259
1271
|
error = git_repository_init_ext(&subrepo, repodir.ptr, &initopt);
|
|
1260
1272
|
|
|
1261
1273
|
cleanup:
|
|
1262
|
-
|
|
1263
|
-
|
|
1274
|
+
git_str_dispose(&workdir);
|
|
1275
|
+
git_str_dispose(&repodir);
|
|
1264
1276
|
|
|
1265
1277
|
*out = subrepo;
|
|
1266
1278
|
|
|
@@ -1309,7 +1321,7 @@ int git_submodule_update(git_submodule *sm, int init, git_submodule_update_optio
|
|
|
1309
1321
|
git_repository *sub_repo = NULL;
|
|
1310
1322
|
git_remote *remote = NULL;
|
|
1311
1323
|
git_object *target_commit = NULL;
|
|
1312
|
-
|
|
1324
|
+
git_str buf = GIT_STR_INIT;
|
|
1313
1325
|
git_submodule_update_options update_options = GIT_SUBMODULE_UPDATE_OPTIONS_INIT;
|
|
1314
1326
|
git_clone_options clone_options = GIT_CLONE_OPTIONS_INIT;
|
|
1315
1327
|
|
|
@@ -1326,7 +1338,11 @@ int git_submodule_update(git_submodule *sm, int init, git_submodule_update_optio
|
|
|
1326
1338
|
/* Get the status of the submodule to determine if it is already initialized */
|
|
1327
1339
|
if ((error = git_submodule_status(&submodule_status, sm->repo, sm->name, GIT_SUBMODULE_IGNORE_UNSPECIFIED)) < 0)
|
|
1328
1340
|
goto done;
|
|
1329
|
-
|
|
1341
|
+
|
|
1342
|
+
/* If the submodule is configured but hasn't been added, skip it */
|
|
1343
|
+
if (submodule_status == GIT_SUBMODULE_STATUS_IN_CONFIG)
|
|
1344
|
+
goto done;
|
|
1345
|
+
|
|
1330
1346
|
/*
|
|
1331
1347
|
* If submodule work dir is not already initialized, check to see
|
|
1332
1348
|
* what we need to do (initialize, clone, return error...)
|
|
@@ -1337,10 +1353,10 @@ int git_submodule_update(git_submodule *sm, int init, git_submodule_update_optio
|
|
|
1337
1353
|
* info has been copied into .git/config
|
|
1338
1354
|
*/
|
|
1339
1355
|
if ((error = git_repository_config_snapshot(&config, sm->repo)) < 0 ||
|
|
1340
|
-
(error =
|
|
1356
|
+
(error = git_str_printf(&buf, "submodule.%s.url", git_submodule_name(sm))) < 0)
|
|
1341
1357
|
goto done;
|
|
1342
1358
|
|
|
1343
|
-
if ((error = git_config_get_string(&submodule_url, config,
|
|
1359
|
+
if ((error = git_config_get_string(&submodule_url, config, git_str_cstr(&buf))) < 0) {
|
|
1344
1360
|
/*
|
|
1345
1361
|
* If the error is not "not found" or if it is "not found" and we are not
|
|
1346
1362
|
* initializing the submodule, then return error.
|
|
@@ -1362,7 +1378,7 @@ int git_submodule_update(git_submodule *sm, int init, git_submodule_update_optio
|
|
|
1362
1378
|
config = NULL;
|
|
1363
1379
|
|
|
1364
1380
|
if ((error = git_repository_config_snapshot(&config, sm->repo)) < 0 ||
|
|
1365
|
-
(error = git_config_get_string(&submodule_url, config,
|
|
1381
|
+
(error = git_config_get_string(&submodule_url, config, git_str_cstr(&buf))) < 0)
|
|
1366
1382
|
goto done;
|
|
1367
1383
|
}
|
|
1368
1384
|
|
|
@@ -1377,7 +1393,7 @@ int git_submodule_update(git_submodule *sm, int init, git_submodule_update_optio
|
|
|
1377
1393
|
*/
|
|
1378
1394
|
clone_options.checkout_opts.checkout_strategy = GIT_CHECKOUT_NONE;
|
|
1379
1395
|
|
|
1380
|
-
if ((error =
|
|
1396
|
+
if ((error = git_clone__submodule(&sub_repo, submodule_url, sm->path, &clone_options)) < 0 ||
|
|
1381
1397
|
(error = git_repository_set_head_detached(sub_repo, git_submodule_index_id(sm))) < 0 ||
|
|
1382
1398
|
(error = git_checkout_head(sub_repo, &update_options.checkout_opts)) != 0)
|
|
1383
1399
|
goto done;
|
|
@@ -1420,7 +1436,7 @@ int git_submodule_update(git_submodule *sm, int init, git_submodule_update_optio
|
|
|
1420
1436
|
}
|
|
1421
1437
|
|
|
1422
1438
|
done:
|
|
1423
|
-
|
|
1439
|
+
git_str_dispose(&buf);
|
|
1424
1440
|
git_config_free(config);
|
|
1425
1441
|
git_object_free(target_commit);
|
|
1426
1442
|
git_remote_free(remote);
|
|
@@ -1433,7 +1449,7 @@ int git_submodule_init(git_submodule *sm, int overwrite)
|
|
|
1433
1449
|
{
|
|
1434
1450
|
int error;
|
|
1435
1451
|
const char *val;
|
|
1436
|
-
|
|
1452
|
+
git_str key = GIT_STR_INIT, effective_submodule_url = GIT_STR_INIT;
|
|
1437
1453
|
git_config *cfg = NULL;
|
|
1438
1454
|
|
|
1439
1455
|
if (!sm->url) {
|
|
@@ -1447,8 +1463,8 @@ int git_submodule_init(git_submodule *sm, int overwrite)
|
|
|
1447
1463
|
|
|
1448
1464
|
/* write "submodule.NAME.url" */
|
|
1449
1465
|
|
|
1450
|
-
if ((error =
|
|
1451
|
-
(error =
|
|
1466
|
+
if ((error = git_submodule__resolve_url(&effective_submodule_url, sm->repo, sm->url)) < 0 ||
|
|
1467
|
+
(error = git_str_printf(&key, "submodule.%s.url", sm->name)) < 0 ||
|
|
1452
1468
|
(error = git_config__update_entry(
|
|
1453
1469
|
cfg, key.ptr, effective_submodule_url.ptr, overwrite != 0, false)) < 0)
|
|
1454
1470
|
goto cleanup;
|
|
@@ -1458,7 +1474,7 @@ int git_submodule_init(git_submodule *sm, int overwrite)
|
|
|
1458
1474
|
val = (sm->update == GIT_SUBMODULE_UPDATE_CHECKOUT) ?
|
|
1459
1475
|
NULL : submodule_update_to_str(sm->update);
|
|
1460
1476
|
|
|
1461
|
-
if ((error =
|
|
1477
|
+
if ((error = git_str_printf(&key, "submodule.%s.update", sm->name)) < 0 ||
|
|
1462
1478
|
(error = git_config__update_entry(
|
|
1463
1479
|
cfg, key.ptr, val, overwrite != 0, false)) < 0)
|
|
1464
1480
|
goto cleanup;
|
|
@@ -1467,15 +1483,15 @@ int git_submodule_init(git_submodule *sm, int overwrite)
|
|
|
1467
1483
|
|
|
1468
1484
|
cleanup:
|
|
1469
1485
|
git_config_free(cfg);
|
|
1470
|
-
|
|
1471
|
-
|
|
1486
|
+
git_str_dispose(&key);
|
|
1487
|
+
git_str_dispose(&effective_submodule_url);
|
|
1472
1488
|
|
|
1473
1489
|
return error;
|
|
1474
1490
|
}
|
|
1475
1491
|
|
|
1476
1492
|
int git_submodule_sync(git_submodule *sm)
|
|
1477
1493
|
{
|
|
1478
|
-
|
|
1494
|
+
git_str key = GIT_STR_INIT, url = GIT_STR_INIT, remote_name = GIT_STR_INIT;
|
|
1479
1495
|
git_repository *smrepo = NULL;
|
|
1480
1496
|
git_config *cfg = NULL;
|
|
1481
1497
|
int error = 0;
|
|
@@ -1487,8 +1503,8 @@ int git_submodule_sync(git_submodule *sm)
|
|
|
1487
1503
|
|
|
1488
1504
|
/* copy URL over to config only if it already exists */
|
|
1489
1505
|
if ((error = git_repository_config__weakptr(&cfg, sm->repo)) < 0 ||
|
|
1490
|
-
(error =
|
|
1491
|
-
(error =
|
|
1506
|
+
(error = git_str_printf(&key, "submodule.%s.url", sm->name)) < 0 ||
|
|
1507
|
+
(error = git_submodule__resolve_url(&url, sm->repo, sm->url)) < 0 ||
|
|
1492
1508
|
(error = git_config__update_entry(cfg, key.ptr, url.ptr, true, true)) < 0)
|
|
1493
1509
|
goto out;
|
|
1494
1510
|
|
|
@@ -1501,9 +1517,9 @@ int git_submodule_sync(git_submodule *sm)
|
|
|
1501
1517
|
goto out;
|
|
1502
1518
|
|
|
1503
1519
|
if (lookup_head_remote_key(&remote_name, smrepo) == 0) {
|
|
1504
|
-
if ((error =
|
|
1520
|
+
if ((error = git_str_join3(&key, '.', "remote", remote_name.ptr, "url")) < 0)
|
|
1505
1521
|
goto out;
|
|
1506
|
-
} else if ((error =
|
|
1522
|
+
} else if ((error = git_str_sets(&key, "remote.origin.url")) < 0) {
|
|
1507
1523
|
goto out;
|
|
1508
1524
|
}
|
|
1509
1525
|
|
|
@@ -1512,9 +1528,9 @@ int git_submodule_sync(git_submodule *sm)
|
|
|
1512
1528
|
|
|
1513
1529
|
out:
|
|
1514
1530
|
git_repository_free(smrepo);
|
|
1515
|
-
|
|
1516
|
-
|
|
1517
|
-
|
|
1531
|
+
git_str_dispose(&remote_name);
|
|
1532
|
+
git_str_dispose(&key);
|
|
1533
|
+
git_str_dispose(&url);
|
|
1518
1534
|
return error;
|
|
1519
1535
|
}
|
|
1520
1536
|
|
|
@@ -1522,7 +1538,7 @@ static int git_submodule__open(
|
|
|
1522
1538
|
git_repository **subrepo, git_submodule *sm, bool bare)
|
|
1523
1539
|
{
|
|
1524
1540
|
int error;
|
|
1525
|
-
|
|
1541
|
+
git_str path = GIT_STR_INIT;
|
|
1526
1542
|
unsigned int flags = GIT_REPOSITORY_OPEN_NO_SEARCH;
|
|
1527
1543
|
const char *wd;
|
|
1528
1544
|
|
|
@@ -1535,7 +1551,7 @@ static int git_submodule__open(
|
|
|
1535
1551
|
|
|
1536
1552
|
wd = git_repository_workdir(sm->repo);
|
|
1537
1553
|
|
|
1538
|
-
if (
|
|
1554
|
+
if (git_str_join3(&path, '/', wd, sm->path, DOT_GIT) < 0)
|
|
1539
1555
|
return -1;
|
|
1540
1556
|
|
|
1541
1557
|
sm->flags = sm->flags &
|
|
@@ -1557,17 +1573,17 @@ static int git_submodule__open(
|
|
|
1557
1573
|
sm->flags |= GIT_SUBMODULE_STATUS__WD_OID_VALID;
|
|
1558
1574
|
else
|
|
1559
1575
|
git_error_clear();
|
|
1560
|
-
} else if (
|
|
1576
|
+
} else if (git_fs_path_exists(path.ptr)) {
|
|
1561
1577
|
sm->flags |= GIT_SUBMODULE_STATUS__WD_SCANNED |
|
|
1562
1578
|
GIT_SUBMODULE_STATUS_IN_WD;
|
|
1563
1579
|
} else {
|
|
1564
|
-
|
|
1580
|
+
git_str_rtruncate_at_char(&path, '/'); /* remove "/.git" */
|
|
1565
1581
|
|
|
1566
|
-
if (
|
|
1582
|
+
if (git_fs_path_isdir(path.ptr))
|
|
1567
1583
|
sm->flags |= GIT_SUBMODULE_STATUS__WD_SCANNED;
|
|
1568
1584
|
}
|
|
1569
1585
|
|
|
1570
|
-
|
|
1586
|
+
git_str_dispose(&path);
|
|
1571
1587
|
|
|
1572
1588
|
return error;
|
|
1573
1589
|
}
|
|
@@ -1921,13 +1937,13 @@ static int submodule_parse_recurse(git_submodule_recurse_t *out, const char *val
|
|
|
1921
1937
|
return 0;
|
|
1922
1938
|
}
|
|
1923
1939
|
|
|
1924
|
-
static int get_value(const char **out, git_config *cfg,
|
|
1940
|
+
static int get_value(const char **out, git_config *cfg, git_str *buf, const char *name, const char *field)
|
|
1925
1941
|
{
|
|
1926
1942
|
int error;
|
|
1927
1943
|
|
|
1928
|
-
|
|
1944
|
+
git_str_clear(buf);
|
|
1929
1945
|
|
|
1930
|
-
if ((error =
|
|
1946
|
+
if ((error = git_str_printf(buf, "submodule.%s.%s", name, field)) < 0 ||
|
|
1931
1947
|
(error = git_config_get_string(out, cfg, buf->ptr)) < 0)
|
|
1932
1948
|
return error;
|
|
1933
1949
|
|
|
@@ -1944,7 +1960,7 @@ static bool looks_like_command_line_option(const char *s)
|
|
|
1944
1960
|
|
|
1945
1961
|
static int submodule_read_config(git_submodule *sm, git_config *cfg)
|
|
1946
1962
|
{
|
|
1947
|
-
|
|
1963
|
+
git_str key = GIT_STR_INIT;
|
|
1948
1964
|
const char *value;
|
|
1949
1965
|
int error, in_config = 0;
|
|
1950
1966
|
|
|
@@ -2025,7 +2041,7 @@ static int submodule_read_config(git_submodule *sm, git_config *cfg)
|
|
|
2025
2041
|
error = 0;
|
|
2026
2042
|
|
|
2027
2043
|
cleanup:
|
|
2028
|
-
|
|
2044
|
+
git_str_dispose(&key);
|
|
2029
2045
|
return error;
|
|
2030
2046
|
}
|
|
2031
2047
|
|
|
@@ -2034,7 +2050,7 @@ static int submodule_load_each(const git_config_entry *entry, void *payload)
|
|
|
2034
2050
|
lfc_data *data = payload;
|
|
2035
2051
|
const char *namestart, *property;
|
|
2036
2052
|
git_strmap *map = data->map;
|
|
2037
|
-
|
|
2053
|
+
git_str name = GIT_STR_INIT;
|
|
2038
2054
|
git_submodule *sm;
|
|
2039
2055
|
int error, isvalid;
|
|
2040
2056
|
|
|
@@ -2049,7 +2065,7 @@ static int submodule_load_each(const git_config_entry *entry, void *payload)
|
|
|
2049
2065
|
|
|
2050
2066
|
property++;
|
|
2051
2067
|
|
|
2052
|
-
if ((error =
|
|
2068
|
+
if ((error = git_str_set(&name, namestart, property - namestart -1)) < 0)
|
|
2053
2069
|
return error;
|
|
2054
2070
|
|
|
2055
2071
|
isvalid = git_submodule_name_is_valid(data->repo, name.ptr, 0);
|
|
@@ -2083,24 +2099,24 @@ static int submodule_load_each(const git_config_entry *entry, void *payload)
|
|
|
2083
2099
|
error = 0;
|
|
2084
2100
|
|
|
2085
2101
|
done:
|
|
2086
|
-
|
|
2102
|
+
git_str_dispose(&name);
|
|
2087
2103
|
return error;
|
|
2088
2104
|
}
|
|
2089
2105
|
|
|
2090
2106
|
static int submodule_load_from_wd_lite(git_submodule *sm)
|
|
2091
2107
|
{
|
|
2092
|
-
|
|
2108
|
+
git_str path = GIT_STR_INIT;
|
|
2093
2109
|
|
|
2094
2110
|
if (git_repository_workdir_path(&path, sm->repo, sm->path) < 0)
|
|
2095
2111
|
return -1;
|
|
2096
2112
|
|
|
2097
|
-
if (
|
|
2113
|
+
if (git_fs_path_isdir(path.ptr))
|
|
2098
2114
|
sm->flags |= GIT_SUBMODULE_STATUS__WD_SCANNED;
|
|
2099
2115
|
|
|
2100
|
-
if (
|
|
2116
|
+
if (git_fs_path_contains(&path, DOT_GIT))
|
|
2101
2117
|
sm->flags |= GIT_SUBMODULE_STATUS_IN_WD;
|
|
2102
2118
|
|
|
2103
|
-
|
|
2119
|
+
git_str_dispose(&path);
|
|
2104
2120
|
return 0;
|
|
2105
2121
|
}
|
|
2106
2122
|
|
|
@@ -2112,7 +2128,7 @@ static int submodule_load_from_wd_lite(git_submodule *sm)
|
|
|
2112
2128
|
static int gitmodules_snapshot(git_config **snap, git_repository *repo)
|
|
2113
2129
|
{
|
|
2114
2130
|
git_config *mods = NULL;
|
|
2115
|
-
|
|
2131
|
+
git_str path = GIT_STR_INIT;
|
|
2116
2132
|
int error;
|
|
2117
2133
|
|
|
2118
2134
|
if (git_repository_workdir(repo) == NULL)
|
|
@@ -2123,7 +2139,7 @@ static int gitmodules_snapshot(git_config **snap, git_repository *repo)
|
|
|
2123
2139
|
|
|
2124
2140
|
if ((error = git_config_open_ondisk(&mods, path.ptr)) < 0)
|
|
2125
2141
|
goto cleanup;
|
|
2126
|
-
|
|
2142
|
+
git_str_dispose(&path);
|
|
2127
2143
|
|
|
2128
2144
|
if ((error = git_config_snapshot(snap, mods)) < 0)
|
|
2129
2145
|
goto cleanup;
|
|
@@ -2133,7 +2149,7 @@ static int gitmodules_snapshot(git_config **snap, git_repository *repo)
|
|
|
2133
2149
|
cleanup:
|
|
2134
2150
|
if (mods)
|
|
2135
2151
|
git_config_free(mods);
|
|
2136
|
-
|
|
2152
|
+
git_str_dispose(&path);
|
|
2137
2153
|
|
|
2138
2154
|
return error;
|
|
2139
2155
|
}
|
|
@@ -2142,14 +2158,14 @@ static git_config_backend *open_gitmodules(
|
|
|
2142
2158
|
git_repository *repo,
|
|
2143
2159
|
int okay_to_create)
|
|
2144
2160
|
{
|
|
2145
|
-
|
|
2161
|
+
git_str path = GIT_STR_INIT;
|
|
2146
2162
|
git_config_backend *mods = NULL;
|
|
2147
2163
|
|
|
2148
2164
|
if (git_repository_workdir(repo) != NULL) {
|
|
2149
2165
|
if (git_repository_workdir_path(&path, repo, GIT_MODULES_FILE) != 0)
|
|
2150
2166
|
return NULL;
|
|
2151
2167
|
|
|
2152
|
-
if (okay_to_create ||
|
|
2168
|
+
if (okay_to_create || git_fs_path_isfile(path.ptr)) {
|
|
2153
2169
|
/* git_config_backend_from_file should only fail if OOM */
|
|
2154
2170
|
if (git_config_backend_from_file(&mods, path.ptr) < 0)
|
|
2155
2171
|
mods = NULL;
|
|
@@ -2161,17 +2177,17 @@ static git_config_backend *open_gitmodules(
|
|
|
2161
2177
|
}
|
|
2162
2178
|
}
|
|
2163
2179
|
|
|
2164
|
-
|
|
2180
|
+
git_str_dispose(&path);
|
|
2165
2181
|
|
|
2166
2182
|
return mods;
|
|
2167
2183
|
}
|
|
2168
2184
|
|
|
2169
2185
|
/* Lookup name of remote of the local tracking branch HEAD points to */
|
|
2170
|
-
static int lookup_head_remote_key(
|
|
2186
|
+
static int lookup_head_remote_key(git_str *remote_name, git_repository *repo)
|
|
2171
2187
|
{
|
|
2172
2188
|
int error;
|
|
2173
2189
|
git_reference *head = NULL;
|
|
2174
|
-
|
|
2190
|
+
git_str upstream_name = GIT_STR_INIT;
|
|
2175
2191
|
|
|
2176
2192
|
/* lookup and dereference HEAD */
|
|
2177
2193
|
if ((error = git_repository_head(&head, repo)) < 0)
|
|
@@ -2190,18 +2206,18 @@ static int lookup_head_remote_key(git_buf *remote_name, git_repository *repo)
|
|
|
2190
2206
|
}
|
|
2191
2207
|
|
|
2192
2208
|
/* lookup remote tracking branch of HEAD */
|
|
2193
|
-
if ((error =
|
|
2209
|
+
if ((error = git_branch__upstream_name(
|
|
2194
2210
|
&upstream_name,
|
|
2195
2211
|
repo,
|
|
2196
2212
|
git_reference_name(head))) < 0)
|
|
2197
2213
|
goto done;
|
|
2198
2214
|
|
|
2199
2215
|
/* lookup remote of remote tracking branch */
|
|
2200
|
-
if ((error =
|
|
2216
|
+
if ((error = git_branch__remote_name(remote_name, repo, upstream_name.ptr)) < 0)
|
|
2201
2217
|
goto done;
|
|
2202
2218
|
|
|
2203
2219
|
done:
|
|
2204
|
-
|
|
2220
|
+
git_str_dispose(&upstream_name);
|
|
2205
2221
|
git_reference_free(head);
|
|
2206
2222
|
|
|
2207
2223
|
return error;
|
|
@@ -2211,13 +2227,13 @@ done:
|
|
|
2211
2227
|
static int lookup_head_remote(git_remote **remote, git_repository *repo)
|
|
2212
2228
|
{
|
|
2213
2229
|
int error;
|
|
2214
|
-
|
|
2230
|
+
git_str remote_name = GIT_STR_INIT;
|
|
2215
2231
|
|
|
2216
2232
|
/* lookup remote of remote tracking branch name */
|
|
2217
2233
|
if (!(error = lookup_head_remote_key(&remote_name, repo)))
|
|
2218
2234
|
error = git_remote_lookup(remote, repo, remote_name.ptr);
|
|
2219
2235
|
|
|
2220
|
-
|
|
2236
|
+
git_str_dispose(&remote_name);
|
|
2221
2237
|
|
|
2222
2238
|
return error;
|
|
2223
2239
|
}
|
|
@@ -2240,14 +2256,14 @@ static int lookup_default_remote(git_remote **remote, git_repository *repo)
|
|
|
2240
2256
|
return error;
|
|
2241
2257
|
}
|
|
2242
2258
|
|
|
2243
|
-
static int get_url_base(
|
|
2259
|
+
static int get_url_base(git_str *url, git_repository *repo)
|
|
2244
2260
|
{
|
|
2245
2261
|
int error;
|
|
2246
2262
|
git_worktree *wt = NULL;
|
|
2247
2263
|
git_remote *remote = NULL;
|
|
2248
2264
|
|
|
2249
2265
|
if ((error = lookup_default_remote(&remote, repo)) == 0) {
|
|
2250
|
-
error =
|
|
2266
|
+
error = git_str_sets(url, git_remote_url(remote));
|
|
2251
2267
|
goto out;
|
|
2252
2268
|
} else if (error != GIT_ENOTFOUND)
|
|
2253
2269
|
goto out;
|
|
@@ -2258,9 +2274,9 @@ static int get_url_base(git_buf *url, git_repository *repo)
|
|
|
2258
2274
|
if (git_repository_is_worktree(repo)) {
|
|
2259
2275
|
if ((error = git_worktree_open_from_repository(&wt, repo)) < 0)
|
|
2260
2276
|
goto out;
|
|
2261
|
-
error =
|
|
2277
|
+
error = git_str_sets(url, wt->parent_path);
|
|
2262
2278
|
} else {
|
|
2263
|
-
error =
|
|
2279
|
+
error = git_str_sets(url, git_repository_workdir(repo));
|
|
2264
2280
|
}
|
|
2265
2281
|
|
|
2266
2282
|
out:
|