diff options
author | Ian Lynagh <ian@well-typed.com> | 2013-05-30 19:18:29 +0100 |
---|---|---|
committer | Ian Lynagh <ian@well-typed.com> | 2013-05-30 19:18:29 +0100 |
commit | 896d0f1ad4e67af1d3a731af21ab65a3f5d406e3 (patch) | |
tree | 50984eefcf826d6894fbd7f89d83ade25abeb5f9 /utils | |
parent | bc5bf1b34c9b0520d16fbe0bc2bd4af3cab78a3f (diff) | |
download | haskell-896d0f1ad4e67af1d3a731af21ab65a3f5d406e3.tar.gz |
When verbose, give more information about cache status
Diffstat (limited to 'utils')
-rw-r--r-- | utils/ghc-pkg/Main.hs | 52 |
1 files changed, 35 insertions, 17 deletions
diff --git a/utils/ghc-pkg/Main.hs b/utils/ghc-pkg/Main.hs index 532bc02081..716e7ae5ac 100644 --- a/utils/ghc-pkg/Main.hs +++ b/utils/ghc-pkg/Main.hs @@ -612,7 +612,7 @@ readParseDatabase verbosity mb_user_conf use_cache path pkgs <- parseMultiPackageConf verbosity path mkPackageDB pkgs Right fs - | not use_cache -> ignore_cache + | not use_cache -> ignore_cache (const $ return ()) | otherwise -> do let cache = path </> cachefilename tdir <- getModificationTime path @@ -621,24 +621,42 @@ readParseDatabase verbosity mb_user_conf use_cache path Left ex -> do when (verbosity > Normal) $ warn ("warning: cannot read cache file " ++ cache ++ ": " ++ show ex) - ignore_cache - Right tcache - | tcache >= tdir -> do - when (verbosity > Normal) $ - infoLn ("using cache: " ++ cache) - pkgs <- myReadBinPackageDB cache - let pkgs' = map convertPackageInfoIn pkgs - mkPackageDB pkgs' - | otherwise -> do - when (verbosity >= Normal) $ do - warn ("WARNING: cache is out of date: " ++ cache) - warn " use 'ghc-pkg recache' to fix." - ignore_cache + ignore_cache (const $ return ()) + Right tcache -> do + let compareTimestampToCache file = + when (verbosity >= Verbose) $ do + tFile <- getModificationTime file + compareTimestampToCache' file tFile + compareTimestampToCache' file tFile = do + let rel = case tcache `compare` tFile of + LT -> " (NEWER than cache)" + GT -> " (older than cache)" + EQ -> " (same as cache)" + warn ("Timestamp " ++ show tFile + ++ " for " ++ file ++ rel) + when (verbosity >= Verbose) $ do + warn ("Timestamp " ++ show tcache ++ " for " ++ cache) + compareTimestampToCache' path tdir + if tcache >= tdir + then do + when (verbosity > Normal) $ + infoLn ("using cache: " ++ cache) + pkgs <- myReadBinPackageDB cache + let pkgs' = map convertPackageInfoIn pkgs + mkPackageDB pkgs' + else do + when (verbosity >= Normal) $ do + warn ("WARNING: cache is out of date: " + ++ cache) + warn "Use 'ghc-pkg recache' to fix." + ignore_cache compareTimestampToCache where - ignore_cache = do + ignore_cache :: (FilePath -> IO ()) -> IO PackageDB + ignore_cache checkTime = do let confs = filter (".conf" `isSuffixOf`) fs - pkgs <- mapM (parseSingletonPackageConf verbosity) $ - map (path </>) confs + doFile f = do checkTime f + parseSingletonPackageConf verbosity f + pkgs <- mapM doFile $ map (path </>) confs mkPackageDB pkgs where mkPackageDB pkgs = do |