From bd628cf3da14b7d3fe0ba00932eb26d545b4b893 Mon Sep 17 00:00:00 2001 From: Yorick van Pelt Date: Mon, 22 Nov 2021 13:29:49 +0100 Subject: [PATCH 1/2] flakes: fix boolean and int nixConfig values Some type confusion was causing ints to be pointers, and bools to be ints. Fixes #5621 --- src/libexpr/flake/config.cc | 8 ++++---- src/libexpr/flake/flake.cc | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/libexpr/flake/config.cc b/src/libexpr/flake/config.cc index c03f4106c..7ecd61816 100644 --- a/src/libexpr/flake/config.cc +++ b/src/libexpr/flake/config.cc @@ -38,11 +38,11 @@ void ConfigFile::apply() // FIXME: Move into libutil/config.cc. std::string valueS; - if (auto s = std::get_if(&value)) + if (auto* s = std::get_if(&value)) valueS = *s; - else if (auto n = std::get_if(&value)) - valueS = fmt("%d", n); - else if (auto b = std::get_if>(&value)) + else if (auto* n = std::get_if(&value)) + valueS = fmt("%d", *n); + else if (auto* b = std::get_if>(&value)) valueS = b->t ? "true" : "false"; else if (auto ss = std::get_if>(&value)) valueS = concatStringsSep(" ", *ss); // FIXME: evil diff --git a/src/libexpr/flake/flake.cc b/src/libexpr/flake/flake.cc index f5be67d67..732198031 100644 --- a/src/libexpr/flake/flake.cc +++ b/src/libexpr/flake/flake.cc @@ -254,7 +254,7 @@ static Flake getFlake( else if (setting.value->type() == nInt) flake.config.settings.insert({setting.name, state.forceInt(*setting.value, *setting.pos)}); else if (setting.value->type() == nBool) - flake.config.settings.insert({setting.name, state.forceBool(*setting.value, *setting.pos)}); + flake.config.settings.insert({setting.name, Explicit { state.forceBool(*setting.value, *setting.pos) }}); else if (setting.value->type() == nList) { std::vector ss; for (unsigned int n = 0; n < setting.value->listSize(); ++n) { From bb8a53ab08c43425c6073aff5fe34bd5bc93dd13 Mon Sep 17 00:00:00 2001 From: regnat Date: Tue, 14 Dec 2021 09:15:24 +0100 Subject: [PATCH 2/2] Add a test for boolean config options in flakes --- tests/flake-local-settings.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/flake-local-settings.sh b/tests/flake-local-settings.sh index 09f6b4ca8..98ad60174 100644 --- a/tests/flake-local-settings.sh +++ b/tests/flake-local-settings.sh @@ -18,6 +18,7 @@ chmod +x echoing-post-hook.sh cat < flake.nix { nixConfig.post-build-hook = "$PWD/echoing-post-hook.sh"; + nixConfig.allow-dirty = false; # See #5621 outputs = a: { defaultPackage.$system = import ./simple.nix;