From b428adc267f23441be2f801239641aaf8419e4ba Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Mon, 25 Aug 2008 13:31:57 +0000 Subject: * 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. --- src/nix-env/nix-env.cc | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) (limited to 'src/nix-env') 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); } } -- cgit v1.2.3