Skip to content

Commit d14c67f

Browse files
authored
Add --source and --set options to --init command, fix #22 (#42)
1 parent 8b542c3 commit d14c67f

File tree

1 file changed

+42
-27
lines changed

1 file changed

+42
-27
lines changed

app/Main.hs

Lines changed: 42 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -54,14 +54,6 @@ data PackageConfig = PackageConfig
5454
pathToTextUnsafe :: Turtle.FilePath -> Text
5555
pathToTextUnsafe = either (error "Path.toText failed") id . Path.toText
5656

57-
defaultPackage :: Version -> PackageName -> PackageConfig
58-
defaultPackage pursVersion pkgName =
59-
PackageConfig { name = pkgName
60-
, depends = [ preludePackageName ]
61-
, set = "psc-" <> pack (showVersion pursVersion)
62-
, source = "https://github.com/purescript/package-sets.git"
63-
}
64-
6557
readPackageFile :: IO PackageConfig
6658
readPackageFile = do
6759
exists <- testfile packageFile
@@ -213,24 +205,37 @@ getPureScriptVersion = do
213205
echoT "Unable to parse output of purs --version" >> exit (ExitFailure 1)
214206
_ -> echoT "Unexpected output from purs --version" >> exit (ExitFailure 1)
215207

216-
initialize :: IO ()
217-
initialize = do
218-
exists <- testfile "psc-package.json"
219-
when exists $ do
220-
echoT "psc-package.json already exists"
221-
exit (ExitFailure 1)
222-
echoT "Initializing new project in current directory"
223-
pkgName <- packageNameFromPWD . pathToTextUnsafe . Path.filename <$> pwd
224-
pursVersion <- getPureScriptVersion
225-
echoT ("Using the default package set for PureScript compiler version " <>
226-
fromString (showVersion pursVersion))
227-
let pkg = defaultPackage pursVersion pkgName
228-
writePackageFile pkg
229-
updateImpl pkg
230-
208+
initialize :: Maybe (Text, Maybe Text) -> IO ()
209+
initialize setAndSource = do
210+
exists <- testfile "psc-package.json"
211+
when exists $ do
212+
echoT "psc-package.json already exists"
213+
exit (ExitFailure 1)
214+
echoT "Initializing new project in current directory"
215+
pkgName <- packageNameFromPWD . pathToTextUnsafe . Path.filename <$> pwd
216+
pkg <- case setAndSource of
217+
Nothing -> do
218+
pursVersion <- getPureScriptVersion
219+
echoT ("Using the default package set for PureScript compiler version " <>
220+
fromString (showVersion pursVersion))
221+
echoT "(Use --source / --set to override this behavior)"
222+
pure PackageConfig { name = pkgName
223+
, depends = [ preludePackageName ]
224+
, source = "https://github.com/purescript/package-sets.git"
225+
, set = ("psc-" <> pack (showVersion pursVersion))
226+
}
227+
Just (set, source) ->
228+
pure PackageConfig { name = pkgName
229+
, depends = [ preludePackageName ]
230+
, source = fromMaybe "https://github.com/purescript/package-sets.git" source
231+
, set
232+
}
233+
234+
writePackageFile pkg
235+
updateImpl pkg
231236
where
232-
packageNameFromPWD =
233-
either (const untitledPackageName) id . mkPackageName
237+
packageNameFromPWD =
238+
either (const untitledPackageName) id . mkPackageName
234239

235240
install :: String -> IO ()
236241
install pkgName' = do
@@ -453,7 +458,9 @@ main = do
453458
commands :: Parser (IO ())
454459
commands = (Opts.subparser . fold)
455460
[ Opts.command "init"
456-
(Opts.info (pure initialize)
461+
(Opts.info (initialize <$> optional ((,) <$> (fromString <$> set)
462+
<*> optional (fromString <$> source))
463+
Opts.<**> Opts.helper)
457464
(Opts.progDesc "Initialize a new package"))
458465
, Opts.command "uninstall"
459466
(Opts.info (uninstall <$> pkg Opts.<**> Opts.helper)
@@ -480,7 +487,7 @@ main = do
480487
(Opts.info (pure listSourcePaths)
481488
(Opts.progDesc "List all (active) source paths for dependencies"))
482489
, Opts.command "available"
483-
(Opts.info (listPackages <$> sorted)
490+
(Opts.info (listPackages <$> sorted Opts.<**> Opts.helper)
484491
(Opts.progDesc "List all packages available in the package set"))
485492
, Opts.command "updates"
486493
(Opts.info (checkForUpdates <$> apply <*> applyMajor Opts.<**> Opts.helper)
@@ -494,6 +501,14 @@ main = do
494501
Opts.metavar "PACKAGE"
495502
<> Opts.help "The name of the package to install"
496503

504+
source = Opts.strOption $
505+
Opts.long "source"
506+
<> Opts.help "The Git repository for the package set"
507+
508+
set = Opts.strOption $
509+
Opts.long "set"
510+
<> Opts.help "The package set tag name"
511+
497512
apply = Opts.switch $
498513
Opts.long "apply"
499514
<> Opts.help "Apply all minor package updates"

0 commit comments

Comments
 (0)