aboutsummaryrefslogtreecommitdiff
path: root/src/libexpr/eval.cc
diff options
context:
space:
mode:
authorEelco Dolstra <eelco.dolstra@logicblox.com>2015-06-17 16:20:11 +0200
committerEelco Dolstra <eelco.dolstra@logicblox.com>2015-06-17 16:20:11 +0200
commit65f17cd3309e192dcf0d61d3d946a3610420a9d4 (patch)
tree097a00551e14e44cf6715bcd75996992785d311f /src/libexpr/eval.cc
parent0d4d92fcf92030dbaad0f5251232657be218cc5d (diff)
Support URLs in $NIX_PATH
This didn't work (despite claims in the manual), because the colon in "http://" was parsed as a element separator. So handle "://" specially.
Diffstat (limited to 'src/libexpr/eval.cc')
-rw-r--r--src/libexpr/eval.cc14
1 files changed, 13 insertions, 1 deletions
diff --git a/src/libexpr/eval.cc b/src/libexpr/eval.cc
index 88cf9f453..d61ee7e80 100644
--- a/src/libexpr/eval.cc
+++ b/src/libexpr/eval.cc
@@ -234,6 +234,18 @@ void initGC()
}
+/* Very hacky way to parse $NIX_PATH, which is colon-separated, but
+ can contain URLs (e.g. "nixpkgs=https://bla...:foo=https://"). */
+static Strings parseNixPath(const string & in)
+{
+ string marker = "\001//";
+ auto res = tokenizeString<Strings>(replaceStrings(in, "://", marker), ":");
+ for (auto & s : res)
+ s = replaceStrings(s, marker, "://");
+ return res;
+}
+
+
EvalState::EvalState(const Strings & _searchPath)
: sWith(symbols.create("<with>"))
, sOutPath(symbols.create("outPath"))
@@ -266,7 +278,7 @@ EvalState::EvalState(const Strings & _searchPath)
assert(gcInitialised);
/* Initialise the Nix expression search path. */
- Strings paths = tokenizeString<Strings>(getEnv("NIX_PATH", ""), ":");
+ Strings paths = parseNixPath(getEnv("NIX_PATH", ""));
for (auto & i : _searchPath) addToSearchPath(i, true);
for (auto & i : paths) addToSearchPath(i);
addToSearchPath("nix=" + settings.nixDataDir + "/nix/corepkgs");