Subject: [PATCH v4 0/9] Incremental po/git.pot update and new l10n workflow

From: Jiang Xin <[email-masked]>
Date: Mon, 23 May 2022 23:21:19 +0800

From: Jiang Xin <[email-masked]>

Changes since v3:

1. Remove Junio's s-o-b introduced in v3.
2. Reword patch 1/9, 2/9 and 3/9.
3. Patch 6/9: should remove "po/git.pot" in "clean" instead of "distclean".
4. Patch 8/9: forget to remove "po/git-core.pot".

Range-diff vs v3:

 1:  362cd0cbe1 !  1:  325868b993 Makefile: sort "po/git.pot" by file location
    @@ Metadata
      ## Commit message ##
         Makefile: sort "po/git.pot" by file location
     
    -    We will feed xgettext with more C souce files and in different order in
    -    subsequent commit. To generate a stable "po/git.pot" regardless of the
    -    number and order of input source files, we add a new option
    +    We will feed xgettext with more C source files and in different order
    +    in subsequent commit. To generate a stable "po/git.pot" regardless of
    +    the number and order of input source files, we pass the option
         "--sort-by-file" to xgettext program.
     
    -    With this update, the newly generated "po/git.pot" will has the same
    +    With this update, the newly generated "po/git.pot" will have the same
         entries while in a different order.
     
         With the help of a custom diff driver as shown below,
    @@ Commit message
             git config --global diff.gettext-fmt.textconv \
                 "msgcat --no-location --sort-by-file"
     
    -    and appending a new entry "*.po diff=gettext-fmt" to git attributes,
    +    and appending a new entry "*.pot diff=gettext-fmt" to git attributes,
         we can see that there are no substantial changes in "po/git.pot".
     
         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 <[email-masked]>
    -    Signed-off-by: Junio C Hamano <[email-masked]>
     
      ## Makefile ##
     @@ Makefile: XGETTEXT_FLAGS = \
 2:  096e700171 !  2:  acf2f62e66 Makefile: generate "po/git.pot" from stable LOCALIZED_C
    @@ Metadata
      ## Commit message ##
         Makefile: generate "po/git.pot" from stable LOCALIZED_C
     
    -    When running "make pot" on different platform, we may get a different
    -    message template file "po/git.pot". This is because the "LOCALIZED_C"
    -    variable may have different C source files on different platforms or
    -    different compiler conditions.
    -
    -    We can make a stable "LOCALIZED_C" variable by applying patch snippets
    -    as follows:
    -
    -         ifdef NO_LIBGEN_H
    -             COMPAT_CFLAGS += -DNO_LIBGEN_H
    -             COMPAT_OBJS += compat/basename.o
    -        +else
    -        +    LOCALIZED_C += compat/basename.c
    -         endif
    -
    -    But it is much simpler to use variables "$(FOUND_C_SOURCES)" and
    -    "$(FOUND_C_SOURCES)" to form a stable "LOCALIZED_C". We also add
    -    "$(SCALAR_SOURCES)" files, which are part of C_OBJ but not included in
    -    "$(FOUND_C_SOURCES)" because they are in the "contrib/" directory.
    +    Different users may generate a different message template file
    +    "po/git.pot". This is because the POT file is generated from
    +    "$(LOCALIZED_C)", which is supposed to list all the sources that we
    +    extract the strings to be translated from. But "$(LOCALIZED_C)"
    +    includes "$(C_OBJ)", which only lists the source files used in the
    +    current build for a specific platform and specific compiler
    +    conditions.
    +
    +    Instead of using "$(C_OBJ)", we use "$(FOUND_C_SOURCES)", which lists
    +    all source files we keep track of (or ship in a tarball extract), to
    +    form a stable "LOCALIZED_C". We also add "$(SCALAR_SOURCES)", which
    +    is part of "$(C_OBJ)" but not included in "$(FOUND_C_SOURCES)".
     
         With this update, the newly generated "po/git.pot" will have 30 new
         entries coming from the following C source files:
    @@ Commit message
          * compat/simple-ipc/ipc-win32.c
     
         Signed-off-by: Jiang Xin <[email-masked]>
    -    Signed-off-by: Junio C Hamano <[email-masked]>
     
      ## Makefile ##
     @@ Makefile: XGETTEXT_FLAGS_SH = $(XGETTEXT_FLAGS) --language=Shell \
 3:  dff3751260 !  3:  775c37bc69 Makefile: have "make pot" not "reset --hard"
    @@ Commit message
         Makefile: have "make pot" not "reset --hard"
     
         Before commit fc0fd5b23b (Makefile: help gettext tools to cope with our
    -    custom PRItime format, 2017-07-20) we'd consider source files as-is
    +    custom PRItime format, 2017-07-20), we'd consider source files as-is
         with gettext, but because we need to understand PRItime in the same way
    -    that gettext itself understands PRIuMAX we'd first check if we had a
    +    that gettext itself understands PRIuMAX, we'd first check if we had a
         clean checkout, then munge all of the processed files in-place with
         "sed", generate "po/git.pot", and then finally "reset --hard" to undo
         our changes.
    @@ Commit message
     
         Signed-off-by: Ævar Arnfjörð Bjarmason <[email-masked]>
         Signed-off-by: Jiang Xin <[email-masked]>
    -    Signed-off-by: Junio C Hamano <[email-masked]>
     
      ## .gitignore ##
     @@
 4:  1b7efb21ae !  4:  55ee049b0a i18n CI: stop allowing non-ASCII source messages in po/git.pot
    @@ Commit message
     
         Signed-off-by: Ævar Arnfjörð Bjarmason <[email-masked]>
         Signed-off-by: Jiang Xin <[email-masked]>
    -    Signed-off-by: Junio C Hamano <[email-masked]>
     
      ## Makefile ##
     @@ Makefile: XGETTEXT_FLAGS = \
 5:  8ce274b31f =  5:  69338521aa po/git.pot: this is now a generated file
 6:  4585be63f7 !  6:  6f80bd0461 po/git.pot: don't check in result of "make pot"
    @@ Commit message
     
         Signed-off-by: Ævar Arnfjörð Bjarmason <[email-masked]>
         Signed-off-by: Jiang Xin <[email-masked]>
    -    Signed-off-by: Junio C Hamano <[email-masked]>
     
      ## Makefile ##
     @@ Makefile: endef
    @@ Makefile: endef
      
      .PHONY: pot
      pot: po/git.pot
    -@@ Makefile: dist-doc: git$X
    +@@ Makefile: cocciclean:
      
    - distclean: clean
    - 	$(RM) configure
    + clean: profile-clean coverage-clean cocciclean
    + 	$(RM) -r .build
     +	$(RM) po/git.pot
    - 	$(RM) config.log config.status config.cache
    - 	$(RM) config.mak.autogen config.mak.append
    - 	$(RM) -r autom4te.cache
    + 	$(RM) *.res
    + 	$(RM) $(OBJECTS)
    + 	$(RM) $(LIB_FILE) $(XDIFF_LIB) $(REFTABLE_LIB) $(REFTABLE_TEST_LIB)
     
      ## po/.gitignore ##
     @@
 7:  b8f43b520c !  7:  5cd2c0741d Makefile: add "po-update" rule to update po/XX.po
    @@ Commit message
             $ make po-update PO_FILE=po/zh_CN.po
     
         Signed-off-by: Jiang Xin <[email-masked]>
    -    Signed-off-by: Junio C Hamano <[email-masked]>
     
      ## Makefile ##
     @@ Makefile: TCLTK_PATH = wish
 8:  019633c7a4 !  8:  246720695a Makefile: add "po-init" rule to initialize po/XX.po
    @@ Commit message
         [^1]: https://github.com/git-l10n/git-po-helper/
     
         Signed-off-by: Ævar Arnfjörð Bjarmason <[email-masked]>
    -    Signed-off-by: Jiang Xin <[email-masked]>
    -    Signed-off-by: Junio C Hamano <[email-masked]>
     
      ## Makefile ##
     @@ Makefile: po-update: po/git.pot
    @@ Makefile: po-update: po/git.pot
      ifdef NO_GETTEXT
      POFILES :=
      MOFILES :=
    +@@ Makefile: cocciclean:
    + 
    + clean: profile-clean coverage-clean cocciclean
    + 	$(RM) -r .build
    +-	$(RM) po/git.pot
    ++	$(RM) po/git.pot po/git-core.pot
    + 	$(RM) *.res
    + 	$(RM) $(OBJECTS)
    + 	$(RM) $(LIB_FILE) $(XDIFF_LIB) $(REFTABLE_LIB) $(REFTABLE_TEST_LIB)
     
      ## po/.gitignore ##
     @@
 9:  334117bf48 !  9:  131f52ac3a l10n: Document the new l10n workflow
    @@ Commit message
     
         Signed-off-by: Ævar Arnfjörð Bjarmason <[email-masked]>
         Signed-off-by: Jiang Xin <[email-masked]>
    -    Signed-off-by: Junio C Hamano <[email-masked]>
     
      ## po/README.md ##
     @@ po/README.md: coordinates our localization effort in the l10 coordinator repository:

---

Jiang Xin (4):
  Makefile: sort "po/git.pot" by file location
  Makefile: generate "po/git.pot" from stable LOCALIZED_C
  po/git.pot: this is now a generated file
  Makefile: add "po-update" rule to update po/XX.po

Ævar Arnfjörð Bjarmason (5):
  Makefile: have "make pot" not "reset --hard"
  i18n CI: stop allowing non-ASCII source messages in po/git.pot
  po/git.pot: don't check in result of "make pot"
  Makefile: add "po-init" rule to initialize po/XX.po
  l10n: Document the new l10n workflow

 .gitignore                  |     1 +
 Makefile                    |   148 +-
 builtin/submodule--helper.c |     2 +-
 ci/run-static-analysis.sh   |     2 +
 po/.gitignore               |     2 +
 po/README.md                |   230 +-
 po/git.pot                  | 25151 ----------------------------------
 shared.mak                  |     2 +
 8 files changed, 250 insertions(+), 25288 deletions(-)
 delete mode 100644 po/git.pot

-- 
2.36.0.1.g15c4090757