diff --git a/app/Main.hs b/app/Main.hs index 4d61daa..76fb6f2 100644 --- a/app/Main.hs +++ b/app/Main.hs @@ -10,14 +10,14 @@ module Main where import qualified Control.Foldl as Foldl -import Control.Concurrent.Async (forConcurrently_) +import Control.Concurrent.Async (forConcurrently_, mapConcurrently) import qualified Data.Aeson as Aeson import Data.Aeson.Types (fieldLabelModifier) import Data.Aeson.Encode.Pretty import Data.Foldable (fold, foldMap, traverse_) import qualified Data.Bifunctor as Bifunctor import qualified Data.Graph as G -import Data.List (maximumBy, nub) +import Data.List (maximumBy) import qualified Data.List as List import qualified Data.Map as Map import Data.Maybe (fromMaybe, mapMaybe) @@ -92,6 +92,7 @@ packageConfigToJSON = , "depends" ] , confIndent = Spaces 2 + , confTrailingNewline = True } packageSetToJSON :: PackageSet -> Text @@ -100,7 +101,11 @@ packageSetToJSON = . TB.toLazyText . encodePrettyToTextBuilder' config where - config = defConfig { confCompare = compare, confIndent = Spaces 2 } + config = defConfig + { confCompare = compare + , confIndent = Spaces 2 + , confTrailingNewline = True + } writePackageFile :: PackageConfig -> IO () writePackageFile = @@ -188,7 +193,7 @@ performInstall set pkgName PackageInfo{ repo, version } = do getReverseDeps :: PackageSet -> PackageName -> IO [(PackageName, PackageInfo)] getReverseDeps db dep = - nub <$> foldMap go (Map.toList db) + List.nub <$> foldMap go (Map.toList db) where go pair@(packageName, PackageInfo {dependencies}) = case List.find (== dep) dependencies of @@ -270,7 +275,7 @@ install pkgName' = do echoT "Install complete" Just str -> do pkgName <- packageNameFromString str - let pkg' = pkg { depends = nub (pkgName : depends pkg) } + let pkg' = pkg { depends = List.nub (pkgName : depends pkg) } updateAndWritePackageFile pkg' uninstall :: String -> IO () @@ -469,17 +474,19 @@ verify arg = do verifyPackages names db pkg = do echoT $ "Verifying " <> pack (show $ length names) <> " packages." echoT "Warning: this could take some time!" - - let go (name_, pkgInfo) = (name_, ) <$> performInstall (set pkg) name_ pkgInfo - paths <- Map.fromList <$> traverse go (Map.toList db) - traverse_ (verifyPackage db paths) names - - verifyPackage :: PackageSet -> Map.Map PackageName Turtle.FilePath -> PackageName -> IO () - verifyPackage db paths name = do - let dirFor pkgName = fromMaybe (error ("verifyPackageSet: no directory for " <> show pkgName)) (Map.lookup pkgName paths) + traverse_ (verifyPackage db pkg) names + + verifyPackage :: PackageSet -> PackageConfig -> PackageName -> IO () + verifyPackage db pkg name = do + let + dirFor pkgName = + case Map.lookup pkgName db of + Nothing -> error ("verifyPackageSet: no directory for " <> show pkgName) + Just pkgInfo -> performInstall (set pkg) pkgName pkgInfo echoT ("Verifying package " <> runPackageName name) dependencies <- map fst <$> getTransitiveDeps db [name] - let srcGlobs = map (pathToTextUnsafe . ( ("src" "**" "*.purs")) . dirFor) dependencies + dirs <- mapConcurrently dirFor dependencies + let srcGlobs = map (pathToTextUnsafe . ( ("src" "**" "*.purs"))) dirs procs "purs" ("compile" : srcGlobs) empty data BowerInfoRepo = BowerInfoRepo @@ -522,9 +529,8 @@ addFromBower name = do ) case result' of Right (pkgName, info) -> do - pkg <- readPackageFile - db <- readPackageSet pkg - writePackageSet pkg $ Map.insert pkgName info db + db <- readLocalPackageSet + writeLocalPackageSet $ Map.insert pkgName info db echoT $ "Successfully wrote " <> runPackageName pkgName <> " to package set." Left errors -> echoT $ "Errors processing Bower Info: " <> (T.pack errors) where diff --git a/psc-package.cabal b/psc-package.cabal index 89dd8bf..c736fd3 100644 --- a/psc-package.cabal +++ b/psc-package.cabal @@ -25,7 +25,7 @@ executable psc-package process -any, system-filepath -any, text -any, - turtle ==1.3.* + turtle <1.6 main-is: Main.hs other-modules: Paths_psc_package Types diff --git a/stack.yaml b/stack.yaml index fc491c7..eabc584 100644 --- a/stack.yaml +++ b/stack.yaml @@ -1,4 +1,5 @@ -resolver: lts-8.15 +resolver: lts-11.1 packages: - '.' -extra-deps: [] +extra-deps: +- aeson-pretty-0.8.5 # newer in lts-11.1 needed for formatting packages.json