On Tue, Mar 22 2022, Tao Klerks via GitGitGadget wrote: > From: Tao Klerks <tao@xxxxxxxxxx> > [...] Looking much better! > diff --git a/Documentation/config/advice.txt b/Documentation/config/advice.txt > index 063eec2511d..abfac4f664b 100644 > --- a/Documentation/config/advice.txt > +++ b/Documentation/config/advice.txt > @@ -126,4 +126,8 @@ advice.*:: > Advice shown when either linkgit:git-add[1] or linkgit:git-rm[1] > is asked to update index entries outside the current sparse > checkout. > + ambiguousFetchRefspec:: > + Advice shown when branch tracking relationship setup fails due > + to multiple remotes' refspecs mapping to the same remote > + tracking namespace in the repo. Let's add this in alphabetical section order. It's *somewhat* true of the order now, but for some, but in any case I've got a WIP patch to sort these, so since it's new adding it at the top would save us the churn :) > +struct find_tracked_branch_cb { > + struct tracking *tracking; > + struct strbuf remotes_advice; > +}; Nice, thanks! > static int find_tracked_branch(struct remote *remote, void *priv) > { > - struct tracking *tracking = priv; > + struct find_tracked_branch_cb *ftb = priv; > + struct tracking *tracking = ftb->tracking; > > if (!remote_find_tracking(remote, &tracking->spec)) { > if (++tracking->matches == 1) { > @@ -28,6 +34,7 @@ static int find_tracked_branch(struct remote *remote, void *priv) > free(tracking->spec.src); > string_list_clear(tracking->srcs, 0); > } > + strbuf_addf(&ftb->remotes_advice, " %s\n", remote->name); Do this as: strbuf_addf([...], _(" %s\n"), [...]); And add a TRANSLATORS comment similar to show_ambiguous_object() in object-name.c. I.e. the alignment needs to be translatable for RTL languages. > +static const char ambiguous_refspec_advice_pre[] = > +N_("\n" > +"There are multiple remotes whose fetch refspecs map to the remote\n" > +"tracking ref";) > +static const char ambiguous_refspec_advice_post[] = > +N_("This is typically a configuration error.\n" > +"\n" > +"To support setting up tracking branches, ensure that\n" > +"different remotes' fetch refspecs map into different\n" > +"tracking namespaces.\n"); These were split up before since we incrementally built the message.... Also, is the \n at the beginning/end really needed? > /* > * This is called when new_ref is branched off of orig_ref, and tries > * to infer the settings for branch.<new_ref>.{remote,merge} from the > @@ -228,12 +247,16 @@ static void setup_tracking(const char *new_ref, const char *orig_ref, > struct tracking tracking; > struct string_list tracking_srcs = STRING_LIST_INIT_DUP; > int config_flags = quiet ? 0 : BRANCH_CONFIG_VERBOSE; > + struct find_tracked_branch_cb ftb_cb = { > + .tracking = &tracking, > + .remotes_advice = STRBUF_INIT, > + }; > > memset(&tracking, 0, sizeof(tracking)); > tracking.spec.dst = (char *)orig_ref; > tracking.srcs = &tracking_srcs; > if (track != BRANCH_TRACK_INHERIT) > - for_each_remote(find_tracked_branch, &tracking); > + for_each_remote(find_tracked_branch, &ftb_cb); > else if (inherit_tracking(&tracking, orig_ref)) > return; > > @@ -248,9 +271,18 @@ static void setup_tracking(const char *new_ref, const char *orig_ref, > return; > } > > - if (tracking.matches > 1) > - die(_("not tracking: ambiguous information for ref %s"), > - orig_ref); > + if (tracking.matches > 1) { > + int status = die_message(_("not tracking: ambiguous information for ref %s"), > + orig_ref); > + if (advice_enabled(ADVICE_AMBIGUOUS_FETCH_REFSPEC)) > + advise("%s %s:\n%s\n%s", > + _(ambiguous_refspec_advice_pre), > + orig_ref, > + ftb_cb.remotes_advice.buf, > + _(ambiguous_refspec_advice_post) > + ); ...but now we don't, so this should just be inlined here. I.e. made it one big translatable _() message, the only parameters need to be the orig_ref and the "remote_advice" buf. We're also missing a strbuf_release() here. You can just add it to the "cleanup" omitted from the context: strbuf_release(&ftb_cb.remotes_advice);