fbrnch-1.1.2: src/Cmd/Sort.hs
module Cmd.Sort (
sortCmd,
RpmWith(..),
graphCmd,
SortDisplay(..)
)
where
import Control.Monad.Extra
import Data.List (intercalate)
import Distribution.RPM.Build.Graph
import Distribution.RPM.Build.Order (dependencySortRpmOpts,
dependencySortParallel,
dependencyLayers)
import Branches
import Git
import Package
data RpmWith = RpmWith String | RpmWithout String
data SortDisplay = SortParallel | SortChain | SortLayers | SortPlain
sortCmd :: SortDisplay -> Maybe RpmWith -> (Maybe Branch,[String]) -> IO ()
sortCmd _ _ (_,[]) = return ()
sortCmd displaymode mrpmwith (mbr, pkgs) = do
withPackagesMaybeBranchNoHeadergit ExactlyOne noop (mbr, pkgs)
let rpmopts = maybe [] toRpmOption mrpmwith
case displaymode of
-- reverse because rpmbuild-order reverses the order of independent pkgs?
SortParallel ->
dependencySortParallel (reverse pkgs) >>= mapM_ (putStrLn . unwords)
SortChain ->
dependencyLayers pkgs >>=
putStrLn . intercalate " : " . map unwords
SortLayers ->
dependencyLayers pkgs >>=
mapM_ (putStrLn . unwords)
SortPlain ->
dependencySortRpmOpts rpmopts (reverse pkgs) >>= putStrLn . unwords
noop :: Package -> AnyBranch -> IO ()
noop _pkg br =
whenM isPkgGitRepo $ gitSwitchBranch br
toRpmOption :: RpmWith -> [String]
toRpmOption (RpmWith opt) = ["--with=" ++ opt]
toRpmOption (RpmWithout opt) = ["--without=" ++ opt]
graphCmd :: Bool -> Maybe RpmWith -> (Maybe Branch,[FilePath]) -> IO ()
graphCmd dot mrpmwith (mbr, pkgs) = do
withPackagesMaybeBranchNoHeadergit ZeroOrOne noop (mbr, pkgs)
let rpmopts = maybe [] toRpmOption mrpmwith
createGraph4 False [] rpmopts False False True Nothing pkgs >>=
if dot then printGraph else renderGraph