Repository : ssh://darcs.haskell.org//srv/darcs/packages/Cabal

On branch  : master

http://hackage.haskell.org/trac/ghc/changeset/436558c19ac9b8c82e87c151911bb0bde35adfc9

>---------------------------------------------------------------

commit 436558c19ac9b8c82e87c151911bb0bde35adfc9
Author: Duncan Coutts <[email protected]>
Date:   Fri Dec 19 18:23:28 2008 +0000

    Fix constraint set handling for installed constraints
    A rather subtle bug. The code was actually correct but the transitionsTo
    assertion was not accounting for a transition between the case where
    a package's available version had been excluded and then the whole thing
    got excluded by a version constraint. It counted one side as a loss
    without a corresponding gain on the other side.

>---------------------------------------------------------------

 .../Client/Dependency/TopDown/Constraints.hs       |    7 +++++--
 1 files changed, 5 insertions(+), 2 deletions(-)

diff --git 
a/cabal-install/Distribution/Client/Dependency/TopDown/Constraints.hs 
b/cabal-install/Distribution/Client/Dependency/TopDown/Constraints.hs
index 46d946b..25475b3 100644
--- a/cabal-install/Distribution/Client/Dependency/TopDown/Constraints.hs
+++ b/cabal-install/Distribution/Client/Dependency/TopDown/Constraints.hs
@@ -102,6 +102,9 @@ transitionsTo constraints @(Constraints available  _ 
excluded )
     availableGained = [ pkg | OnlyInRight pkg <- availableChange ]
     excludedLost    = [ pkg | OnlyInLeft  pkg <- excludedChange  ]
     excludedGained  = [ pkg | OnlyInRight pkg <- excludedChange  ]
+                   ++ [ pkg | InBoth (ExcludedPackage _ (_:_) [])
+                                 pkg@(ExcludedPackage _ (_:_) (_:_))
+                                              <- excludedChange  ]
     availableChange = mergeBy (\a b -> packageId a `compare` packageId b)
                               (PackageIndex.allPackages available)
                               (PackageIndex.allPackages available')
@@ -199,7 +202,7 @@ constrain (TaggedDependency installedConstraint (Dependency 
name versionRange))
                = id
     update pkg = case pkg of
       InstalledOnly         _   -> id
-      AvailableOnly           _ -> error "impossible" -- 
PackageIndex.deletePackageId (packageId pkg)
+      AvailableOnly           _ -> PackageIndex.deletePackageId (packageId pkg)
       InstalledAndAvailable i _ -> PackageIndex.insert (InstalledOnly i)
 
   -- Applying the constraint means adding exclusions for the packages that
@@ -215,7 +218,7 @@ constrain (TaggedDependency installedConstraint (Dependency 
name versionRange))
       = Nothing
       | otherwise = case pkg of
       InstalledOnly         _   -> Nothing
-      AvailableOnly           _ -> Just (ExcludedPackage pkgid [reason] [])
+      AvailableOnly           _ -> Just (ExcludedPackage pkgid [] [reason])
       InstalledAndAvailable _ _ ->
         case PackageIndex.lookupPackageId excluded pkgid of
           Just (ExcludedPackage _ avail both)



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

Reply via email to