From a5c969db496843b9a42b3aee494a02714ee9ca78 Mon Sep 17 00:00:00 2001 From: Artturin Date: Wed, 16 Mar 2022 20:48:50 +0200 Subject: [PATCH 1/2] nix: allow using --file - to read from stdin --- doc/manual/src/release-notes/rl-next.md | 2 ++ src/libcmd/installables.cc | 9 +++++++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/doc/manual/src/release-notes/rl-next.md b/doc/manual/src/release-notes/rl-next.md index c869b5e2f..c9753f9aa 100644 --- a/doc/manual/src/release-notes/rl-next.md +++ b/doc/manual/src/release-notes/rl-next.md @@ -1 +1,3 @@ # Release X.Y (202?-??-??) + +* Various nix commands can now read expressions from stdin with `--file -`. diff --git a/src/libcmd/installables.cc b/src/libcmd/installables.cc index b7623d4ba..784117569 100644 --- a/src/libcmd/installables.cc +++ b/src/libcmd/installables.cc @@ -134,7 +134,9 @@ SourceExprCommand::SourceExprCommand() addFlag({ .longName = "file", .shortName = 'f', - .description = "Interpret installables as attribute paths relative to the Nix expression stored in *file*.", + .description = + "Interpret installables as attribute paths relative to the Nix expression stored in *file*. " + "If *file* is the character -, then a Nix expression will be read from standard input.", .category = installablesCategory, .labels = {"file"}, .handler = {&file}, @@ -695,7 +697,10 @@ std::vector> SourceExprCommand::parseInstallables( auto state = getEvalState(); auto vFile = state->allocValue(); - if (file) + if (file == "-") { + auto e = state->parseStdin(); + state->eval(e, *vFile); + } else if (file) state->evalFile(lookupFileArg(*state, *file), *vFile); else { auto e = state->parseExprFromString(*expr, absPath(".")); From 4f8ad41d4eb2012f01cd09ad745e78c5b8d8bee6 Mon Sep 17 00:00:00 2001 From: Artturin Date: Wed, 16 Mar 2022 20:57:18 +0200 Subject: [PATCH 2/2] add tests for nix eval and nix-instantiate --- tests/eval.nix | 5 +++++ tests/eval.sh | 29 +++++++++++++++++++++++++++++ tests/local.mk | 1 + 3 files changed, 35 insertions(+) create mode 100644 tests/eval.nix create mode 100644 tests/eval.sh diff --git a/tests/eval.nix b/tests/eval.nix new file mode 100644 index 000000000..befbd17a9 --- /dev/null +++ b/tests/eval.nix @@ -0,0 +1,5 @@ +{ + int = 123; + str = "foo"; + attr.foo = "bar"; +} diff --git a/tests/eval.sh b/tests/eval.sh new file mode 100644 index 000000000..2e5ceb969 --- /dev/null +++ b/tests/eval.sh @@ -0,0 +1,29 @@ +source common.sh + +clearStore + +testStdinHeredoc=$(nix eval -f - <