Author: eelco
Date: Sat Aug 6 17:48:57 2011
New Revision: 28196
URL: https://svn.nixos.org/websvn/nix/?rev=28196&sc=1
Log:
* Allow redirections in search path entries. E.g. if you have a
directory
/home/eelco/src/stdenv-updates
that you want to use as the directory for import such as
with (import <nixpkgs> { });
then you can say
$ nix-build -I nixpkgs=/home/eelco/src/stdenv-updates
Modified:
nix/trunk/src/libexpr/eval.hh
nix/trunk/src/libexpr/parser.y
nix/trunk/tests/lang/eval-okay-search-path.exp
nix/trunk/tests/lang/eval-okay-search-path.flags
nix/trunk/tests/lang/eval-okay-search-path.nix
Modified: nix/trunk/src/libexpr/eval.hh
==============================================================================
--- nix/trunk/src/libexpr/eval.hh Sat Aug 6 16:18:54 2011 (r28195)
+++ nix/trunk/src/libexpr/eval.hh Sat Aug 6 17:48:57 2011 (r28196)
@@ -213,8 +213,9 @@
std::map<Path, Expr *> parseTrees;
- Paths searchPath;
- Paths::iterator searchPathInsertionPoint;
+ typedef list<std::pair<string, Path> > SearchPath;
+ SearchPath searchPath;
+ SearchPath::iterator searchPathInsertionPoint;
public:
Modified: nix/trunk/src/libexpr/parser.y
==============================================================================
--- nix/trunk/src/libexpr/parser.y Sat Aug 6 16:18:54 2011 (r28195)
+++ nix/trunk/src/libexpr/parser.y Sat Aug 6 17:48:57 2011 (r28196)
@@ -530,18 +530,36 @@
void EvalState::addToSearchPath(const string & s)
{
- Path path = absPath(s);
+ size_t pos = s.find('=');
+ string prefix;
+ Path path;
+ if (pos == string::npos) {
+ path = s;
+ } else {
+ prefix = string(s, 0, pos);
+ path = string(s, pos + 1);
+ }
+
+ path = absPath(path);
if (pathExists(path)) {
debug(format("adding path `%1%' to the search path") % path);
- searchPath.insert(searchPathInsertionPoint, path);
+ searchPath.insert(searchPathInsertionPoint, std::pair<string,
Path>(prefix, path));
}
}
Path EvalState::findFile(const string & path)
{
- foreach (Paths::iterator, i, searchPath) {
- Path res = *i + "/" + path;
+ foreach (SearchPath::iterator, i, searchPath) {
+ Path res;
+ if (i->first.empty())
+ res = i->second + "/" + path;
+ else {
+ if (path.compare(0, i->first.size(), i->first) != 0 ||
+ (path.size() > i->first.size() && path[i->first.size()] !=
'/'))
+ continue;
+ res = i->second + "/" + string(path, i->first.size());
+ }
if (pathExists(res)) return canonPath(res);
}
return "";
Modified: nix/trunk/tests/lang/eval-okay-search-path.exp
==============================================================================
--- nix/trunk/tests/lang/eval-okay-search-path.exp Sat Aug 6 16:18:54
2011 (r28195)
+++ nix/trunk/tests/lang/eval-okay-search-path.exp Sat Aug 6 17:48:57
2011 (r28196)
@@ -1 +1 @@
-"abc"
+"abcc"
Modified: nix/trunk/tests/lang/eval-okay-search-path.flags
==============================================================================
--- nix/trunk/tests/lang/eval-okay-search-path.flags Sat Aug 6 16:18:54
2011 (r28195)
+++ nix/trunk/tests/lang/eval-okay-search-path.flags Sat Aug 6 17:48:57
2011 (r28196)
@@ -1 +1 @@
--I lang/dir1 -I lang/dir2
\ No newline at end of file
+-I lang/dir1 -I lang/dir2 -I dir5=lang/dir3
\ No newline at end of file
Modified: nix/trunk/tests/lang/eval-okay-search-path.nix
==============================================================================
--- nix/trunk/tests/lang/eval-okay-search-path.nix Sat Aug 6 16:18:54
2011 (r28195)
+++ nix/trunk/tests/lang/eval-okay-search-path.nix Sat Aug 6 17:48:57
2011 (r28196)
@@ -1,3 +1,3 @@
-import <a.nix> + import <b.nix> + import <c.nix>
+import <a.nix> + import <b.nix> + import <c.nix> + import <dir5/c.nix>
_______________________________________________
nix-commits mailing list
[email protected]
http://mail.cs.uu.nl/mailman/listinfo/nix-commits