From b0e01806e36c8671279e6ffeb6ba2397655a3f5a Mon Sep 17 00:00:00 2001 From: Jim Porter Date: Sat, 28 Oct 2023 22:20:41 -0700 Subject: [PATCH] Exclude Git submodules from 'project-files' * lisp/progmodes/project.el (project--vc-list-files): Exclude Git submodules. (project-search, project-query-replace-regexp): Remove now-unneeded workaround. --- lisp/progmodes/project.el | 41 +++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 21 deletions(-) diff --git a/lisp/progmodes/project.el b/lisp/progmodes/project.el index fda1081eb62..bb44cfefa54 100644 --- a/lisp/progmodes/project.el +++ b/lisp/progmodes/project.el @@ -647,6 +647,7 @@ project--vc-list-files (include-untracked (project--value-in-dir 'project-vc-include-untracked dir)) + (submodules (project--git-submodules)) files) (setq args (append args '("-c" "--exclude-standard") @@ -678,23 +679,25 @@ project--vc-list-files i))) extra-ignores))))) (setq files - (mapcar - (lambda (file) (concat default-directory file)) - (split-string - (apply #'vc-git--run-command-string nil "ls-files" args) - "\0" t))) + (delq nil + (mapcar + (lambda (file) + (unless (member file submodules) + (concat default-directory file))) + (split-string + (apply #'vc-git--run-command-string nil "ls-files" args) + "\0" t)))) (when (project--vc-merge-submodules-p default-directory) ;; Unfortunately, 'ls-files --recurse-submodules' conflicts with '-o'. - (let* ((submodules (project--git-submodules)) - (sub-files - (mapcar - (lambda (module) - (when (file-directory-p module) - (project--vc-list-files - (concat default-directory module) - backend - extra-ignores))) - submodules))) + (let ((sub-files + (mapcar + (lambda (module) + (when (file-directory-p module) + (project--vc-list-files + (concat default-directory module) + backend + extra-ignores))) + submodules))) (setq files (apply #'nconc files sub-files)))) ;; 'git ls-files' returns duplicate entries for merge conflicts. @@ -1326,8 +1329,7 @@ project-search (interactive "sSearch (regexp): ") (fileloop-initialize-search regexp - ;; XXX: See the comment in project-query-replace-regexp. - (cl-delete-if-not #'file-regular-p (project-files (project-current t))) + (project-files (project-current t)) 'default) (fileloop-continue)) @@ -1348,10 +1350,7 @@ project-query-replace-regexp (list from to)))) (fileloop-initialize-replace from to - ;; XXX: Filter out Git submodules, which are not regular files. - ;; `project-files' can return those, which is arguably suboptimal, - ;; but removing them eagerly has performance cost. - (cl-delete-if-not #'file-regular-p (project-files (project-current t))) + (project-files (project-current t)) 'default) (fileloop-continue)) -- 2.25.1