Re: [PATCH 20/48] i18n: git-submodule die + eval_gettext messages
From: Johannes Sixt <hidden>
Date: 2016-06-15 22:51:13
Am 5/12/2011 15:48, schrieb Ævar Arnfjörð Bjarmason:
On Thu, May 12, 2011 at 10:08, Johannes Sixt [off-list ref] wrote:quoted
Am 5/8/2011 14:20, schrieb Ævar Arnfjörð Bjarmason:quoted
- 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