mirror of
https://github.com/privatevoid-net/nix-super.git
synced 2024-11-22 14:06:16 +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
|
@ -73,3 +73,5 @@
|
||||||
[`XDG_DATA_DIRS`](https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html#variables) is now populated with the path to the `/share` subdirectory of the current profile.
|
[`XDG_DATA_DIRS`](https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html#variables) is now populated with the path to the `/share` subdirectory of the current profile.
|
||||||
This means that command completion scripts, `.desktop` files, and similar artifacts installed via [`nix-env`](@docroot@/command-ref/nix-env.md) or [`nix profile`](@docroot@/command-ref/new-cli/nix3-profile.md)
|
This means that command completion scripts, `.desktop` files, and similar artifacts installed via [`nix-env`](@docroot@/command-ref/nix-env.md) or [`nix profile`](@docroot@/command-ref/new-cli/nix3-profile.md)
|
||||||
(experimental) can be found by any program that follows the [XDG Base Directory Specification](https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html).
|
(experimental) can be found by any program that follows the [XDG Base Directory Specification](https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html).
|
||||||
|
|
||||||
|
- A new command `nix store add` has been added. It replaces `nix store add-file` and `nix store add-path` which are now deprecated.
|
||||||
|
|
|
@ -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;
|
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
|
struct CmdAddToStore : MixDryRun, StoreCommand
|
||||||
{
|
{
|
||||||
Path path;
|
Path path;
|
||||||
std::optional<std::string> namePart;
|
std::optional<std::string> namePart;
|
||||||
FileIngestionMethod ingestionMethod;
|
FileIngestionMethod ingestionMethod = FileIngestionMethod::Recursive;
|
||||||
|
|
||||||
CmdAddToStore()
|
CmdAddToStore()
|
||||||
{
|
{
|
||||||
|
@ -23,6 +34,23 @@ struct CmdAddToStore : MixDryRun, StoreCommand
|
||||||
.labels = {"name"},
|
.labels = {"name"},
|
||||||
.handler = {&namePart},
|
.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
|
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
|
struct CmdAddFile : CmdAddToStore
|
||||||
{
|
{
|
||||||
CmdAddFile()
|
CmdAddFile()
|
||||||
|
@ -71,36 +115,18 @@ struct CmdAddFile : CmdAddToStore
|
||||||
|
|
||||||
std::string description() override
|
std::string description() override
|
||||||
{
|
{
|
||||||
return "add a regular file to the Nix store";
|
return "Deprecated. Use [`nix store add --mode flat`](@docroot@/command-ref/new-cli/nix3-store-add.md) instead.";
|
||||||
}
|
|
||||||
|
|
||||||
std::string doc() override
|
|
||||||
{
|
|
||||||
return
|
|
||||||
#include "add-file.md"
|
|
||||||
;
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
struct CmdAddPath : CmdAddToStore
|
struct CmdAddPath : CmdAddToStore
|
||||||
{
|
{
|
||||||
CmdAddPath()
|
|
||||||
{
|
|
||||||
ingestionMethod = FileIngestionMethod::Recursive;
|
|
||||||
}
|
|
||||||
|
|
||||||
std::string description() override
|
std::string description() override
|
||||||
{
|
{
|
||||||
return "add a path to the Nix store";
|
return "Deprecated alias to [`nix store add`](@docroot@/command-ref/new-cli/nix3-store-add.md).";
|
||||||
}
|
|
||||||
|
|
||||||
std::string doc() override
|
|
||||||
{
|
|
||||||
return
|
|
||||||
#include "add-path.md"
|
|
||||||
;
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
static auto rCmdAddFile = registerCommand2<CmdAddFile>({"store", "add-file"});
|
static auto rCmdAddFile = registerCommand2<CmdAddFile>({"store", "add-file"});
|
||||||
static auto rCmdAddPath = registerCommand2<CmdAddPath>({"store", "add-path"});
|
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
|
# mkdir dir
|
||||||
# echo foo > dir/bar
|
# echo foo > dir/bar
|
||||||
|
|
||||||
# nix store add-path ./dir
|
# nix store add ./dir
|
||||||
/nix/store/6pmjx56pm94n66n4qw1nff0y1crm8nqg-dir
|
/nix/store/6pmjx56pm94n66n4qw1nff0y1crm8nqg-dir
|
||||||
|
|
||||||
# cat /nix/store/6pmjx56pm94n66n4qw1nff0y1crm8nqg-dir/bar
|
# cat /nix/store/6pmjx56pm94n66n4qw1nff0y1crm8nqg-dir/bar
|
|
@ -26,3 +26,20 @@ hash2=$(nix-hash --type sha256 --base32 ./dummy)
|
||||||
echo $hash2
|
echo $hash2
|
||||||
|
|
||||||
test "$hash1" = "sha256:$hash2"
|
test "$hash1" = "sha256:$hash2"
|
||||||
|
|
||||||
|
#### New style commands
|
||||||
|
|
||||||
|
clearStore
|
||||||
|
|
||||||
|
(
|
||||||
|
path1=$(nix store add ./dummy)
|
||||||
|
path2=$(nix store add --mode nar ./dummy)
|
||||||
|
path3=$(nix store add-path ./dummy)
|
||||||
|
[[ "$path1" == "$path2" ]]
|
||||||
|
[[ "$path1" == "$path3" ]]
|
||||||
|
)
|
||||||
|
(
|
||||||
|
path1=$(nix store add --mode flat ./dummy)
|
||||||
|
path2=$(nix store add-file ./dummy)
|
||||||
|
[[ "$path1" == "$path2" ]]
|
||||||
|
)
|
||||||
|
|
Loading…
Reference in a new issue