Re: [PATCH v3 13/16] ref-filter: allow porcelain to translate messages in the output
- From
Karthik Nayak <karthik.188@gmail.com>
- Date
- Apr 1, 2016, 19:00 UTC
- Message-ID
- <CAOLa=ZQjxmVHuXc0fZioe9OLi9vjNwgHQq-8vf1opWxbuedM9Q@mail.gmail.com>
- In-Reply-To
- <xmqqa8lfsk5e.fsf@gitster.mtv.corp.google.com>
cc'ing Matthieu since this patch was initially written by him.
On Thu, Mar 31, 2016 at 3:28 AM, Junio C Hamano <gitster@pobox.com> wrote:
Show 88 quoted lines
> Karthik Nayak <karthik.188@gmail.com> writes:
>
>> +static struct ref_msg {
>> + const char *gone;
>> + const char *ahead;
>> + const char *behind;
>> + const char *ahead_behind;
>> +} msgs = {
>> + "gone",
>> + "ahead %d",
>> + "behind %d",
>> + "ahead %d, behind %d"
>> +};
>> +
>> +void setup_ref_filter_porcelain_msg(void)
>> +{
>> + msgs.gone = _("gone");
>> + msgs.ahead = _("ahead %d");
>> + msgs.behind = _("behind %d");
>> + msgs.ahead_behind = _("ahead %d, behind %d");
>> +}
>
> I do not think this patch is wrong, but I wonder if it would be
> sufficient to have a single bit in file-scope static variable and
> flip it in setup_ref_filter_porcelain_msg(). I.e.
>
> static int use_porcelain_msg; /* false by default */
>
> void setup_ref_filter_porcelain_msg(void)
> {
> use_porcelain_msg = 1;
> }
>
> static const char *P_(const char *msg)
> {
> return use_porcelain_msg ? _(msg) : msg;
> }
>
> and then mark the message up perhaps like so:
>
> - *s = xstrdup("gone");
> + *s = xstrdup(P_("gone"));
>
> which may make things much simpler.
>
> We'd need to update Makefile to recognize X_() as another keyword;
> I'd think something like this should do:
>
> XGETTEXT_FLAGS_C = $(XGETTEXT_FLAGS) --language=C \
> - --keyword=_ --keyword=N_ --keyword="Q_:1,2"
> + --keyword=_ --keyword=N_ --keyword=P_ --keyword="Q_:1,2"
>
>
>> typedef enum { FIELD_STR, FIELD_ULONG, FIELD_TIME } cmp_type;
>>
>> struct align {
>> @@ -1097,15 +1117,15 @@ static void fill_remote_ref_details(struct used_atom *atom, const char *refname,
>> else if (atom->u.remote_ref.option == RR_TRACK) {
>> if (stat_tracking_info(branch, &num_ours,
>> &num_theirs, NULL)) {
>> - *s = xstrdup("gone");
>> + *s = xstrdup(msgs.gone);
>> } else if (!num_ours && !num_theirs)
>> *s = "";
>> else if (!num_ours)
>> - *s = xstrfmt("behind %d", num_theirs);
>> + *s = xstrfmt(msgs.behind, num_theirs);
>> else if (!num_theirs)
>> - *s = xstrfmt("ahead %d", num_ours);
>> + *s = xstrfmt(msgs.ahead, num_ours);
>> else
>> - *s = xstrfmt("ahead %d, behind %d",
>> + *s = xstrfmt(msgs.ahead_behind,
>> num_ours, num_theirs);
>> if (!atom->u.remote_ref.nobracket && *s[0]) {
>> const char *to_free = *s;
>> diff --git a/ref-filter.h b/ref-filter.h
>> index 0014b92..da17145 100644
>> --- a/ref-filter.h
>> +++ b/ref-filter.h
>> @@ -111,5 +111,7 @@ struct ref_sorting *ref_default_sorting(void);
>> int parse_opt_merge_filter(const struct option *opt, const char *arg, int unset);
>> /* Get the current HEAD's description */
>> char *get_head_description(void);
>> +/* Set up translated strings in the output. */
>> +void setup_ref_filter_porcelain_msg(void);
>>
>> #endif /* REF_FILTER_H */I'm not totally knowledgeable about how porcelain works, although Matthieu did give me a brief explanation. I guess it'd better to hear his thoughts on this. For me both the current patch and your suggestion, seem good to go.
-- Regards, Karthik Nayak