aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMax <max@privatevoid.net>2022-09-01 22:02:38 +0200
committerMax <max@privatevoid.net>2022-09-01 22:04:22 +0200
commit02bff90e7bbc04244b3d566d82c945156cb0885b (patch)
tree54ef8d894dfc804ee580dbac46e14fa9c9728257
parent4823067247471aebdc24dceb21e13ee3d5411cb8 (diff)
nix flake show: don't evaluate derivations for foreign systems by default
-rw-r--r--src/nix/flake.cc23
1 files changed, 19 insertions, 4 deletions
diff --git a/src/nix/flake.cc b/src/nix/flake.cc
index 3967f1102..5232534c6 100644
--- a/src/nix/flake.cc
+++ b/src/nix/flake.cc
@@ -957,6 +957,7 @@ struct CmdFlakeArchive : FlakeCommand, MixJSON, MixDryRun
struct CmdFlakeShow : FlakeCommand, MixJSON
{
bool showLegacy = false;
+ bool showForeign = false;
CmdFlakeShow()
{
@@ -965,6 +966,11 @@ struct CmdFlakeShow : FlakeCommand, MixJSON
.description = "Show the contents of the `legacyPackages` output.",
.handler = {&showLegacy, true}
});
+ addFlag({
+ .longName = "foreign",
+ .description = "Show the contents of outputs for foreign systems.",
+ .handler = {&showForeign, true}
+ });
}
std::string description() override
@@ -985,6 +991,7 @@ struct CmdFlakeShow : FlakeCommand, MixJSON
auto state = getEvalState();
auto flake = std::make_shared<LockedFlake>(lockFlake());
+ auto localSystem = std::string(settings.thisSystem.get());
std::function<nlohmann::json(
eval_cache::AttrCursor & visitor,
@@ -1075,10 +1082,18 @@ struct CmdFlakeShow : FlakeCommand, MixJSON
|| (attrPath.size() == 3 && (attrPathS[0] == "checks" || attrPathS[0] == "packages" || attrPathS[0] == "devShells"))
)
{
- if (visitor.isDerivation())
- showDerivation();
- else
- throw Error("expected a derivation");
+ if (!showForeign && std::string(attrPathS[1]) != localSystem) {
+ if (!json)
+ logger->cout(fmt("%s " ANSI_WARNING "omitted" ANSI_NORMAL " (use '--foreign' to show)", headerPrefix));
+ else {
+ logger->warn(fmt("%s omitted (use '--foreign' to show)", concatStringsSep(".", attrPathS)));
+ }
+ } else {
+ if (visitor.isDerivation())
+ showDerivation();
+ else
+ throw Error("expected a derivation");
+ }
}
else if (attrPath.size() > 0 && attrPathS[0] == "hydraJobs") {