rpmbuild-order 0.1 → 0.2
raw patch · 5 files changed
+81/−40 lines, 5 files
Files
- ChangeLog +7/−1
- README.md +2/−0
- RpmbuildOrder.hs +43/−37
- rpmbuild-order.1 +26/−0
- rpmbuild-order.cabal +3/−2
ChangeLog view
@@ -1,3 +1,9 @@-* 0.1+* 0.2 (2018-08-17)+- error if no spec file+- filter out hidden files from deps search+- add --version+- generate manpage with help2man++* 0.1 (2018-07-18) - initial release with sort, deps and rdeps (reverse dependencies) commands
README.md view
@@ -1,4 +1,6 @@ [](https://travis-ci.org/juhp/rpmbuild-order)+[](http://hackage.haskell.org/package/rpmbuild-order)+[](https://opensource.org/licenses/BSD-3-Clause) # rpmbuild-order
RpmbuildOrder.hs view
@@ -2,9 +2,6 @@ module Main where -import qualified Distribution.Verbosity as Verbosity-import qualified Distribution.ReadE as ReadE- import System.Console.GetOpt (getOpt, ArgOrder(..), OptDescr(..), ArgDescr(..), usageInfo) import System.Exit (exitSuccess, exitFailure)@@ -32,6 +29,7 @@ import Control.Monad (guard, when, unless) import Data.Maybe (catMaybes, fromMaybe, mapMaybe) import Data.List (delete, intersperse, stripPrefix)+import Data.Version (showVersion) #if (defined(MIN_VERSION_base) && MIN_VERSION_base(4,8,2)) #else@@ -46,31 +44,38 @@ where f filename = filename /= "." && filename /= ".." #endif +import Paths_rpmbuild_order (version)+ main :: IO () main = E.resolveT handleException $ do argv <- T.lift Env.getArgs let (opts, args, errors) = getOpt Permute options argv- if length args < 2- then T.lift $ help >> exitFailure- else do- let (com:pkgs) = args- unless (null errors) $ E.throwT $ concat errors- unless (com `elem` ["sort", "deps", "rdeps"]) $- E.throwT $ "Unknown command " ++ com- flags <-- E.ExceptionalT $ return $- foldr (=<<)- (return- Flags {optHelp = False,- optVerbosity = Verbosity.silent,- optFormat = package,- optParallel = Nothing,- optBranch = Nothing})- opts- if optHelp flags- then T.lift $ help >> exitSuccess- else runCommand flags com $ map (removeSuffix "/") pkgs+ flags <-+ E.ExceptionalT $ return $+ foldr (=<<)+ (return+ Flags {optHelp = False,+ optVersion = False,+ optVerbosity = False,+ optFormat = package,+ optParallel = Nothing,+ optBranch = Nothing})+ opts+ if optHelp flags+ then T.lift $ help >> exitSuccess+ else+ if optVersion flags+ then T.lift $ putStrLn $ showVersion version+ else+ if length args < 2+ then T.lift $ help >> exitFailure+ else do+ let (com:pkgs) = args+ unless (null errors) $ E.throwT $ concat errors+ unless (com `elem` ["sort", "deps", "rdeps"]) $+ E.throwT $ "Unknown command " ++ com+ runCommand flags com $ map (removeSuffix "/") pkgs where help = Env.getProgName >>= \programName ->@@ -94,7 +99,7 @@ let dir = maybe file (file </>) mdir pkg = takeBaseName file in checkFile $ dir </> pkg ++ ".spec"- else return Nothing+ else error $ "No spec file found for " ++ file where checkFile :: FilePath -> IO (Maybe FilePath) checkFile f = do@@ -106,7 +111,8 @@ data Flags = Flags { optHelp :: Bool,- optVerbosity :: Verbosity.Verbosity,+ optVersion :: Bool,+ optVerbosity :: Bool, optFormat :: SourcePackage -> String, optParallel :: Maybe String, optBranch :: Maybe FilePath@@ -118,6 +124,9 @@ Option ['h'] ["help"] (NoArg (\flags -> return $ flags{optHelp = True})) "Show options"+ , Option ['V'] ["version"]+ (NoArg (\flags -> return $ flags{optVersion = True}))+ "Show version" , Option ['p'] ["parallel"] (OptArg (\mstr flags ->@@ -146,13 +155,10 @@ "KIND") "output format: 'package' (default), 'spec', or 'dir'" , Option ['v'] ["verbose"]- (ReqArg- (\str flags ->- fmap (\n -> flags{optVerbosity = n}) $- E.fromEither $- ReadE.runReadE Verbosity.flagToVerbosity str)- "N")- "verbosity level: 0..3"+ (NoArg+ (\flags ->+ return flags{optVerbosity = True}))+ "verbose output" ] type Package = String@@ -210,25 +216,25 @@ depsSpecFiles :: Bool -> Flags -> [Package] -> E.ExceptionalT String IO () depsSpecFiles rev flags pkgs = do- allpkgs <- T.lift $ listDirectory "."+ allpkgs <- T.lift $ filter (\ f -> head f /= '.') <$> listDirectory "." (graph, nodes) <- createGraphNodes flags allpkgs pkgs let dir = if rev then Graph.suc' else Graph.pre' sortSpecFiles flags $ map package $ xdfsWith dir third nodes graph where third (_, _, c, _) = c -readProvides :: Verbosity.Verbosity -> FilePath -> IO [String]+readProvides :: Bool -> FilePath -> IO [String] readProvides verbose file = do- when (verbose >= Verbosity.verbose) $ hPutStrLn stderr file+ when verbose $ hPutStrLn stderr file pkgs <- lines <$> rpmspec ["--rpms", "--qf=%{name}\n", "--define", "ghc_version any"] Nothing file let pkg = takeBaseName file return $ delete pkg pkgs -getDepsSrcResolved :: Verbosity.Verbosity -> [(String,[String])] -> FilePath -> IO [String]+getDepsSrcResolved :: Bool -> [(String,[String])] -> FilePath -> IO [String] getDepsSrcResolved verbose provides file = map (resolveBase provides) <$> do- when (verbose >= Verbosity.verbose) $ hPutStrLn stderr file+ when verbose $ hPutStrLn stderr file -- ignore version bounds map (head . words) . lines <$> rpmspec ["--buildrequires", "--define", "ghc_version any"] Nothing file
+ rpmbuild-order.1 view
@@ -0,0 +1,26 @@+.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.6.+.TH RPMBUILD-ORDER "1" "August 2018" "rpmbuild-order 0.2" "User Commands"+.SH NAME+rpmbuild-order \- manual page for rpmbuild-order 0.2+.SH SYNOPSIS+.B rpmbuild-order+[\fI\,OPTIONS\/\fR] [\fI\,sort|deps|rdeps\/\fR] \fI\,PKG-SPEC-OR-DIR \/\fR...+.SH DESCRIPTION+.TP+\fB\-h\fR \fB\-\-help\fR+Show options+.TP+\fB\-V\fR \fB\-\-version\fR+Show version+.TP+\fB\-p[SEPARATOR]\fR \fB\-\-parallel\fR[=\fI\,SEPARATOR\/\fR]+Display independently buildable groups of packages, optionally with separator+.TP+\fB\-b\fR BRANCHDIR \fB\-\-branch\fR=\fI\,BRANCHDIR\/\fR+branch directory+.TP+\fB\-f\fR KIND \fB\-\-format\fR=\fI\,KIND\/\fR+output format: 'package' (default), 'spec', or 'dir'+.TP+\fB\-v\fR \fB\-\-verbose\fR+verbose output
rpmbuild-order.cabal view
@@ -1,5 +1,5 @@ Name: rpmbuild-order-Version: 0.1+Version: 0.2 License: BSD3 License-File: LICENSE Author: Henning Thielemann <haskell@henning-thielemann.de>@@ -24,7 +24,7 @@ GHC == 8.4.3 Cabal-Version: >=1.6 Build-Type: Simple-Extra-source-files: README.md TODO ChangeLog+Extra-source-files: README.md TODO ChangeLog rpmbuild-order.1 source-repository head type: git@@ -45,3 +45,4 @@ GHC-Options: -Wall Main-Is: RpmbuildOrder.hs Extensions: CPP+ Other-modules: Paths_rpmbuild_order