1module Stackage.NarrowDatabase where
3import Control.Monad.Trans.Writer
4import qualified Data.Map as Map
5import qualified Data.Set as Set
6import Prelude hiding (pi)
9import System.Exit (exitFailure)
10import Distribution.Text (display)
12-- | Narrow down the database to only the specified packages and all of
14narrowPackageDB :: SelectSettings
15 -> Set PackageName -- ^ core packages to be excluded from installation
17 -> Set (PackageName, Maintainer)
18 -> IO (Map PackageName BuildInfo)
19narrowPackageDB settings core (PackageDB pdb) packageSet = do
20 (res, errs) <- runWriterT $ loop Map.empty $ Set.map (\(name, maintainer) -> ([], name, maintainer)) packageSet
24 putStrLn "Build plan requires some disallowed packages"
25 mapM_ putStrLn $ Set.toList errs
28 loop result toProcess =
29 case Set.minView toProcess of
30 Nothing -> return result
31 Just ((users, p, maintainer), toProcess') ->
32 case Map.lookup p pdb of
34 | p `Set.member` core -> loop result toProcess'
35 | null users -> error $ "Unknown package: " ++ show p
36 | otherwise -> loop result toProcess'
39 result' = Map.insert p BuildInfo
40 { biVersion = piVersion pi
42 , biMaintainer = maintainer
44 , biGithubUser = piGithubUser pi
45 , biHasTests = piHasTests pi
50 case allowedPackage settings gpd of
51 Left msg -> tell $ Set.singleton $ concat
52 [ packageVersionString (p, piVersion pi)
57 loop result' $ Set.foldl' (addDep users' result' maintainer) toProcess' $ Map.keysSet $ piDeps pi
58 addDep users result maintainer toProcess p =
59 case Map.lookup p result of
60 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