rpmbuild-order 0.4.2.1 → 0.4.3
raw patch · 9 files changed
+48/−26 lines, 9 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
+ Distribution.RPM.Build.Graph: createGraph''' :: [String] -> [String] -> Bool -> Bool -> Bool -> Maybe FilePath -> [FilePath] -> IO PackageGraph
Files
- ChangeLog.md +5/−0
- README.md +0/−2
- TODO +0/−2
- rpmbuild-order.1 +2/−2
- rpmbuild-order.cabal +5/−5
- src/Distribution/RPM/Build/Graph.hs +21/−2
- src/Distribution/RPM/Build/Order.hs +7/−6
- src/Main.hs +7/−6
- test/Spec.hs +1/−1
ChangeLog.md view
@@ -1,3 +1,8 @@+# 0.4.3 (2020-09-18)+- 'deps' and 'rdeps' can now take --ignore-BR options+ (provided through depsPackages and new createGraph''')+- 'sort' no longer outputs a leading newline+ # 0.4.2.1 (2020-09-10) - 'sort': fix arg handled which was causing reverse ordering! - add a sort test for the installed rpmbuild-order
README.md view
@@ -8,9 +8,7 @@ $ rpmbuild-order --help $ rpmbuild-order sort mycore mylib myapp- mylib mycore myapp- $ The arguments passed can either be directories containing the package, or spec files.
TODO view
@@ -1,7 +1,5 @@ - try topograph -- better graph output- - use Set? * warn about uninstalled (specific?) macros packages
rpmbuild-order.1 view
@@ -1,7 +1,7 @@ .\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.14.-.TH RPMBUILD-ORDER "1" "September 2020" "rpmbuild-order 0.4.2.1" "User Commands"+.TH RPMBUILD-ORDER "1" "September 2020" "rpmbuild-order 0.4.3" "User Commands" .SH NAME-rpmbuild-order \- manual page for rpmbuild-order 0.4.2.1+rpmbuild-order \- manual page for rpmbuild-order 0.4.3 .SH SYNOPSIS .B rpmbuild-order [\fI\,--version\/\fR] \fI\,COMMAND\/\fR
rpmbuild-order.cabal view
@@ -1,5 +1,5 @@ Name: rpmbuild-order-Version: 0.4.2.1+Version: 0.4.3 License: BSD3 License-File: LICENSE Author: Henning Thielemann <haskell@henning-thielemann.de>,@@ -15,18 +15,18 @@ The rpmbuild-order tool orders RPM packages by dependencies, so that they can be built in the correct order. It does this by reading RPM package spec files and then topologically sorts them according to their dependencies.- The code originated from cabal-sort by Henning Thielemann.+ The code evolved from cabal-sort by Henning Thielemann. It can also output the ordered dependencies or reverse depends for one or more packages, provided all the packages are checked out in neighboring directories. This is also useful to see what packages- are affected when a low-level package changes. It also have support+ are affected when a low-level package changes. It also has support for setting RPM options for bcond etc, which can affect dependencies. - Since version 0.4 there is a library too.+ Since version 0.4, a library API is also provided. Tested-with: GHC == 7.4.2, GHC == 7.6.3, GHC == 7.8.4, GHC == 7.10.3, GHC == 8.0.2, GHC == 8.2.2, GHC == 8.4.4, GHC == 8.6.5, GHC == 8.8.4,- GHC == 8.10.1+ GHC == 8.10.2 Cabal-Version: >=1.10 Build-Type: Simple Extra-source-files: README.md TODO ChangeLog.md rpmbuild-order.1
src/Distribution/RPM/Build/Graph.hs view
@@ -17,6 +17,7 @@ createGraphRpmOpts, createGraph', createGraph'',+ createGraph''', dependencyNodes, subgraph', packageLayers,@@ -130,7 +131,22 @@ -> Maybe FilePath -- ^ look for spec file in a subdirectory -> [FilePath] -- ^ package paths (directories or spec filepaths) -> IO PackageGraph -- ^ dependency graph labelled by package paths-createGraph'' rpmopts verbose lenient rev mdir paths = do+createGraph'' = createGraph''' []++-- | Create a directed dependency graph for a set of packages+--+-- Like createGraph'' but with additional parameter for any BRs to be ignored.+--+-- @since 0.4.3+createGraph''' :: [String] -- ^ ignored BuildRequires+ -> [String] -- ^ rpmspec options+ -> Bool -- ^ verbose+ -> Bool -- ^ lenient (skip rpmspec failures)+ -> Bool -- ^ reverse dependency graph+ -> Maybe FilePath -- ^ look for spec file in a subdirectory+ -> [FilePath] -- ^ package paths (directories or spec filepaths)+ -> IO PackageGraph -- ^ dependency graph labelled by package paths+createGraph''' ignoredBRs rpmopts verbose lenient rev mdir paths = do metadata <- catMaybes <$> mapM readSpecMetadata paths let realpkgs = map fst3 metadata deps = mapMaybe (getDepsSrcResolved metadata) realpkgs@@ -200,7 +216,10 @@ let ws = words l in if length ws < 2 then extractMetadata pkg acc ls else case CI.mk (head ws) of- "BuildRequires:" -> extractMetadata pkg (provs,(head . tail) ws : brs) ls+ "BuildRequires:" ->+ let br = (head . tail) ws+ brs' = if br `elem` ignoredBRs then brs else br:brs+ in extractMetadata pkg (provs, brs') ls "Name:" -> extractMetadata pkg ((head . tail) ws : provs, brs) ls "Provides:" -> extractMetadata pkg ((head . tail) ws : provs, brs) ls "%package" ->
src/Distribution/RPM/Build/Order.hs view
@@ -29,6 +29,7 @@ #if !MIN_VERSION_base(4,8,0) import Control.Applicative ((<$>)) #endif+import Data.List (intercalate) import Data.Graph.Inductive.Query.DFS (topsort', components) import Distribution.RPM.Build.Graph@@ -77,12 +78,12 @@ -- | output sorted packages from a PackageGraph arrange by Components sortGraph :: Components -> PackageGraph -> IO () sortGraph opt graph =+ -- FIXME output list(s) instead+ putStrLn $ case opt of Parallel ->- mapM_ ((putStrLn . ('\n':) . unwords) . topsort' . subgraph' graph) (components graph)- Combine -> (putStrLn . unwords . topsort') graph+ intercalate "\n\n" $ map (unwords . topsort' . subgraph' graph) (components graph)+ Combine -> (unwords . topsort') graph Connected ->- mapM_ ((putStrLn . ('\n':) . unwords) . topsort' . subgraph' graph) $ filter ((>1) . length) (components graph)- Separate ->- let independent = separatePackages graph- in mapM_ putStrLn independent+ intercalate "\n\n" $ map (unwords . topsort' . subgraph' graph) $ filter ((>1) . length) (components graph)+ Separate -> unlines $ separatePackages graph
src/Main.hs view
@@ -13,7 +13,7 @@ ) import Control.Monad.Extra import Data.Graph.Inductive.Query.DFS (components)-import Data.List+import Data.List (intercalate) #if !MIN_VERSION_simple_cmd_args(0,1,4) import Options.Applicative (str)@@ -39,9 +39,9 @@ [ Subcommand "sort" "sort packages" $ sortPackages <$> rpmOpts <*> verboseOpt <*> lenientOpt <*> componentsOpt <*> subdirOpt <*> pkgArgs , Subcommand "deps" "sort dependencies" $- depsPackages False <$> rpmOpts <*> verboseOpt <*> lenientOpt <*> combineOpt <*> subdirOpt <*> pkgArgs+ depsPackages False <$> rpmOpts <*> verboseOpt <*> ignoredBRopts <*> lenientOpt <*> combineOpt <*> subdirOpt <*> pkgArgs , Subcommand "rdeps" "sort dependents" $- depsPackages True <$> rpmOpts <*> verboseOpt <*> lenientOpt <*> combineOpt <*> subdirOpt <*> pkgArgs+ depsPackages True <$> rpmOpts <*> verboseOpt <*> ignoredBRopts <*> lenientOpt <*> combineOpt <*> subdirOpt <*> pkgArgs , Subcommand "layers" "ordered output suitable for a chain-build" $ layerPackages <$> rpmOpts <*> verboseOpt <*> lenientOpt <*> combineOpt <*> subdirOpt <*> pkgArgs , Subcommand "chain" "ordered output suitable for a chain-build" $@@ -62,18 +62,19 @@ flagWith' Separate 'i' "independent" "Only list independent packages" <|> flagWith Parallel Combine 'c' "combine" "Combine connected and independent packages" rpmOpts = many (strOptionWith 'r' "rpmopt" "RPMOPT" "Option for rpmspec")+ ignoredBRopts = many (strOptionWith 'I' "ignore-BR" "PKG" "BuildRequires to exclude from graph") sortPackages :: [String] -> Bool -> Bool -> Components -> Maybe FilePath -> [FilePath] -> IO () sortPackages rpmopts verbose lenient opts mdir pkgs = do createGraph'' rpmopts verbose lenient True mdir pkgs >>= sortGraph opts -depsPackages :: Bool -> [String] ->Bool -> Bool -> Bool -> Maybe FilePath -> [FilePath] -> IO ()-depsPackages rev rpmopts verbose lenient parallel mdir pkgs = do+depsPackages :: Bool -> [String] -> Bool-> [String] -> Bool -> Bool -> Maybe FilePath -> [FilePath] -> IO ()+depsPackages rev rpmopts verbose ignoredBRs lenient parallel mdir pkgs = do unlessM (and <$> mapM doesDirectoryExist pkgs) $ error "Please use package directory paths" listDirectory "." >>= -- filter out dotfiles- createGraph'' rpmopts verbose lenient (not rev) mdir . filter ((/= '.') . head) >>=+ createGraph''' ignoredBRs rpmopts verbose lenient (not rev) mdir . filter ((/= '.') . head) >>= createGraph'' rpmopts verbose lenient True mdir . dependencyNodes pkgs >>= sortGraph (if parallel then Parallel else Combine)
test/Spec.hs view
@@ -68,7 +68,7 @@ describe "rpmbuild-order" $ do it "sort A B" $ cmd "rpmbuild-order" ["sort", pkg "A", pkg "B"] >>=- (`shouldBe` unwords ["\n" ++ pkg "B", pkg "A"])+ (`shouldBe` unwords [pkg "B", pkg "A"]) setupSymlinks :: IO () setupSymlinks =