mirror of
https://github.com/NixOS/nix
synced 2025-06-25 06:31:14 +02:00
Merge pull request #12119 from not-my-profile/nix-instantiate-raw
Implement --raw for nix-instantiate --eval
This commit is contained in:
commit
18f077035a
6 changed files with 28 additions and 8 deletions
8
doc/manual/rl-next/nix-instantiate-raw.md
Normal file
8
doc/manual/rl-next/nix-instantiate-raw.md
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
---
|
||||||
|
synopsis: "`nix-instantiate --eval` now supports `--raw`"
|
||||||
|
prs: [12119]
|
||||||
|
---
|
||||||
|
|
||||||
|
The `nix-instantiate --eval` command now supports a `--raw` flag, when used
|
||||||
|
the evaluation result must be a string, which is printed verbatim without
|
||||||
|
quotation marks or escaping.
|
|
@ -84,7 +84,7 @@ When using public key authentication, you can avoid typing the passphrase with `
|
||||||
> Copy GNU Hello from a remote machine using a known store path, and run it:
|
> Copy GNU Hello from a remote machine using a known store path, and run it:
|
||||||
>
|
>
|
||||||
> ```shell-session
|
> ```shell-session
|
||||||
> $ storePath="$(nix-instantiate --eval '<nixpkgs>' -I nixpkgs=channel:nixpkgs-unstable -A hello.outPath | tr -d '"')"
|
> $ storePath="$(nix-instantiate --eval --raw '<nixpkgs>' -I nixpkgs=channel:nixpkgs-unstable -A hello.outPath)"
|
||||||
> $ nix-copy-closure --from alice@itchy.example.org "$storePath"
|
> $ nix-copy-closure --from alice@itchy.example.org "$storePath"
|
||||||
> $ "$storePath"/bin/hello
|
> $ "$storePath"/bin/hello
|
||||||
> Hello, world!
|
> Hello, world!
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
# Synopsis
|
# Synopsis
|
||||||
|
|
||||||
`nix-instantiate`
|
`nix-instantiate`
|
||||||
[`--parse` | `--eval` [`--strict`] [`--json`] [`--xml`] ]
|
[`--parse` | `--eval` [`--strict`] [`--raw` | `--json` | `--xml`] ]
|
||||||
[`--read-write-mode`]
|
[`--read-write-mode`]
|
||||||
[`--arg` *name* *value*]
|
[`--arg` *name* *value*]
|
||||||
[{`--attr`| `-A`} *attrPath*]
|
[{`--attr`| `-A`} *attrPath*]
|
||||||
|
@ -102,6 +102,11 @@ standard input.
|
||||||
> This option can cause non-termination, because lazy data
|
> This option can cause non-termination, because lazy data
|
||||||
> structures can be infinitely large.
|
> structures can be infinitely large.
|
||||||
|
|
||||||
|
- `--raw`
|
||||||
|
|
||||||
|
When used with `--eval`, the evaluation result must be a string,
|
||||||
|
which is printed verbatim, without quoting, escaping or trailing newline.
|
||||||
|
|
||||||
- `--json`
|
- `--json`
|
||||||
|
|
||||||
When used with `--eval`, print the resulting value as an JSON
|
When used with `--eval`, print the resulting value as an JSON
|
||||||
|
|
|
@ -24,7 +24,7 @@ static Path gcRoot;
|
||||||
static int rootNr = 0;
|
static int rootNr = 0;
|
||||||
|
|
||||||
|
|
||||||
enum OutputKind { okPlain, okXML, okJSON };
|
enum OutputKind { okPlain, okRaw, okXML, okJSON };
|
||||||
|
|
||||||
void processExpr(EvalState & state, const Strings & attrPaths,
|
void processExpr(EvalState & state, const Strings & attrPaths,
|
||||||
bool parseOnly, bool strict, Bindings & autoArgs,
|
bool parseOnly, bool strict, Bindings & autoArgs,
|
||||||
|
@ -50,7 +50,11 @@ void processExpr(EvalState & state, const Strings & attrPaths,
|
||||||
vRes = v;
|
vRes = v;
|
||||||
else
|
else
|
||||||
state.autoCallFunction(autoArgs, v, vRes);
|
state.autoCallFunction(autoArgs, v, vRes);
|
||||||
if (output == okXML)
|
if (output == okRaw)
|
||||||
|
std::cout << *state.coerceToString(noPos, vRes, context, "while generating the nix-instantiate output");
|
||||||
|
// We intentionally don't output a newline here. The default PS1 for Bash in NixOS starts with a newline
|
||||||
|
// and other interactive shells like Zsh are smart enough to print a missing newline before the prompt.
|
||||||
|
else if (output == okXML)
|
||||||
printValueAsXML(state, strict, location, vRes, std::cout, context, noPos);
|
printValueAsXML(state, strict, location, vRes, std::cout, context, noPos);
|
||||||
else if (output == okJSON) {
|
else if (output == okJSON) {
|
||||||
printValueAsJSON(state, strict, vRes, v.determinePos(noPos), std::cout, context);
|
printValueAsJSON(state, strict, vRes, v.determinePos(noPos), std::cout, context);
|
||||||
|
@ -132,6 +136,8 @@ static int main_nix_instantiate(int argc, char * * argv)
|
||||||
gcRoot = getArg(*arg, arg, end);
|
gcRoot = getArg(*arg, arg, end);
|
||||||
else if (*arg == "--indirect")
|
else if (*arg == "--indirect")
|
||||||
;
|
;
|
||||||
|
else if (*arg == "--raw")
|
||||||
|
outputKind = okRaw;
|
||||||
else if (*arg == "--xml")
|
else if (*arg == "--xml")
|
||||||
outputKind = okXML;
|
outputKind = okXML;
|
||||||
else if (*arg == "--json")
|
else if (*arg == "--json")
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
int = 123;
|
int = 123;
|
||||||
str = "foo";
|
str = "foo\nbar";
|
||||||
attr.foo = "bar";
|
attr.foo = "bar";
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,8 +16,8 @@ EOF
|
||||||
nix eval --expr 'assert 1 + 2 == 3; true'
|
nix eval --expr 'assert 1 + 2 == 3; true'
|
||||||
|
|
||||||
[[ $(nix eval int -f "./eval.nix") == 123 ]]
|
[[ $(nix eval int -f "./eval.nix") == 123 ]]
|
||||||
[[ $(nix eval str -f "./eval.nix") == '"foo"' ]]
|
[[ $(nix eval str -f "./eval.nix") == '"foo\nbar"' ]]
|
||||||
[[ $(nix eval str --raw -f "./eval.nix") == 'foo' ]]
|
[[ $(nix eval str --raw -f "./eval.nix") == $'foo\nbar' ]]
|
||||||
[[ "$(nix eval attr -f "./eval.nix")" == '{ foo = "bar"; }' ]]
|
[[ "$(nix eval attr -f "./eval.nix")" == '{ foo = "bar"; }' ]]
|
||||||
[[ $(nix eval attr --json -f "./eval.nix") == '{"foo":"bar"}' ]]
|
[[ $(nix eval attr --json -f "./eval.nix") == '{"foo":"bar"}' ]]
|
||||||
[[ $(nix eval int -f - < "./eval.nix") == 123 ]]
|
[[ $(nix eval int -f - < "./eval.nix") == 123 ]]
|
||||||
|
@ -28,7 +28,8 @@ nix eval --expr 'assert 1 + 2 == 3; true'
|
||||||
|
|
||||||
nix-instantiate --eval -E 'assert 1 + 2 == 3; true'
|
nix-instantiate --eval -E 'assert 1 + 2 == 3; true'
|
||||||
[[ $(nix-instantiate -A int --eval "./eval.nix") == 123 ]]
|
[[ $(nix-instantiate -A int --eval "./eval.nix") == 123 ]]
|
||||||
[[ $(nix-instantiate -A str --eval "./eval.nix") == '"foo"' ]]
|
[[ $(nix-instantiate -A str --eval "./eval.nix") == '"foo\nbar"' ]]
|
||||||
|
[[ $(nix-instantiate -A str --raw --eval "./eval.nix") == $'foo\nbar' ]]
|
||||||
[[ "$(nix-instantiate -A attr --eval "./eval.nix")" == '{ foo = "bar"; }' ]]
|
[[ "$(nix-instantiate -A attr --eval "./eval.nix")" == '{ foo = "bar"; }' ]]
|
||||||
[[ $(nix-instantiate -A attr --eval --json "./eval.nix") == '{"foo":"bar"}' ]]
|
[[ $(nix-instantiate -A attr --eval --json "./eval.nix") == '{"foo":"bar"}' ]]
|
||||||
[[ $(nix-instantiate -A int --eval - < "./eval.nix") == 123 ]]
|
[[ $(nix-instantiate -A int --eval - < "./eval.nix") == 123 ]]
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue