aboutsummaryrefslogtreecommitdiffstats
path: root/worktree.c
diff options
context:
space:
mode:
Diffstat (limited to 'worktree.c')
-rw-r--r--worktree.c32
1 files changed, 24 insertions, 8 deletions
diff --git a/worktree.c b/worktree.c
index 3b94535963..d5d07d7a84 100644
--- a/worktree.c
+++ b/worktree.c
@@ -183,7 +183,7 @@ char *get_worktree_git_dir(const struct worktree *wt)
else if (!wt->id)
return xstrdup(repo_get_common_dir(the_repository));
else
- return xstrdup(git_common_path("worktrees/%s", wt->id));
+ return repo_common_path(the_repository, "worktrees/%s", wt->id);
}
static struct worktree *find_worktree_by_suffix(struct worktree **list,
@@ -314,6 +314,7 @@ int validate_worktree(const struct worktree *wt, struct strbuf *errmsg,
{
struct strbuf wt_path = STRBUF_INIT;
struct strbuf realpath = STRBUF_INIT;
+ struct strbuf buf = STRBUF_INIT;
char *path = NULL;
int err, ret = -1;
@@ -343,7 +344,7 @@ int validate_worktree(const struct worktree *wt, struct strbuf *errmsg,
if (!is_absolute_path(wt->path)) {
strbuf_addf_gently(errmsg,
_("'%s' file does not contain absolute path to the working tree location"),
- git_common_path("worktrees/%s/gitdir", wt->id));
+ repo_common_path_replace(the_repository, &buf, "worktrees/%s/gitdir", wt->id));
goto done;
}
@@ -365,14 +366,16 @@ int validate_worktree(const struct worktree *wt, struct strbuf *errmsg,
goto done;
}
- strbuf_realpath(&realpath, git_common_path("worktrees/%s", wt->id), 1);
+ strbuf_realpath(&realpath, repo_common_path_replace(the_repository, &buf, "worktrees/%s", wt->id), 1);
ret = fspathcmp(path, realpath.buf);
if (ret)
strbuf_addf_gently(errmsg, _("'%s' does not point back to '%s'"),
- wt->path, git_common_path("worktrees/%s", wt->id));
+ wt->path, repo_common_path_replace(the_repository, &buf,
+ "worktrees/%s", wt->id));
done:
free(path);
+ strbuf_release(&buf);
strbuf_release(&wt_path);
strbuf_release(&realpath);
return ret;
@@ -384,11 +387,13 @@ void update_worktree_location(struct worktree *wt, const char *path_,
struct strbuf path = STRBUF_INIT;
struct strbuf dotgit = STRBUF_INIT;
struct strbuf gitdir = STRBUF_INIT;
+ char *wt_gitdir;
if (is_main_worktree(wt))
BUG("can't relocate main worktree");
- strbuf_realpath(&gitdir, git_common_path("worktrees/%s/gitdir", wt->id), 1);
+ wt_gitdir = repo_common_path(the_repository, "worktrees/%s/gitdir", wt->id);
+ strbuf_realpath(&gitdir, wt_gitdir, 1);
strbuf_realpath(&path, path_, 1);
strbuf_addf(&dotgit, "%s/.git", path.buf);
if (fspathcmp(wt->path, path.buf)) {
@@ -400,6 +405,7 @@ void update_worktree_location(struct worktree *wt, const char *path_,
strbuf_release(&path);
strbuf_release(&dotgit);
strbuf_release(&gitdir);
+ free(wt_gitdir);
}
int is_worktree_being_rebased(const struct worktree *wt,
@@ -585,6 +591,7 @@ static void repair_gitfile(struct worktree *wt,
struct strbuf backlink = STRBUF_INIT;
char *dotgit_contents = NULL;
const char *repair = NULL;
+ char *path = NULL;
int err;
/* missing worktree can't be repaired */
@@ -596,7 +603,8 @@ static void repair_gitfile(struct worktree *wt,
goto done;
}
- strbuf_realpath(&repo, git_common_path("worktrees/%s", wt->id), 1);
+ path = repo_common_path(the_repository, "worktrees/%s", wt->id);
+ strbuf_realpath(&repo, path, 1);
strbuf_addf(&dotgit, "%s/.git", wt->path);
strbuf_addf(&gitdir, "%s/gitdir", repo.buf);
dotgit_contents = xstrdup_or_null(read_gitfile_gently(dotgit.buf, &err));
@@ -626,6 +634,7 @@ static void repair_gitfile(struct worktree *wt,
done:
free(dotgit_contents);
+ free(path);
strbuf_release(&repo);
strbuf_release(&dotgit);
strbuf_release(&gitdir);
@@ -657,11 +666,13 @@ void repair_worktree_after_gitdir_move(struct worktree *wt, const char *old_path
struct strbuf gitdir = STRBUF_INIT;
struct strbuf dotgit = STRBUF_INIT;
int is_relative_path;
+ char *path = NULL;
if (is_main_worktree(wt))
goto done;
- strbuf_realpath(&gitdir, git_common_path("worktrees/%s/gitdir", wt->id), 1);
+ path = repo_common_path(the_repository, "worktrees/%s/gitdir", wt->id);
+ strbuf_realpath(&gitdir, path, 1);
if (strbuf_read_file(&dotgit, gitdir.buf, 0) < 0)
goto done;
@@ -680,6 +691,7 @@ void repair_worktree_after_gitdir_move(struct worktree *wt, const char *old_path
done:
strbuf_release(&gitdir);
strbuf_release(&dotgit);
+ free(path);
}
void repair_worktrees_after_gitdir_move(const char *old_path)
@@ -871,7 +883,11 @@ int should_prune_worktree(const char *id, struct strbuf *reason, char **wtpath,
ssize_t read_result;
*wtpath = NULL;
- strbuf_realpath(&repo, git_common_path("worktrees/%s", id), 1);
+
+ path = repo_common_path(the_repository, "worktrees/%s", id);
+ strbuf_realpath(&repo, path, 1);
+ FREE_AND_NULL(path);
+
strbuf_addf(&gitdir, "%s/gitdir", repo.buf);
if (!is_directory(repo.buf)) {
strbuf_addstr(reason, _("not a valid directory"));