[commit: ghc] wip/nfs-locking: Refactor oracles, drop redundant newCache. (13ad050)

git at git.haskell.org git at git.haskell.org
Fri Oct 27 00:51:56 UTC 2017


Repository : ssh://git@git.haskell.org/ghc

On branch  : wip/nfs-locking
Link       : http://ghc.haskell.org/trac/ghc/changeset/13ad050070d32c5c6267af8fba60125af878147c/ghc

>---------------------------------------------------------------

commit 13ad050070d32c5c6267af8fba60125af878147c
Author: Andrey Mokhov <andrey.mokhov at gmail.com>
Date:   Fri Feb 19 01:15:10 2016 +0000

    Refactor oracles, drop redundant newCache.


>---------------------------------------------------------------

13ad050070d32c5c6267af8fba60125af878147c
 src/Oracles/ArgsHash.hs     |  5 ++---
 src/Oracles/Dependencies.hs |  1 -
 src/Oracles/LookupInPath.hs | 12 +++++-------
 src/Oracles/PackageData.hs  |  5 ++---
 src/Oracles/PackageDb.hs    |  5 ++---
 src/Oracles/PackageDeps.hs  |  8 ++++----
 src/Oracles/WindowsPath.hs  | 10 ++++------
 7 files changed, 19 insertions(+), 27 deletions(-)

diff --git a/src/Oracles/ArgsHash.hs b/src/Oracles/ArgsHash.hs
index 796e753..aec0dc9 100644
--- a/src/Oracles/ArgsHash.hs
+++ b/src/Oracles/ArgsHash.hs
@@ -29,6 +29,5 @@ checkArgsHash target = when trackBuildSystem $ do
 
 -- Oracle for storing per-target argument list hashes
 argsHashOracle :: Rules ()
-argsHashOracle = do
-    _ <- addOracle $ \(ArgsHashKey target) -> hash <$> interpret target getArgs
-    return ()
+argsHashOracle = void $
+    addOracle $ \(ArgsHashKey target) -> hash <$> interpret target getArgs
diff --git a/src/Oracles/Dependencies.hs b/src/Oracles/Dependencies.hs
index 8895758..b34535b 100644
--- a/src/Oracles/Dependencies.hs
+++ b/src/Oracles/Dependencies.hs
@@ -33,6 +33,5 @@ dependenciesOracle = do
         putOracle $ "Reading dependencies from " ++ file ++ "..."
         contents <- map words <$> readFileLines file
         return . Map.fromList $ map (\(x:xs) -> (x, xs)) contents
-
     _ <- addOracle $ \(DependenciesKey (file, obj)) -> Map.lookup obj <$> deps file
     return ()
diff --git a/src/Oracles/LookupInPath.hs b/src/Oracles/LookupInPath.hs
index 2f6e713..0ea03fd 100644
--- a/src/Oracles/LookupInPath.hs
+++ b/src/Oracles/LookupInPath.hs
@@ -15,13 +15,11 @@ lookupInPath name
     | otherwise                 = return name
 
 lookupInPathOracle :: Rules ()
-lookupInPathOracle = do
-    answer <- newCache $ \query -> do
-        maybePath <- liftIO $ findExecutable query
+lookupInPathOracle = void $
+    addOracle $ \(LookupInPath name) -> do
+        maybePath <- liftIO $ findExecutable name
         path <- case maybePath of
             Just value -> return $ unifyPath value
-            Nothing    -> putError $ "Cannot find executable '" ++ query ++ "'."
-        putOracle $ "Executable found: " ++ query ++ " => " ++ path
+            Nothing    -> putError $ "Cannot find executable '" ++ name ++ "'."
+        putOracle $ "Executable found: " ++ name ++ " => " ++ path
         return path
-    _ <- addOracle $ \(LookupInPath query) -> answer query
-    return ()
diff --git a/src/Oracles/PackageData.hs b/src/Oracles/PackageData.hs
index d176839..ba3e205 100644
--- a/src/Oracles/PackageData.hs
+++ b/src/Oracles/PackageData.hs
@@ -86,10 +86,9 @@ pkgDataList packageData = fmap (map unquote . words) $ case packageData of
 -- Oracle for 'package-data.mk' files
 packageDataOracle :: Rules ()
 packageDataOracle = do
