summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Joey Hess <joey@kitenet.net>2014-06-12 14:21:53 -0400
committerGravatar Joey Hess <joey@kitenet.net>2014-06-12 14:21:53 -0400
commit811e57d0e7878ae9c14bc53c6b7b370abce515c5 (patch)
treee3a77b0c272adcdae8252d5053d287cb14511784
parent624a9aba5adf8df8f0d9583454bf808842c3e15c (diff)
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. When TZ is not set, the system time zone is used. Anyway, once getCurrentTimeZone is fixed, I'll want to have TZ not set so changes to the system time zone are available immediately.
-rw-r--r--git-annex.hs39
1 files changed, 24 insertions, 15 deletions
diff --git a/git-annex.hs b/git-annex.hs
index a96dd8cbd..f1af0eea5 100644
--- a/git-annex.hs
+++ b/git-annex.hs
@@ -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