[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#66649: 29.1; `project-remember-projects-under' behavior doesn't matc
From: |
Philip Kaludercic |
Subject: |
bug#66649: 29.1; `project-remember-projects-under' behavior doesn't match its doc |
Date: |
Wed, 01 Nov 2023 21:36:25 +0000 |
Dmitry Gutov <dgutov@yandex.ru> writes:
> On 01/11/2023 15:12, Philip Kaludercic wrote:
>> One idea would be to just simplify the entire implementation by relying
>> on directory-files and directory-files-recursively. Say something like
>> this:
>
> Looks, good, just once thing:
>
>> + (directory-files-recursively dir "" t #'file-directory-p)
>
> The argument PREDICATE is not in Emacs 26.1 (which should remain
> compatible). But it doesn't help anyway, because that predicate is
> only used to determine whether to recurse into a subdirectory, and not
> to filter out files. So the full list of all files is generated
> anyway.
OK, here is the updated patch:
>From cf1541ddba61e3c6106a133a9b6b662f0f34749d Mon Sep 17 00:00:00 2001
From: Philip Kaludercic <philipk@posteo.net>
Date: Wed, 1 Nov 2023 22:34:28 +0100
Subject: [PATCH] Simplify 'project-remember-projects-under'
* lisp/progmodes/project.el (project-remember-projects-under): Instead
of traversing the directories manually, re-use
`directory-files-recursively' to reduce complexity. (Bug#66649)
---
lisp/progmodes/project.el | 47 +++++++++++++++++----------------------
1 file changed, 20 insertions(+), 27 deletions(-)
diff --git a/lisp/progmodes/project.el b/lisp/progmodes/project.el
index fda1081eb62..935f7a7b873 100644
--- a/lisp/progmodes/project.el
+++ b/lisp/progmodes/project.el
@@ -1821,35 +1821,28 @@ project-remember-projects-under
projects."
(interactive "DDirectory: \nP")
(project--ensure-read-project-list)
- (let ((queue (list dir))
- (count 0)
- (known (make-hash-table
- :size (* 2 (length project--list))
- :test #'equal )))
+ (let ((dirs (if recursive
+ (directory-files-recursively dir "" t)
+ (directory-files dir t)))
+ (known (make-hash-table :size (* 2 (length project--list))
+ :test #'equal))
+ (count 0))
(dolist (project (mapcar #'car project--list))
(puthash project t known))
- (while queue
- (when-let ((subdir (pop queue))
- ((file-directory-p subdir)))
- (when-let ((project (project--find-in-directory subdir))
- (project-root (project-root project))
- ((not (gethash project-root known))))
- (project-remember-project project t)
- (puthash project-root t known)
- (message "Found %s..." project-root)
- (setq count (1+ count)))
- (when (and recursive (file-directory-p subdir))
- (setq queue
- (nconc
- (directory-files
- subdir t directory-files-no-dot-files-regexp t)
- queue)))))
- (unless (eq recursive 'in-progress)
- (if (zerop count)
- (message "No projects were found")
- (project--write-project-list)
- (message "%d project%s were found"
- count (if (= count 1) "" "s"))))
+ (dolist (subdir dirs)
+ (when-let (((file-directory-p subdir))
+ (project (project--find-in-directory subdir))
+ (project-root (project-root project))
+ ((not (gethash project-root known))))
+ (project-remember-project project t)
+ (puthash project-root t known)
+ (message "Found %s..." project-root)
+ (setq count (1+ count))))
+ (if (zerop count)
+ (message "No projects were found")
+ (project--write-project-list)
+ (message "%d project%s were found"
+ count (if (= count 1) "" "s")))
count))
(defun project-forget-zombie-projects ()
--
2.39.2
> If the performance still looks okay to you, I have no objections. Just
> remove that last argument, and it's good to install.
I'd say that Damien can try it out and report if it works well enough.
I worry that the files returned by `directory-files-recursively' might
slow down the function considerably. Perhaps it might be better to
write a little function just for project.el to only generate a list of
directories.
- bug#66649: 29.1; `project-remember-projects-under' behavior doesn't match its doc, Philip Kaludercic, 2023/11/01
- bug#66649: 29.1; `project-remember-projects-under' behavior doesn't match its doc, Dmitry Gutov, 2023/11/01
- bug#66649: 29.1; `project-remember-projects-under' behavior doesn't match its doc,
Philip Kaludercic <=
- bug#66649: 29.1; `project-remember-projects-under' behavior doesn't match its doc, Dmitry Gutov, 2023/11/01
- bug#66649: 29.1; `project-remember-projects-under' behavior doesn't match its doc, Damien Cassou, 2023/11/02
- bug#66649: 29.1; `project-remember-projects-under' behavior doesn't match its doc, Dmitry Gutov, 2023/11/02
- bug#66649: 29.1; `project-remember-projects-under' behavior doesn't match its doc, Damien Cassou, 2023/11/03
- bug#66649: 29.1; `project-remember-projects-under' behavior doesn't match its doc, Philip Kaludercic, 2023/11/08
- bug#66649: 29.1; `project-remember-projects-under' behavior doesn't match its doc, Dmitry Gutov, 2023/11/08
- bug#66649: 29.1; `project-remember-projects-under' behavior doesn't match its doc, Philip Kaludercic, 2023/11/08
- bug#66649: 29.1; `project-remember-projects-under' behavior doesn't match its doc, Dmitry Gutov, 2023/11/08
- bug#66649: 29.1; `project-remember-projects-under' behavior doesn't match its doc, Damien Cassou, 2023/11/08
- bug#66649: 29.1; `project-remember-projects-under' behavior doesn't match its doc, Dmitry Gutov, 2023/11/08