mirror of
https://github.com/NixOS/nix
synced 2025-06-27 00:11:17 +02:00
* builtins.filterSource: pass the type of the file ("regular",
"directory", "symlink") as the second argument to the filter predicate.
This commit is contained in:
parent
63f3ce6d9a
commit
e4b0666f8e
3 changed files with 23 additions and 2 deletions
|
@ -7,6 +7,10 @@
|
|||
#include "expr-to-xml.hh"
|
||||
#include "nixexpr-ast.hh"
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include <algorithm>
|
||||
|
||||
|
||||
|
@ -739,7 +743,20 @@ struct FilterFromExpr : PathFilter
|
|||
|
||||
bool operator () (const Path & path)
|
||||
{
|
||||
Expr call = makeCall(filter, makePath(toATerm(path)));
|
||||
struct stat st;
|
||||
if (lstat(path.c_str(), &st))
|
||||
throw SysError(format("getting attributes of path `%1%'") % path);
|
||||
|
||||
Expr call =
|
||||
makeCall(
|
||||
makeCall(filter, makePath(toATerm(path))),
|
||||
makeStr(
|
||||
S_ISREG(st.st_mode) ? "regular" :
|
||||
S_ISDIR(st.st_mode) ? "directory" :
|
||||
S_ISLNK(st.st_mode) ? "symlink" :
|
||||
"unknown" /* not supported, will fail! */
|
||||
));
|
||||
|
||||
return evalBool(state, call);
|
||||
}
|
||||
};
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue