git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH v2 1/9] Makefile: sort "po/git.pot" by file location

From
Jiang Xin <worldhello.net@gmail.com>
Date
May 19, 2022, 12:41 UTC
Message-ID
<CANYiYbHBPVRto2ijF_f5VdSCem59=hjZj3kb=zF30hxrCPoT+Q@mail.gmail.com>
In-Reply-To
<220519.86tu9l6fw4.gmgdl@evledraar.gmail.com>

On Thu, May 19, 2022 at 5:17 PM Ævar Arnfjörð Bjarmason <avarab@gmail.com> wrote:

Show 35 quoted lines
>
>
> On Thu, May 19 2022, Jiang Xin wrote:
>
> > From: Jiang Xin <zhiyou.jx@alibaba-inc.com>
> >
> > Before feeding xgettext with more C souce files which may be ignored
> > by various compiler conditions, add new option "--sort-by-file" to
> > xgettext program to create stable message template file "po/git.pot".
> >
> > With this update, the newly generated "po/git.pot" will has the same
> > entries while in a different order. We won't checkin the newly generated
> > "po/git.pot", because we will remove it from tree in a later commit.
> >
> > Signed-off-by: Jiang Xin <zhiyou.jx@alibaba-inc.com>
> > Signed-off-by: Junio C Hamano <gitster@pobox.com>
> > ---
> >  Makefile | 1 +
> >  1 file changed, 1 insertion(+)
> >
> > diff --git a/Makefile b/Makefile
> > index f8bccfab5e..83e968e2a4 100644
> > --- a/Makefile
> > +++ b/Makefile
> > @@ -2706,6 +2706,7 @@ XGETTEXT_FLAGS = \
> >       --force-po \
> >       --add-comments=TRANSLATORS: \
> >       --msgid-bugs-address="Git Mailing List <git@vger.kernel.org>" \
> > +     --sort-by-file \
> >       --from-code=UTF-8
> >  XGETTEXT_FLAGS_C = $(XGETTEXT_FLAGS) --language=C \
> >       --keyword=_ --keyword=N_ --keyword="Q_:1,2"
>
> I'm not opposed to this change, but between this and 2/9 I'm still
> unsure what the aim is exactly, and if the results are desired.

We will change the order of input files to feed xgettext to create "po/git.pot" in patch 2/9, and we may change the order of input files in future version. With the option "--sort-by-file" we can get a stable "po/git.pot" and better compression ratios for future versions of "po/*.po*".

