[commit: Cabal] master: Add support for source constraints to the solver (a4c6a4e)
Ian Lynagh
igloo at earth.li
Fri Jun 24 02:08:57 CEST 2011
Repository : ssh://darcs.haskell.org//srv/darcs/packages/Cabal
On branch : master
http://hackage.haskell.org/trac/ghc/changeset/a4c6a4e0e061c61c179a5c99ed5f8a7aab25083e
>---------------------------------------------------------------
commit a4c6a4e0e061c61c179a5c99ed5f8a7aab25083e
Author: Duncan Coutts <duncan at community.haskell.org>
Date: Tue Mar 29 09:57:10 2011 +0000
Add support for source constraints to the solver
>---------------------------------------------------------------
.../Distribution/Client/Dependency/TopDown.hs | 23 ++++++++++++++++++++
.../Client/Dependency/TopDown/Types.hs | 13 +++++++----
.../Distribution/Client/Dependency/Types.hs | 1 +
3 files changed, 32 insertions(+), 5 deletions(-)
diff --git a/cabal-install/Distribution/Client/Dependency/TopDown.hs b/cabal-install/Distribution/Client/Dependency/TopDown.hs
index f13b3f2..76df809 100644
--- a/cabal-install/Distribution/Client/Dependency/TopDown.hs
+++ b/cabal-install/Distribution/Client/Dependency/TopDown.hs
@@ -320,6 +320,17 @@ addTopLevelConstraints (PackageConstraintInstalled pkg:deps) cs =
ConflictsWith conflicts ->
Fail (TopLevelInstallConstraintConflict pkg conflicts)
+addTopLevelConstraints (PackageConstraintSource pkg:deps) cs =
+ case addTopLevelSourceConstraint pkg cs of
+ Satisfiable cs' pkgids ->
+ foldr (Step . Exclude) (addTopLevelConstraints deps cs') pkgids
+
+ Unsatisfiable ->
+ Fail (TopLevelInstallConstraintUnsatisfiable pkg)
+
+ ConflictsWith conflicts ->
+ Fail (TopLevelInstallConstraintConflict pkg conflicts)
+
-- | Add exclusion on available packages that cannot be configured.
--
@@ -675,6 +686,7 @@ addPackageDependencyConstraint pkgid dep@(Dependency pkgname verrange)
constraint ver installed = ver `withinRange` verrange
&& case installedConstraint of
InstalledConstraint -> installed
+ SourceConstraint -> not installed
NoInstalledConstraint -> True
reason = ExcludedByPackageDependency pkgid dep installedConstraint
@@ -700,6 +712,17 @@ addTopLevelInstalledConstraint pkgname =
reason = ExcludedByTopLevelDependency (Dependency pkgname anyVersion)
InstalledConstraint
+addTopLevelSourceConstraint :: PackageName
+ -> Constraints
+ -> Satisfiable Constraints
+ [PackageId] ExclusionReason
+addTopLevelSourceConstraint pkgname =
+ Constraints.constrain pkgname constraint reason
+ where
+ constraint _ver installed = not installed
+ reason = ExcludedByTopLevelDependency (Dependency pkgname anyVersion)
+ SourceConstraint
+
-- ------------------------------------------------------------
-- * Reasons for constraints
-- ------------------------------------------------------------
diff --git a/cabal-install/Distribution/Client/Dependency/TopDown/Types.hs b/cabal-install/Distribution/Client/Dependency/TopDown/Types.hs
index 3d9c78f..4428b7a 100644
--- a/cabal-install/Distribution/Client/Dependency/TopDown/Types.hs
+++ b/cabal-install/Distribution/Client/Dependency/TopDown/Types.hs
@@ -70,18 +70,21 @@ instance Package UnconfiguredPackage where
instance Package SemiConfiguredPackage where
packageId (SemiConfiguredPackage p _ _) = packageId p
-instance (Package installed, Package available)
- => Package (InstalledOrSource installed available) where
+instance (Package installed, Package source)
+ => Package (InstalledOrSource installed source) where
packageId (InstalledOnly p ) = packageId p
packageId (SourceOnly p ) = packageId p
packageId (InstalledAndSource p _) = packageId p
--- | We can have constraints on selecting just installed packages.
+-- | We can have constraints on selecting just installed or just source
+-- packages.
--
-- In particular, installed packages can only depend on other installed
-- packages while packages that are not yet installed but which we plan to
-- install can depend on installed or other not-yet-installed packages.
--
-data InstalledConstraint = InstalledConstraint | NoInstalledConstraint
- deriving Eq
+data InstalledConstraint = NoInstalledConstraint
+ | InstalledConstraint
+ | SourceConstraint
+ deriving (Eq, Show)
diff --git a/cabal-install/Distribution/Client/Dependency/Types.hs b/cabal-install/Distribution/Client/Dependency/Types.hs
index dbec819..5b245a1 100644
--- a/cabal-install/Distribution/Client/Dependency/Types.hs
+++ b/cabal-install/Distribution/Client/Dependency/Types.hs
@@ -65,6 +65,7 @@ type DependencyResolver = Platform
data PackageConstraint
= PackageConstraintVersion PackageName VersionRange
| PackageConstraintInstalled PackageName
+ | PackageConstraintSource PackageName
| PackageConstraintFlags PackageName FlagAssignment
deriving (Show,Eq)
More information about the Cvs-libraries
mailing list