Even better filterForbidden

This commit is contained in:
Michael Snoyman 2013-07-07 22:32:10 +03:00
parent c02e3ff8e1
commit 7849ced880

View File

@ -15,6 +15,7 @@ import Data.Monoid (Monoid (..))
import Data.Set (Set) import Data.Set (Set)
import qualified Data.Set as Set import qualified Data.Set as Set
import Data.Time (UTCTime, parseTime) import Data.Time (UTCTime, parseTime)
import Distribution.Text (display)
import Network.HTTP (getRequest, getResponseBody, simpleHTTP) import Network.HTTP (getRequest, getResponseBody, simpleHTTP)
import qualified Stackage.Types as ST import qualified Stackage.Types as ST
import System.Directory (doesFileExist) import System.Directory (doesFileExist)
@ -159,10 +160,13 @@ filterForbidden :: ST.BuildPlan
-> Forbidden -> Forbidden
-> Forbidden -> Forbidden
filterForbidden bp = filterForbidden bp =
MonoidMap . Map.filterWithKey isIncluded . unMonoidMap MonoidMap . Map.mapMaybeWithKey isIncluded . unMonoidMap
where where
isIncluded pn _ = ST.PackageName pn `Set.member` allPackages isIncluded :: PackageName
allPackages = -> PackageHistory
Map.keysSet (ST.bpPackages bp) `Set.union` -> Maybe PackageHistory
ST.bpCore bp `Set.union` isIncluded pn ph = do
Map.keysSet (ST.bpOptionalCore bp) spi <- Map.lookup (ST.PackageName pn) $ ST.bpPackages bp
let version = display $ ST.spiVersion spi
tuple <- Map.lookup version ph
Just $ Map.singleton version tuple