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
