[commit: Cabal] master: Hide broken installed packages when resolving dependencies (5dea03b)
Ian Lynagh
igloo at earth.li
Fri Jun 24 01:53:30 CEST 2011
Repository : ssh://darcs.haskell.org//srv/darcs/packages/Cabal
On branch : master
http://hackage.haskell.org/trac/ghc/changeset/5dea03b8bf69c2874eb4cda30959c16bf0b9d3e5
>---------------------------------------------------------------
commit 5dea03b8bf69c2874eb4cda30959c16bf0b9d3e5
Author: Duncan Coutts <duncan at haskell.org>
Date: Wed May 7 00:21:03 2008 +0000
Hide broken installed packages when resolving dependencies
Stops us from choosing them which would always end up with an
invalid installation plan.
>---------------------------------------------------------------
cabal-install/Hackage/Dependency.hs | 18 +++++++++++++++---
1 files changed, 15 insertions(+), 3 deletions(-)
diff --git a/cabal-install/Hackage/Dependency.hs b/cabal-install/Hackage/Dependency.hs
index 5bf40f7..64c49bf 100644
--- a/cabal-install/Hackage/Dependency.hs
+++ b/cabal-install/Hackage/Dependency.hs
@@ -24,7 +24,9 @@ import qualified Hackage.InstallPlan as InstallPlan
import Hackage.InstallPlan (InstallPlan)
import Hackage.Types
( UnresolvedDependency(..), AvailablePackage(..) )
-import Distribution.Package (PackageIdentifier(..), Package(..), Dependency(..))
+import Distribution.Package
+ ( PackageIdentifier(..), Dependency(..)
+ , Package(..), PackageFixedDeps(..) )
import Distribution.PackageDescription
( PackageDescription(buildDepends), GenericPackageDescription
, FlagAssignment )
@@ -42,6 +44,7 @@ import Control.Monad (mplus)
import Data.List (maximumBy)
import Data.Maybe (fromMaybe, catMaybes)
import Data.Monoid (Monoid(mappend))
+import Control.Exception (assert)
resolveDependencies :: OS
-> Arch
@@ -51,9 +54,11 @@ resolveDependencies :: OS
-> [UnresolvedDependency]
-> Either [Dependency] (InstallPlan a)
resolveDependencies os arch comp (Just installed) available deps =
- packagesToInstall os arch comp installed
- [ resolveDependency os arch comp installed available dep flags
+ assert (null $ PackageIndex.brokenPackages installed')
+ packagesToInstall os arch comp installed'
+ [ resolveDependency os arch comp installed' available dep flags
| UnresolvedDependency dep flags <- deps]
+ where installed' = hideBrokenPackages installed
resolveDependencies os arch comp Nothing available deps =
packagesToInstall os arch comp undefined
(resolveDependenciesBogusly available deps)
@@ -69,6 +74,13 @@ resolveDependenciesBogusly available = map resolveFromAvailable
Nothing -> UnavailableDependency dep
Just pkg -> AvailableDependency dep pkg flags []
+hideBrokenPackages :: PackageFixedDeps p => PackageIndex p -> PackageIndex p
+hideBrokenPackages index =
+ foldr (PackageIndex.delete . packageId) index
+ . PackageIndex.reverseDependencyClosure index
+ . map (packageId . fst)
+ $ PackageIndex.brokenPackages index
+
{-
type DependencyResolver a = OS
-> Arch
More information about the Cvs-libraries
mailing list