aboutsummaryrefslogtreecommitdiff
path: root/src/nix-env
diff options
context:
space:
mode:
authorEelco Dolstra <e.dolstra@tudelft.nl>2008-08-25 13:31:57 +0000
committerEelco Dolstra <e.dolstra@tudelft.nl>2008-08-25 13:31:57 +0000
commitb428adc267f23441be2f801239641aaf8419e4ba (patch)
tree8dbbe5171888a340b8bf223268a2c764d94d0bb3 /src/nix-env
parentcc826dc03e738c1d6c6fd6de0dfd9600f6289b72 (diff)
* Strip off the `.nix' suffix from the attribute name for files in
~/.nix-defexpr, otherwise the attribute cannot be selected with the `-A' option. Useful if you want to stick a Nix expression directly in ~/.nix-defexpr.
Diffstat (limited to 'src/nix-env')
-rw-r--r--src/nix-env/nix-env.cc17
1 files changed, 14 insertions, 3 deletions
diff --git a/src/nix-env/nix-env.cc b/src/nix-env/nix-env.cc
index 6cbd06f8d..4cc5484cc 100644
--- a/src/nix-env/nix-env.cc
+++ b/src/nix-env/nix-env.cc
@@ -115,18 +115,29 @@ static void getAllExprs(EvalState & state,
const Path & path, ATermMap & attrs)
{
Strings names = readDirectory(path);
+ StringSet namesSorted(names.begin(), names.end());
- for (Strings::iterator i = names.begin(); i != names.end(); ++i) {
+ foreach (StringSet::iterator, i, namesSorted) {
Path path2 = path + "/" + *i;
struct stat st;
if (stat(path2.c_str(), &st) == -1)
continue; // ignore dangling symlinks in ~/.nix-defexpr
- if (isNixExpr(path2))
- attrs.set(toATerm(*i), makeAttrRHS(
+ if (isNixExpr(path2)) {
+ /* Strip off the `.nix' filename suffix (if applicable),
+ otherwise the attribute cannot be selected with the
+ `-A' option. Useful if you want to stick a Nix
+ expression directly in ~/.nix-defexpr. */
+ string attrName = *i;
+ if (hasSuffix(attrName, ".nix"))
+ attrName = string(attrName, 0, attrName.size() - 4);
+ attrs.set(toATerm(attrName), makeAttrRHS(
parseExprFromFile(state, absPath(path2)), makeNoPos()));
+ }
else
+ /* `path2' is a directory (with no default.nix in it);
+ recurse into it. */
getAllExprs(state, path2, attrs);
}
}