Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Install on need verify package #94

Merged
merged 5 commits into from
Mar 19, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 23 additions & 17 deletions app/Main.hs
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -92,6 +92,7 @@ packageConfigToJSON =
, "depends"
]
, confIndent = Spaces 2
, confTrailingNewline = True
}

packageSetToJSON :: PackageSet -> Text
Expand All @@ -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 =
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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 ()
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion psc-package.cabal
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
5 changes: 3 additions & 2 deletions stack.yaml
Original file line number Diff line number Diff line change
@@ -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