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>
This commit is contained in:

committed by
Junio C Hamano

parent
077be78d7f
commit
bbbb7de7ac
35
path.c
35
path.c
@ -471,39 +471,19 @@ const char *worktree_git_path(const struct worktree *wt, const char *fmt, ...)
|
||||
}
|
||||
|
||||
/* Returns 0 on success, negative on failure. */
|
||||
#define SUBMODULE_PATH_ERR_NOT_CONFIGURED -1
|
||||
static int do_submodule_path(struct strbuf *buf, const char *path,
|
||||
const char *fmt, va_list args)
|
||||
{
|
||||
const char *git_dir;
|
||||
struct strbuf git_submodule_common_dir = STRBUF_INIT;
|
||||
struct strbuf git_submodule_dir = STRBUF_INIT;
|
||||
const struct submodule *sub;
|
||||
int err = 0;
|
||||
int ret;
|
||||
|
||||
strbuf_addstr(buf, path);
|
||||
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, path);
|
||||
if (!sub) {
|
||||
err = SUBMODULE_PATH_ERR_NOT_CONFIGURED;
|
||||
goto cleanup;
|
||||
}
|
||||
strbuf_reset(buf);
|
||||
strbuf_git_path(buf, "%s/%s", "modules", sub->name);
|
||||
}
|
||||
|
||||
strbuf_addch(buf, '/');
|
||||
strbuf_addbuf(&git_submodule_dir, buf);
|
||||
ret = submodule_to_gitdir(&git_submodule_dir, path);
|
||||
if (ret)
|
||||
goto cleanup;
|
||||
|
||||
strbuf_complete(&git_submodule_dir, '/');
|
||||
strbuf_addbuf(buf, &git_submodule_dir);
|
||||
strbuf_vaddf(buf, fmt, args);
|
||||
|
||||
if (get_common_dir_noenv(&git_submodule_common_dir, git_submodule_dir.buf))
|
||||
@ -514,8 +494,7 @@ static int do_submodule_path(struct strbuf *buf, const char *path,
|
||||
cleanup:
|
||||
strbuf_release(&git_submodule_dir);
|
||||
strbuf_release(&git_submodule_common_dir);
|
||||
|
||||
return err;
|
||||
return ret;
|
||||
}
|
||||
|
||||
char *git_pathdup_submodule(const char *path, const char *fmt, ...)
|
||||
|
Reference in New Issue
Block a user