Re: [PATCH] worktree add: shouldn't dwim if -b or -B is given

Yoichi Nakayama <[email protected]> Wed, 5 Aug 2026 19:57:29 +0900
Newsgroups org.kernel.vger.git
Message-ID <CAF5D8-sYhrSP8D_TUPLqDUWci=GK4DNzOxJaVr_kd5c776NKyA@mail.gmail.com>
On Wed, Aug 5, 2026 at 2:11 AM Junio C Hamano <[email protected]> wrote:
> Stepping back a bit, though, does this change the behavior when
> 'branch' *does* resolve to a commit (hence, the DWIM is already
> bypassed and 'new_branch' or 'branch' are not nuked)?  When 'ac' is
> equal to 2 and 'new_branch' is supplied, we used to call:
>
>         if (!strcmp(branch, "HEAD"))
>                 can_use_local_refs(&opts);
>
> inside the block you are now skipping.  It looks to me that this
> patch also changes behavior when the user says:
>
>         $ git worktree add -b <new-branch> <path> HEAD
>
> by not calling can_use_local_refs(), whose only effect in this
> context is that it may issue a warning() to the user.  I do not know
> offhand what the ramifications of this difference are.

It is better to emit warnings for the given arguments whenever possible,
so I think we should not skip the step mentioned above.
I'll modify the condition.

> > diff --git a/t/t2400-worktree-add.sh b/t/t2400-worktree-add.sh
> > index 87b926728a..9cbf84861d 100755
> > --- a/t/t2400-worktree-add.sh
> > +++ b/t/t2400-worktree-add.sh
> > @@ -621,6 +621,16 @@ test_expect_success '"add" <path> <branch> dwims' '
> >       )
> >  '
> >
> > +test_expect_success '"add" <path> <branch> does not dwim with -b' '
> > +     test_when_finished rm -rf repo_upstream repo_dwim foo &&
> > +     setup_remote_repo repo_upstream repo_dwim &&
> > +     git init repo_dwim &&
> > +     (
> > +             cd repo_dwim &&
> > +             test_must_fail git worktree add -b branch ../foo foo
> > +     )
> > +'
>
> Two comments.
>
>  * You call setup_remote_repo(), which takes two names, runs
>    'git init' on each of them, and prepares those repositories.  Do
>    you need to run 'git init repo_dwim' to initialize it again?
>    What for?

'git init' was unnecessary.  It was included because I copied
an existing test; I'll remove it.

>  * Expecting a failure to create a worktree may be fine, but can we
>    say how we expect the command to fail as well?  Perhaps you can
>    capture the error message while ensuring that the command fails,
>    and then check the error message to make sure it failed in the
>    expected way, or something like that.

Expected error is 'fatal: invalid reference: foo'. I'll add test_grep.

Thanks,
-- 
Yoichi NAKAYAMA