fbrnch-1.2: src/Patch.hs
module Patch (
simplifyMinimalDiff,
dropChangelog,
isTrivialRebuildCommit,
removeDiffContext
)
where
import Common
simplifyMinimalDiff :: [String] -> [String]
simplifyMinimalDiff =
maybeRemoveDiffGit . filterCommon
where
filterCommon =
filter (not .
-- FIXME a/ and b/
matchPreds (map isPrefixOf ["--- ", "+++ ", "index ", "@@ -"]))
maybeRemoveDiffGit ls =
let gitDiffs = filter ("diff --git " `isPrefixOf`) ls in
if length gitDiffs == 1
then ls \\ gitDiffs
else ls
-- adapted from flist in swish
matchPreds :: [a -> Bool] -> a -> Bool
matchPreds fs a = any ($ a) fs
-- adapted from cabal-rpm PackageUtils
dropChangelog :: [String] -> [String]
dropChangelog ls =
if " %changelog" `elem` ls
then
let rest = (dropWhileEnd ("@@ " `isPrefixOf`) . dropWhileEnd (== " ") . takeWhile (/= " %changelog")) ls in
if length rest > 2 then rest else []
else ls
isTrivialRebuildCommit :: [String] -> Bool
isTrivialRebuildCommit ls =
let nontrivial =
(simplifyMinimalDiff . removeDiffContext . dropChangelog) ls
in
length nontrivial `elem` [0,2] &&
all (matchPreds (map isPrefixOf ["-Release:", "+Release:"])) nontrivial
-- not
-- (any
-- (not . matchPreds (map isPrefixOf ["-Release:", "+Release:"])) ls)
-- (all . matchPreds (map isPrefixOf ["-Release:", "+Release:"])) ls
removeDiffContext :: [String] -> [String]
removeDiffContext = filter ((/= ' ') . head)