diff options
author | Eric Sunshine <sunshine@sunshineco.com> | 2020-06-24 22:05:41 +0300 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2020-06-25 03:39:28 +0300 |
commit | 5f4ee57ad9513f96db8d936816f5ce916b4eddcd (patch) | |
tree | e40486e62a04adeb1028f0f5b1b593729aed5297 /worktree.c | |
parent | af6b65d45ef179ed52087e80cb089f6b2349f4ec (diff) |
worktree: avoid dead-code in conditional
get_worktrees() retrieves a list of all worktrees associated with a
repository, including the main worktree. The location of the main
worktree is determined by get_main_worktree() which needs to handle
three distinct cases for the main worktree after absolute-path
conversion:
* <bare-repository>/.
* <main-worktree>/.git/. (when $CWD is .git)
* <main-worktree>/.git (when $CWD is any worktree)
They all need to be normalized to just the <path> portion, dropping any
"/." or "/.git" suffix.
It turns out, however, that get_main_worktree() was only handling the
first and last cases, i.e.:
if (!strip_suffix(path, "/.git"))
strip_suffix(path, "/.");
This shortcoming was addressed by 45f274fbb1 (get_main_worktree(): allow
it to be called in the Git directory, 2020-02-23) by changing the logic
to:
strip_suffix(path, "/.");
if (!strip_suffix(path, "/.git"))
strip_suffix(path, "/.");
which makes the final strip_suffix() invocation dead-code.
Fix this oversight by enumerating the three distinct cases explicitly
rather than attempting to strip the suffix(es) incrementally.
Signed-off-by: Eric Sunshine <sunshine@sunshineco.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'worktree.c')
-rw-r--r-- | worktree.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/worktree.c b/worktree.c index eba4fd3a03..8d77336792 100644 --- a/worktree.c +++ b/worktree.c @@ -50,9 +50,9 @@ static struct worktree *get_main_worktree(void) struct strbuf worktree_path = STRBUF_INIT; strbuf_add_absolute_path(&worktree_path, get_git_common_dir()); - strbuf_strip_suffix(&worktree_path, "/."); - if (!strbuf_strip_suffix(&worktree_path, "/.git")) - strbuf_strip_suffix(&worktree_path, "/."); + if (!strbuf_strip_suffix(&worktree_path, "/.git/.") && /* in .git */ + !strbuf_strip_suffix(&worktree_path, "/.git")) /* in worktree */ + strbuf_strip_suffix(&worktree_path, "/."); /* in bare repo */ worktree = xcalloc(1, sizeof(*worktree)); worktree->path = strbuf_detach(&worktree_path, NULL); |