mirror of
https://github.com/commercialhaskell/stackage.git
synced 2026-02-14 15:25:50 +01:00
Basic dep tree display
This commit is contained in:
parent
d8571ea0f0
commit
1833de64b8
@ -1,3 +1,4 @@
|
|||||||
|
{-# LANGUAGE CPP #-}
|
||||||
module Stackage.Config where
|
module Stackage.Config where
|
||||||
|
|
||||||
import Control.Monad (unless, when)
|
import Control.Monad (unless, when)
|
||||||
@ -63,3 +64,11 @@ stablePackages = execWriter $ do
|
|||||||
case simpleParse range of
|
case simpleParse range of
|
||||||
Nothing -> error $ "Invalid range " ++ show range ++ " for " ++ package
|
Nothing -> error $ "Invalid range " ++ show range ++ " for " ++ package
|
||||||
Just range' -> tell $ Map.singleton (PackageName package) range'
|
Just range' -> tell $ Map.singleton (PackageName package) range'
|
||||||
|
|
||||||
|
verbose :: Bool
|
||||||
|
verbose =
|
||||||
|
#if VERBOSE
|
||||||
|
True
|
||||||
|
#else
|
||||||
|
False
|
||||||
|
#endif
|
||||||
|
|||||||
@ -3,6 +3,7 @@ module Stackage.InstallInfo
|
|||||||
, iiPackageList
|
, iiPackageList
|
||||||
) where
|
) where
|
||||||
|
|
||||||
|
import Control.Monad (when)
|
||||||
import qualified Data.Map as Map
|
import qualified Data.Map as Map
|
||||||
import qualified Data.Set as Set
|
import qualified Data.Set as Set
|
||||||
import Stackage.Config
|
import Stackage.Config
|
||||||
@ -11,6 +12,7 @@ import Stackage.LoadDatabase
|
|||||||
import Stackage.NarrowDatabase
|
import Stackage.NarrowDatabase
|
||||||
import Stackage.Types
|
import Stackage.Types
|
||||||
import Stackage.Util
|
import Stackage.Util
|
||||||
|
import Data.Version (showVersion)
|
||||||
|
|
||||||
getInstallInfo :: IO InstallInfo
|
getInstallInfo :: IO InstallInfo
|
||||||
getInstallInfo = do
|
getInstallInfo = do
|
||||||
@ -19,10 +21,26 @@ getInstallInfo = do
|
|||||||
let totalCore = extraCore `Set.union` Set.map (\(PackageIdentifier p _) -> p) (hpcore hp)
|
let totalCore = extraCore `Set.union` Set.map (\(PackageIdentifier p _) -> p) (hpcore hp)
|
||||||
pdb <- loadPackageDB totalCore allPackages
|
pdb <- loadPackageDB totalCore allPackages
|
||||||
final <- narrowPackageDB pdb $ Set.fromList $ Map.keys allPackages
|
final <- narrowPackageDB pdb $ Set.fromList $ Map.keys allPackages
|
||||||
|
|
||||||
|
when verbose $ do
|
||||||
|
putStrLn "Basic dependency listing:"
|
||||||
|
mapM_ (putStrLn . showDep) $ Map.toList final
|
||||||
return InstallInfo
|
return InstallInfo
|
||||||
{ iiCore = totalCore
|
{ iiCore = totalCore
|
||||||
, iiPackages = final
|
, iiPackages = Map.map fst final
|
||||||
}
|
}
|
||||||
|
|
||||||
|
showDep :: (PackageName, (Version, [PackageName])) -> String
|
||||||
|
showDep (name, (version, deps)) =
|
||||||
|
concat
|
||||||
|
[ unP name
|
||||||
|
, "-"
|
||||||
|
, showVersion version
|
||||||
|
, ": "
|
||||||
|
, unwords $ map unP deps
|
||||||
|
]
|
||||||
|
where
|
||||||
|
unP (PackageName p) = p
|
||||||
|
|
||||||
iiPackageList :: InstallInfo -> [String]
|
iiPackageList :: InstallInfo -> [String]
|
||||||
iiPackageList = map packageVersionString . Map.toList . iiPackages
|
iiPackageList = map packageVersionString . Map.toList . iiPackages
|
||||||
|
|||||||
@ -9,22 +9,23 @@ import Stackage.Types
|
|||||||
-- their dependencies.
|
-- their dependencies.
|
||||||
narrowPackageDB :: PackageDB
|
narrowPackageDB :: PackageDB
|
||||||
-> Set PackageName
|
-> Set PackageName
|
||||||
-> IO (Map PackageName Version)
|
-> IO (Map PackageName (Version, [PackageName]))
|
||||||
narrowPackageDB (PackageDB pdb) =
|
narrowPackageDB (PackageDB pdb) =
|
||||||
loop Map.empty . Set.map ((,) True)
|
loop Map.empty . Set.map ((,) [])
|
||||||
where
|
where
|
||||||
loop result toProcess =
|
loop result toProcess =
|
||||||
case Set.minView toProcess of
|
case Set.minView toProcess of
|
||||||
Nothing -> return result
|
Nothing -> return result
|
||||||
Just ((isOrig, p), toProcess') ->
|
Just ((users, p), toProcess') ->
|
||||||
case Map.lookup p pdb of
|
case Map.lookup p pdb of
|
||||||
Nothing
|
Nothing
|
||||||
| isOrig -> error $ "Unknown package: " ++ show p
|
| null users -> error $ "Unknown package: " ++ show p
|
||||||
| otherwise -> loop result toProcess'
|
| otherwise -> loop result toProcess'
|
||||||
Just pi -> do
|
Just pi -> do
|
||||||
let result' = Map.insert p (piVersion pi) result
|
let users' = p:users
|
||||||
loop result' $ Set.foldl' (addDep result') toProcess' $ piDeps pi
|
result' = Map.insert p (piVersion pi, users) result
|
||||||
addDep result toProcess p =
|
loop result' $ Set.foldl' (addDep users' result') toProcess' $ piDeps pi
|
||||||
|
addDep users result toProcess p =
|
||||||
case Map.lookup p result of
|
case Map.lookup p result of
|
||||||
Nothing -> Set.insert (False, p) toProcess
|
Nothing -> Set.insert (users, p) toProcess
|
||||||
Just{} -> toProcess
|
Just{} -> toProcess
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user