cabal-rpm 2.0.5 → 2.0.5.1
raw patch · 10 files changed
+65/−58 lines, 10 files
Files
- ChangeLog +6/−0
- cabal-rpm.cabal +1/−1
- src/Commands/Depends.hs +1/−1
- src/Commands/Diff.hs +2/−2
- src/Commands/Refresh.hs +2/−2
- src/Commands/RpmBuild.hs +2/−2
- src/Commands/Spec.hs +12/−17
- src/Commands/Update.hs +3/−3
- src/Dependencies.hs +3/−3
- src/PackageUtils.hs +33/−27
ChangeLog view
@@ -1,3 +1,8 @@+# 2.0.5.1 (2020-06-11)+- spec: fix grep breakage in 2.0.5 release+- spec, refresh and update now leave newly prepped source tree around+- spec: dropped deprecated %post and %postun scriptlets+ # 2.0.5 (2020-06-10) - spec --tests flag to force enabling testsuite - spec: fix permissions of extra-source-files@@ -7,6 +12,7 @@ - use simple-cmd-args 0.1.6 for working subcommand help - improve handling of update --stream for subpackaging - default to Stackage LTS 15+- spec: exclude deps dropped with cabal-tweak-drop-dep # 2.0.4 (2020-02-27) Fedora 32 - update: also unbreak patching
cabal-rpm.cabal view
@@ -1,5 +1,5 @@ Name: cabal-rpm-Version: 2.0.5+Version: 2.0.5.1 Synopsis: RPM packaging tool for Haskell Cabal-based packages Description: This package provides a RPM packaging tool for Haskell Cabal-based packages.
src/Commands/Depends.hs view
@@ -39,7 +39,7 @@ depends :: Depends -> Flags -> Maybe PackageVersionSpecifier -> IO () depends action flags mpvs = do- pkgdata <- prepare flags mpvs False+ pkgdata <- prepare flags mpvs False False let pkgDesc = packageDesc pkgdata case action of Depends -> do
src/Commands/Diff.hs view
@@ -38,13 +38,13 @@ diff :: Flags -> PackageType -> Maybe PackageVersionSpecifier -> IO () diff flags pkgtype mpvs = do- pkgdata <- prepare flags mpvs True+ pkgdata <- prepare flags mpvs True False case specFilename pkgdata of Nothing -> die "No (unique) .spec file in directory." Just spec -> do subpkg <- grep_ "%{subpkgs}" spec tmpdir <- mktempdir- speccblrpm <- createSpecFile silent flags False False pkgtype (if subpkg then Just Nothing else Nothing) (Just tmpdir) mpvs+ speccblrpm <- createSpecFile False silent flags False False pkgtype (if subpkg then Just Nothing else Nothing) (Just tmpdir) mpvs diffcmd <- words <$> getEnvDefault "CBLRPM_DIFF" "diff -u" hawk <- optionalProgram "hawk" if hawk
src/Commands/Refresh.hs view
@@ -44,7 +44,7 @@ refresh :: Bool -> PackageType -> Maybe PackageVersionSpecifier -> IO () refresh dryrun pkgtype mpvs = do- pkgdata <- prepare [] mpvs True+ pkgdata <- prepare [] mpvs True True case specFilename pkgdata of Nothing -> die "No (unique) .spec file in directory." Just spec -> do@@ -65,7 +65,7 @@ _ -> pkgtype subpkg <- grep_ "%{subpkgs}" spec oldspec <- createOldSpec subpkg cblrpmver spec- newspec <- createSpecFile silent [] False False spectype (if subpkg then Just Nothing else Nothing) Nothing mpvs+ newspec <- createSpecFile True silent [] False False spectype (if subpkg then Just Nothing else Nothing) Nothing mpvs patchSpec dryrun Nothing oldspec newspec -- setCurrentDirectory cwd -- when rwGit $
src/Commands/RpmBuild.hs view
@@ -40,12 +40,12 @@ rpmBuild :: RpmStage -> Flags -> PackageType -> Bool -> Maybe PackageVersionSpecifier -> IO FilePath rpmBuild stage flags pkgtype subpackage mpvs = do- pkgdata <- prepare flags mpvs True+ pkgdata <- prepare flags mpvs True False when (stage == Binary) $ void $ pkgInstallMissing' pkgdata let pkgDesc = packageDesc pkgdata mspec = specFilename pkgdata- specFile <- maybe (createSpecFile normal flags False False pkgtype (if subpackage then Just Nothing else Nothing) Nothing mpvs)+ specFile <- maybe (createSpecFile False normal flags False False pkgtype (if subpackage then Just Nothing else Nothing) Nothing mpvs) (\ s -> putStrLn ("Using existing" +-+ s) >> return s) mspec let pkgid = package pkgDesc
src/Commands/Spec.hs view
@@ -28,7 +28,7 @@ import PackageUtils (bringTarball, latestPackage, PackageData (..), prepare) import SimpleCabal (buildable, mkPackageName, PackageDescription (..), PackageIdentifier(..), PackageName, showVersion)-import SimpleCmd ((+-+), grep, grep_, removePrefix)+import SimpleCmd ((+-+), cmdMaybe, grep_, removePrefix) import Stackage (defaultLTS) import Types @@ -94,12 +94,12 @@ unUnqualComponentName = id #endif -createSpecFile :: Verbosity -> Flags -> Bool -> Bool -> PackageType+createSpecFile :: Bool -> Verbosity -> Flags -> Bool -> Bool -> PackageType -> Maybe (Maybe Stream) -> Maybe FilePath -> Maybe PackageVersionSpecifier -> IO FilePath-createSpecFile verbose flags testsuite force pkgtype subpkgStream mdest mpvs = do- pkgdata <- prepare flags mpvs True+createSpecFile keep verbose flags testsuite force pkgtype subpkgStream mdest mpvs = do+ pkgdata <- prepare flags mpvs True keep let mspec = case pkgtype of SpecFile f -> Just f _ -> specFilename pkgdata@@ -153,7 +153,7 @@ -- run commands before opening file to prevent empty file on error -- maybe shell commands should be in a monad or something droppedDeps <- if targetSpecAlreadyExists then do- map (mkPackageName . removePrefix "cabal-tweak-drop-dep ") <$> grep "cabal-tweak-drop-dep" targetSpecFile+ map (mkPackageName . removePrefix "cabal-tweak-drop-dep ") <$> grep "^cabal-tweak-drop-dep" targetSpecFile else return [] pkgdeps <- do alldeps <- packageDependencies pkgDesc@@ -495,17 +495,6 @@ put "%cabal_test" sectionNewline - when hasLibPkg $ do- put "%if 0%{?fedora} < 31 || 0%{?rhel} < 8"- put $ "%post" +-+ subpkgParam Devel- put "%ghc_pkg_recache"- sectionNewline-- put $ "%postun" +-+ subpkgParam Devel- put "%ghc_pkg_recache"- put "%endif"- sectionNewline- let license_macro = "%license" let execs = sort $ map exeName $ filter isBuildable $ executables pkgDesc @@ -579,7 +568,7 @@ createSpecFile_ :: Verbosity -> Flags -> Bool -> Bool -> PackageType -> Maybe (Maybe Stream) -> Maybe PackageVersionSpecifier -> IO () createSpecFile_ verbose flags testsuite force pkgtype subpkgStream mpvs =- void (createSpecFile verbose flags testsuite force pkgtype subpkgStream Nothing mpvs)+ void (createSpecFile False verbose flags testsuite force pkgtype subpkgStream Nothing mpvs) isBuildable :: Executable -> Bool isBuildable exe = buildable $ buildInfo exe@@ -669,3 +658,9 @@ quoteMacros :: String -> String quoteMacros "" = "" quoteMacros (c:cs) = (if c == '%' then "%%" else [c]) ++ quoteMacros cs++-- use simple-cmd > 0.2.1+grep :: String -> FilePath -> IO [String]+grep pat file = do+ mres <- cmdMaybe "grep" [pat, file]+ return $ maybe [] lines mres
src/Commands/Update.hs view
@@ -45,7 +45,7 @@ update :: Maybe PackageVersionSpecifier -> IO () update mpvs = do- pkgdata <- pkgSpecPkgData [] (pvsPackage =<< mpvs) True+ pkgdata <- pkgSpecPkgData [] (pvsPackage =<< mpvs) True True case specFilename pkgdata of Nothing -> die "No (unique) .spec file in directory." Just spec -> do@@ -131,13 +131,13 @@ -- Just Nothing is default stream createSpecVersion :: PackageIdentifier -> String -> Bool -> Maybe (Maybe Stream) -> IO (FilePath, Bool) createSpecVersion pkgid spec revise subpkgStream = do- pd <- prepare [] (streamPkgToPVS Nothing (Just pkgid)) revise+ pd <- prepare [] (streamPkgToPVS Nothing (Just pkgid)) revise True let pkgdata = pd { specFilename = Just spec } dir = ".Cblrpm/" ++ display pkgid ++ if revise then ".revised" else ".orig" direxists <- doesDirectoryExist dir when direxists $ removeDirectoryRecursive dir createDirectoryIfMissing True dir- newspec <- createSpecFile silent [] False False (SpecFile spec) subpkgStream (Just dir) (streamPkgToPVS Nothing (Just pkgid))+ newspec <- createSpecFile True silent [] False False (SpecFile spec) subpkgStream (Just dir) (streamPkgToPVS Nothing (Just pkgid)) let newrevised = isJust $ lookup "x-revision" (customFieldsPD (packageDesc pkgdata)) return (newspec, newrevised)
src/Dependencies.hs view
@@ -223,7 +223,7 @@ pkgInstallMissing :: Flags -> Maybe PackageVersionSpecifier -> IO [PackageName] pkgInstallMissing flags mpvs = do- pkgdata <- prepare flags mpvs True+ pkgdata <- prepare flags mpvs True False pkgInstallMissing' pkgdata pkgInstallMissing' :: PackageData -> IO [PackageName]@@ -279,7 +279,7 @@ where missingDepsPkg :: PackageName -> IO [RpmPackage] missingDepsPkg pkg = do- pkgdata <- prepare flags (streamPkgToPVS mstream (Just (unversionedPkgId pkg))) False+ pkgdata <- prepare flags (streamPkgToPVS mstream (Just (unversionedPkgId pkg))) False False missingPackages (packageDesc pkgdata) >>= filterM notAvail putMissing :: [RpmPackage] -> IO ()@@ -300,7 +300,7 @@ packageDeps :: Flags -> Maybe Stream -> PackageName -> IO [PackageName] packageDeps flags mstream pkg = do- pkgdata <- prepare flags (streamPkgToPVS mstream (Just (unversionedPkgId pkg))) False+ pkgdata <- prepare flags (streamPkgToPVS mstream (Just (unversionedPkgId pkg))) False False let pkgDesc = packageDesc pkgdata (deps, setup, _, _, _) = dependencies pkgDesc return $ nub $ (deps ++ setup) \\ [pkg]
src/PackageUtils.hs view
@@ -56,7 +56,7 @@ import Data.Char (toLower) import Data.List (isPrefixOf, isSuffixOf, nub, sort)-import Data.Maybe (isNothing, isJust, fromJust)+import Data.Maybe import Data.Time.Clock (diffUTCTime, getCurrentTime) import Distribution.Text (display, simpleParse)@@ -236,9 +236,9 @@ cmd_ "cabal" (c:args) -tryUnpack :: PackageIdentifier -> Bool ->- IO (FilePath, Maybe FilePath) -- (cabalfile, mtmpdir)-tryUnpack pkgid revise = do+tryUnpack :: PackageIdentifier -> Bool -> Bool+ -> IO (FilePath, Maybe FilePath) -- (cabalfile, mtmpdir)+tryUnpack pkgid revise keep = do let dir = display pkgid isdir <- doesDirectoryExist dir if isdir@@ -251,12 +251,15 @@ error $ "could not find" +-+ display (pkgName pkgid) <.> "cabal" else do cwd <- getCurrentDirectory- tmpdir <- mktempdir- setCurrentDirectory tmpdir+ mtmpdir <- if keep then return Nothing+ else do+ tmpdir <- mktempdir+ setCurrentDirectory tmpdir+ return $ Just tmpdir cabal_ "unpack" $ ["-v0"] ++ ["--pristine" | not revise] ++ [display pkgid] pth <- tryFindPackageDesc dir setCurrentDirectory cwd- return (tmpdir </> pth, Just tmpdir)+ return (fromMaybe "" mtmpdir </> pth, mtmpdir) latestPackage :: Maybe Stream -> PackageName -> IO PackageIdentifier latestPackage (Just Hackage) pkg = latestHackage pkg@@ -320,8 +323,8 @@ then fileWithExtension (display pkgid) ".cabal" else return Nothing -pkgSpecPkgData :: Flags -> Maybe PackageName -> Bool -> IO PackageData-pkgSpecPkgData flags mpkg revise = do+pkgSpecPkgData :: Flags -> Maybe PackageName -> Bool -> Bool -> IO PackageData+pkgSpecPkgData flags mpkg revise keep = do mspec <- checkForSpecFile mpkg case mspec of Just spec -> specPackageData spec@@ -333,13 +336,13 @@ return $ PackageData Nothing docs licenses pkgDesc Nothing -> case mpkg of- Just pkg -> prepStreamPkg flags Nothing defaultLTS pkg revise+ Just pkg -> prepStreamPkg flags Nothing defaultLTS pkg revise keep Nothing -> do cwd <- getCurrentDirectory let trydir = simpleParse (takeFileName cwd) case trydir of Just pdir | pkgVersion pdir == nullVersion ->- prepare flags (streamPkgToPVS Nothing trydir) revise+ prepare flags (streamPkgToPVS Nothing trydir) revise keep _ -> error' "package not found for directory" where specPackageData :: FilePath -> IO PackageData@@ -382,31 +385,33 @@ , packageDesc :: PackageDescription } -prepPkgId :: Flags -> Maybe FilePath -> PackageIdentifier -> Bool- -> IO PackageData-prepPkgId flags mspec pkgid revise = do- (cabalfile, mtmp) <- tryUnpack pkgid revise+prepPkgId :: Flags -> Maybe FilePath -> PackageIdentifier -> Bool -> Bool+ -> IO PackageData+prepPkgId flags mspec pkgid revise keep = do+ (cabalfile, mtmp) <- tryUnpack pkgid revise keep (pkgDesc, docs, licenses) <- simplePackageDescription flags cabalfile- maybe (return ()) removeDirectoryRecursive mtmp+ unless keep $ maybe (return ()) removeDirectoryRecursive mtmp return $ PackageData mspec docs licenses pkgDesc -prepStreamPkg :: Flags -> Maybe FilePath -> Stream -> PackageName -> Bool -> IO PackageData-prepStreamPkg flags mspec stream pkg revise = do+prepStreamPkg :: Flags -> Maybe FilePath -> Stream -> PackageName -> Bool -> Bool+ -> IO PackageData+prepStreamPkg flags mspec stream pkg revise keep = do pkgid <- latestPackage (Just stream) pkg mcabal <- checkForPkgCabalFile pkgid case mcabal of Just cabalfile -> do (pkgDesc, docs, licenses) <- simplePackageDescription flags cabalfile return $ PackageData mspec docs licenses pkgDesc- Nothing -> prepPkgId flags mspec pkgid revise+ Nothing -> prepPkgId flags mspec pkgid revise keep -- Nothing means package in cwd-prepare :: Flags -> Maybe PackageVersionSpecifier -> Bool -> IO PackageData-prepare flags Nothing revise = pkgSpecPkgData flags Nothing revise+prepare :: Flags -> Maybe PackageVersionSpecifier -> Bool -> Bool+ -> IO PackageData+prepare flags Nothing revise keep = pkgSpecPkgData flags Nothing revise keep -- Something implies either new packaging or some existing spec file in dir-prepare flags (Just pvs) revise =+prepare flags (Just pvs) revise keep = case pvs of- PVPackageName pkg -> pkgSpecPkgData flags (Just pkg) revise+ PVPackageName pkg -> pkgSpecPkgData flags (Just pkg) revise keep PVPackageId pkgid -> do mspec <- checkForSpecFile $ Just (pkgName pkgid) mcabal <- checkForPkgCabalFile pkgid@@ -414,7 +419,7 @@ Just cabalfile -> do (pkgDesc, docs, licenses) <- simplePackageDescription flags cabalfile return $ PackageData mspec docs licenses pkgDesc- Nothing -> prepPkgId flags mspec pkgid revise+ Nothing -> prepPkgId flags mspec pkgid revise keep PVStreamPackage stream Nothing -> do mspec <- checkForSpecFile Nothing case mspec of@@ -422,14 +427,15 @@ cwd <- getCurrentDirectory let trydir = simpleParse (takeFileName cwd) case trydir of- Just pdir | pkgVersion pdir == nullVersion -> prepare flags (streamPkgToPVS (Just stream) trydir) revise+ Just pdir | pkgVersion pdir == nullVersion ->+ prepare flags (streamPkgToPVS (Just stream) trydir) revise keep _ -> error' "package not found" Just spec -> do let pkg = mkPackageName $ removePrefix "ghc-" $ takeBaseName spec- prepStreamPkg flags (Just spec) stream pkg revise+ prepStreamPkg flags (Just spec) stream pkg revise keep PVStreamPackage stream (Just pkg) -> do mspec <- checkForSpecFile (Just pkg)- prepStreamPkg flags mspec stream pkg revise+ prepStreamPkg flags mspec stream pkg revise keep -- redundant mdir was earlier for update patchSpec :: Bool -> Maybe FilePath -> FilePath -> FilePath -> IO ()