2017-07-21 2:19 GMT+08:00 Junio C Hamano <gitster@xxxxxxxxx>: > Junio C Hamano <gitster@xxxxxxxxx> writes: > >> Johannes Schindelin <Johannes.Schindelin@xxxxxx> writes: >> >>> But there may be hope. Since the character sequence "PRItime" is highly >>> unlikely to occur in Git's source code in any context other than the >>> format to print/parse timestamp_t, it should be possible to automate a the >>> string replacement >>> >>> git ls-files -z \*.[ch] | >>> xargs -0r sed -i 's/PRItime/PRIuMAX/g' >>> >>> (assuming, of course, that you use GNU sed, not BSD sed, for which the >>> `-i` needs to read `-i ''` instead) as part of the update? >> >> I somehow missed this bit. >> >> Given that this needs to be done only once every release by only one >> person (i.e. the l10n coordinator who updates *.pot file), as long >> as the procedure is automated as much as possible to ease the pain >> for the l10n coordinator and clearly described in the "Maintaining >> the po/git.pot file" section of po/README, something along that line >> does sound like a very tempting approach. If it works well, it is >> certainly much easier for normal developers than the other possible >> alternatives I mentioned in my previous response. > > So, I was offline for most of the day yesterday and with this issue > blocking the release candidate, didn't manage to tag -rc1. > > The use of "make pot" from the top-level is already described in > po/README, so the only thing that we need is something like this > change. I'll follow up this message with a sample output from the > updated process to ask others to sanity check the result (they are > tiny) in a separate message. > > Thanks. > > > Makefile | 10 ++++++++++ > 1 file changed, 10 insertions(+) > > diff --git a/Makefile b/Makefile > index ba4359ef8d..7069a12f75 100644 > --- a/Makefile > +++ b/Makefile > @@ -2216,12 +2216,22 @@ LOCALIZED_SH += t/t0200/test.sh > LOCALIZED_PERL += t/t0200/test.perl > endif > > +## Note that this is only meant to run by the localization coordinator > +## under a very controlled condition, i.e. (1) it is to be run in a > +## Git repository (not a tarball extract), (2) any local modifications > +## will be lost. > po/git.pot: $(GENERATED_H) FORCE > + @for s in $(LOCALIZED_C) $(LOCALIZED_SH) $(LOCALIZED_PERL); \ > + do \ > + sed -e 's|PRItime|PRIuMAX|g' <"$$s" >"$$s+" && \ > + cat "$$s+" >"$$s" && rm "$$s+"; \ > + done > $(QUIET_XGETTEXT)$(XGETTEXT) -o$@+ $(XGETTEXT_FLAGS_C) $(LOCALIZED_C) > $(QUIET_XGETTEXT)$(XGETTEXT) -o$@+ --join-existing $(XGETTEXT_FLAGS_SH) \ > $(LOCALIZED_SH) > $(QUIET_XGETTEXT)$(XGETTEXT) -o$@+ --join-existing $(XGETTEXT_FLAGS_PERL) \ > $(LOCALIZED_PERL) > + @git reset --hard > mv $@+ $@ > > .PHONY: pot Sorry, I'm late. I want to try a safer way to change PRItime to PRInMax using a hacked version of gettext. We can change Makefile like this: --- a/Makefile +++ b/Makefile @@ -2216,7 +2216,14 @@ LOCALIZED_SH += t/t0200/test.sh LOCALIZED_PERL += t/t0200/test.perl endif -po/git.pot: $(GENERATED_H) FORCE +check_gettext: + @if ! $(XGETTEXT) --version | grep -q -i PRItime; then \ + echo >&2 "Error: must use a hacked xgettext, which can handle PRItime macro properly."; \ + echo >&2 "Error: download the hacked version of gettext from https://github.com/......" ; \ + exit 1; \ + fi + +po/git.pot: check_gettext $(GENERATED_H) FORCE $(QUIET_XGETTEXT)$(XGETTEXT) -o$@+ $(XGETTEXT_FLAGS_C) $(LOCALIZED_C) $(QUIET_XGETTEXT)$(XGETTEXT) -o$@+ --join-existing $(XGETTEXT_FLAGS_SH) \ $(LOCALIZED_SH) But I'm not sure I can handle this in this very busy weekend. -- Jiang Xin