aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorregnat <rg@regnat.ovh>2021-11-05 16:17:49 +0100
committerregnat <rg@regnat.ovh>2021-11-05 16:19:16 +0100
commit1f3c3a3785b21fe349480b562d5f97b8cc9caa6d (patch)
tree67693e9b7a0df3321e6942af7f14dac7c1e59ef1
parent7d6017b7a911dd5b8a7ccb5bc1bf9282140de20c (diff)
Make the flake options work when using the daemon
When setting flake-local options (with the `nixConfig` field), forward these options to the daemon in case we’re using one. This is necessary in particular for options like `binary-caches` or `post-build-hook` to make sense. Fix <https://github.com/NixOS/nix/commit/343239fc8a1993f707a990c2cd54a41f1fa3de99#r44356843>
-rw-r--r--src/libexpr/flake/flake.cc2
-rw-r--r--src/libstore/remote-store.cc4
-rw-r--r--src/libstore/remote-store.hh2
-rw-r--r--src/libstore/store-api.hh5
-rw-r--r--tests/flake-local-settings.sh35
-rw-r--r--tests/local.mk1
6 files changed, 48 insertions, 1 deletions
diff --git a/src/libexpr/flake/flake.cc b/src/libexpr/flake/flake.cc
index c9d848495..07ed3caa2 100644
--- a/src/libexpr/flake/flake.cc
+++ b/src/libexpr/flake/flake.cc
@@ -307,7 +307,7 @@ LockedFlake lockFlake(
if (lockFlags.applyNixConfig) {
flake.config.apply();
- // FIXME: send new config to the daemon.
+ state.store->setOptions();
}
try {
diff --git a/src/libstore/remote-store.cc b/src/libstore/remote-store.cc
index 7decc059c..274203f8d 100644
--- a/src/libstore/remote-store.cc
+++ b/src/libstore/remote-store.cc
@@ -290,6 +290,10 @@ ConnectionHandle RemoteStore::getConnection()
return ConnectionHandle(connections->get());
}
+void RemoteStore::setOptions()
+{
+ setOptions(*(getConnection().handle));
+}
bool RemoteStore::isValidPathUncached(const StorePath & path)
{
diff --git a/src/libstore/remote-store.hh b/src/libstore/remote-store.hh
index a3036e6b0..5f6da9af5 100644
--- a/src/libstore/remote-store.hh
+++ b/src/libstore/remote-store.hh
@@ -147,6 +147,8 @@ protected:
virtual void setOptions(Connection & conn);
+ void setOptions() override;
+
ConnectionHandle getConnection();
friend struct ConnectionHandle;
diff --git a/src/libstore/store-api.hh b/src/libstore/store-api.hh
index 7d02340df..8472e726a 100644
--- a/src/libstore/store-api.hh
+++ b/src/libstore/store-api.hh
@@ -724,6 +724,11 @@ public:
virtual void createUser(const std::string & userName, uid_t userId)
{ }
+ /*
+ * Synchronises the options of the client with those of the daemon
+ * (a no-op when there’s no daemon)
+ */
+ virtual void setOptions() { }
protected:
Stats stats;
diff --git a/tests/flake-local-settings.sh b/tests/flake-local-settings.sh
new file mode 100644
index 000000000..c037431c8
--- /dev/null
+++ b/tests/flake-local-settings.sh
@@ -0,0 +1,35 @@
+source common.sh
+
+clearStore
+rm -rf $TEST_HOME/.cache $TEST_HOME/.config $TEST_HOME/.local
+
+cp ./simple.nix ./simple.builder.sh ./config.nix $TEST_HOME
+
+cd $TEST_HOME
+
+rm -f post-hook-ran
+cat <<EOF > echoing-post-hook.sh
+#!/bin/sh
+
+echo "ThePostHookRan" > $PWD/post-hook-ran
+EOF
+chmod +x echoing-post-hook.sh
+
+cat <<EOF > flake.nix
+{
+ nixConfig.post-build-hook = "$PWD/echoing-post-hook.sh";
+
+ outputs = a: {
+ defaultPackage.$system = import ./simple.nix;
+ };
+}
+EOF
+
+# Ugly hack for testing
+mkdir -p .local/share/nix
+cat <<EOF > .local/share/nix/trusted-settings.json
+{"post-build-hook":{"$PWD/echoing-post-hook.sh":true}}
+EOF
+
+nix build
+test -f post-hook-ran || fail "The post hook should have ran"
diff --git a/tests/local.mk b/tests/local.mk
index 8d454ee19..4c53f09f2 100644
--- a/tests/local.mk
+++ b/tests/local.mk
@@ -46,6 +46,7 @@ nix_tests = \
recursive.sh \
describe-stores.sh \
flakes.sh \
+ flake-local-settings.sh \
build.sh \
compute-levels.sh \
repl.sh \