Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 17 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -227,6 +227,7 @@ Available commands:
add Add a GitHub dependency
show
update Update dependencies
rename Rename a package
modify Modify dependency attributes without performing an
update
drop Drop dependency
Expand Down Expand Up @@ -308,6 +309,21 @@ Available options:
-h,--help Show this help text
```

#### Rename

```
Examples:

niv rename nixpkgs nixpkgs-unstable

Usage: niv rename OLD NEW

Rename a package

Available options:
-h,--help Show this help text
```

#### Modify

```
Expand All @@ -316,7 +332,7 @@ Examples:
niv modify nixpkgs -v beta-0.2
niv modify nixpkgs -a branch=nixpkgs-unstable

Usage: niv modify PACKAGE [-n|--name NAME]
Usage: niv modify PACKAGE
[(-a|--attribute KEY=VAL) | (-s|--string-attribute KEY=VAL) |
(-b|--branch BRANCH) | (-o|--owner OWNER) | (-r|--rev REV) |
(-v|--version VERSION) | (-t|--template URL) |
Expand All @@ -325,7 +341,6 @@ Usage: niv modify PACKAGE [-n|--name NAME]
Modify dependency attributes without performing an update

Available options:
-n,--name NAME Set the package name to <NAME>
-a,--attribute KEY=VAL Set the package spec attribute <KEY> to <VAL>, where
<VAL> may be JSON.
-s,--string-attribute KEY=VAL
Expand Down
6 changes: 6 additions & 0 deletions README.tpl.md
Original file line number Diff line number Diff line change
Expand Up @@ -224,6 +224,12 @@ replace_niv_add_help
replace_niv_update_help
```

#### Rename

```
replace_niv_rename_help
```

#### Modify

```
Expand Down
5 changes: 4 additions & 1 deletion flake.nix
Original file line number Diff line number Diff line change
Expand Up @@ -140,9 +140,12 @@
sed "/replace_niv_add_help/r"<(niv add --help) $readme | sponge $readme
sed "/replace_niv_add_help/d" $readme | sponge $readme

sed "/replace_niv_update_help/r"<(niv update --help) $readme| sponge $readme $readme
sed "/replace_niv_update_help/r"<(niv update --help) $readme| sponge $readme
sed "/replace_niv_update_help/d" $readme | sponge $readme

sed "/replace_niv_rename_help/r"<(niv rename --help) $readme| sponge $readme
sed "/replace_niv_rename_help/d" $readme | sponge $readme

sed "/replace_niv_modify_help/r"<(niv modify --help) $readme | sponge $readme
sed "/replace_niv_modify_help/d" $readme | sponge $readme

Expand Down
58 changes: 38 additions & 20 deletions src/Niv/Cli.hs
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,7 @@ parseCommand =
<> Opts.command "add" parseCmdAdd
<> Opts.command "show" parseCmdShow
<> Opts.command "update" parseCmdUpdate
<> Opts.command "rename" parseCmdRename
<> Opts.command "modify" parseCmdModify
<> Opts.command "drop" parseCmdDrop
<> Opts.command "version" parseCmdVersion
Expand Down Expand Up @@ -510,14 +511,47 @@ doUpdate attrs cmd = do
Right attrs' -> pure attrs'
Left e -> throwError $ T.show e

-------------------------------------------------------------------------------
-- RENAME
-------------------------------------------------------------------------------

parseCmdRename :: Opts.ParserInfo (NIO ())
parseCmdRename =
Opts.info
((cmdRename <$> parsePackageNameOld <*> parsePackageNameNew) <**> Opts.helper)
$ mconcat desc
where
desc =
[ Opts.fullDesc,
Opts.progDesc "Rename a package",
Opts.headerDoc $
Just $
Opts.vcat
[ "Examples:",
"",
" niv rename nixpkgs nixpkgs-unstable"
]
]
parsePackageNameOld = PackageName <$> Opts.argument Opts.str (Opts.metavar "OLD")
parsePackageNameNew = PackageName <$> Opts.argument Opts.str (Opts.metavar "NEW")

cmdRename :: PackageName -> PackageName -> NIO ()
cmdRename oldName newName =
modifySources $ \(unSources -> sources) -> do
spec <- case HMS.lookup oldName sources of
Nothing -> abortNoSuchPackage oldName
Just spec -> pure spec

pure $ Sources $ HMS.insert newName spec $ HMS.delete oldName sources

-------------------------------------------------------------------------------
-- MODIFY
-------------------------------------------------------------------------------

parseCmdModify :: Opts.ParserInfo (NIO ())
parseCmdModify =
Opts.info
((cmdModify <$> parsePackageName <*> optName <*> parsePackageSpec githubCmd) <**> Opts.helper)
((cmdModify <$> parsePackageName <*> parsePackageSpec githubCmd) <**> Opts.helper)
$ mconcat desc
where
desc =
Expand All @@ -532,32 +566,16 @@ parseCmdModify =
" niv modify nixpkgs -a branch=nixpkgs-unstable"
]
]
optName =
Opts.optional $
PackageName
<$> Opts.strOption
( Opts.long "name"
<> Opts.short 'n'
<> Opts.metavar "NAME"
<> Opts.help "Set the package name to <NAME>"
)

-- if mNewName is not null, then rename the package (remove original and insert the new one)
cmdModify :: PackageName -> Maybe PackageName -> PackageSpec -> NIO ()
cmdModify packageName mNewName cliSpec =
cmdModify :: PackageName -> PackageSpec -> NIO ()
cmdModify packageName cliSpec =
modifySources $ \(unSources -> sources) -> do
spec <- case HMS.lookup packageName sources of
Nothing -> abortNoSuchPackage packageName
Just spec -> pure spec

let spec' = attrsToSpec (specToLockedAttrs cliSpec <> specToFreeAttrs spec)
case mNewName of
Just newName -> do
when (HMS.member newName sources) $
abortCannotRenamePackageExists packageName newName
pure $ Sources $ HMS.insert newName spec' $ HMS.delete packageName sources
Nothing ->
pure $ Sources $ HMS.insert packageName spec' sources
pure $ Sources $ HMS.insert packageName spec' sources

-------------------------------------------------------------------------------
-- DROP
Expand Down