Skip to content

Commit 261d4f5

Browse files
authored
Add rename command (#440)
This removes the `--name` option in `niv modify` and makes renaming its own command.
1 parent 24f827b commit 261d4f5

4 files changed

Lines changed: 65 additions & 23 deletions

File tree

README.md

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -227,6 +227,7 @@ Available commands:
227227
add Add a GitHub dependency
228228
show
229229
update Update dependencies
230+
rename Rename a package
230231
modify Modify dependency attributes without performing an
231232
update
232233
drop Drop dependency
@@ -308,6 +309,21 @@ Available options:
308309
-h,--help Show this help text
309310
```
310311

312+
#### Rename
313+
314+
```
315+
Examples:
316+
317+
niv rename nixpkgs nixpkgs-unstable
318+
319+
Usage: niv rename OLD NEW
320+
321+
Rename a package
322+
323+
Available options:
324+
-h,--help Show this help text
325+
```
326+
311327
#### Modify
312328

313329
```
@@ -316,7 +332,7 @@ Examples:
316332
niv modify nixpkgs -v beta-0.2
317333
niv modify nixpkgs -a branch=nixpkgs-unstable
318334
319-
Usage: niv modify PACKAGE [-n|--name NAME]
335+
Usage: niv modify PACKAGE
320336
[(-a|--attribute KEY=VAL) | (-s|--string-attribute KEY=VAL) |
321337
(-b|--branch BRANCH) | (-o|--owner OWNER) | (-r|--rev REV) |
322338
(-v|--version VERSION) | (-t|--template URL) |
@@ -325,7 +341,6 @@ Usage: niv modify PACKAGE [-n|--name NAME]
325341
Modify dependency attributes without performing an update
326342
327343
Available options:
328-
-n,--name NAME Set the package name to <NAME>
329344
-a,--attribute KEY=VAL Set the package spec attribute <KEY> to <VAL>, where
330345
<VAL> may be JSON.
331346
-s,--string-attribute KEY=VAL

README.tpl.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -224,6 +224,12 @@ replace_niv_add_help
224224
replace_niv_update_help
225225
```
226226

227+
#### Rename
228+
229+
```
230+
replace_niv_rename_help
231+
```
232+
227233
#### Modify
228234

229235
```

flake.nix

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -140,9 +140,12 @@
140140
sed "/replace_niv_add_help/r"<(niv add --help) $readme | sponge $readme
141141
sed "/replace_niv_add_help/d" $readme | sponge $readme
142142
143-
sed "/replace_niv_update_help/r"<(niv update --help) $readme| sponge $readme $readme
143+
sed "/replace_niv_update_help/r"<(niv update --help) $readme| sponge $readme
144144
sed "/replace_niv_update_help/d" $readme | sponge $readme
145145
146+
sed "/replace_niv_rename_help/r"<(niv rename --help) $readme| sponge $readme
147+
sed "/replace_niv_rename_help/d" $readme | sponge $readme
148+
146149
sed "/replace_niv_modify_help/r"<(niv modify --help) $readme | sponge $readme
147150
sed "/replace_niv_modify_help/d" $readme | sponge $readme
148151

src/Niv/Cli.hs

Lines changed: 38 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -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

517551
parseCmdModify :: Opts.ParserInfo (NIO ())
518552
parseCmdModify =
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

Comments
 (0)