summaryrefslogtreecommitdiff
path: root/submodule.c
diff options
context:
space:
mode:
authorNguyễn Thái Ngọc Duy <pclouds@gmail.com>2017-03-26 02:42:30 (GMT)
committerJunio C Hamano <gitster@pobox.com>2017-03-27 17:23:40 (GMT)
commitbbbb7de7ac69e66c9263bd0e220172fe717b3f54 (patch)
tree80bf04c465a9c57847c1bda53ffde33ea5bcacd6 /submodule.c
parent077be78d7ff0d44cab311da315b2f8dbd2a0d57b (diff)
downloadgit-bbbb7de7ac69e66c9263bd0e220172fe717b3f54.zip
git-bbbb7de7ac69e66c9263bd0e220172fe717b3f54.tar.gz
git-bbbb7de7ac69e66c9263bd0e220172fe717b3f54.tar.bz2
path.c: move some code out of strbuf_git_path_submodule()
refs is learning to avoid path rewriting that is done by strbuf_git_path_submodule(). Factor out this code so it could be reused by refs_* functions. Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'submodule.c')
-rw-r--r--submodule.c31
1 files changed, 31 insertions, 0 deletions
diff --git a/submodule.c b/submodule.c
index 3200b7b..a31f688 100644
--- a/submodule.c
+++ b/submodule.c
@@ -1596,3 +1596,34 @@ const char *get_superproject_working_tree(void)
return ret;
}
+
+int submodule_to_gitdir(struct strbuf *buf, const char *submodule)
+{
+ const struct submodule *sub;
+ const char *git_dir;
+ int ret = 0;
+
+ strbuf_reset(buf);
+ strbuf_addstr(buf, submodule);
+ strbuf_complete(buf, '/');
+ strbuf_addstr(buf, ".git");
+
+ git_dir = read_gitfile(buf->buf);
+ if (git_dir) {
+ strbuf_reset(buf);
+ strbuf_addstr(buf, git_dir);
+ }
+ if (!is_git_directory(buf->buf)) {
+ gitmodules_config();
+ sub = submodule_from_path(null_sha1, submodule);
+ if (!sub) {
+ ret = -1;
+ goto cleanup;
+ }
+ strbuf_reset(buf);
+ strbuf_git_path(buf, "%s/%s", "modules", sub->name);
+ }
+
+cleanup:
+ return ret;
+}