module Hix.Managed.Build.NixOutput.Analysis where import Distribution.Parsec (simpleParsec) import Distribution.Simple (Dependency) import qualified Hix.Data.Dep as Dep import Hix.Data.Dep (Dep) analyzeLog :: [Text] -> Maybe (NonEmpty Dep) analyzeLog :: [Text] -> Maybe (NonEmpty Dep) analyzeLog [Text] log = [Dep] -> Maybe (NonEmpty Dep) forall a. [a] -> Maybe (NonEmpty a) nonEmpty [Dep] bounds where bounds :: [Dep] bounds = [Maybe Dep] -> [Dep] forall a. [Maybe a] -> [a] catMaybes ((Maybe Dep -> Bool) -> [Maybe Dep] -> [Maybe Dep] forall a. (a -> Bool) -> [a] -> [a] takeWhile Maybe Dep -> Bool forall a. Maybe a -> Bool isJust (Text -> Maybe Dep parseDep (Text -> Maybe Dep) -> [Text] -> [Maybe Dep] forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> [Text] afterBoundsMarker)) afterBoundsMarker :: [Text] afterBoundsMarker = Int -> [Text] -> [Text] forall a. Int -> [a] -> [a] drop Int 1 ((Text -> Bool) -> [Text] -> [Text] forall a. (a -> Bool) -> [a] -> [a] dropWhile (Text boundsMarker /=) [Text] log) boundsMarker :: Text boundsMarker = Text "Error: Setup: Encountered missing or private dependencies:" parseDep :: Text -> Maybe Dep parseDep = (Dependency -> Dep) -> Maybe Dependency -> Maybe Dep forall a b. (a -> b) -> Maybe a -> Maybe b forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b fmap Dependency -> Dep Dep.fromCabal (Maybe Dependency -> Maybe Dep) -> (Text -> Maybe Dependency) -> Text -> Maybe Dep forall b c a. (b -> c) -> (a -> b) -> a -> c . forall a. Parsec a => String -> Maybe a simpleParsec @Dependency (String -> Maybe Dependency) -> (Text -> String) -> Text -> Maybe Dependency forall b c a. (b -> c) -> (a -> b) -> a -> c . Text -> String forall a. ToString a => a -> String toString