зеркало из https://github.com/microsoft/git.git
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>
This commit is contained in:
Родитель
af6b65d45e
Коммит
5f4ee57ad9
|
@ -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);
|
||||
|
|
Загрузка…
Ссылка в новой задаче