diff --git a/ChangeLog b/ChangeLog
--- a/ChangeLog
+++ b/ChangeLog
@@ -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
diff --git a/cabal-rpm.cabal b/cabal-rpm.cabal
--- a/cabal-rpm.cabal
+++ b/cabal-rpm.cabal
@@ -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.
diff --git a/src/Commands/Depends.hs b/src/Commands/Depends.hs
--- a/src/Commands/Depends.hs
+++ b/src/Commands/Depends.hs
@@ -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
diff --git a/src/Commands/Diff.hs b/src/Commands/Diff.hs
--- a/src/Commands/Diff.hs
+++ b/src/Commands/Diff.hs
@@ -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
diff --git a/src/Commands/Refresh.hs b/src/Commands/Refresh.hs
--- a/src/Commands/Refresh.hs
+++ b/src/Commands/Refresh.hs
@@ -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 $
diff --git a/src/Commands/RpmBuild.hs b/src/Commands/RpmBuild.hs
--- a/src/Commands/RpmBuild.hs
+++ b/src/Commands/RpmBuild.hs
@@ -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
diff --git a/src/Commands/Spec.hs b/src/Commands/Spec.hs
--- a/src/Commands/Spec.hs
+++ b/src/Commands/Spec.hs
@@ -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
diff --git a/src/Commands/Update.hs b/src/Commands/Update.hs
--- a/src/Commands/Update.hs
+++ b/src/Commands/Update.hs
@@ -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)
diff --git a/src/Dependencies.hs b/src/Dependencies.hs
--- a/src/Dependencies.hs
+++ b/src/Dependencies.hs
@@ -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]
diff --git a/src/PackageUtils.hs b/src/PackageUtils.hs
--- a/src/PackageUtils.hs
+++ b/src/PackageUtils.hs
@@ -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 ()
