@@ -119,6 +119,7 @@ parseCommand =
119119 <> Opts. command " add" parseCmdAdd
120120 <> Opts. command " show" parseCmdShow
121121 <> Opts. command " update" parseCmdUpdate
122+ <> Opts. command " rename" parseCmdRename
122123 <> Opts. command " modify" parseCmdModify
123124 <> Opts. command " drop" parseCmdDrop
124125 <> Opts. command " version" parseCmdVersion
@@ -510,14 +511,47 @@ doUpdate attrs cmd = do
510511 Right attrs' -> pure attrs'
511512 Left e -> throwError $ T. show e
512513
514+ -------------------------------------------------------------------------------
515+ -- RENAME
516+ -------------------------------------------------------------------------------
517+
518+ parseCmdRename :: Opts. ParserInfo (NIO () )
519+ parseCmdRename =
520+ Opts. info
521+ ((cmdRename <$> parsePackageNameOld <*> parsePackageNameNew) <**> Opts. helper)
522+ $ mconcat desc
523+ where
524+ desc =
525+ [ Opts. fullDesc,
526+ Opts. progDesc " Rename a package" ,
527+ Opts. headerDoc $
528+ Just $
529+ Opts. vcat
530+ [ " Examples:" ,
531+ " " ,
532+ " niv rename nixpkgs nixpkgs-unstable"
533+ ]
534+ ]
535+ parsePackageNameOld = PackageName <$> Opts. argument Opts. str (Opts. metavar " OLD" )
536+ parsePackageNameNew = PackageName <$> Opts. argument Opts. str (Opts. metavar " NEW" )
537+
538+ cmdRename :: PackageName -> PackageName -> NIO ()
539+ cmdRename oldName newName =
540+ modifySources $ \ (unSources -> sources) -> do
541+ spec <- case HMS. lookup oldName sources of
542+ Nothing -> abortNoSuchPackage oldName
543+ Just spec -> pure spec
544+
545+ pure $ Sources $ HMS. insert newName spec $ HMS. delete oldName sources
546+
513547-------------------------------------------------------------------------------
514548-- MODIFY
515549-------------------------------------------------------------------------------
516550
517551parseCmdModify :: Opts. ParserInfo (NIO () )
518552parseCmdModify =
519553 Opts. info
520- ((cmdModify <$> parsePackageName <*> optName <*> parsePackageSpec githubCmd) <**> Opts. helper)
554+ ((cmdModify <$> parsePackageName <*> parsePackageSpec githubCmd) <**> Opts. helper)
521555 $ mconcat desc
522556 where
523557 desc =
@@ -532,32 +566,16 @@ parseCmdModify =
532566 " niv modify nixpkgs -a branch=nixpkgs-unstable"
533567 ]
534568 ]
535- optName =
536- Opts. optional $
537- PackageName
538- <$> Opts. strOption
539- ( Opts. long " name"
540- <> Opts. short ' n'
541- <> Opts. metavar " NAME"
542- <> Opts. help " Set the package name to <NAME>"
543- )
544569
545- -- if mNewName is not null, then rename the package (remove original and insert the new one)
546- cmdModify :: PackageName -> Maybe PackageName -> PackageSpec -> NIO ()
547- cmdModify packageName mNewName cliSpec =
570+ cmdModify :: PackageName -> PackageSpec -> NIO ()
571+ cmdModify packageName cliSpec =
548572 modifySources $ \ (unSources -> sources) -> do
549573 spec <- case HMS. lookup packageName sources of
550574 Nothing -> abortNoSuchPackage packageName
551575 Just spec -> pure spec
552576
553577 let spec' = attrsToSpec (specToLockedAttrs cliSpec <> specToFreeAttrs spec)
554- case mNewName of
555- Just newName -> do
556- when (HMS. member newName sources) $
557- abortCannotRenamePackageExists packageName newName
558- pure $ Sources $ HMS. insert newName spec' $ HMS. delete packageName sources
559- Nothing ->
560- pure $ Sources $ HMS. insert packageName spec' sources
578+ pure $ Sources $ HMS. insert packageName spec' sources
561579
562580-------------------------------------------------------------------------------
563581-- DROP
0 commit comments