Show 7 quoted lines
> In 2/9 you correctly point out that we have messages we've missed due to
> LOCALIZED_C being platform-specific.
>
> That should never happen (although your implementation in 2/9 may have
> some small issues, I'll reply there separately), i.e. we should always
> have "make pot" generate the same po/git.pot from the same commit
> whether you're on linux, mac os x etc.

l10n translators may work on different platforms or have different compiler conditions, and their contributions may have different base templates (po/git.pot). It is hard for the l10n coordinator to choose a base template to check contributions from different l10n contributors.

Show 35 quoted lines
> But AFAICT we have a "stable" sort order now, it's in whatever order we
> feed the files to xgettext, which ultimately comes down to e.g. the list
> of $(LIB_OBJS) in the Makefile.
>
> I've been looking over the libintl documentation to see what exactly
> these sort options do, and how they differ from the default, and it's
> not really described.
>
> AFAICT the xgettext behavior we have now is that we'll process the files
> we have in order, and for those files extract the messages we have as we
> see them.
>
> One fringe benefit of that is that e.g. "make pot
> XGETTEXT_INCLUDE_TESTS=Y" (which I think I've only ever used, and
> probably only ~10 years ago) will get added at the end, but now it'll be
> added wherever t/t0200 sorts.
>
> Then because compose the builtin objs and lib objs by concatenation, but
> don't $(sort) them in the Makefile most of this change is due to us
> e.g. sorting builtin/* before parse-options.c or whatever.
>
> But oddly we also have cases like this:
>
>         strbuf_addf(&header, print_file_item_data.modified_fmt,
>                     _("staged"), _("unstaged"), _("path"));
>
> Before this we'd list those in that order in the git.pot, but now
> because of --sort-by-file we'll list any messages on the same line in
> sorted msgid order, not in the orderd they appear in. Another example is
> e.g. this in builtin/blame.c:
>
>     OPT_STRING_LIST(0, "ignore-rev", &ignore_rev_list, N_("rev"), N_("ignore <rev> when blaming"))
>
> Where before we'd list them in that order, but now it's with "ignore.."
> before "rev".

These side effects of changing the order of entries in the same line of the same source file have little effect on the l10n translation.

Show 21 quoted lines
> I think this change would be easier to follow & explain if you first
> made this change:
>
>         diff --git a/Makefile b/Makefile
>         index 61aadf3ce88..3726fe8064a 100644
>         --- a/Makefile
>         +++ b/Makefile
>         @@ -2715,10 +2715,9 @@ XGETTEXT_FLAGS_SH = $(XGETTEXT_FLAGS) --language=Shell \
>                 --keyword=gettextln --keyword=eval_gettextln
>          XGETTEXT_FLAGS_PERL = $(XGETTEXT_FLAGS) --language=Perl \
>                 --keyword=__ --keyword=N__ --keyword="__n:1,2"
>         -LOCALIZED_C = $(C_OBJ:o=c) $(LIB_H) $(GENERATED_H)
>         -LOCALIZED_SH = $(SCRIPT_SH)
>         -LOCALIZED_SH += git-sh-setup.sh
>         -LOCALIZED_PERL = $(SCRIPT_PERL)
>         +LOCALIZED_C = $(sort $(C_OBJ:o=c) $(LIB_H) $(GENERATED_H))
>         +LOCALIZED_SH = $(sort $(SCRIPT_SH) git-sh-setup.sh)
>         +LOCALIZED_PERL = $(sort $(SCRIPT_PERL))
>
>          ifdef XGETTEXT_INCLUDE_TESTS
>          LOCALIZED_C += t/t0200/test.c

I do not need this intermediate commit and submit new generated "po/git.pot" file to observe changes of the "po/git.pot" file, because I have a diff driver install as described here:

    https://github.com/git-l10n/git-po-helper/tree/main/contrib/diff-dirver

So I can tell the newly generated "po/git.pot" will have the same entries while in a different order. If I want to see changes on raw files, I can use command:

    git diff --no-textconv
Show 10 quoted lines
> Which would sort things within C, SH and Perl files (but not among
> them). Then this change would AFAICT only:
>
>  * Change that "within one line" sort order, as noted above
>  * Sort across C/SH/Perl.
>
> I'm mostly "meh" on the result, but it's also because I genuinely don't
> get what the goal was. Is it because in 2/9 you'll end up using
> $(FOUND_C_SOURCES), which we derive from either "git ls-files" or
> "find", the latter of which has an unstable sort order?

The goal is to have a constant order of entries in "po/git.pot" and "po/*.po", so we can save the space of our repository by better compression ratio on files inside "po/".

-- Jiang Xin

Previous: Ævar Arnfjörð BjarmasonNext: Jiang Xin
Message 23 of 110 in “Incremental po/git.pot update and new l10n workflow”
  1. 0/9 Incremental po/git.pot update and new l10n workflowJiang Xin, May 3, 2022
  2. 1/9 Makefile: sort "po/git.pot" by file locationJiang Xin, May 3, 2022
  3. 2/9 Makefile: generate "po/git.pot" from stable LOCALIZED_CJiang Xin, May 3, 2022
  4. 5/9 po/git.pot: don't check in result of "make pot"Jiang Xin, May 3, 2022
  5. 3/9 Makefile: have "make pot" not "reset --hard"Jiang Xin, May 3, 2022
  6. 7/9 Makefile: add "po-update" rule to update po/XX.poJiang Xin, May 3, 2022
  7. 9/9 l10n: Document the new l10n workflowJiang Xin, May 3, 2022
  8. 8/9 Makefile: add "po-init" rule to initialize po/XX.poJiang Xin, May 3, 2022
  9. 4/9 i18n CI: stop allowing non-ASCII source messages in po/git.potJiang Xin, May 3, 2022
  10. 6/9 po/git.pot: remove this now generated file, see preceding commitJiang Xin, May 3, 2022
  11. Peter KreftingMay 3, 2022
  12. Jiang XinMay 4, 2022
  13. Junio C HamanoMay 4, 2022
  14. Daniel SantosMay 4, 2022
  15. Jiang XinMay 5, 2022
  16. Daniel SantosMay 5, 2022
  17. Junio C HamanoMay 5, 2022
  18. Jiang XinMay 6, 2022
  19. Jiang XinMay 5, 2022
  20. Junio C HamanoMay 4, 2022
  21. 1/9 Makefile: sort "po/git.pot" by file locationJiang Xin, May 19, 2022
  22. Ævar Arnfjörð BjarmasonMay 19, 2022
  23. Jiang XinMay 19, 2022
  24. 0/9 Incremental po/git.pot update and new l10n workflowJiang Xin, May 19, 2022
  25. Ævar Arnfjörð BjarmasonMay 19, 2022
  26. Jiang XinMay 19, 2022
  27. Ævar Arnfjörð BjarmasonMay 19, 2022
  28. 0/9 Incremental po/git.pot update and new l10n workflowJiang Xin, May 23, 2022
  29. Ævar Arnfjörð BjarmasonMay 23, 2022
  30. Ævar Arnfjörð BjarmasonMay 23, 2022
  31. Jiang XinMay 23, 2022
  32. Ævar Arnfjörð BjarmasonMay 23, 2022
  33. Jiang XinMay 23, 2022
  34. Jiang XinMay 23, 2022
  35. 0/9 Incremental po/git.pot update and new l10n workflowJiang Xin, May 23, 2022
  36. Junio C HamanoMay 23, 2022
  37. 01/10 Makefile: sort source files before feeding to xgettextJiang Xin, May 26, 2022
  38. 00/10 Incremental po/git.pot update and new l10n workflowJiang Xin, May 26, 2022
  39. 02/10 Makefile: generate "po/git.pot" from stable LOCALIZED_CJiang Xin, May 26, 2022
  40. 10/10 l10n: Document the new l10n workflowJiang Xin, May 26, 2022
  41. 06/10 po/git.pot: this is now a generated fileJiang Xin, May 26, 2022
  42. Junio C HamanoMay 26, 2022
  43. 04/10 i18n CI: stop allowing non-ASCII source messages in po/git.potJiang Xin, May 26, 2022
  44. 05/10 Makefile: remove duplicate and unwanted files in FOUND_SOURCE_FILESJiang Xin, May 26, 2022
  45. 08/10 Makefile: add "po-update" rule to update po/XX.poJiang Xin, May 26, 2022
  46. 07/10 po/git.pot: don't check in result of "make pot"Jiang Xin, May 26, 2022
  47. 09/10 Makefile: add "po-init" rule to initialize po/XX.poJiang Xin, May 26, 2022
  48. 03/10 Makefile: have "make pot" not "reset --hard"Jiang Xin, May 26, 2022
  49. 2/9 Makefile: generate "po/git.pot" from stable LOCALIZED_CJiang Xin, May 23, 2022
  50. 7/9 Makefile: add "po-update" rule to update po/XX.poJiang Xin, May 23, 2022
  51. 1/9 Makefile: sort "po/git.pot" by file locationJiang Xin, May 23, 2022
  52. 4/9 i18n CI: stop allowing non-ASCII source messages in po/git.potJiang Xin, May 23, 2022
  53. 3/9 Makefile: have "make pot" not "reset --hard"Jiang Xin, May 23, 2022
  54. Junio C HamanoMay 25, 2022
  55. Junio C HamanoMay 25, 2022
  56. Jiang XinMay 26, 2022
  57. Makefile: dedup git-ls-files output to prevent duplicate targetsJiang Xin, May 26, 2022
  58. Junio C HamanoMay 26, 2022
  59. Jiang XinMay 26, 2022
  60. Junio C HamanoMay 26, 2022
  61. Jiang XinMay 26, 2022
  62. Ævar Arnfjörð BjarmasonMay 26, 2022
  63. Jiang XinMay 26, 2022
  64. Junio C HamanoMay 26, 2022
  65. Ævar Arnfjörð BjarmasonMay 26, 2022
  66. Junio C HamanoMay 26, 2022
  67. Ævar Arnfjörð BjarmasonMay 26, 2022
  68. 6/9 po/git.pot: don't check in result of "make pot"Jiang Xin, May 23, 2022
  69. 5/9 po/git.pot: this is now a generated fileJiang Xin, May 23, 2022
  70. 9/9 l10n: Document the new l10n workflowJiang Xin, May 23, 2022
  71. 8/9 Makefile: add "po-init" rule to initialize po/XX.poJiang Xin, May 23, 2022
  72. 1/9 Makefile: sort "po/git.pot" by file locationJiang Xin, May 23, 2022
  73. Junio C HamanoMay 23, 2022
  74. Jiang XinMay 23, 2022
  75. 2/9 Makefile: generate "po/git.pot" from stable LOCALIZED_CJiang Xin, May 23, 2022
  76. Junio C HamanoMay 23, 2022
  77. 9/9 l10n: Document the new l10n workflowJiang Xin, May 23, 2022
  78. 7/9 Makefile: add "po-update" rule to update po/XX.poJiang Xin, May 23, 2022
  79. 8/9 Makefile: add "po-init" rule to initialize po/XX.poJiang Xin, May 23, 2022
  80. 3/9 Makefile: have "make pot" not "reset --hard"Jiang Xin, May 23, 2022
  81. Ævar Arnfjörð BjarmasonMay 23, 2022
  82. Jiang XinMay 23, 2022
  83. Jiang XinMay 24, 2022
  84. Junio C HamanoMay 23, 2022
  85. Jiang XinMay 23, 2022
  86. 4/9 i18n CI: stop allowing non-ASCII source messages in po/git.potJiang Xin, May 23, 2022
  87. 6/9 po/git.pot: don't check in result of "make pot"Jiang Xin, May 23, 2022
  88. Ævar Arnfjörð BjarmasonMay 23, 2022
  89. Jiang XinMay 23, 2022
  90. Jiang XinMay 23, 2022
  91. Ævar Arnfjörð BjarmasonMay 23, 2022
  92. 5/9 po/git.pot: this is now a generated fileJiang Xin, May 23, 2022
  93. 2/9 Makefile: generate "po/git.pot" from stable LOCALIZED_CJiang Xin, May 19, 2022
  94. Ævar Arnfjörð BjarmasonMay 19, 2022
  95. Jiang XinMay 19, 2022
  96. 3/9 Makefile: have "make pot" not "reset --hard"Jiang Xin, May 19, 2022
  97. Ævar Arnfjörð BjarmasonMay 19, 2022
  98. Jiang XinMay 19, 2022
  99. Ævar Arnfjörð BjarmasonMay 19, 2022
  100. 5/9 po/git.pot: this is now a generated fileJiang Xin, May 19, 2022
  101. 7/9 Makefile: add "po-update" rule to update po/XX.poJiang Xin, May 19, 2022
  102. Ævar Arnfjörð BjarmasonMay 19, 2022
  103. 6/9 po/git.pot: don't check in result of "make pot"Jiang Xin, May 19, 2022
  104. 8/9 Makefile: add "po-init" rule to initialize po/XX.poJiang Xin, May 19, 2022
  105. Ævar Arnfjörð BjarmasonMay 19, 2022
  106. 9/9 l10n: Document the new l10n workflowJiang Xin, May 19, 2022
  107. Junio C HamanoMay 19, 2022
  108. Jiang XinMay 21, 2022
  109. 4/9 i18n CI: stop allowing non-ASCII source messages in po/git.potJiang Xin, May 19, 2022
  110. Ævar Arnfjörð BjarmasonMay 19, 2022

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.