git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: Matthieu Moy <Matthieu.Moy@grenoble-inp.fr>
To: Karthik Nayak <karthik.188@gmail.com>
Cc: Junio C Hamano <gitster@pobox.com>, Git <git@vger.kernel.org>,
	Jacob Keller <jacob.keller@gmail.com>
Subject: Re: [PATCH v3 13/16] ref-filter: allow porcelain to translate messages in the output
Date: Mon, 04 Apr 2016 10:05:30 +0200	[thread overview]
Message-ID: <vpqa8l9ztmd.fsf@anie.imag.fr> (raw)
In-Reply-To: <CAOLa=ZQjxmVHuXc0fZioe9OLi9vjNwgHQq-8vf1opWxbuedM9Q@mail.gmail.com> (Karthik Nayak's message of "Sat, 2 Apr 2016 00:30:27 +0530")

Karthik Nayak <karthik.188@gmail.com> writes:

> 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:
>> 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.

... but less evolutive. The non-translatable strings also need to be
cast in stone, while the translatable ones may be subject to future
improvements/tweaks. If they are already duplicated in the code, then
updating one won't change the other, but factoring them means that the
porcelain message can't easily be changed without modifying the plumbing
one.

I'm not sure how important it is in this case, but it was in the case of
setup_unpack_trees_porcelain which I took inspiration from when we
discussed this (actually, in setup_unpack_trees_porcelain, there's isn't
any translation even in porcelain).

Note that this can be worked around later by adding another function like

        static const char *get_message(const char *porcelain, const char *plumbing)
        {
                return use_porcelain_msg ? porcelain : plumbing;
        }

to be called with get_message(_("this ref was gone"), "gone") or so.

>> We'd need to update Makefile to recognize X_() as another keyword;

(I guess you meant P_, not X_)

>> 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"

I'm a bit reluctant to modifying the Makefile for something not really
build-related.

> 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.

In summary: both would work. No strong opinion from me, but I slightly
prefer the version in the patch (i.e. the one I suggested IIRC) to
Junio's version.

-- 
Matthieu Moy
http://www-verimag.imag.fr/~moy/

  reply	other threads:[~2016-04-04  8:05 UTC|newest]

Thread overview: 31+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-03-30  9:39 [PATCH v3 00/16] port branch.c to use ref-filter's printing options Karthik Nayak
2016-03-30  9:39 ` [PATCH v3 01/16] ref-filter: implement %(if), %(then), and %(else) atoms Karthik Nayak
2016-03-30  9:39 ` [PATCH v3 02/16] ref-filter: include reference to 'used_atom' within 'atom_value' Karthik Nayak
2016-03-30 22:12   ` Junio C Hamano
2016-03-30  9:39 ` [PATCH v3 03/16] ref-filter: implement %(if:equals=<string>) and %(if:notequals=<string>) Karthik Nayak
2016-03-30  9:39 ` [PATCH v3 04/16] ref-filter: modify "%(objectname:short)" to take length Karthik Nayak
2016-03-30  9:39 ` [PATCH v3 05/16] ref-filter: move get_head_description() from branch.c Karthik Nayak
2016-03-30 22:16   ` Junio C Hamano
2016-04-01 18:41     ` Karthik Nayak
2016-03-30  9:39 ` [PATCH v3 06/16] ref-filter: introduce format_ref_array_item() Karthik Nayak
2016-03-30  9:39 ` [PATCH v3 07/16] ref-filter: make %(upstream:track) prints "[gone]" for invalid upstreams Karthik Nayak
2016-03-30  9:39 ` [PATCH v3 08/16] ref-filter: add support for %(upstream:track,nobracket) Karthik Nayak
2016-03-30  9:39 ` [PATCH v3 09/16] ref-filter: make "%(symref)" atom work with the ':short' modifier Karthik Nayak
2016-03-30 22:17   ` Junio C Hamano
2016-04-01 18:13     ` Karthik Nayak
2016-03-30  9:39 ` [PATCH v3 10/16] ref-filter: introduce symref_atom_parser() Karthik Nayak
2016-03-30  9:39 ` [PATCH v3 11/16] ref-filter: introduce refname_atom_parser() Karthik Nayak
2016-03-30  9:39 ` [PATCH v3 12/16] ref-filter: add support for %(refname:dir) and %(refname:base) Karthik Nayak
2016-03-30  9:39 ` [PATCH v3 13/16] ref-filter: allow porcelain to translate messages in the output Karthik Nayak
2016-03-30 21:58   ` Junio C Hamano
2016-04-01 19:00     ` Karthik Nayak
2016-04-04  8:05       ` Matthieu Moy [this message]
2016-04-04 16:12         ` Junio C Hamano
2016-03-30  9:39 ` [PATCH v3 14/16] branch, tag: use porcelain output Karthik Nayak
2016-03-30  9:39 ` [PATCH v3 15/16] branch: use ref-filter printing APIs Karthik Nayak
2016-03-30  9:40 ` [PATCH v3 16/16] branch: implement '--format' option Karthik Nayak
2016-03-30 22:19 ` [PATCH v3 00/16] port branch.c to use ref-filter's printing options Junio C Hamano
2016-04-01 13:31 ` Dennis Kaarsemaker
2016-04-01 13:44   ` Dennis Kaarsemaker
2016-04-01 15:15     ` Ramsay Jones
2016-04-01 19:42       ` Karthik Nayak

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: http://vger.kernel.org/majordomo-info.html

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=vpqa8l9ztmd.fsf@anie.imag.fr \
    --to=matthieu.moy@grenoble-inp.fr \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=jacob.keller@gmail.com \
    --cc=karthik.188@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).