Repository : ssh://darcs.haskell.org//srv/darcs/packages/Cabal On branch : master
http://hackage.haskell.org/trac/ghc/changeset/b2e5c1f930975d40a46cb1982c8d06179d74854a >--------------------------------------------------------------- commit b2e5c1f930975d40a46cb1982c8d06179d74854a Author: Duncan Coutts <[email protected]> Date: Wed May 28 21:50:49 2008 +0000 Move common dependency resolver types into shared module >--------------------------------------------------------------- cabal-install/Hackage/Dependency.hs | 15 +++----- cabal-install/Hackage/Dependency/Bogus.hs | 15 ++------- cabal-install/Hackage/Dependency/Naive.hs | 10 ++---- cabal-install/Hackage/Dependency/Types.hs | 48 +++++++++++++++++++++++++++++ cabal-install/cabal-install.cabal | 1 + 5 files changed, 61 insertions(+), 28 deletions(-) diff --git a/cabal-install/Hackage/Dependency.hs b/cabal-install/Hackage/Dependency.hs index 91ef270..f1b3078 100644 --- a/cabal-install/Hackage/Dependency.hs +++ b/cabal-install/Hackage/Dependency.hs @@ -25,6 +25,8 @@ import qualified Hackage.InstallPlan as InstallPlan import Hackage.InstallPlan (InstallPlan) import Hackage.Types ( UnresolvedDependency(..), AvailablePackage(..) ) +import Hackage.Dependency.Types + ( DependencyResolver ) import Distribution.Package ( PackageIdentifier(..), packageVersion, packageName , Dependency(..), Package(..), PackageFixedDeps(..) ) @@ -41,6 +43,9 @@ import Data.List (maximumBy) import Data.Monoid (Monoid(mempty)) import Control.Exception (assert) +defaultResolver :: DependencyResolver a +defaultResolver = naiveResolver + resolveDependencies :: OS -> Arch -> CompilerId @@ -49,7 +54,7 @@ resolveDependencies :: OS -> [UnresolvedDependency] -> Either [Dependency] (InstallPlan a) resolveDependencies os arch comp (Just installed) available deps = - dependencyResolver naiveResolver + dependencyResolver defaultResolver os arch comp installed available deps resolveDependencies os arch comp Nothing available deps = @@ -70,14 +75,6 @@ hideBasePackage :: Package p => PackageIndex p -> PackageIndex p hideBasePackage = PackageIndex.deletePackageName "base" . PackageIndex.deletePackageName "ghc-prim" -type DependencyResolver a = OS - -> Arch - -> CompilerId - -> PackageIndex InstalledPackageInfo - -> PackageIndex AvailablePackage - -> [UnresolvedDependency] - -> Either [Dependency] [InstallPlan.PlanPackage a] - dependencyResolver :: DependencyResolver a -> OS -> Arch -> CompilerId diff --git a/cabal-install/Hackage/Dependency/Bogus.hs b/cabal-install/Hackage/Dependency/Bogus.hs index 58f4127..09b4727 100644 --- a/cabal-install/Hackage/Dependency/Bogus.hs +++ b/cabal-install/Hackage/Dependency/Bogus.hs @@ -17,19 +17,16 @@ module Hackage.Dependency.Bogus ( import qualified Distribution.Simple.PackageIndex as PackageIndex import Distribution.Simple.PackageIndex (PackageIndex) -import Distribution.InstalledPackageInfo (InstalledPackageInfo) import qualified Hackage.InstallPlan as InstallPlan import Hackage.Types ( UnresolvedDependency(..), AvailablePackage(..) , ConfiguredPackage(..) ) +import Hackage.Dependency.Types + ( DependencyResolver ) import Distribution.Package ( PackageIdentifier(..), Dependency(..), Package(..) ) import Distribution.PackageDescription.Configuration ( finalizePackageDescription) -import Distribution.Compiler - ( CompilerId ) -import Distribution.System - ( OS, Arch ) import Distribution.Simple.Utils (comparing) import Data.List (maximumBy) @@ -39,13 +36,7 @@ import Data.List (maximumBy) -- We need this for hugs and nhc98 which do not track installed packages. -- We just pretend that everything is installed and hope for the best. -- -bogusResolver :: OS - -> Arch - -> CompilerId - -> PackageIndex InstalledPackageInfo - -> PackageIndex AvailablePackage - -> [UnresolvedDependency] - -> Either [Dependency] [InstallPlan.PlanPackage a] +bogusResolver :: DependencyResolver a bogusResolver os arch comp _ available deps = case unzipEithers (map resolveFromAvailable deps) of (ok, []) -> Right ok diff --git a/cabal-install/Hackage/Dependency/Naive.hs b/cabal-install/Hackage/Dependency/Naive.hs index cac1ea6..e3bf9e1 100644 --- a/cabal-install/Hackage/Dependency/Naive.hs +++ b/cabal-install/Hackage/Dependency/Naive.hs @@ -24,6 +24,8 @@ import qualified Hackage.InstallPlan as InstallPlan import Hackage.Types ( UnresolvedDependency(..), AvailablePackage(..) , ConfiguredPackage(..) ) +import Hackage.Dependency.Types + ( DependencyResolver ) import Distribution.Package ( PackageIdentifier(..), Dependency(..), Package(..) ) import Distribution.PackageDescription @@ -44,13 +46,7 @@ import Data.List (maximumBy) import Data.Maybe (fromMaybe) import Data.Monoid (Monoid(mappend)) -naiveResolver :: OS - -> Arch - -> CompilerId - -> PackageIndex InstalledPackageInfo - -> PackageIndex AvailablePackage - -> [UnresolvedDependency] - -> Either [Dependency] [InstallPlan.PlanPackage a] +naiveResolver :: DependencyResolver a naiveResolver os arch comp installed available deps = packagesToInstall installed [ resolveDependency os arch comp installed available dep flags diff --git a/cabal-install/Hackage/Dependency/Types.hs b/cabal-install/Hackage/Dependency/Types.hs new file mode 100644 index 0000000..155c326 --- /dev/null +++ b/cabal-install/Hackage/Dependency/Types.hs @@ -0,0 +1,48 @@ +----------------------------------------------------------------------------- +-- | +-- Module : Hackage.Dependency.Types +-- Copyright : (c) Duncan Coutts 2008 +-- License : BSD-like +-- +-- Maintainer : [email protected] +-- Stability : provisional +-- Portability : portable +-- +-- Common types for dependency resolution. +----------------------------------------------------------------------------- +module Hackage.Dependency.Types ( + DependencyResolver, + ) where + +import Hackage.Types + ( UnresolvedDependency(..), AvailablePackage(..) ) +import qualified Hackage.InstallPlan as InstallPlan + +import Distribution.Package + ( Dependency ) +import Distribution.InstalledPackageInfo + ( InstalledPackageInfo ) +import Distribution.Simple.PackageIndex + ( PackageIndex ) +import Distribution.Compiler + ( CompilerId ) +import Distribution.System + ( OS, Arch ) + +import Prelude hiding (fail) + +-- | A dependency resolver is a function that works out an installation plan +-- given the set of installed and available packages and a set of deps to +-- solve for. +-- +-- The reason for this interface is because there are dozens of approaches to +-- solving the package dependency problem and we want to make it easy to swap +-- in alternatives. +-- +type DependencyResolver a = OS + -> Arch + -> CompilerId + -> PackageIndex InstalledPackageInfo + -> PackageIndex AvailablePackage + -> [UnresolvedDependency] + -> Either [Dependency] [InstallPlan.PlanPackage a] diff --git a/cabal-install/cabal-install.cabal b/cabal-install/cabal-install.cabal index f508a08..8707639 100644 --- a/cabal-install/cabal-install.cabal +++ b/cabal-install/cabal-install.cabal @@ -41,6 +41,7 @@ Executable cabal Hackage.Dependency Hackage.Dependency.Bogus Hackage.Dependency.Naive + Hackage.Dependency.Types Hackage.Fetch Hackage.HttpUtils Hackage.IndexUtils _______________________________________________ Cvs-libraries mailing list [email protected] http://www.haskell.org/mailman/listinfo/cvs-libraries
