@@ -54,14 +54,6 @@ data PackageConfig = PackageConfig
54
54
pathToTextUnsafe :: Turtle. FilePath -> Text
55
55
pathToTextUnsafe = either (error " Path.toText failed" ) id . Path. toText
56
56
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
-
65
57
readPackageFile :: IO PackageConfig
66
58
readPackageFile = do
67
59
exists <- testfile packageFile
@@ -213,24 +205,37 @@ getPureScriptVersion = do
213
205
echoT " Unable to parse output of purs --version" >> exit (ExitFailure 1 )
214
206
_ -> echoT " Unexpected output from purs --version" >> exit (ExitFailure 1 )
215
207
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
231
236
where
232
- packageNameFromPWD =
233
- either (const untitledPackageName) id . mkPackageName
237
+ packageNameFromPWD =
238
+ either (const untitledPackageName) id . mkPackageName
234
239
235
240
install :: String -> IO ()
236
241
install pkgName' = do
@@ -453,7 +458,9 @@ main = do
453
458
commands :: Parser (IO () )
454
459
commands = (Opts. subparser . fold)
455
460
[ Opts. command " init"
456
- (Opts. info (pure initialize)
461
+ (Opts. info (initialize <$> optional ((,) <$> (fromString <$> set)
462
+ <*> optional (fromString <$> source))
463
+ Opts. <**> Opts. helper)
457
464
(Opts. progDesc " Initialize a new package" ))
458
465
, Opts. command " uninstall"
459
466
(Opts. info (uninstall <$> pkg Opts. <**> Opts. helper)
@@ -480,7 +487,7 @@ main = do
480
487
(Opts. info (pure listSourcePaths)
481
488
(Opts. progDesc " List all (active) source paths for dependencies" ))
482
489
, Opts. command " available"
483
- (Opts. info (listPackages <$> sorted)
490
+ (Opts. info (listPackages <$> sorted Opts. <**> Opts. helper )
484
491
(Opts. progDesc " List all packages available in the package set" ))
485
492
, Opts. command " updates"
486
493
(Opts. info (checkForUpdates <$> apply <*> applyMajor Opts. <**> Opts. helper)
@@ -494,6 +501,14 @@ main = do
494
501
Opts. metavar " PACKAGE"
495
502
<> Opts. help " The name of the package to install"
496
503
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
+
497
512
apply = Opts. switch $
498
513
Opts. long " apply"
499
514
<> Opts. help " Apply all minor package updates"
0 commit comments