branch: master
commit 4898a5e5b89d69ae1ecc5202771ba36fd32c08f6
Author: Alex Bennée <[email protected]>
Commit: Oleh Krehel <[email protected]>
counsel.el (counsel-compile): better handling for counsel--get-build-subdirs
It is possible the user might actually just have a single build
directory rather than a hierarchy. We can handle this case by simply
adding the probed directory to the list if we detect any non-directory
files in the directory. While we are at it we shouldn't be returning
any non-directories so filter those out.
---
counsel.el | 22 +++++++++++++++++-----
1 file changed, 17 insertions(+), 5 deletions(-)
diff --git a/counsel.el b/counsel.el
index 660a749..4f81731 100644
--- a/counsel.el
+++ b/counsel.el
@@ -5418,11 +5418,23 @@ subdirectories that builds may be invoked in."
counsel-compile-build-directories))
(defun counsel--get-build-subdirs (blddir)
- "Return all subdirs of BLDDIR sorted by modification time."
- (mapcar #'car (sort (directory-files-and-attributes
- blddir t directory-files-no-dot-files-regexp t)
- (lambda (x y)
- (time-less-p (nth 6 y) (nth 6 x))))))
+ "Return all subdirs under BLDDIR sorted by modification time.
+If there are non-directory files in BLDDIR we also return BLDDIR in
+ the list as it may also be a build directory."
+ (let* ((files (directory-files-and-attributes
+ blddir t directory-files-no-dot-files-regexp t))
+ (filtered-files (cl-remove-if
+ (lambda (f) (not (nth 1 f)))
+ files)))
+ ;; any non-dir files?
+ (when (< (length filtered-files)
+ (length files))
+ (push (cons blddir (file-attributes blddir))
+ filtered-files))
+ (mapcar #'car
+ (sort filtered-files
+ (lambda (x y)
+ (time-less-p (nth 6 y) (nth 6 x)))))))
(defun counsel-compile-get-build-directories (&optional dir)
"Return a list of potential build directories."