1module Stackage.NarrowDatabase where
3import qualified Data.Map as Map
4import qualified Data.Set as Set
5import Prelude hiding (pi)
8-- | Narrow down the database to only the specified packages and all of
10narrowPackageDB :: PackageDB
11 -> Set (PackageName, Maintainer)
12 -> IO (Map PackageName (Version, [PackageName], Maintainer))
13narrowPackageDB (PackageDB pdb) =
14 loop Map.empty . Set.map (\(name, maintainer) -> ([], name, maintainer))
16 loop result toProcess =
17 case Set.minView toProcess of
18 Nothing -> return result
19 Just ((users, p, maintainer), toProcess') ->
20 case Map.lookup p pdb of
22 | null users -> error $ "Unknown package: " ++ show p
23 | otherwise -> loop result toProcess'
26 result' = Map.insert p (piVersion pi, users, maintainer) result
27 loop result' $ Set.foldl' (addDep users' result' maintainer) toProcess' $ piDeps pi
28 addDep users result maintainer toProcess p =
29 case Map.lookup p result of
30 Nothing -> Set.insert (users, p, maintainer) toProcess
keysesc to close
- j k
- move down, up
- enter
- open
- esc
- back, or up a level
- 1 2 3 4
- readme, files, commits, refs
- /
- filter
- y
- copy the clone command
- c
- compare the chosen commit with another (or shift-click both)
- ?
- show or hide this list