hackport-0.7.3.0: src/Hackport/Command/List.hs
module Hackport.Command.List
( listAction
) where
import qualified Distribution.Package as Cabal
import Distribution.Pretty (prettyShow)
import qualified Distribution.Client.Types as CabalInstall
import qualified Distribution.Client.IndexUtils as CabalInstall
import qualified Distribution.Solver.Types.SourcePackage as CabalInstall
import qualified Distribution.Solver.Types.PackageIndex as CabalInstall
import Portage.Overlay as Overlay (loadLazy, inOverlay)
import Portage.PackageId (normalizeCabalPackageId)
import Overlays
import Hackport.Util (withHackportContext)
import Hackport.Env
listAction :: Env ListEnv ()
listAction = do
(GlobalEnv verbosity _ _, ListEnv pkgList) <- ask
withHackportContext $ \repoContext -> do
overlayPath <- getOverlayPath
index <- fmap CabalInstall.packageIndex
$ liftIO $ CabalInstall.getSourcePackages verbosity repoContext
overlay <- Overlay.loadLazy overlayPath
let pkgs | null pkgList = CabalInstall.allPackages index
| otherwise = concatMap (concatMap snd . CabalInstall.searchByNameSubstring index) pkgList
normalized = map (normalizeCabalPackageId . CabalInstall.srcpkgPackageId) pkgs
let decorated = map (\p -> (Overlay.inOverlay overlay p, p)) normalized
mapM_ (liftIO . putStrLn . pretty) decorated
where
pretty :: (Bool, Cabal.PackageIdentifier) -> String
pretty (isInOverlay, pkgId) =
let dec | isInOverlay = " * "
| otherwise = " "
in dec ++ prettyShow pkgId