On Wed, Mar 30, 2022 at 3:27 PM Ævar Arnfjörð Bjarmason <avarab@xxxxxxxxx> wrote: > > > On Wed, Mar 30 2022, Tao Klerks via GitGitGadget wrote: > > Nit: I think it's been Junio's preference not to introduce C99 comments, Argh, my apologies, bad habits. I wonder whether anyone has any tooling to help catch this kind of thing - I'll ask in GitGitGadget, anyway. > > @@ -219,6 +233,7 @@ static int inherit_tracking(struct tracking *tracking, const char *orig_ref) > > return 0; > > } > > > > + > > Stray whitespace? Thx, I will check more carefully next time. > > > /* > > * Used internally to set the branch.<new_ref>.{remote,merge} config > > * settings so that branch 'new_ref' tracks 'orig_ref'. Unlike > > @@ -232,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, > > + .ambiguous_remotes = STRING_LIST_INIT_DUP, > > + }; > > > > 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)) > > goto cleanup; > > > > @@ -252,9 +271,38 @@ static void setup_tracking(const char *new_ref, const char *orig_ref, > > goto cleanup; > > } > > > > - 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); > > This isn't per-se new, but I wonder if while we're at it we shold just > quote '%s' here, which we'd usually do. I.e. this message isn't new, but > referring again to "ref %s" (and not "ref '%s'") below is. > I will fix the below, but I would default to not changing the above unless someone thinks we should (not sure what the expectations are around changing error messages unnecessarily) > > + if (advice_enabled(ADVICE_AMBIGUOUS_FETCH_REFSPEC)) { > > + struct strbuf remotes_advice = STRBUF_INIT; > > + struct string_list_item *item; > > + > > + for_each_string_list_item(item, &ftb_cb.ambiguous_remotes) { > > Nit: drop braces, not needed. Thx, will do. > > > + /* > > + * TRANSLATORS: This is a line listing a remote with duplicate > > + * refspecs in the advice message below. For RTL languages you'll > > + * probably want to swap the "%s" and leading " " space around. > > + */ > > + strbuf_addf(&remotes_advice, _(" %s\n"), item->string); > > + } > > + > > Per the TRANSLATORS comments in get_short_oid(), it's also good to have > one here in front of advice(). E.g.: > > /* > * TRANSLATORS: The second argument is a \n-delimited list of > * duplicate refspecs, composed above. > */ > Will do, thx. > > + advise(_("There are multiple remotes whose fetch refspecs map to the remote\n" > > + "tracking ref %s:\n" > > + "%s" > > + "\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."), > > + orig_ref, > > + remotes_advice.buf > > + ); > > Nit: The usual style for multi-line arguments is to "fill" lines until > you're at 79 characters, so these last three lines (including the ");") > can all go on the "tracking namespaces" line (until they're at 79, then > wrap)> > Yep, another oversight, thx. > > + strbuf_release(&remotes_advice); > > + } > > + exit(status); > > + } > > Other than the minor nits noted above this version looks good to me, and > I think addresses both the translation concerns I brought up, and the > "let's not do advice() work if we don't need it" concern by Junio et al. > Awesome, thx!