summaryrefslogtreecommitdiff
path: root/guix/build/utils.scm
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2015-04-06 23:09:54 +0200
committerLudovic Courtès <ludo@gnu.org>2015-04-06 23:09:54 +0200
commit347f54ed33a0b9a4e234d18dadf950f055e16554 (patch)
tree3478fc0053e0b8ac1d48edde3e80daf29e0c44a0 /guix/build/utils.scm
parente081385af289da4c330511aa5adac8078fbd5074 (diff)
downloadguix-patches-347f54ed33a0b9a4e234d18dadf950f055e16554.tar
guix-patches-347f54ed33a0b9a4e234d18dadf950f055e16554.tar.gz
utils: 'find-files' does not follow symlinks by default.
Fixes <http://bugs.gnu.org/20081>. Reported by Tomáš Čech <sleep_walker@suse.cz>. * guix/build/utils.scm (find-files): Add #:stat parameter. Pass it as last argument to 'file-system-fold'.
Diffstat (limited to 'guix/build/utils.scm')
-rw-r--r--guix/build/utils.scm9
1 files changed, 6 insertions, 3 deletions
diff --git a/guix/build/utils.scm b/guix/build/utils.scm
index fbd5d54da5..676a0120e3 100644
--- a/guix/build/utils.scm
+++ b/guix/build/utils.scm
@@ -278,12 +278,14 @@ name matches REGEXP."
(lambda (file stat)
(regexp-exec file-rx (basename file)))))
-(define* (find-files dir #:optional (pred (const #t)))
+(define* (find-files dir #:optional (pred (const #t))
+ #:key (stat lstat))
"Return the lexicographically sorted list of files under DIR for which PRED
returns true. PRED is passed two arguments: the absolute file name, and its
stat buffer; the default predicate always returns true. PRED can also be a
regular expression, in which case it is equivalent to (file-name-predicate
-PRED)."
+PRED). STAT is used to obtain file information; using 'lstat' means that
+symlinks are not followed."
(let ((pred (if (procedure? pred)
pred
(file-name-predicate pred))))
@@ -304,7 +306,8 @@ PRED)."
file (strerror errno))
result)
'()
- dir)
+ dir
+ stat)
string<?)))