From a35ea838d4ad512bf9fa391b7009d72db423cc15 Mon Sep 17 00:00:00 2001 From: Drew Adams Date: Fri, 20 Nov 2020 11:41:41 -0300 Subject: [PATCH] Fix finding filelist for :tree fileset (Bug#976) * lisp/filesets.el (filesets-files-under): New function, used to get all files for a :tree fileset. (filesets-get-filelist): Use it. Look for the directory and the pattern in the right place inside entry. --- lisp/filesets.el | 37 ++++++++++++++++++++++++++++++++++--- 1 file changed, 34 insertions(+), 3 deletions(-) diff --git a/lisp/filesets.el b/lisp/filesets.el index c7ec3f77f4..84196561fc 100644 --- a/lisp/filesets.el +++ b/lisp/filesets.el @@ -1718,9 +1718,12 @@ filesets-get-filelist (filesets-entry-get-master entry))))) (cons entry (filesets-ingroup-cache-get entry)))) (:tree - (let ((dir (nth 0 entry)) - (patt (nth 1 entry))) - (filesets-directory-files dir patt ':files t))) + (let* ((dirpatt (filesets-entry-get-tree entry)) + (dir (nth 0 dirpatt)) + (patt (nth 1 dirpatt)) + (depth (or (filesets-entry-get-tree-max-level entry) + filesets-tree-max-level))) + (filesets-files-under 0 depth entry dir patt))) (:pattern (let ((dirpatt (filesets-entry-get-pattern entry))) (if dirpatt @@ -1734,6 +1737,34 @@ filesets-get-filelist (lambda (file) (not (filesets-filetype-property file event)))))) +(defun filesets-files-under (level depth entry dir patt &optional relativep) + "Files under DIR that match PATT. +LEVEL is the current level under DIR. +DEPTH is the maximal tree scanning depth for ENTRY. +ENTRY is a fileset. +DIR is a directory. +PATT is a regexp that included file names must match. +RELATIVEP non-nil means use relative file names." + (and (or (= depth 0) (< level depth)) + (let* ((dir (file-name-as-directory dir)) + (files-here (filesets-directory-files + dir patt nil (not relativep) + (filesets-entry-get-filter-dirs-flag entry))) + (subdirs (filesets-filter-dir-names files-here)) + (files + (filesets-filter-dir-names + (apply #'append + files-here + (mapcar + (lambda (subdir) + (let* ((subdir (file-name-as-directory subdir)) + (full-subdir (concat dir subdir))) + (filesets-files-under (+ level 1) depth entry + full-subdir patt))) + subdirs)) + t))) + files))) + (defun filesets-open (&optional mode name lookup-name) "Open the fileset called NAME. Use LOOKUP-NAME for searching additional data if provided." -- 2.29.2