Skip to content

Commit

Permalink
Merge pull request NixOS#6259 from Artturin/nixbuildaddprintstorepaths
Browse files Browse the repository at this point in the history
nix build: add --print-out-paths flag
  • Loading branch information
thufschmitt authored Apr 22, 2022
2 parents 92de62f + 197aa2f commit 7f814d6
Show file tree
Hide file tree
Showing 4 changed files with 42 additions and 0 deletions.
3 changes: 3 additions & 0 deletions doc/manual/src/release-notes/rl-next.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,3 +6,6 @@
* The path produced by `builtins.toFile` is now allowed to be imported or read
even with restricted evaluation. Note that this will not work with a
read-only store.

* `nix build` has a new `--print-out-paths` flag to print the resulting output paths.
This matches the default behaviour of `nix-build`.
24 changes: 24 additions & 0 deletions src/nix/build.cc
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
#include "shared.hh"
#include "store-api.hh"
#include "local-fs-store.hh"
#include "progress-bar.hh"

#include <nlohmann/json.hpp>

Expand All @@ -12,6 +13,7 @@ using namespace nix;
struct CmdBuild : InstallablesCommand, MixDryRun, MixJSON, MixProfile
{
Path outLink = "result";
bool printOutputPaths = false;
BuildMode buildMode = bmNormal;

CmdBuild()
Expand All @@ -31,6 +33,12 @@ struct CmdBuild : InstallablesCommand, MixDryRun, MixJSON, MixProfile
.handler = {&outLink, Path("")},
});

addFlag({
.longName = "print-out-paths",
.description = "Print the resulting output paths",
.handler = {&printOutputPaths, true},
});

addFlag({
.longName = "rebuild",
.description = "Rebuild an already built package and compare the result to the existing store paths.",
Expand Down Expand Up @@ -93,6 +101,22 @@ struct CmdBuild : InstallablesCommand, MixDryRun, MixJSON, MixProfile
}, buildable.raw());
}

if (printOutputPaths) {
stopProgressBar();
for (auto & buildable : buildables) {
std::visit(overloaded {
[&](const BuiltPath::Opaque & bo) {
std::cout << store->printStorePath(bo.path) << std::endl;
},
[&](const BuiltPath::Built & bfd) {
for (auto & output : bfd.outputs) {
std::cout << store->printStorePath(output.second) << std::endl;
}
},
}, buildable.raw());
}
}

updateProfile(buildables);
}
};
Expand Down
7 changes: 7 additions & 0 deletions src/nix/build.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,13 @@ R""(
lrwxrwxrwx 1 … result-1 -> /nix/store/rkfrm0z6x6jmi7d3gsmma4j53h15mg33-cowsay-3.03+dfsg2
```

* Build GNU Hello and print the resulting store path.

```console
# nix build nixpkgs#hello --print-out-paths
/nix/store/v5sv61sszx301i0x6xysaqzla09nksnd-hello-2.10
```

* Build a specific output:

```console
Expand Down
8 changes: 8 additions & 0 deletions tests/build-remote.sh
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,14 @@ outPath=$(readlink -f $TEST_ROOT/result)

grep 'FOO BAR BAZ' $TEST_ROOT/machine0/$outPath

testPrintOutPath=$(nix build -L -v -f $file --print-out-paths --max-jobs 0 \
--arg busybox $busybox \
--store $TEST_ROOT/machine0 \
--builders "$(join_by '; ' "${builders[@]}")"
)

[[ $testPrintOutPath =~ store.*build-remote ]]

set -o pipefail

# Ensure that input1 was built on store1 due to the required feature.
Expand Down

0 comments on commit 7f814d6

Please sign in to comment.