mirror of
https://github.com/git/git.git
synced 2025-12-12 20:36:24 +01:00
path: refactor repo_submodule_path() family of functions
As explained in an earlier commit, we're refactoring path-related functions to provide a consistent interface for computing paths into the commondir, gitdir and worktree. Refactor the "submodule" family of functions accordingly. Note that in contrast to the other `repo_*_path()` families, we have to pass in the repository as a non-constant pointer. This is because we end up calling `repo_read_gitmodules()` deep down in the callstack, which may end up modifying the repository. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
committed by
Junio C Hamano
parent
f9467895d8
commit
f5c714e2a7
37
path.c
37
path.c
@@ -560,14 +560,15 @@ const char *repo_worktree_path_replace(const struct repository *repo,
|
||||
}
|
||||
|
||||
/* Returns 0 on success, negative on failure. */
|
||||
static int do_submodule_path(struct strbuf *buf, const char *path,
|
||||
static int do_submodule_path(struct repository *repo,
|
||||
struct strbuf *buf, const char *path,
|
||||
const char *fmt, va_list args)
|
||||
{
|
||||
struct strbuf git_submodule_common_dir = STRBUF_INIT;
|
||||
struct strbuf git_submodule_dir = STRBUF_INIT;
|
||||
int ret;
|
||||
|
||||
ret = submodule_to_gitdir(the_repository, &git_submodule_dir, path);
|
||||
ret = submodule_to_gitdir(repo, &git_submodule_dir, path);
|
||||
if (ret)
|
||||
goto cleanup;
|
||||
|
||||
@@ -586,13 +587,14 @@ cleanup:
|
||||
return ret;
|
||||
}
|
||||
|
||||
char *git_pathdup_submodule(const char *path, const char *fmt, ...)
|
||||
char *repo_submodule_path(struct repository *repo,
|
||||
const char *path, const char *fmt, ...)
|
||||
{
|
||||
int err;
|
||||
va_list args;
|
||||
struct strbuf buf = STRBUF_INIT;
|
||||
va_start(args, fmt);
|
||||
err = do_submodule_path(&buf, path, fmt, args);
|
||||
err = do_submodule_path(repo, &buf, path, fmt, args);
|
||||
va_end(args);
|
||||
if (err) {
|
||||
strbuf_release(&buf);
|
||||
@@ -601,16 +603,35 @@ char *git_pathdup_submodule(const char *path, const char *fmt, ...)
|
||||
return strbuf_detach(&buf, NULL);
|
||||
}
|
||||
|
||||
int strbuf_git_path_submodule(struct strbuf *buf, const char *path,
|
||||
const char *fmt, ...)
|
||||
const char *repo_submodule_path_append(struct repository *repo,
|
||||
struct strbuf *buf,
|
||||
const char *path,
|
||||
const char *fmt, ...)
|
||||
{
|
||||
int err;
|
||||
va_list args;
|
||||
va_start(args, fmt);
|
||||
err = do_submodule_path(buf, path, fmt, args);
|
||||
err = do_submodule_path(repo, buf, path, fmt, args);
|
||||
va_end(args);
|
||||
if (err)
|
||||
return NULL;
|
||||
return buf->buf;
|
||||
}
|
||||
|
||||
return err;
|
||||
const char *repo_submodule_path_replace(struct repository *repo,
|
||||
struct strbuf *buf,
|
||||
const char *path,
|
||||
const char *fmt, ...)
|
||||
{
|
||||
int err;
|
||||
va_list args;
|
||||
strbuf_reset(buf);
|
||||
va_start(args, fmt);
|
||||
err = do_submodule_path(repo, buf, path, fmt, args);
|
||||
va_end(args);
|
||||
if (err)
|
||||
return NULL;
|
||||
return buf->buf;
|
||||
}
|
||||
|
||||
void repo_common_pathv(const struct repository *repo,
|
||||
|
||||
Reference in New Issue
Block a user