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 <[email protected]>
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)
 



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

Reply via email to