[commit: packages/Cabal] ghc-head: Reconfigure if 'cabal.config' was changed. (d6545bc)
git at git.haskell.org
git at git.haskell.org
Fri Sep 13 17:54:58 CEST 2013
Repository : ssh://git@git.haskell.org/Cabal
On branch : ghc-head
Link : http://git.haskell.org/?p=packages/Cabal.git;a=commit;h=d6545bc2a880519c7ffa50ce76307e6a216a70b1
>---------------------------------------------------------------
commit d6545bc2a880519c7ffa50ce76307e6a216a70b1
Author: Mikhail Glushenkov <mikhail.glushenkov at gmail.com>
Date: Sat Sep 7 06:06:25 2013 +0200
Reconfigure if 'cabal.config' was changed.
Fixes #1485.
>---------------------------------------------------------------
d6545bc2a880519c7ffa50ce76307e6a216a70b1
cabal-install/Main.hs | 55 ++++++++++++++++++++++++++++++++++---------------
1 file changed, 38 insertions(+), 17 deletions(-)
diff --git a/cabal-install/Main.hs b/cabal-install/Main.hs
index cf1d227..aeefa8a 100644
--- a/cabal-install/Main.hs
+++ b/cabal-install/Main.hs
@@ -88,9 +88,11 @@ import Distribution.Client.Sandbox (sandboxInit
,configCompilerAux'
,configPackageDB')
import Distribution.Client.Sandbox.PackageEnvironment
- (setPackageDB)
+ (setPackageDB
+ ,userPackageEnvironmentFile)
import Distribution.Client.Sandbox.Timestamp (maybeAddCompilerTimestampRecord)
-import Distribution.Client.Sandbox.Types (UseSandbox(..), whenUsingSandbox)
+import Distribution.Client.Sandbox.Types (UseSandbox(..), isUseSandbox
+ ,whenUsingSandbox)
import Distribution.Client.Init (initCabal)
import qualified Distribution.Client.Win32SelfUpgrade as Win32SelfUpgrade
@@ -424,7 +426,11 @@ reconfigure verbosity distPref addConfigFlags extraArgs globalFlags
-- Was the sandbox created after the package was already configured? We
-- may need to skip reinstallation of add-source deps and force
-- reconfigure.
- isSandboxConfigNewer <- checkSandboxConfigNewer
+ let buildConfig = localBuildInfoFile distPref
+ sandboxConfig <- getSandboxConfigFilePath globalFlags
+ isSandboxConfigNewer <-
+ sandboxConfig `existsAndIsMoreRecentThan` buildConfig
+
let skipAddSourceDepsCheck'
| isSandboxConfigNewer = SkipAddSourceDepsCheck
| otherwise = skipAddSourceDepsCheck
@@ -438,8 +444,18 @@ reconfigure verbosity distPref addConfigFlags extraArgs globalFlags
globalFlags mempty
return (useSandbox, NoDepsReinstalled)
+ -- Is the @cabal.config@ file newer than @dist/setup.config@? Then we need
+ -- to force reconfigure.
+ isUserPackageEnvironmentFileNewer <-
+ if isUseSandbox useSandbox
+ then userPackageEnvironmentFile `existsAndIsMoreRecentThan` buildConfig
+ else return False
+
+ -- Determine whether we need to reconfigure and which message to show to
+ -- the user if that is the case.
mMsg <- determineMessageToShow lbi configFlags depsReinstalled
isSandboxConfigNewer
+ isUserPackageEnvironmentFileNewer
case mMsg of
-- No message for the user indicates that reconfiguration
@@ -453,28 +469,28 @@ reconfigure verbosity distPref addConfigFlags extraArgs globalFlags
extraArgs globalFlags
return useSandbox
- -- Is @cabal.sandbox.config@ newer than @dist/setup-config@? Then we need to
- -- force-reconfigure without reinstalling add-source deps (the sandbox was
- -- created after the package was already configured).
- checkSandboxConfigNewer :: IO Bool
- checkSandboxConfigNewer = do
- sandboxConfig <- getSandboxConfigFilePath globalFlags
- let buildConfig = localBuildInfoFile distPref
- sandboxConfigExists <- doesFileExist sandboxConfig
- if sandboxConfigExists
- then sandboxConfig `moreRecentFile` buildConfig
- else return False
+ -- True if the first file exists and is more recent than the second file.
+ existsAndIsMoreRecentThan :: FilePath -> FilePath -> IO Bool
+ existsAndIsMoreRecentThan a b = do
+ exists <- doesFileExist a
+ if not exists
+ then return False
+ else a `moreRecentFile` b
-- Determine what message, if any, to display to the user if reconfiguration
-- is required.
determineMessageToShow :: LBI.LocalBuildInfo -> ConfigFlags
- -> WereDepsReinstalled -> Bool
+ -> WereDepsReinstalled -> Bool -> Bool
-> IO (Maybe String)
- determineMessageToShow _ _ _ True =
+ determineMessageToShow _ _ _ True _ =
-- The sandbox was created after the package was already configured.
return $! Just $! sandboxConfigNewerMessage
- determineMessageToShow lbi configFlags depsReinstalled False = do
+ determineMessageToShow _ _ _ False True =
+ -- The user package environment file was modified.
+ return $! Just $! userPackageEnvironmentFileModifiedMessage
+
+ determineMessageToShow lbi configFlags depsReinstalled False False = do
let savedDistPref = fromFlagOrDefault
(useDistPref defaultSetupScriptOptions)
(configDistPref configFlags)
@@ -514,6 +530,11 @@ reconfigure verbosity distPref addConfigFlags extraArgs globalFlags
"The sandbox was created after the package was already configured."
++ reconfiguringMostRecent
++ configureManually
+ userPackageEnvironmentFileModifiedMessage =
+ "The user package environment file ('"
+ ++ userPackageEnvironmentFile ++ "') was modified."
+ ++ reconfiguringMostRecent
+ ++ configureManually
distPrefMessage =
"Package previously configured with different \"dist\" prefix."
++ reconfiguringMostRecent
More information about the ghc-commits
mailing list