mirror of
https://github.com/git/git.git
synced 2025-12-12 20:36:24 +01:00
worktree: add write_worktree_linking_files() function
A new helper function, `write_worktree_linking_files()`, centralizes the logic for computing and writing either relative or absolute paths, based on the provided configuration. This function accepts `strbuf` pointers to both the worktree’s `.git` link and the repository’s `gitdir`, and then writes the appropriate path to each. The `relativeWorktrees` extension is automatically set when a worktree is linked with relative paths. Signed-off-by: Caleb White <cdwhite3@pm.me> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
committed by
Junio C Hamano
parent
5976310916
commit
4dac9e3c01
35
worktree.c
35
worktree.c
@@ -1032,3 +1032,38 @@ cleanup:
|
||||
free(main_worktree_file);
|
||||
return res;
|
||||
}
|
||||
|
||||
void write_worktree_linking_files(struct strbuf dotgit, struct strbuf gitdir,
|
||||
int use_relative_paths)
|
||||
{
|
||||
struct strbuf path = STRBUF_INIT;
|
||||
struct strbuf repo = STRBUF_INIT;
|
||||
struct strbuf tmp = STRBUF_INIT;
|
||||
|
||||
strbuf_addbuf(&path, &dotgit);
|
||||
strbuf_strip_suffix(&path, "/.git");
|
||||
strbuf_realpath(&path, path.buf, 1);
|
||||
strbuf_addbuf(&repo, &gitdir);
|
||||
strbuf_strip_suffix(&repo, "/gitdir");
|
||||
strbuf_realpath(&repo, repo.buf, 1);
|
||||
|
||||
if (use_relative_paths && !the_repository->repository_format_relative_worktrees) {
|
||||
if (upgrade_repository_format(1) < 0)
|
||||
die(_("unable to upgrade repository format to support relative worktrees"));
|
||||
if (git_config_set_gently("extensions.relativeWorktrees", "true"))
|
||||
die(_("unable to set extensions.relativeWorktrees setting"));
|
||||
the_repository->repository_format_relative_worktrees = 1;
|
||||
}
|
||||
|
||||
if (use_relative_paths) {
|
||||
write_file(gitdir.buf, "%s/.git", relative_path(path.buf, repo.buf, &tmp));
|
||||
write_file(dotgit.buf, "gitdir: %s", relative_path(repo.buf, path.buf, &tmp));
|
||||
} else {
|
||||
write_file(gitdir.buf, "%s/.git", path.buf);
|
||||
write_file(dotgit.buf, "gitdir: %s", repo.buf);
|
||||
}
|
||||
|
||||
strbuf_release(&path);
|
||||
strbuf_release(&repo);
|
||||
strbuf_release(&tmp);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user