From: Karsten Blees Date: Wed, 05 Oct 2011 16:21:14 GMT Subject: Re: [PATCH 3/3] Windows: teach getenv to do a case-sensitive search Message-ID: In-Reply-To: <4DEC7CDD.10403@viscovery.net> Hmm...this looks like a pretty fragile solution to me. Wouldn't it be simpler and safer to just fix the conflicting variables, instead of inventing entirely new environment semantics for Windows? I looked at the eval_gettext occurences, and only found '$path' in git-submodule.sh to obviously conflict with existing environment variables. So the straightforward solution IMO would be to fix the variable in that script. Small solution (only affects gettext): in git-submodule.sh, replace all 'eval_gettext...$path' with 'modulepath=$path eval_gettext...$modulepath' Big solution (enables git-submodule-foreach scripts on Windows, but is a breaking change for existing foreach scripts on Unix): in git-submodule.sh, t/t7407-submodule-foreach.sh, Documentation/git-submodule.txt, replace all '$path' with '$modulepath' (also a few 'path=...' and 'while read...path') Just a few failure scenarios that come to mind with the current solution: - Given environment variables "Path" and "path", the 'case-sensitive first' approach works fine for 'getenv("path")', but 'getenv("PATH")' still has a 50% chance of failure. - The other environment functions have not been changed to reflect the 'case-sensitive first' logic: setenv("path"...) and setenv("PATH"...) both have a chance of overwriting the wrong entry, same for putenv. - Windows applications generally don't support case-sensitive environment variables, e.g. all MSYS and Cygwin programs convert environment variable names to upper case on startup, eliminating duplicates in the process. With git.exe beeing the only case-sensitive tool, any change to git-sh-i18n.sh (e.g. replacing git-envsubst with a real gettext-envsubst) is likely to break again. - As you already mentioned, Windows doesn't support case-sensitive environment variable names, MSDN is pretty clear on that. Expressly violating this documentation may cease to work with any new Windows version or patch. Cheers, Karsten