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
