unset TZ on Windows

TZ gets set when opening a cygwin terminal.

What I'm oberving is strange.. when TZ is set, even if it's set to the same
thing as the system time zone, it seems to result in files showing with
different mtimes than when TZ is not set.

Having TZ set also prevents seeing the real system timezone, so let's kill
it.
This commit is contained in:
Joey Hess 2014-06-12 14:21:53 -04:00
parent 3ee75d8738
commit 5c5c5cda85

View file

@ -48,29 +48,38 @@ main = do
isshell n = takeFileName n == "git-annex-shell"
#ifdef mingw32_HOST_OS
{- On Windows, if HOME is not set, probe it and set it, re-execing
- git-annex with the new environment.
-
{- On Windows, if HOME is not set, probe it and set it.
- This is a workaround for some Cygwin commands needing HOME to be set,
- and for there being no known way to set environment variables on
- Windows, except by passing an environment in each call to a program.
- While ugly, this workaround is easier than trying to ensure HOME is set
- in all calls to the affected programs.
-
- If TZ is set, unset it.
- TZ being set can interfere with workarounds for Windows timezone
- horribleness, and prevents getCurrentTimeZone from seeing the system
- time zone.
-
- Due to Windows limitations, have to re-exec git-annex with the new
- environment.
-}
winEnv :: ([String] -> IO ()) -> [String] -> IO ()
winEnv a ps = go =<< getEnv "HOME"
winEnv a ps = do
e <- getEnvironment
home <- myHomeDir
let e' = wantedenv e home
if (e' /= e)
then do
cmd <- readProgramFile
(_, _, _, pid) <- createProcess (proc cmd ps)
{ env = Just e' }
exitWith =<< waitForProcess pid
else a ps
where
go (Just _) = a ps
go Nothing = do
home <- myHomeDir
putStrLn $ "** Windows hack; overrideing HOME to " ++ home
e <- getEnvironment
let eoverride =
wantedenv e home = delEntry "TZ" $ case lookup "HOME" e of
Nothing -> e
Just _ -> addEntries
[ ("HOME", home)
, ("CYGWIN", "nodosfilewarning")
]
cmd <- readProgramFile
(_, _, _, pid) <- createProcess (proc cmd ps)
{ env = Just $ e ++ eoverride }
exitWith =<< waitForProcess pid
] e
#endif