GNU bug report logs -
#30708
[PATCH] utils: Add helper method to list subdirectories.
Previous Next
Full log
Message #8 received at 30708 <at> debbugs.gnu.org (full text, mbox):
Hi Maxim,
Maxim Cournoyer <maxim.cournoyer <at> gmail.com> skribis:
> From b4b607800d770c4cf77f92c247276c368357e94f Mon Sep 17 00:00:00 2001
> From: Maxim Cournoyer <maxim.cournoyer <at> gmail.com>
> Date: Sun, 25 Feb 2018 17:49:06 -0500
> Subject: [PATCH] utils: Add helper method to list subdirectories.
>
> * guix/build/utils.scm (find-subdirectories): New procedure.
> * tests/build-utils.scm: Rename module so that it can be used with Geiser.
> (%test-dir-hierarchy): New variable.
> (make-test-dir-hierarchy): New test procedure.
> ("find-subdirectories"): New test.
[...]
> +(define* (find-subdirectories dir #:key fail-on-error?)
> + "Return the list of the immediate subdirectories of DIR."
> + ;; Strip the trailing '/' DIR is '/'.
> + (let ((dir (if (and (> 1 (string-length dir))
> + (eq? (string-take-right dir 1) #\/))
> + (string-drop-right dir 1)
> + dir)))
> + (define (pred filename stat)
> + (and (eq? (stat:type stat) 'directory)
> + (string-match (string-append dir "/[^/]*$") filename)))
> + (find-files dir pred
> + #:directories? #t
> + #:fail-on-error? fail-on-error?)))
‘find-files’ recurses in subdirectories, so the above implementation is
not as efficient as it could be.
I would instead suggest using ‘scandir’ (or ‘file-system-fold’) from
Guile’s (ice-9 ftw) module.
That said… is this a common enough operation?
Thanks,
Ludo’.
This bug report was last modified 7 years and 139 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.