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

On branch  : master

http://hackage.haskell.org/trac/ghc/changeset/06892ecba0781b5e3b9f91a0c37a91242be6d9c2

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

commit 06892ecba0781b5e3b9f91a0c37a91242be6d9c2
Author: Duncan Coutts <[email protected]>
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



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

Reply via email to