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
