Re: [PATCH] worktree add: improve message for ambiguous remote branch name
"D. Ben Knoble" <[email protected]>
| Newsgroups | org.kernel.vger.git |
|---|---|
| Message-ID | <CALnO6CAdr0ft8KFgGCFX9ueKUdX9-2DwB+SNs3Q8ykw4ne=54Q@mail.gmail.com> |
Hi Yoichi, On Sat, Aug 8, 2026 at 4:21 AM Yoichi NAKAYAMA via GitGitGadget <[email protected]> wrote: > > From: Yoichi NAKAYAMA <[email protected]> > > Display a descriptive message when DWIM fails. > > Add advice on how to work around this by specifying the fully > qualified name or by setting checkout.defaultRemote. > > Signed-off-by: Yoichi NAKAYAMA <[email protected]> > --- [snip] > -static char *dwim_branch(const char *path, char **new_branch) > +static char *dwim_branch(const struct add_opts *opts, const char *path, char **new_branch) > { > int n; > int branch_exists; > @@ -781,8 +791,14 @@ static char *dwim_branch(const char *path, char **new_branch) > > *new_branch = branchname; > if (guess_remote) { > + int num_matches = 0; > struct object_id oid; > - char *remote = unique_tracking_name(*new_branch, &oid, NULL); > + char *remote = unique_tracking_name(*new_branch, &oid, &num_matches); > + if (!opts->quiet && !remote && num_matches > 1) { > + if (advice_enabled(ADVICE_CHECKOUT_AMBIGUOUS_REMOTE_BRANCH_NAME)) > + advise(_(message_advice_ambiguous_remote_tracking_branch)); > + warning(_("'%s' matched multiple (%d) remote tracking branches\n"), branchname, num_matches); > + } > return remote; > } > return NULL; I suppose the extra warning won't hurt anyone's workflow :) so that's good. [snip] > @@ -904,10 +920,16 @@ static int add(int ac, const char **av, const char *prefix, > > commit = lookup_commit_reference_by_name(branch); > if (!commit) { > - remote = unique_tracking_name(branch, &oid, NULL); > + int num_matches = 0; > + remote = unique_tracking_name(branch, &oid, &num_matches); > if (remote) { > new_branch = branch; > branch = new_branch_to_free = remote; > + } else if (num_matches > 1) { > + if (!opts.quiet && advice_enabled(ADVICE_CHECKOUT_AMBIGUOUS_REMOTE_BRANCH_NAME)) { > + advise(_(message_advice_ambiguous_remote_tracking_branch)); > + } > + die(_("'%s' matched multiple (%d) remote tracking branches"), branch, num_matches); > } > } We would now die() here where we didn't before. I'm not suggesting that is wrong (I haven't given it much thought), but I was surprised to see it in the code without mention in the message, which I've left quoted above. In particular, the proposed log message talks about giving new advice, so I wasn't expecting us to abort. Now, it may be that this case already causes an error later on (I haven't analyzed that), in which case dying early with a better diagnostic is definitely helpful. If that's the case, it would be nice to spell that out for the rest of us :) If not, I would want to know why we can die() here without bothering anyone's workflow that is expecting us to carry on. Thanks! -- D. Ben Knoble