packages feed

hackage-revdeps 0.4 → 0.4.1

raw patch · 5 files changed

+60/−38 lines, 5 filesdep ~Cabaldep ~Cabal-syntaxdep ~cabal-installPVP ok

version bump matches the API change (PVP)

Dependency ranges changed: Cabal, Cabal-syntax, cabal-install

API changes (from Hackage documentation)

Files

CHANGELOG.md view
@@ -1,3 +1,8 @@+## 0.4.1++* Do not filter dependencies based on `buildable` field in Cabal file, it's unreliable.+* Support `cabal-install-3.18`.+ ## 0.4  * Yet another API overhaul, extending it with `ExtractDependenciesMode` argument.
app/History.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE ApplicativeDo #-}+{-# LANGUAGE CPP #-} {-# LANGUAGE RecordWildCards #-}  module Main (@@ -21,6 +22,7 @@ import Distribution.Parsec (simpleParsec) import Distribution.Simple.Flag (fromFlag) import Distribution.Types.PackageName (PackageName, mkPackageName, unPackageName)+import Distribution.Verbosity qualified as Verbosity import Granite (defPlot, lineGraph, widthChars, xFormatter, yBounds, yFormatter) import Hackage.RevDeps (ExtractDependenciesMode (..), getReverseDependencies, getTransitiveReverseDependencies) import Options.Applicative (Parser, argument, auto, execParser, fullDesc, help, helper, info, long, maybeReader, metavar, option, progDesc, showDefault, switch, value)@@ -59,16 +61,23 @@         <> value 1000         <> showDefault   cnfPackageNames <--    some1 $-      argument (maybeReader simpleParsec) $-        metavar "PKGS"-          <> help "Package names to scan Hackage for their reverse dependencies"+    some1+      $ argument (maybeReader simpleParsec)+      $ metavar "PKGS"+        <> help "Package names to scan Hackage for their reverse dependencies"   cnfTransitive <-     switch $       long "transitive"         <> help "Count transitive (both direct and indirect) dependencies. This mode is imprecise when passing multiple package names at once. Also in this mode we follow only dependencies of the main library"   pure Config {..} +silentVerbosity :: Verbosity.Verbosity+#if MIN_VERSION_Cabal(3,18,0)+silentVerbosity = Verbosity.mkVerbosity Verbosity.defaultVerbosityHandles Verbosity.silent+#else+silentVerbosity = Verbosity.silent+#endif+ main :: IO () main = do   let desc = "Count Hackage reverse dependencies for given dates, using local package index. Consider running 'cabal update' beforehand."@@ -80,7 +89,7 @@       dates = L.nub $ [cnfStart, addDays (fromIntegral cnfStep) cnfStart .. cnfFinish] ++ [cnfFinish]   supportsAnsi <- hSupportsANSI stdout -  cnf <- loadConfig minBound mempty+  cnf <- loadConfig silentVerbosity mempty   let cacheDir = fromFlag $ globalCacheDir $ savedGlobalFlags cnf       idx = cacheDir </> hackageHaskellOrg </> "01-index.tar"   putStrLn $ unwords $ "Date      " : map (showPackage supportsAnsi) args
app/Main.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE ApplicativeDo #-}+{-# LANGUAGE CPP #-} {-# LANGUAGE RecordWildCards #-}  module Main (@@ -22,6 +23,7 @@ import Distribution.Types.LibraryName (LibraryName (..)) import Distribution.Types.PackageName (PackageName, mkPackageName, unPackageName) import Distribution.Types.VersionRange (VersionRange)+import Distribution.Verbosity qualified as Verbosity import Hackage.RevDeps (ExtractDependenciesMode (..), getReverseDependencies, getTransitiveReverseDependencies) import Options.Applicative (Parser, ReadM, argument, auto, execParser, fullDesc, help, helper, info, long, maybeReader, metavar, option, optional, progDesc, switch) import Options.Applicative.NonEmpty (some1)@@ -38,21 +40,28 @@ parseArgs :: Parser Config parseArgs = do   cnfIndexState <--    optional $-      option (fmap (`UTCTime` 0) (auto :: ReadM Day)) $-        long "index-state"-          <> help "Timestamp of index state at which to stop scanning, YYYY-MM-DD"+    optional+      $ option (fmap (`UTCTime` 0) (auto :: ReadM Day))+      $ long "index-state"+        <> help "Timestamp of index state at which to stop scanning, YYYY-MM-DD"   cnfPackageNames <--    some1 $-      argument (maybeReader simpleParsec) $-        metavar "PKGS"-          <> help "Package names to scan Hackage for their reverse dependencies"+    some1+      $ argument (maybeReader simpleParsec)+      $ metavar "PKGS"+        <> help "Package names to scan Hackage for their reverse dependencies"   cnfTransitive <-     switch $       long "transitive"         <> help "Count transitive (both direct and indirect) dependencies. This mode is imprecise when passing multiple package names at once. Also in this mode we follow only dependencies of the main library"   pure Config {..} +silentVerbosity :: Verbosity.Verbosity+#if MIN_VERSION_Cabal(3,18,0)+silentVerbosity = Verbosity.mkVerbosity Verbosity.defaultVerbosityHandles Verbosity.silent+#else+silentVerbosity = Verbosity.silent+#endif+ main :: IO () main = do   let desc = "List Hackage reverse dependencies, using local package index. Consider running 'cabal update' beforehand."@@ -61,7 +70,7 @@       info (helper <*> parseArgs) (fullDesc <> progDesc desc)   let args = S.fromList $ NE.toList cnfPackageNames -  cnf <- loadConfig minBound mempty+  cnf <- loadConfig silentVerbosity mempty   let cacheDir = fromFlag $ globalCacheDir $ savedGlobalFlags cnf       idx = cacheDir </> hackageHaskellOrg </> "01-index.tar"       func = if cnfTransitive then getTransitiveReverseDependencies OnlyMainLib else getReverseDependencies AllComponents@@ -79,9 +88,9 @@       reportTable supportsAnsi pkgs'       putStrLn "Total count:"       let counters =-            flip M.restrictKeys args $-              M.unionsWith (+) $-                fmap (fmap (const (1 :: Int))) pkgs+            flip M.restrictKeys args+              $ M.unionsWith (+)+              $ fmap (fmap (const (1 :: Int))) pkgs       reportTable supportsAnsi counters  reportTable :: Show v => Bool -> Map PackageName v -> IO ()
hackage-revdeps.cabal view
@@ -1,6 +1,6 @@ cabal-version:   2.2 name:            hackage-revdeps-version:         0.4+version:         0.4.1 license:         BSD-3-Clause license-file:    LICENSE maintainer:      andrew.lelechenko@gmail.com@@ -37,8 +37,8 @@         alfred-margaret >=2.0 && <2.2,         base >=4.17 && <5,         bytestring <0.13,-        Cabal >=3.8 && <3.17,-        Cabal-syntax >=3.8 && <3.17,+        Cabal >=3.8 && <3.19,+        Cabal-syntax >=3.8 && <3.19,         containers >=0.5.8 && <0.9,         filepath <1.6,         tar <0.8,@@ -54,9 +54,9 @@     build-depends:         ansi-terminal >=0.11.3 && <1.2,         base,-        Cabal >=3.8 && <3.17,-        cabal-install >=3.8 && <3.17,-        Cabal-syntax >=3.8 && <3.17,+        Cabal,+        cabal-install >=3.8 && <3.19,+        Cabal-syntax,         containers,         filepath,         hackage-revdeps,@@ -71,9 +71,9 @@     build-depends:         ansi-terminal >=0.11.3 && <1.2,         base,-        Cabal >=3.8 && <3.17,-        cabal-install >=3.8 && <3.17,-        Cabal-syntax >=3.8 && <3.17,+        Cabal,+        cabal-install >=3.8 && <3.19,+        Cabal-syntax,         containers,         filepath,         granite >=0.7 && <0.8,
src/Hackage/RevDeps.hs view
@@ -37,7 +37,7 @@ import Distribution.PackageDescription.Configuration (flattenPackageDescription) import Distribution.PackageDescription.Parsec (parseGenericPackageDescriptionMaybe) import Distribution.Simple.BuildToolDepends (getAllToolDependencies)-import Distribution.Types.BuildInfo (BuildInfo, buildable, targetBuildDepends)+import Distribution.Types.BuildInfo (BuildInfo, targetBuildDepends) import Distribution.Types.BuildInfo.Lens qualified as Lens import Distribution.Types.Dependency (Dependency (..)) import Distribution.Types.ExeDependency (ExeDependency (..))@@ -213,7 +213,7 @@ -- -- @since 0.4 data ExtractDependenciesMode-  = -- | All buildable components, including tests, benchmarks, sublibraries.+  = -- | All components, including tests, benchmarks, sublibraries.     AllComponents   | -- | Only the main library if any.     OnlyMainLib@@ -230,13 +230,11 @@         OnlyMainLib -> maybeToList (fmap libBuildInfo (library flatDescr))  extractDepsFromBuildInfo :: (BuildInfo -> [ExeDependency]) -> BuildInfo -> [Dependency]-extractDepsFromBuildInfo getToolDeps bi-  | buildable bi =-      targetBuildDepends bi-        <> map-          (\(ExeDependency pkg _ ver) -> Dependency pkg ver (NES.singleton LMainLibName))-          (getToolDeps bi)-  | otherwise = []+extractDepsFromBuildInfo getToolDeps bi =+  targetBuildDepends bi+    <> map+      (\(ExeDependency pkg _ ver) -> Dependency pkg ver (NES.singleton LMainLibName))+      (getToolDeps bi)  relevantDeps :: (PackageName -> Bool) -> [Dependency] -> Map PackageName VersionRange relevantDeps predicate =@@ -276,11 +274,12 @@   -> Map PackageName [Dependency]   -> Map PackageName (Map PackageName VersionRange) extractDependencies' args releases =-  M.filter (not . null) $+  M.filter (not . null)+    $     -- Most of packages trivially depend on themselves     -- (e. g., test suite depends on a library); skip it.-    M.mapWithKey M.delete $-      fmap (relevantDeps (`S.member` args)) releases+    M.mapWithKey M.delete+    $ fmap (relevantDeps (`S.member` args)) releases  -- | Same as 'getReverseDependencies', but -- returns not only direct, but also indirect reverse dependencies.