Repository : ssh://darcs.haskell.org//srv/darcs/packages/Cabal

On branch  : master

http://hackage.haskell.org/trac/ghc/changeset/5630d4bf83eeb5af7791d329f2ef2fbdd021ec51

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

commit 5630d4bf83eeb5af7791d329f2ef2fbdd021ec51
Author: Duncan Coutts <[email protected]>
Date:   Tue Jun 3 17:16:46 2008 +0000

    Check the InstallPlan invariant on updates and not on reads

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

 cabal-install/Hackage/InstallPlan.hs |   19 +++++++++++--------
 1 files changed, 11 insertions(+), 8 deletions(-)

diff --git a/cabal-install/Hackage/InstallPlan.hs 
b/cabal-install/Hackage/InstallPlan.hs
index 9a17315..11f321d 100644
--- a/cabal-install/Hackage/InstallPlan.hs
+++ b/cabal-install/Hackage/InstallPlan.hs
@@ -186,8 +186,7 @@ toList = PackageIndex.allPackages . planIndex
 ready :: InstallPlan buildResult -> [ConfiguredPackage]
 ready plan = assert check readyPackages
   where
-    check = invariant plan
-         && null readyPackages <= null configuredPackages
+    check = if null readyPackages then null configuredPackages else True
     configuredPackages =
       [ pkg | Configured pkg <- PackageIndex.allPackages (planIndex plan) ]
     readyPackages = filter (all isInstalled . depends) configuredPackages
@@ -209,9 +208,11 @@ ready plan = assert check readyPackages
 --
 completed :: PackageIdentifier
           -> InstallPlan buildResult -> InstallPlan buildResult
-completed pkgid plan =
-  plan { planIndex = PackageIndex.insert installed (planIndex plan) }
+completed pkgid plan = assert (invariant plan') plan'
   where
+    plan'     = plan {
+                  planIndex = PackageIndex.insert installed (planIndex plan)
+                }
     installed = Installed (lookupConfiguredPackage plan pkgid)
 
 -- | Marks a package in the graph as having failed. It also marks all the
@@ -224,13 +225,15 @@ failed :: PackageIdentifier -- ^ The id of the package 
that failed to install
        -> buildResult       -- ^ The build result to use for its dependencies
        -> InstallPlan buildResult
        -> InstallPlan buildResult
-failed pkgid buildResult dependentBuildResult plan =
-  plan { planIndex = PackageIndex.merge (planIndex plan) failures }
+failed pkgid buildResult buildResult' plan = assert (invariant plan') plan'
   where
-    pkg = lookupConfiguredPackage plan pkgid
+    plan'    = plan {
+                 planIndex = PackageIndex.merge (planIndex plan) failures
+               }
+    pkg      = lookupConfiguredPackage plan pkgid
     failures = PackageIndex.fromList
              $ Failed pkg buildResult
-             : [ Failed pkg' dependentBuildResult
+             : [ Failed pkg' buildResult'
                | pkgid' <- packagesThatDependOn plan pkgid
                , let pkg' = lookupConfiguredPackage plan pkgid' ]
 



_______________________________________________
Cvs-libraries mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/cvs-libraries

Reply via email to