Skip to content

Commit 0f6a2fb

Browse files
Dretchjustinwoo
authored andcommitted
Only show "Installing n packages" when n > 1. (#130)
If there are zero packages to install, show nothing. If there is only one package, then there is no need to provide an indication of how long it will take.
1 parent 8c25bb5 commit 0f6a2fb

File tree

1 file changed

+18
-10
lines changed

1 file changed

+18
-10
lines changed

app/Main.hs

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import qualified Control.Foldl as Foldl
1313
import Control.Concurrent.Async (forConcurrently_, mapConcurrently)
1414
import Control.Concurrent.QSem (newQSem, signalQSem, waitQSem)
1515
import Control.Exception (bracket_)
16+
import Control.Monad (filterM)
1617
import qualified Data.Aeson as Aeson
1718
import Data.Aeson.Encode.Pretty
1819
import Data.Either.Combinators (rightToMaybe)
@@ -57,6 +58,10 @@ packageFile = "psc-package.json"
5758
localPackageSet :: Path.FilePath
5859
localPackageSet = "packages.json"
5960

61+
packageDir :: Text -> PackageName -> Text -> Turtle.FilePath
62+
packageDir set pkgName version =
63+
".psc-package" </> fromText set </> fromText (runPackageName pkgName) </> fromText version
64+
6065
data PackageConfig = PackageConfig
6166
{ name :: PackageName
6267
, depends :: [PackageName]
@@ -191,7 +196,7 @@ writeLocalPackageSet = writeTextFile localPackageSet . packageSetToJSON
191196

192197
performInstall :: Text -> PackageName -> PackageInfo -> IO Turtle.FilePath
193198
performInstall set pkgName PackageInfo{ repo, version } = do
194-
let pkgDir = ".psc-package" </> fromText set </> fromText (runPackageName pkgName) </> fromText version
199+
let pkgDir = packageDir set pkgName version
195200
exists <- testdir pkgDir
196201
unless exists . void $ do
197202
echoT ("Installing " <> runPackageName pkgName)
@@ -243,14 +248,21 @@ installImpl :: PackageConfig -> Maybe Int -> IO ()
243248
installImpl config@PackageConfig{ depends } limitJobs = do
244249
getPackageSet config
245250
db <- readPackageSet config
246-
trans <- getTransitiveDeps db depends
247-
echoT ("Installing " <> pack (show (length trans)) <> " packages...")
251+
newPkgs <- getNewPackages db
252+
when (length newPkgs > 1) $ do
253+
echoT ("Installing " <> pack (show (length newPkgs)) <> " new packages...")
248254
case limitJobs of
249255
Nothing ->
250-
forConcurrently_ trans . uncurry $ performInstall $ set config
256+
forConcurrently_ newPkgs . uncurry $ performInstall $ set config
251257
Just max' -> do
252258
sem <- newQSem max'
253-
forConcurrently_ trans . uncurry . (\x y z -> bracket_ (waitQSem sem) (signalQSem sem) (performInstall x y z)) $ set config
259+
forConcurrently_ newPkgs . uncurry . (\x y z -> bracket_ (waitQSem sem) (signalQSem sem) (performInstall x y z)) $ set config
260+
where
261+
getNewPackages db =
262+
getTransitiveDeps db depends >>= filterM isNewPackage
263+
264+
isNewPackage (name, info) =
265+
fmap not $ testdir $ packageDir (set config) name (version info)
254266

255267
getPureScriptVersion :: IO Version
256268
getPureScriptVersion = do
@@ -355,11 +367,7 @@ listPackages sorted = do
355367
getSourcePaths :: PackageConfig -> PackageSet -> [PackageName] -> IO [Turtle.FilePath]
356368
getSourcePaths PackageConfig{..} db pkgNames = do
357369
trans <- getTransitiveDeps db pkgNames
358-
let paths = [ ".psc-package"
359-
</> fromText set
360-
</> fromText (runPackageName pkgName)
361-
</> fromText version
362-
</> "src" </> "**" </> "*.purs"
370+
let paths = [ packageDir set pkgName version </> "src" </> "**" </> "*.purs"
363371
| (pkgName, PackageInfo{ version }) <- trans
364372
]
365373
return paths

0 commit comments

Comments
 (0)