From a1a99c2b2cac4a88e61c1099dd3cbb3698f64f14 Mon Sep 17 00:00:00 2001
From: Mikhail Glushenkov <the.dead.shall.rise@gmail.com>
Date: Mon, 29 Apr 2013 23:24:09 +0200
Subject: [PATCH] Mark the '.cabal-sandbox' dir as hidden on Windows.

---
 cabal-install/Distribution/Client/Sandbox.hs   | 2 ++
 cabal-install/Distribution/Compat/FilePerms.hs | 7 ++++++-
 2 files changed, 8 insertions(+), 1 deletion(-)

diff --git a/cabal-install/Distribution/Client/Sandbox.hs b/cabal-install/Distribution/Client/Sandbox.hs
index 21ba32734e..52eecd132e 100644
--- a/cabal-install/Distribution/Client/Sandbox.hs
+++ b/cabal-install/Distribution/Client/Sandbox.hs
@@ -82,6 +82,7 @@ import Distribution.System                    ( Platform )
 import Distribution.Text                      ( display )
 import Distribution.Verbosity                 ( Verbosity, lessVerbose )
 import Distribution.Compat.Env                ( lookupEnv, setEnv )
+import Distribution.Compat.FilePerms          ( setFileHidden )
 import qualified Distribution.Client.Sandbox.Index as Index
 import qualified Distribution.Simple.Register      as Register
 import Control.Exception                      ( assert, bracket_ )
@@ -192,6 +193,7 @@ sandboxInit verbosity sandboxFlags globalFlags = do
                     (sandboxLocation sandboxFlags)
   createDirectoryIfMissingVerbose verbosity True sandboxDir'
   sandboxDir <- tryCanonicalizePath sandboxDir'
+  setFileHidden sandboxDir
   notice verbosity $ "Using a sandbox located at " ++ sandboxDir
 
   -- Determine which compiler to use (using the value from ~/.cabal/config).
diff --git a/cabal-install/Distribution/Compat/FilePerms.hs b/cabal-install/Distribution/Compat/FilePerms.hs
index 284f071df0..1f8393f515 100644
--- a/cabal-install/Distribution/Compat/FilePerms.hs
+++ b/cabal-install/Distribution/Compat/FilePerms.hs
@@ -3,6 +3,7 @@
 module Distribution.Compat.FilePerms (
   setFileOrdinary,
   setFileExecutable,
+  setFileHidden,
   ) where
 
 #ifndef mingw32_HOST_OS
@@ -14,12 +15,15 @@ import Foreign.C
          ( withCString )
 import Foreign.C
          ( throwErrnoPathIfMinus1_ )
+#else
+import System.Win32.File (setFileAttributes, fILE_ATTRIBUTE_HIDDEN)
 #endif /* mingw32_HOST_OS */
 
-setFileOrdinary,  setFileExecutable  :: FilePath -> IO ()
+setFileHidden, setFileOrdinary,  setFileExecutable  :: FilePath -> IO ()
 #ifndef mingw32_HOST_OS
 setFileOrdinary   path = setFileMode path 0o644 -- file perms -rw-r--r--
 setFileExecutable path = setFileMode path 0o755 -- file perms -rwxr-xr-x
+setFileHidden     _    = return ()
 
 setFileMode :: FilePath -> FileMode -> IO ()
 setFileMode name m =
@@ -28,4 +32,5 @@ setFileMode name m =
 #else
 setFileOrdinary   _ = return ()
 setFileExecutable _ = return ()
+setFileHidden  path = setFileAttributes path fILE_ATTRIBUTE_HIDDEN
 #endif
-- 
GitLab