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

On branch  : master

http://hackage.haskell.org/trac/ghc/changeset/142a0fef937dbd2c2c33725d065cb0ab5141d5d4

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

commit 142a0fef937dbd2c2c33725d065cb0ab5141d5d4
Author: Duncan Coutts <[email protected]>
Date:   Wed Feb 18 23:46:50 2009 +0000

    Add extra assertion into the top down dep planner

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

 .../Distribution/Client/Dependency/TopDown.hs      |   13 ++++++++++++-
 1 files changed, 12 insertions(+), 1 deletions(-)

diff --git a/cabal-install/Distribution/Client/Dependency/TopDown.hs 
b/cabal-install/Distribution/Client/Dependency/TopDown.hs
index 33353e6..e7d4c99 100644
--- a/cabal-install/Distribution/Client/Dependency/TopDown.hs
+++ b/cabal-install/Distribution/Client/Dependency/TopDown.hs
@@ -64,6 +64,8 @@ import Data.Set (Set)
 import qualified Data.Map as Map
 import qualified Data.Graph as Graph
 import qualified Data.Array as Array
+import Control.Exception
+         ( assert )
 
 -- ------------------------------------------------------------
 -- * Search state types
@@ -445,7 +447,8 @@ finaliseSelectedPackages pref selected constraints =
           case PackageIndex.lookupDependency remainingChoices dep of
             []        -> impossible
             [pkg']    -> pkg'
-            remaining -> maximumBy bestByPref remaining
+            remaining -> assert (checkIsPaired remaining)
+                       $ maximumBy bestByPref remaining
         -- We order candidate packages to pick for a dependency by these
         -- three factors. The last factor is just highest version wins.
         bestByPref =
@@ -461,6 +464,14 @@ finaliseSelectedPackages pref selected constraints =
         isPreferred p = packageVersion p `withinRange` preferredVersions
           where (PackagePreferences preferredVersions _) = pref (packageName p)
 
+        -- We really only expect to find more than one choice remaining when
+        -- we're finalising a dependency on a paired package.
+        checkIsPaired [p1, p2] =
+          case Constraints.isPaired constraints (packageId p1) of
+            Just p2'   -> packageId p2' == packageId p2
+            Nothing    -> False
+        checkIsPaired _ = False
+
 -- | Improve an existing installation plan by, where possible, swapping
 -- packages we plan to install with ones that are already installed.
 -- This may add additional constraints due to the dependencies of installed



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

Reply via email to