diff options
author | Nguyễn Thái Ngọc Duy <pclouds@gmail.com> | 2017-03-26 09:42:30 +0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2017-03-27 10:23:40 -0700 |
commit | bbbb7de7ac69e66c9263bd0e220172fe717b3f54 (patch) | |
tree | 80bf04c465a9c57847c1bda53ffde33ea5bcacd6 /submodule.c | |
parent | 077be78d7ff0d44cab311da315b2f8dbd2a0d57b (diff) | |
download | git-bbbb7de7ac69e66c9263bd0e220172fe717b3f54.tar.gz git-bbbb7de7ac69e66c9263bd0e220172fe717b3f54.tar.xz |
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.c | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/submodule.c b/submodule.c index 3200b7bb2..a31f68812 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; +} |