fbrnch-0.7.1: src/Cmd/Commit.hs
module Cmd.Commit
( commitPkgs,
)
where
import Common
import Common.System
import Git
import Package
import Prompt
-- FIXME use branches after all?
commitPkgs :: Maybe CommitOpt -> [String] -> IO ()
commitPkgs mopt args =
if null args
then commitPkg "."
else mapM_ commitPkg args
where
commitPkg :: FilePath -> IO ()
commitPkg path =
withExistingDirectory path $
unlessM isGitDirClean $ do
getPackageName path >>= putPkgHdr
opts <- case mopt of
Just opt -> return $
case opt of
CommitMsg msg -> ["-m", msg]
-- FIXME reject amend if already pushed
CommitAmend -> ["--amend", "--no-edit"]
Nothing -> do
changelog <- do
spec <- findSpecfile
clog <- cleanChangelog <$> cmd "rpmspec" ["-q", "--srpm", "--qf", "%{changelogtext}", spec]
when (length (lines clog) > 1) $
putStrLn clog
diff <- git "diff" ["-U0", "HEAD"]
if ("+- " ++ clog) `elem` lines diff
then putStrLn clog >> return clog
else putStrLn diff >> readCommitMsg
return ["-m", changelog]
git_ "commit" $ "-a" : opts
readCommitMsg :: IO String
readCommitMsg = do
clog <- prompt "\nPlease input the commit message"
if null clog
then readCommitMsg
else return clog