-    pkgDataContents <- newCache $ \file -> do
+    keys <- newCache $ \file -> do
         need [file]
         putOracle $ "Reading " ++ file ++ "..."
         liftIO $ readConfigFile file
-    _ <- addOracle $ \(PackageDataKey (file, key)) ->
-        Map.lookup key <$> pkgDataContents file
+    _ <- addOracle $ \(PackageDataKey (file, key)) -> Map.lookup key <$> keys file
     return ()
diff --git a/src/Oracles/PackageDb.hs b/src/Oracles/PackageDb.hs
index 97a2a5c..b644989 100644
--- a/src/Oracles/PackageDb.hs
+++ b/src/Oracles/PackageDb.hs
@@ -12,12 +12,11 @@ import Settings.Paths
 import Target
 
 packageDbOracle :: Rules ()
-packageDbOracle = do
-    _ <- addOracle $ \(PackageDbKey stage) -> do
+packageDbOracle = void $
+    addOracle $ \(PackageDbKey stage) -> do
         let dir  = packageDbDirectory stage
             file = dir -/- "package.cache"
         unlessM (liftIO $ IO.doesFileExist file) $ do
             removeDirectoryIfExists dir
             build $ Target (vanillaContext stage ghcPkg) (GhcPkg stage) [] [dir]
             putSuccess $ "| Successfully initialised " ++ dir
-    return ()
diff --git a/src/Oracles/PackageDeps.hs b/src/Oracles/PackageDeps.hs
index 94cdd91..6a5f7dd 100644
--- a/src/Oracles/PackageDeps.hs
+++ b/src/Oracles/PackageDeps.hs
@@ -8,9 +8,9 @@ import Package
 newtype PackageDepsKey = PackageDepsKey PackageName
     deriving (Show, Typeable, Eq, Hashable, Binary, NFData)
 
--- packageDeps name is an action that given a package looks up its dependencies
--- in Base.packageDependencies file. The dependencies need to be computed by
--- scanning package cabal files (see Rules.Cabal).
+-- @packageDeps name@ is an action that given a 'Package' looks up its
+-- dependencies in 'Base.packageDependencies' file. The dependencies need to be
+-- computed by scanning package cabal files (see Rules.Cabal).
 packageDeps :: Package -> Action [PackageName]
 packageDeps pkg = do
     res <- askOracle . PackageDepsKey . pkgName $ pkg
@@ -23,6 +23,6 @@ packageDepsOracle = do
         putOracle $ "Reading package dependencies..."
         contents <- readFileLines packageDependencies
         return . Map.fromList $
-            [ (head ps, tail ps) | line <- contents, let ps = map PackageName $ words line ]
+            [ (p, ps) | line <- contents, let p:ps = map PackageName $ words line ]
     _ <- addOracle $ \(PackageDepsKey pkg) -> Map.lookup pkg <$> deps ()
     return ()
diff --git a/src/Oracles/WindowsPath.hs b/src/Oracles/WindowsPath.hs
index 3cbf1f1..a0343fb 100644
--- a/src/Oracles/WindowsPath.hs
+++ b/src/Oracles/WindowsPath.hs
@@ -15,7 +15,7 @@ topDirectory = do
     ghcSourcePath <- setting GhcSourcePath
     fixAbsolutePathOnWindows ghcSourcePath
 
--- Fix an absolute path on Windows:
+-- | Fix an absolute path on Windows:
 -- * "/c/" => "C:/"
 -- * "/usr/bin/tar.exe" => "C:/msys/usr/bin/tar.exe"
 fixAbsolutePathOnWindows :: FilePath -> Action FilePath
@@ -29,13 +29,11 @@ fixAbsolutePathOnWindows path = do
     else
         return path
 
--- Detecting path mapping on Windows. This is slow and requires caching.
+-- | Compute path mapping on Windows. This is slow and requires caching.
 windowsPathOracle :: Rules ()
-windowsPathOracle = do
-    answer <- newCache $ \path -> do
+windowsPathOracle = void $
+    addOracle $ \(WindowsPath path) -> do
         Stdout out <- quietly $ cmd ["cygpath", "-m", path]
         let windowsPath = unifyPath $ dropWhileEnd isSpace out
         putOracle $ "Windows path mapping: " ++ path ++ " => " ++ windowsPath
         return windowsPath
-    _ <- addOracle $ \(WindowsPath query) -> answer query
-    return ()



More information about the ghc-commits mailing list