Re: [PATCH v3 13/16] ref-filter: allow porcelain to translate messages in the output

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



cc'ing Matthieu since this patch was initially written by him.

On Thu, Mar 31, 2016 at 3:28 AM, Junio C Hamano <gitster@xxxxxxxxx> wrote:
> Karthik Nayak <karthik.188@xxxxxxxxx> 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
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]