Re: [PATCH 20/48] i18n: git-submodule die + eval_gettext messages
- From
Johannes Sixt <j.sixt@viscovery.net>
- Date
- May 12, 2011, 14:20 UTC
- Message-ID
- <4DCBECB5.5050502@viscovery.net>
- In-Reply-To
- <BANLkTik98wsBvoHNtausLBw0F1FqdDhAuQ@mail.gmail.com>
Am 5/12/2011 15:48, schrieb Ævar Arnfjörð Bjarmason:
Show 23 quoted lines
> On Thu, May 12, 2011 at 10:08, Johannes Sixt <j.sixt@viscovery.net> wrote: >> Am 5/8/2011 14:20, schrieb Ævar Arnfjörð Bjarmason: >>> - say "Submodule '$name' ($url) registered for path '$path'" >>> + say "$(eval_gettext "Submodule '\$name' (\$url) registered for path '\$path'")" >> >> On Windows, we have a problem with messages like this (and many others) >> that reference $path. eval_gettext has to export 'path', but on Windows >> environment variables are case-insensitive. In the substitution, this >> happens to pick the value of 'PATH' rather than of 'path'... Can you do >> something about this? >> >> Of course, the problem is not limited to 'path' at all, but it is a >> prominent example discovered by the test suite. > > I didn't know Windows had that limitation. We can easily work around > it by just renaming $path to something else (e.g. $filepath). > > Since we do: > > export PATH $(git sh-i18n--envsubst --variables "$1"); > > I assume this problem only occurs with variables that match > /^path$/i. Or are there other problems on Windows?
It is *not* limited to PATH. There can be other variables in the environment that are the same name as some that are exported in this statement. Here's a brief test:
--- 8< --- $ cat git-test #!/bin/sh
. git-sh-setup . git-sh-i18n
AppData=myappdata username=myUserName proMPT=myprompt
echo "$(eval_gettext "AppData: '\$AppData' username: \$username proMPT: \$proMPT path: '\$path'")"
$ git --exec-path=. test AppData: 'C:\Dokumente und Einstellungen\jsixt\Anwendungsdaten' username: jsixt proMPT: $P$G path: 'd:/Src/mingw-git/.;d:\Src\mingw-git;d:\Src\mingw-git\;d:\Src\mingw-git;...snip...;.' --- 8< ---
Particularly PROMPT and USERNAME appear regularly in the environment and are rather generic names likely to be used in scripts as (non-exported) variables. For exposition, these are the environment variables that I use in production:
ALLUSERSPROFILE APPDATA CLIENTNAME CommonProgramFiles COMPUTERNAME ComSpec FP_NO_HOST_CHECK GIT_EDITOR HOME HOMEDRIVE HOMEPATH LESS LOGONSERVER MSYSDIR NUMBER_OF_PROCESSORS OS OS_ROOTDIR OS_TMPDIR Path PATHEXT PROCESSOR_ARCHITECTURE PROCESSOR_IDENTIFIER PROCESSOR_LEVEL PROCESSOR_REVISION ProgramFiles PROMPT SESSIONNAME SystemDrive SystemRoot TEMP TERM TMP USERDOMAIN USERNAME USERPROFILE VS100COMNTOOLS VS90COMNTOOLS windir WXWIN
-- Hannes