aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthew Bauer <mjbauer95@gmail.com>2020-07-30 15:37:05 -0500
committerMatthew Bauer <mjbauer95@gmail.com>2020-07-30 15:37:05 -0500
commitfa2d1fb36e2ee92622379b9716f5b06e73aae72e (patch)
treecbb971f4301b53b7e16a75bf9cba0048b2594462
parent22fcfdf18af84bbbbc1bd416a9eed37a64e26eb5 (diff)
Pass system to bundler
-rw-r--r--src/nix/bundle.cc10
-rw-r--r--src/nix/flake.cc21
2 files changed, 14 insertions, 17 deletions
diff --git a/src/nix/bundle.cc b/src/nix/bundle.cc
index 95aed5269..f2b78eea5 100644
--- a/src/nix/bundle.cc
+++ b/src/nix/bundle.cc
@@ -75,17 +75,21 @@ struct CmdBundle : InstallableCommand
const flake::LockFlags lockFlags{ .writeLockFile = false };
auto bundler = InstallableFlake(
evalState, std::move(bundlerFlakeRef),
- Strings{bundlerName == "" ? ("defaultBundler." + settings.thisSystem.get()) : bundlerName},
- Strings({"bundlers." + settings.thisSystem.get() + "."}), lockFlags);
+ Strings{bundlerName == "" ? "defaultBundler" : bundlerName},
+ Strings({"bundlers."}), lockFlags);
Value * arg = evalState->allocValue();
- evalState->mkAttrs(*arg, 1);
+ evalState->mkAttrs(*arg, 2);
PathSet context;
for (auto & i : app.context)
context.insert("=" + store->printStorePath(i.path));
mkString(*evalState->allocAttr(*arg, evalState->symbols.create("program")), app.program, context);
+ mkString(*evalState->allocAttr(*arg, evalState->symbols.create("system")), settings.thisSystem.get());
+
+ arg->attrs->sort();
+
auto vRes = evalState->allocValue();
evalState->callFunction(*bundler.toValue(*evalState).first, *arg, *vRes, noPos);
diff --git a/src/nix/flake.cc b/src/nix/flake.cc
index 1190d7997..80d8654bc 100644
--- a/src/nix/flake.cc
+++ b/src/nix/flake.cc
@@ -374,8 +374,9 @@ struct CmdFlakeCheck : FlakeCommand
if (v.type != tLambda)
throw Error("bundler must be a function");
if (!v.lambda.fun->formals ||
- v.lambda.fun->formals->argNames.find(state->symbols.create("program")) == v.lambda.fun->formals->argNames.end())
- throw Error("bundler must take formal argument 'program'");
+ v.lambda.fun->formals->argNames.find(state->symbols.create("program")) == v.lambda.fun->formals->argNames.end() ||
+ v.lambda.fun->formals->argNames.find(state->symbols.create("system")) == v.lambda.fun->formals->argNames.end())
+ throw Error("bundler must take formal arguments 'program' and 'system'");
} catch (Error & e) {
e.addTrace(pos, hintfmt("while checking the template '%s'", attrPath));
throw;
@@ -505,21 +506,13 @@ struct CmdFlakeCheck : FlakeCommand
}
else if (name == "defaultBundler")
- for (auto & attr : *vOutput.attrs) {
- checkSystemName(attr.name, *attr.pos);
- checkBundler(fmt("%s.%s", name, attr.name), *attr.value, *attr.pos);
- }
+ checkBundler(name, vOutput, pos);
else if (name == "bundlers") {
state->forceAttrs(vOutput, pos);
- for (auto & attr : *vOutput.attrs) {
- checkSystemName(attr.name, *attr.pos);
- state->forceAttrs(*attr.value, *attr.pos);
- for (auto & attr2 : *attr.value->attrs)
- checkBundler(
- fmt("%s.%s.%s", name, attr.name, attr2.name),
- *attr2.value, *attr2.pos);
- }
+ for (auto & attr : *vOutput.attrs)
+ checkBundler(fmt("%s.%s", name, attr.name),
+ *attr.value, *attr.pos);
}
else