git.iko.soy/rowtype-yoga/purescript-native
on golang help sign in
Merge pull request #2508 from purescript/phil/verify-set

Add verify-set command to psc-package

commit4af7f4abdc6dec493538f97e637843a5fbcf2183 authorPhil Freeman <paf31@cantab.net> dateTue 27 Dec 2016, 21:13 (10 years ago) parentaec0ece21ca139
1 file changed+26−6
psc-package/Main.hs+26−6
psc-package/Main.hs+26−6
@@ -12,7 +12,7 @@ import Data.Aeson.Encode.Pretty
1212import Data.Foldable (fold, for_, traverse_)
1313import Data.List (nub)
1414import qualified Data.Map as Map
15−import Data.Maybe (mapMaybe)
15+import Data.Maybe (fromMaybe, mapMaybe)
1616import qualified Data.Set as Set
1717import Data.Text (pack)
1818import qualified Data.Text.Lazy as TL
@@ -128,11 +128,13 @@ readPackageSet PackageConfig{ set } = do
128128 exit (ExitFailure 1)
129129 Just db -> return db
130130
131−installOrUpdate :: PackageConfig -> Text -> PackageInfo -> IO ()
132−installOrUpdate PackageConfig{ set } pkgName PackageInfo{ repo, version } = do
131+installOrUpdate :: Text -> Text -> PackageInfo -> IO Turtle.FilePath
132+installOrUpdate set pkgName PackageInfo{ repo, version } = do
133+ echo ("Updating " <> pkgName)
133134 let pkgDir = ".psc-package" </> fromText set </> fromText pkgName </> fromText version
134135 exists <- testdir pkgDir
135136 unless exists . void $ cloneShallow repo version pkgDir
137+ pure pkgDir
136138
137139getTransitiveDeps :: PackageSet -> [Text] -> IO [(Text, PackageInfo)]
138140getTransitiveDeps db depends = do
@@ -151,9 +153,7 @@ updateImpl config@PackageConfig{ depends } = do
151153 db <- readPackageSet config
152154 trans <- getTransitiveDeps db depends
153155 echo ("Updating " <> pack (show (length trans)) <> " packages...")
154− for_ trans $ \(pkgName, pkg) -> do
155− echo ("Updating " <> pkgName)
156− installOrUpdate config pkgName pkg
156+ for_ trans $ \(pkgName, pkg) -> installOrUpdate (set config) pkgName pkg
157157
158158initialize :: IO ()
159159initialize = do
@@ -233,6 +233,23 @@ exec exeName = do
233233 (map pathToTextUnsafe ("src" </> "**" </> "*.purs" : paths))
234234 empty
235235
236+verifyPackageSet :: IO ()
237+verifyPackageSet = do
238+ pkg <- readPackageFile
239+ db <- readPackageSet pkg
240+
241+ echo ("Verifying " <> pack (show (Map.size db)) <> " packages.")
242+ echo "Warning: this could take some time!"
243+
244+ let installOrUpdate' (name, pkgInfo) = (name, ) <$> installOrUpdate (set pkg) name pkgInfo
245+ paths <- Map.fromList <$> traverse installOrUpdate' (Map.toList db)
246+
247+ for_ (Map.toList db) $ \(name, PackageInfo{..}) -> do
248+ let dirFor = fromMaybe (error "verifyPackageSet: no directory") . (`Map.lookup` paths)
249+ echo ("Verifying package " <> name)
250+ let srcGlobs = map (pathToTextUnsafe . (</> ("src" </> "**" </> "*.purs")) . dirFor) (name : dependencies)
251+ procs "psc" srcGlobs empty
252+
236253main :: IO ()
237254main = do
238255 IO.hSetEncoding IO.stdout IO.utf8
@@ -275,6 +292,9 @@ main = do
275292 , Opts.command "available"
276293 (Opts.info (pure listPackages)
277294 (Opts.progDesc "List all packages available in the package set"))
295+ , Opts.command "verify-set"
296+ (Opts.info (pure verifyPackageSet)
297+ (Opts.progDesc "Verify that the packages in the package set build correctly"))
278298 ]
279299 where
280300 pkg = Opts.strArgument $