From 658392e0299ecba9fd5a0bddf17aa62b1204de67 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Mon, 17 Feb 2025 11:36:47 +0100 Subject: [PATCH 1/2] getDefaultNixPath(): Don't add symlinks if the target doesn't exist (cherry picked from commit 8ac49ea5de0b763175af5b266dd258c544192036) --- src/libexpr/eval-settings.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libexpr/eval-settings.cc b/src/libexpr/eval-settings.cc index 2846eccbc..a39f036a1 100644 --- a/src/libexpr/eval-settings.cc +++ b/src/libexpr/eval-settings.cc @@ -57,7 +57,7 @@ Strings EvalSettings::getDefaultNixPath() { Strings res; auto add = [&](const Path & p, const std::string & s = std::string()) { - if (pathAccessible(p)) { + if (std::filesystem::exists(p)) { if (s.empty()) { res.push_back(p); } else { From b7066421339017d19101c7dc6cb11a8811a7909e Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Mon, 17 Feb 2025 11:50:54 +0100 Subject: [PATCH 2/2] resolveLookupPathPath(): Fix caching of negative lookups This avoids spamming in case the missing search path entry does not exist (#12480). (cherry picked from commit df08e1e204d04924bc546ed3ebb2fabf936aa5be) --- src/libexpr/eval.cc | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/libexpr/eval.cc b/src/libexpr/eval.cc index ee72436e4..463f361d3 100644 --- a/src/libexpr/eval.cc +++ b/src/libexpr/eval.cc @@ -3084,8 +3084,11 @@ std::optional EvalState::resolveLookupPathPath(const LookupPath::Pa auto i = lookupPathResolved.find(value); if (i != lookupPathResolved.end()) return i->second; - auto finish = [&](std::string res) { - debug("resolved search path element '%s' to '%s'", value, res); + auto finish = [&](std::optional res) { + if (res) + debug("resolved search path element '%s' to '%s'", value, *res); + else + debug("failed to resolve search path element '%s'", value); lookupPathResolved.emplace(value, res); return res; }; @@ -3137,9 +3140,7 @@ std::optional EvalState::resolveLookupPathPath(const LookupPath::Pa } } - debug("failed to resolve search path element '%s'", value); - return std::nullopt; - + return finish(std::nullopt); }