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

On branch  : master

http://hackage.haskell.org/trac/ghc/changeset/3639d1afc307fce225678b071d5951ad9dcc1423

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

commit 3639d1afc307fce225678b071d5951ad9dcc1423
Author: Duncan Coutts <[email protected]>
Date:   Thu Feb 21 20:47:56 2008 +0000

    Make ResolvedPackage an instance of Package and PackageFixedDeps
    And use that to simplify the code slightly. Also add an assertion into
    removeFailed, that the first returned result is the failed package itself,
    since we'll rely on this in the install code.

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

 cabal-install/Hackage/DepGraph.hs |   26 +++++++++++++++-----------
 1 files changed, 15 insertions(+), 11 deletions(-)

diff --git a/cabal-install/Hackage/DepGraph.hs 
b/cabal-install/Hackage/DepGraph.hs
index 9eec8fc..1d6bcad 100644
--- a/cabal-install/Hackage/DepGraph.hs
+++ b/cabal-install/Hackage/DepGraph.hs
@@ -22,12 +22,20 @@ module Hackage.DepGraph (
 
 import Hackage.Types
 import Distribution.Package (PackageIdentifier)
+import Distribution.Simple.PackageIndex (Package(..), PackageFixedDeps(..))
 
 import Data.List (partition, intersect)
+import Control.Exception (assert)
 
 data ResolvedPackage = ResolvedPackage PkgInfo FlagAssignment 
[PackageIdentifier]
   deriving Show
 
+instance Package ResolvedPackage where
+   packageId (ResolvedPackage p _ _) = packageId p
+
+instance PackageFixedDeps ResolvedPackage where
+   depends (ResolvedPackage _ _ d) = d
+
 -- | A package dependency graph
 --
 -- * Invariant: the graph is acyclic
@@ -72,7 +80,7 @@ removeCompleted pkgid (DepGraph pkgs) =
     ([_pkg], pkgs') -> DepGraph [ ResolvedPackage pkg fs (filter (/=pkgid) 
deps)
                                 | ResolvedPackage pkg fs deps <- pkgs' ]
     _               -> error "DepGraph.removeCompleted: no such package"
-  where isCompleted = (==pkgid) . pkgInfoId . pkginfo
+  where isCompleted = (==pkgid) . packageId
 
 -- | Remove a package and all the packages that depend on it from the graph.
 --
@@ -83,19 +91,15 @@ removeCompleted pkgid (DepGraph pkgs) =
 --
 removeFailed :: PackageIdentifier -> DepGraph -> (DepGraph, [ResolvedPackage])
 removeFailed pkgid (DepGraph pkgs0) =
-  case partition ((==pkgid) . pkgInfoId . pkginfo) pkgs0 of
-    ([pkg], pkgs') -> remove [pkg] [pkgid] pkgs'
+  case partition ((==pkgid) . packageId) pkgs0 of
+    ([pkg], pkgs') -> case remove [pkg] [pkgid] pkgs' of
+                        result -> assert (packageId p == pkgid) result
+                          where (_,p:_) = result
     _              -> error "DepGraph.removeFailed: no such package"
 
   where
     remove rmpkgs pkgids pkgs =
-      case partition (not . null . intersect pkgids . pkgdeps) pkgs of
+      case partition (not . null . intersect pkgids . depends) pkgs of
         ([], _)          -> (DepGraph pkgs, rmpkgs)
         (rmpkgs', pkgs') -> remove (rmpkgs ++ rmpkgs') pkgids' pkgs'
-          where pkgids' = map (pkgInfoId.pkginfo) rmpkgs'
-
-pkginfo :: ResolvedPackage -> PkgInfo
-pkginfo (ResolvedPackage p _ _) = p
-
-pkgdeps :: ResolvedPackage -> [PackageIdentifier]
-pkgdeps (ResolvedPackage _ _ d) = d
+          where pkgids' = map packageId rmpkgs'



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

Reply via email to