shake 0.2.2 → 0.2.3
raw patch · 2 files changed
+15/−14 lines, 2 files
Files
- Development/Shake/Database.hs +14/−13
- shake.cabal +1/−1
Development/Shake/Database.hs view
@@ -106,7 +106,7 @@ deriving Show data Result = Result- {value :: Value -- the value associated with the Key+ {result :: Value -- the result associated with the Key ,built :: Step -- when it was actually run ,changed :: Step -- the step for deciding if it's valid ,depends :: [[Key]] -- dependencies@@ -177,7 +177,7 @@ vs <- mapM (reduce []) ks let errs = [e | Error e <- vs] if all isReady vs then- return $ return $ Right (0, [value r | Ready r <- vs])+ return $ return $ Right (0, [result r | Ready r <- vs]) else if not $ null errs then return $ return $ Left $ head errs else do@@ -187,7 +187,7 @@ let done x = do signalBarrier wait x; return True case Map.lookup k s of Just (Error e) -> done $ Left e- Just Ready{} | finish -> done $ Right [value r | k <- ks, let Ready r = fromJust $ Map.lookup k s]+ Just Ready{} | finish -> done $ Right [result r | k <- ks, let Ready r = fromJust $ Map.lookup k s] | otherwise -> return False return $ do (dur,res) <- duration $ blockPool pool $ waitBarrier wait@@ -215,8 +215,8 @@ case Map.lookup k s of Nothing -> run stack k Nothing Just (Loaded r) -> do- b <- valid k (value r)- logger $ "valid " ++ show b ++ " for " ++ atom k ++ " " ++ atom (value r)+ b <- valid k $ result r+ logger $ "valid " ++ show b ++ " for " ++ atom k ++ " " ++ atom (result r) if not b then run stack k $ Just r else check stack k r (depends r) Just res -> return res @@ -229,14 +229,14 @@ ans <- k #= case res of Left err -> Error err Right (v,depends,execution,traces) ->- let c | Just r <- r, value r == v = changed r+ let c | Just r <- r, result r == v = changed r | otherwise = step- in Ready Result{value=v,changed=c,built=step,..}+ in Ready Result{result=v,changed=c,built=step,..} runWaiting w return ans case ans of Ready r -> do- logger $ "result " ++ atom k ++ " = " ++ atom (value r)+ logger $ "result " ++ atom k ++ " = " ++ atom (result r) appendJournal journal k r -- leave the DB lock before appending _ -> return () k #= w@@ -281,7 +281,7 @@ allEntries :: Database -> IO [(Key,Value)] allEntries Database{..} = do status <- readIORef status- return $ ordering [((k, value i), concat $ depends i) | (k,v) <- Map.toList status, Just i <- [getResult v]]+ return $ ordering [((k, result i), concat $ depends i) | (k,v) <- Map.toList status, Just i <- [getResult v]] where ordering :: Eq a => [((a,b), [a])] -> [(a,b)] ordering xs = f [(a, nub b `intersect` as) | let as = map (fst . fst) xs, (a,b) <- xs]@@ -316,9 +316,9 @@ logger "Starting validity/lint checking" bad <- fmap concat $ forM (Map.toList status) $ \(k,v) -> case v of Ready r -> do- good <- valid k (value r)- logger $ "Checking if " ++ show k ++ " is " ++ show (value r) ++ ", " ++ if good then "passed" else "FAILED"- return [show k ++ " is no longer " ++ show (value r) | not good && not (special k)]+ good <- valid k (result r)+ logger $ "Checking if " ++ show k ++ " is " ++ show (result r) ++ ", " ++ if good then "passed" else "FAILED"+ return [show k ++ " is no longer " ++ show (result r) | not good && not (special k)] _ -> return [] if null bad then logger "Validity/lint check passed"@@ -342,12 +342,13 @@ openDatabase logger filename version = do let dbfile = filename <.> "database" jfile = filename <.> "journal"+ createDirectoryIfMissing True $ takeDirectory dbfile lock <- newLock logger $ "readDatabase " ++ dbfile (step, status) <- readDatabase dbfile version step <- return $ incStep step- + b <- doesFileExist jfile (status,step) <- if not b then return (status,step) else do logger $ "replayJournal " ++ jfile
shake.cabal view
@@ -1,7 +1,7 @@ cabal-version: >= 1.6 build-type: Simple name: shake-version: 0.2.2+version: 0.2.3 license: BSD3 license-file: LICENSE category: Development