Re: [RFC/PATCH 1/5] gettext: fix bug in git-sh-i18n's eval_gettext() by using envsubst(1)
- From
Ævar Arnfjörð Bjarmason <avarab@gmail.com>
- Date
- Nov 8, 2010, 22:39 UTC
- Message-ID
- <AANLkTimjRwSxkemMffASvHCxK009b1fnvNRs05_T_1DF@mail.gmail.com>
- In-Reply-To
- <4CCFCCC8.7080603@viscovery.net>
On Tue, Nov 2, 2010 at 09:33, Johannes Sixt <j.sixt@viscovery.net> wrote:
Show 21 quoted lines
> Am 10/31/2010 12:34, schrieb Ævar Arnfjörð Bjarmason: >> Change eval_gettext(1) in git-sh-i18n.sh to use a modified version of >> gettext's envsubst(1) program, instead of using a clever (but broken) >> printf + eval + printf trick. >> >> Our previous fallback would incorrectly handle cases where the >> variable being interpolated contained spaces. E.g.: >> >> cmd="git foo"; eval_gettext "command: \$cmd" >> >> Would emit "command: gitfoo", instead of the correct "command: git >> foo". This happened with a message in git-am.sh that used the $cmdline >> variable. >> >> To work around this, and to improve our variable expansion behavior >> (eval has security issues) I've imported a stripped-down version of >> gettext's envsubst(1) program. > > Would this help the case mentioned above at all? To pass the value of > 'cmd' to envsubst, you have to export it. But the code snippet above > doesn't do that.
Right, I had a major brainfart. GNU gettext.sh actually works like:
eval_gettext () {
gettext "$1" | (export PATH `envsubst --variables "$1"`; envsubst "$1")
}So I need to re-make this patch to support --variables.
Show 7 quoted lines
> Wouldn't it be much simpler to dodge variable substitutions in the > translated string entirely by rewriting such texts as (e.g.) > > gettext_printf "command: %s\n" "$cmd" > > and use printf in the implementation. I don't know how compatible you can > make this with existing gettext implementations, though.
Using named variables is easier to use, and works drop-in with the GNU gettext way of doing things. Once I implement --variables (or rather, un-un-implement them) it'll just work.
Thanks for the review, and for spotting this sillyness.