cabal-rpm-2.0.11: src/Commands/Diff.hs
{-# LANGUAGE CPP #-}
-- |
-- Module : Commands.Diff
-- Copyright : (C) 2014,2017-2018 Jens Petersen
--
-- Maintainer : Jens Petersen <petersen@fedoraproject.org>
-- Stability : alpha
-- Portability : portable
--
-- Explanation: diff current spec file with cabal-rpm spec output
-- This program is free software: you can redistribute it and/or modify
-- it under the terms of the GNU General Public License as published by
-- the Free Software Foundation, either version 3 of the License, or
-- (at your option) any later version.
module Commands.Diff (
diff
) where
import Commands.Spec (createSpecFile)
import FileUtils (mktempdir)
import PackageUtils (dropChangelog, editSpecField, getSpecField,
PackageData (..), prepare)
import Types
#if (defined(MIN_VERSION_base) && MIN_VERSION_base(4,8,0))
#else
import Control.Applicative ((<$>))
#endif
import Control.Monad
import Distribution.Verbosity (silent)
import SimpleCmd (grep_, error', pipe)
import System.Directory (removeDirectoryRecursive)
import System.FilePath ((<.>))
import System.Posix.Env (getEnvDefault)
diff :: Flags -> PackageType -> Maybe PackageVersionSpecifier -> IO ()
diff flags pkgtype mpvs = do
pkgdata <- prepare flags mpvs True False
case specFilename pkgdata of
Nothing -> error' "No (unique) .spec file in directory."
Just spec -> do
subpkg <- grep_ "%{subpkgs}" spec
tmpdir <- mktempdir
speccblrpm <- createSpecFile False True False silent flags False False pkgtype (if subpkg then Just Nothing else Nothing) (Just tmpdir) mpvs
currel <- getSpecField "Release" spec
let suffix = "%{?dist}"
editSpecField "Release" (currel ++ suffix) speccblrpm
diffcmd <- words <$> getEnvDefault "CBLRPM_DIFF" "diff -u"
out <- dropChangelog <$> pipe (head diffcmd, tail diffcmd ++ [spec, speccblrpm])
---- was for %autorelease:
-- out <- pipe (head diffcmd, tail diffcmd ++ [spec, speccblrpm])
("sed", ["-e", "s%" ++ speccblrpm ++ "%" ++ spec <.> "cblrpm" ++ "%"])
unless (null out) $
putStrLn out
removeDirectoryRecursive tmpdir