@@ -9,6 +9,7 @@ import Container.OsRelease (OsInfo)
99import Control.Effect.Diagnostics (Diagnostics )
1010import Control.Effect.Reader (Reader )
1111import Data.Aeson (ToJSON )
12+ import Data.Foldable (find )
1213import Data.String.Conversion (toText )
1314import Data.Text qualified as Text
1415import Discovery.Filters (AllFilters )
@@ -18,7 +19,7 @@ import Discovery.Walk (
1819 findFileNamed ,
1920 walkWithFilters' ,
2021 )
21- import Effect.ReadFS (Has , ReadFS )
22+ import Effect.ReadFS (Has , ReadFS , listDir )
2223import GHC.Generics (Generic )
2324import Path (Abs , Dir , File , Path , toFilePath )
2425import Strategy.Dpkg.Database (analyze )
@@ -59,13 +60,19 @@ findProjects ::
5960 OsInfo ->
6061 Path Abs Dir ->
6162 m [DpkgDatabase ]
62- findProjects osInfo = walkWithFilters' $ \ dir _ files -> do
63- case findFileNamed " status" files of
64- Nothing -> pure ([] , WalkContinue )
65- Just file -> do
66- if (Text. isInfixOf " var/lib/dpkg/" $ toText . toFilePath $ file)
67- then pure ([DpkgDatabase dir file osInfo], WalkContinue )
68- else pure ([] , WalkContinue )
63+ findProjects osInfo = walkWithFilters' $ \ dir dirs files -> do
64+ let standardDBs = case findFileNamed " status" files of
65+ Just file ->
66+ if Text. isInfixOf " var/lib/dpkg/" (toText . toFilePath $ file)
67+ then [DpkgDatabase dir file osInfo]
68+ else []
69+ Nothing -> []
70+ statusD_DBs <- case find (\ f -> toFilePath f == " var/lib/dpkg/status.d/" ) dirs of
71+ Just dir' -> do
72+ (_, filesInDir) <- listDir dir'
73+ pure $ map (\ file -> DpkgDatabase dir' file osInfo) (filter (not . Text. isSuffixOf " .md5sums" . toText) filesInDir)
74+ Nothing -> pure []
75+ pure (standardDBs ++ statusD_DBs, WalkContinue )
6976
7077mkProject :: DpkgDatabase -> DiscoveredProject DpkgDatabase
7178mkProject project =
0 commit comments