mirror of
https://github.com/NixOS/nix
synced 2025-06-28 01:11:15 +02:00
Merge pull request #9357 from NixOS/nix-store-add
Add a new `nix store add` command
This commit is contained in:
commit
e34c424279
5 changed files with 68 additions and 51 deletions
|
@ -1,28 +0,0 @@
|
|||
R""(
|
||||
|
||||
# Description
|
||||
|
||||
Copy the regular file *path* to the Nix store, and print the resulting
|
||||
store path on standard output.
|
||||
|
||||
> **Warning**
|
||||
>
|
||||
> The resulting store path is not registered as a garbage
|
||||
> collector root, so it could be deleted before you have a
|
||||
> chance to register it.
|
||||
|
||||
# Examples
|
||||
|
||||
Add a regular file to the store:
|
||||
|
||||
```console
|
||||
# echo foo > bar
|
||||
|
||||
# nix store add-file ./bar
|
||||
/nix/store/cbv2s4bsvzjri77s2gb8g8bpcb6dpa8w-bar
|
||||
|
||||
# cat /nix/store/cbv2s4bsvzjri77s2gb8g8bpcb6dpa8w-bar
|
||||
foo
|
||||
```
|
||||
|
||||
)""
|
|
@ -5,11 +5,22 @@
|
|||
|
||||
using namespace nix;
|
||||
|
||||
static FileIngestionMethod parseIngestionMethod(std::string_view input)
|
||||
{
|
||||
if (input == "flat") {
|
||||
return FileIngestionMethod::Flat;
|
||||
} else if (input == "nar") {
|
||||
return FileIngestionMethod::Recursive;
|
||||
} else {
|
||||
throw UsageError("Unknown hash mode '%s', expect `flat` or `nar`");
|
||||
}
|
||||
}
|
||||
|
||||
struct CmdAddToStore : MixDryRun, StoreCommand
|
||||
{
|
||||
Path path;
|
||||
std::optional<std::string> namePart;
|
||||
FileIngestionMethod ingestionMethod;
|
||||
FileIngestionMethod ingestionMethod = FileIngestionMethod::Recursive;
|
||||
|
||||
CmdAddToStore()
|
||||
{
|
||||
|
@ -23,6 +34,23 @@ struct CmdAddToStore : MixDryRun, StoreCommand
|
|||
.labels = {"name"},
|
||||
.handler = {&namePart},
|
||||
});
|
||||
|
||||
addFlag({
|
||||
.longName = "mode",
|
||||
.shortName = 'n',
|
||||
.description = R"(
|
||||
How to compute the hash of the input.
|
||||
One of:
|
||||
|
||||
- `nar` (the default): Serialises the input as an archive (following the [_Nix Archive Format_](https://edolstra.github.io/pubs/phd-thesis.pdf#page=101)) and passes that to the hash function.
|
||||
|
||||
- `flat`: Assumes that the input is a single file and directly passes it to the hash function;
|
||||
)",
|
||||
.labels = {"hash-mode"},
|
||||
.handler = {[this](std::string s) {
|
||||
this->ingestionMethod = parseIngestionMethod(s);
|
||||
}},
|
||||
});
|
||||
}
|
||||
|
||||
void run(ref<Store> store) override
|
||||
|
@ -62,6 +90,22 @@ struct CmdAddToStore : MixDryRun, StoreCommand
|
|||
}
|
||||
};
|
||||
|
||||
struct CmdAdd : CmdAddToStore
|
||||
{
|
||||
|
||||
std::string description() override
|
||||
{
|
||||
return "Add a file or directory to the Nix store";
|
||||
}
|
||||
|
||||
std::string doc() override
|
||||
{
|
||||
return
|
||||
#include "add.md"
|
||||
;
|
||||
}
|
||||
};
|
||||
|
||||
struct CmdAddFile : CmdAddToStore
|
||||
{
|
||||
CmdAddFile()
|
||||
|
@ -71,36 +115,18 @@ struct CmdAddFile : CmdAddToStore
|
|||
|
||||
std::string description() override
|
||||
{
|
||||
return "add a regular file to the Nix store";
|
||||
}
|
||||
|
||||
std::string doc() override
|
||||
{
|
||||
return
|
||||
#include "add-file.md"
|
||||
;
|
||||
return "Deprecated. Use [`nix store add --mode flat`](@docroot@/command-ref/new-cli/nix3-store-add.md) instead.";
|
||||
}
|
||||
};
|
||||
|
||||
struct CmdAddPath : CmdAddToStore
|
||||
{
|
||||
CmdAddPath()
|
||||
{
|
||||
ingestionMethod = FileIngestionMethod::Recursive;
|
||||
}
|
||||
|
||||
std::string description() override
|
||||
{
|
||||
return "add a path to the Nix store";
|
||||
}
|
||||
|
||||
std::string doc() override
|
||||
{
|
||||
return
|
||||
#include "add-path.md"
|
||||
;
|
||||
return "Deprecated alias to [`nix store add`](@docroot@/command-ref/new-cli/nix3-store-add.md).";
|
||||
}
|
||||
};
|
||||
|
||||
static auto rCmdAddFile = registerCommand2<CmdAddFile>({"store", "add-file"});
|
||||
static auto rCmdAddPath = registerCommand2<CmdAddPath>({"store", "add-path"});
|
||||
static auto rCmdAdd = registerCommand2<CmdAdd>({"store", "add"});
|
||||
|
|
|
@ -19,7 +19,7 @@ Add a directory to the store:
|
|||
# mkdir dir
|
||||
# echo foo > dir/bar
|
||||
|
||||
# nix store add-path ./dir
|
||||
# nix store add ./dir
|
||||
/nix/store/6pmjx56pm94n66n4qw1nff0y1crm8nqg-dir
|
||||
|
||||
# cat /nix/store/6pmjx56pm94n66n4qw1nff0y1crm8nqg-dir/bar
|
Loading…
Add table
Add a link
Reference in a new issue