Skip to content

Commit 1c4854e

Browse files
sunshinecogitster
authored andcommitted
worktree: drop bogus and unnecessary path munging
The content of .git/worktrees/<id>/gitdir must be a path of the form "/path/to/worktree/.git". Any other content would be indicative of a corrupt "gitdir" file. To determine the path of the worktree itself one merely strips the "/.git" suffix, and this is indeed how the worktree path was determined from inception. However, 5193490 (worktree: add a function to get worktree details, 2015-10-08) extended the path manipulation in a mysterious way. If it is unable to strip "/.git" from the path, then it instead reports the current working directory as the linked worktree's path: if (!strbuf_strip_suffix(&worktree_path, "/.git")) { strbuf_reset(&worktree_path); strbuf_add_absolute_path(&worktree_path, "."); strbuf_strip_suffix(&worktree_path, "/."); } This logic is clearly bogus; it can never be generally correct behavior. It materialized out of thin air in 5193490 with neither explanation nor tests to illustrate a case in which it would be desirable. It's possible that this logic was introduced to somehow deal with a corrupt "gitdir" file, so that it returns _some_ sort of meaningful value, but returning the current working directory is not helpful. In fact, it is quite misleading (except in the one specific case when the current directory is the worktree whose "gitdir" entry is corrupt). Moreover, reporting the corrupt value to the user, rather than fibbing about it and hiding it outright, is more helpful since it may aid in diagnosing the problem. Therefore, drop this bogus path munging and restore the logic to the original behavior of merely stripping "/.git". Signed-off-by: Eric Sunshine <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent 246756f commit 1c4854e

File tree

1 file changed

+1
-6
lines changed

1 file changed

+1
-6
lines changed

worktree.c

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -82,13 +82,8 @@ static struct worktree *get_linked_worktree(const char *id)
8282
if (strbuf_read_file(&worktree_path, path.buf, 0) <= 0)
8383
/* invalid gitdir file */
8484
goto done;
85-
8685
strbuf_rtrim(&worktree_path);
87-
if (!strbuf_strip_suffix(&worktree_path, "/.git")) {
88-
strbuf_reset(&worktree_path);
89-
strbuf_add_absolute_path(&worktree_path, ".");
90-
strbuf_strip_suffix(&worktree_path, "/.");
91-
}
86+
strbuf_strip_suffix(&worktree_path, "/.git");
9287

9388
worktree = xcalloc(1, sizeof(*worktree));
9489
worktree->path = strbuf_detach(&worktree_path, NULL);

0 commit comments

Comments
 (0)