path: refactor repo_worktree_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 "worktree" family of functions accordingly. 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
bdfc07bfdf
commit
93a8cfaf3c
30
path.c
30
path.c
@@ -519,9 +519,6 @@ char *repo_worktree_path(const struct repository *repo, const char *fmt, ...)
|
|||||||
struct strbuf path = STRBUF_INIT;
|
struct strbuf path = STRBUF_INIT;
|
||||||
va_list args;
|
va_list args;
|
||||||
|
|
||||||
if (!repo->worktree)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
va_start(args, fmt);
|
va_start(args, fmt);
|
||||||
do_worktree_path(repo, &path, fmt, args);
|
do_worktree_path(repo, &path, fmt, args);
|
||||||
va_end(args);
|
va_end(args);
|
||||||
@@ -529,18 +526,37 @@ char *repo_worktree_path(const struct repository *repo, const char *fmt, ...)
|
|||||||
return strbuf_detach(&path, NULL);
|
return strbuf_detach(&path, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
void strbuf_repo_worktree_path(struct strbuf *sb,
|
const char *repo_worktree_path_append(const struct repository *repo,
|
||||||
const struct repository *repo,
|
struct strbuf *sb,
|
||||||
const char *fmt, ...)
|
const char *fmt, ...)
|
||||||
{
|
{
|
||||||
va_list args;
|
va_list args;
|
||||||
|
|
||||||
if (!repo->worktree)
|
if (!repo->worktree)
|
||||||
return;
|
return NULL;
|
||||||
|
|
||||||
va_start(args, fmt);
|
va_start(args, fmt);
|
||||||
do_worktree_path(repo, sb, fmt, args);
|
do_worktree_path(repo, sb, fmt, args);
|
||||||
va_end(args);
|
va_end(args);
|
||||||
|
|
||||||
|
return sb->buf;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *repo_worktree_path_replace(const struct repository *repo,
|
||||||
|
struct strbuf *sb,
|
||||||
|
const char *fmt, ...)
|
||||||
|
{
|
||||||
|
va_list args;
|
||||||
|
|
||||||
|
strbuf_reset(sb);
|
||||||
|
if (!repo->worktree)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
va_start(args, fmt);
|
||||||
|
do_worktree_path(repo, sb, fmt, args);
|
||||||
|
va_end(args);
|
||||||
|
|
||||||
|
return sb->buf;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Returns 0 on success, negative on failure. */
|
/* Returns 0 on success, negative on failure. */
|
||||||
|
|||||||
20
path.h
20
path.h
@@ -75,24 +75,22 @@ const char *worktree_git_path(struct repository *r,
|
|||||||
__attribute__((format (printf, 3, 4)));
|
__attribute__((format (printf, 3, 4)));
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Return a path into the worktree of repository `repo`.
|
* The `repo_worktree_path` family of functions will construct a path into a
|
||||||
|
* repository's worktree.
|
||||||
*
|
*
|
||||||
* If the repository doesn't have a worktree NULL is returned.
|
* Returns a `NULL` pointer in case the repository has no worktree.
|
||||||
*/
|
*/
|
||||||
char *repo_worktree_path(const struct repository *repo,
|
char *repo_worktree_path(const struct repository *repo,
|
||||||
const char *fmt, ...)
|
const char *fmt, ...)
|
||||||
__attribute__((format (printf, 2, 3)));
|
__attribute__((format (printf, 2, 3)));
|
||||||
|
const char *repo_worktree_path_append(const struct repository *repo,
|
||||||
/*
|
struct strbuf *sb,
|
||||||
* Construct a path into the worktree of repository `repo` and append it
|
|
||||||
* to the provided buffer `sb`.
|
|
||||||
*
|
|
||||||
* If the repository doesn't have a worktree nothing will be appended to `sb`.
|
|
||||||
*/
|
|
||||||
void strbuf_repo_worktree_path(struct strbuf *sb,
|
|
||||||
const struct repository *repo,
|
|
||||||
const char *fmt, ...)
|
const char *fmt, ...)
|
||||||
__attribute__((format (printf, 3, 4)));
|
__attribute__((format (printf, 3, 4)));
|
||||||
|
const char *repo_worktree_path_replace(const struct repository *repo,
|
||||||
|
struct strbuf *sb,
|
||||||
|
const char *fmt, ...)
|
||||||
|
__attribute__((format (printf, 3, 4)));
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Return a path into a submodule's git directory located at `path`. `path`
|
* Return a path into a submodule's git directory located at `path`. `path`
|
||||||
|
|||||||
@@ -312,8 +312,8 @@ int repo_submodule_init(struct repository *subrepo,
|
|||||||
struct strbuf worktree = STRBUF_INIT;
|
struct strbuf worktree = STRBUF_INIT;
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
|
||||||
strbuf_repo_worktree_path(&gitdir, superproject, "%s/.git", path);
|
repo_worktree_path_append(superproject, &gitdir, "%s/.git", path);
|
||||||
strbuf_repo_worktree_path(&worktree, superproject, "%s", path);
|
repo_worktree_path_append(superproject, &worktree, "%s", path);
|
||||||
|
|
||||||
if (repo_init(subrepo, gitdir.buf, worktree.buf)) {
|
if (repo_init(subrepo, gitdir.buf, worktree.buf)) {
|
||||||
/*
|
/*
|
||||||
|
|||||||
Reference in New Issue
Block a user