Thread (58 messages) flat view 58 messages, 5 authors, 2016-06-15

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
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help