aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorEelco Dolstra <edolstra@gmail.com>2023-02-28 08:46:55 +0100
committerGitHub <noreply@github.com>2023-02-28 08:46:55 +0100
commit3d15dbadc243d63b600ac221f2769f6c20a10d43 (patch)
treee5b34ec3e939336df278df73feaafc3f143f70bd /src
parent85a68a558046f8126565a74e2023967b914d416c (diff)
parentdd93c12c6a3ebf5b52fe7045d708ed10f6acd0dd (diff)
Merge pull request #7911 from edolstra/revert-7689
Revert #7689
Diffstat (limited to 'src')
-rw-r--r--src/libexpr/eval.cc36
-rw-r--r--src/libexpr/eval.hh13
2 files changed, 18 insertions, 31 deletions
diff --git a/src/libexpr/eval.cc b/src/libexpr/eval.cc
index 3e37c7f60..21fc4d0fe 100644
--- a/src/libexpr/eval.cc
+++ b/src/libexpr/eval.cc
@@ -519,7 +519,6 @@ EvalState::EvalState(
static_assert(sizeof(Env) <= 16, "environment must be <= 16 bytes");
/* Initialise the Nix expression search path. */
- evalSettings.nixPath.setDefault(evalSettings.getDefaultNixPath());
if (!evalSettings.pureEval) {
for (auto & i : _searchPath) addToSearchPath(i);
for (auto & i : evalSettings.nixPath.get()) addToSearchPath(i);
@@ -2473,35 +2472,30 @@ std::ostream & operator << (std::ostream & str, const ExternalValueBase & v) {
EvalSettings::EvalSettings()
{
+ auto var = getEnv("NIX_PATH");
+ if (var) nixPath = parseNixPath(*var);
}
-/* impure => NIX_PATH or a default path
- * restrict-eval => NIX_PATH
- * pure-eval => empty
- */
Strings EvalSettings::getDefaultNixPath()
{
- if (pureEval)
- return {};
-
- auto var = getEnv("NIX_PATH");
- if (var) {
- return parseNixPath(*var);
- } else if (restrictEval) {
- return {};
- } else {
- Strings res;
- auto add = [&](const Path & p, const std::optional<std::string> & s = std::nullopt) {
- if (pathExists(p))
- res.push_back(s ? *s + "=" + p : p);
- };
+ Strings res;
+ auto add = [&](const Path & p, const std::string & s = std::string()) {
+ if (pathExists(p)) {
+ if (s.empty()) {
+ res.push_back(p);
+ } else {
+ res.push_back(s + "=" + p);
+ }
+ }
+ };
+ if (!evalSettings.restrictEval && !evalSettings.pureEval) {
add(settings.useXDGBaseDirectories ? getStateDir() + "/nix/defexpr/channels" : getHome() + "/.nix-defexpr/channels");
add(settings.nixStateDir + "/profiles/per-user/root/channels/nixpkgs", "nixpkgs");
add(settings.nixStateDir + "/profiles/per-user/root/channels");
-
- return res;
}
+
+ return res;
}
bool EvalSettings::isPseudoUrl(std::string_view s)
diff --git a/src/libexpr/eval.hh b/src/libexpr/eval.hh
index 2340ef67b..e4d5906bd 100644
--- a/src/libexpr/eval.hh
+++ b/src/libexpr/eval.hh
@@ -570,7 +570,7 @@ struct EvalSettings : Config
{
EvalSettings();
- Strings getDefaultNixPath();
+ static Strings getDefaultNixPath();
static bool isPseudoUrl(std::string_view s);
@@ -580,15 +580,8 @@ struct EvalSettings : Config
"Whether builtin functions that allow executing native code should be enabled."};
Setting<Strings> nixPath{
- this, {}, "nix-path",
- R"(
- List of directories to be searched for `<...>` file references.
-
- If [pure evaluation](#conf-pure-eval) is disabled,
- this is initialised using the [`NIX_PATH`](@docroot@/command-ref/env-common.md#env-NIX_PATH)
- environment variable, or, if it is unset and [restricted evaluation](#conf-restrict-eval)
- is disabled, a default search path including the user's and `root`'s channels.
- )"};
+ this, getDefaultNixPath(), "nix-path",
+ "List of directories to be searched for `<...>` file references."};
Setting<bool> restrictEval{
this, false, "restrict-eval",