@@ -256,31 +256,24 @@ cmdInit nixpkgs = do
256256 dontCreateFile path = say $ " Not creating " <> path
257257
258258initNixpkgs :: FetchNixpkgs -> NIO ()
259- initNixpkgs nixpkgs =
259+ initNixpkgs nixpkgs = modifySources $ \ sources -> do
260260 case nixpkgs of
261- NoNixpkgs -> say " Not importing 'nixpkgs'."
261+ NoNixpkgs -> say " Not importing 'nixpkgs'." >> pure sources
262262 NixpkgsFast -> do
263263 say " Using known 'nixpkgs' ..."
264264 packageSpec <- HTTP. getResponseBody <$> HTTP. httpJSON " https://raw.githubusercontent.com/nmattia/niv/master/data/nixpkgs.json"
265- cmdAdd
266- githubCmd
267- (PackageName " nixpkgs" )
268- (specToLockedAttrs packageSpec)
269- pure ()
270- NixpkgsCustom branch nixpkgs' -> do
265+ applyAdd sources (PackageName " nixpkgs" , packageSpec)
266+ NixpkgsCustom branch (Nixpkgs owner repo) -> do
271267 say " Importing 'nixpkgs' ..."
272- let (owner, repo) = case nixpkgs' of
273- Nixpkgs o r -> (o, r)
274- cmdAdd
275- githubCmd
276- (PackageName " nixpkgs" )
277- ( specToFreeAttrs $
278- PackageSpec $
279- KM. fromList
280- [ " owner" .= owner,
281- " repo" .= repo,
282- " branch" .= branch
283- ]
268+ applyAdd
269+ sources
270+ ( PackageName " nixpkgs" ,
271+ PackageSpec $
272+ KM. fromList
273+ [ " owner" .= owner,
274+ " repo" .= repo,
275+ " branch" .= branch
276+ ]
284277 )
285278
286279-------------------------------------------------------------------------------
@@ -298,8 +291,8 @@ parseCmdAdd =
298291 -- implementer: it'll be tricky to have the correct arguments show up
299292 -- without repeating "PACKAGE PACKAGE PACKAGE" for every package type.
300293 parseShortcuts = parseShortcut githubCmd
301- parseShortcut cmd = uncurry ( cmdAdd cmd) <$> parseShortcutArgs cmd
302- parseCmd cmd = uncurry ( cmdAdd cmd) <$> parseCmdArgs cmd
294+ parseShortcut cmd = uncurry cmdAdd <$> parseShortcutArgs cmd
295+ parseCmd cmd = uncurry cmdAdd <$> parseCmdArgs cmd
303296 parseCmdAddGit =
304297 Opts. info (parseCmd gitCmd <**> Opts. helper) (description gitCmd)
305298 parseCmdAddLocal =
@@ -370,20 +363,32 @@ parseCmdArgs cmd = collapse <$> parseNameAndShortcut <*> parsePackageSpec cmd
370363 <> Opts. help " Set the package name to <NAME>"
371364 )
372365
373- cmdAdd :: Cmd -> PackageName -> Attrs -> NIO ()
374- cmdAdd cmd packageName attrs = do
366+ cmdAdd :: PackageName -> Attrs -> NIO ()
367+ cmdAdd packageName attrs = do
375368 job (" Adding package " <> T. unpack (unPackageName packageName)) $ do
376- modifySources $ \ (unSources -> sources) -> do
377- when (HMS. member packageName sources) $
378- li $
379- abortCannotAddPackageExists packageName
380- eFinalSpec <- fmap attrsToSpec <$> li (doUpdate attrs cmd)
381- case eFinalSpec of
382- Left e -> li (abortUpdateFailed [(packageName, e)])
383- Right finalSpec -> do
384- pure $
385- Sources $
386- HMS. insert packageName finalSpec sources
369+ let spec = attrsToSpec attrs
370+ modifySources $ \ sources -> applyAdd sources (packageName, spec)
371+
372+ applyAdd :: Sources -> (PackageName , PackageSpec ) -> NIO Sources
373+ applyAdd (unSources -> sources) (packageName, defaultSpec) = do
374+ cmds <- getCmds
375+
376+ -- infer what command (git, github, etc) to use to add the package
377+ cmd <- case inferCmd cmds defaultSpec of
378+ Just cmd -> pure cmd
379+ Nothing -> li $ abortNoSuitableCommandForAdd packageName
380+
381+ when (HMS. member packageName sources) $
382+ li $
383+ abortCannotAddPackageExists packageName
384+
385+ let attrs = specToLockedAttrs defaultSpec
386+ eFinalSpec <- fmap attrsToSpec <$> li (doUpdate attrs cmd)
387+ finalSpec <- case eFinalSpec of
388+ Left e -> li (abortUpdateFailed [(packageName, e)])
389+ Right finalSpec -> pure finalSpec
390+
391+ pure $ Sources $ HMS. insert packageName finalSpec sources
387392
388393-------------------------------------------------------------------------------
389394-- SHOW
@@ -464,7 +469,7 @@ updatePackage packageName defaultSpec mSpec = do
464469 -- infer what command (git, github, etc) to use to update the package
465470 cmd <- case inferCmd cmds defaultSpec of
466471 Just cmd -> pure cmd
467- Nothing -> li $ abortNoSuitableCommand packageName
472+ Nothing -> li $ abortNoSuitableCommandForUpdate packageName
468473
469474 job (" Update " <> T. unpack (unPackageName packageName)) $
470475 fmap attrsToSpec <$> li (doUpdate attrs cmd)
@@ -772,6 +777,10 @@ abortUpdateFailed errs =
772777 )
773778 errs
774779
775- abortNoSuitableCommand :: PackageName -> IO a
776- abortNoSuitableCommand pname =
780+ abortNoSuitableCommandForUpdate :: PackageName -> IO a
781+ abortNoSuitableCommandForUpdate pname =
777782 abort $ " Don't know how to update package: " <> unPackageName pname
783+
784+ abortNoSuitableCommandForAdd :: PackageName -> IO a
785+ abortNoSuitableCommandForAdd pname =
786+ abort $ " Don't know how to add package: " <> unPackageName pname
0 commit comments