diff --git a/lisp/progmodes/project.el b/lisp/progmodes/project.el index fda1081eb62..e3e7654e687 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") @@ -680,13 +681,24 @@ project--vc-list-files (setq files (mapcar (lambda (file) (concat default-directory file)) - (split-string - (apply #'vc-git--run-command-string nil "ls-files" args) - "\0" t))) + (let* ((files + (split-string + (apply #'vc-git--run-command-string nil "ls-files" args) + "\0" t)) + ref) + (when submodules + ;; Hand-optimized version of nset-difference. + (while (member (car files) submodules) + (setq files (cdr files))) + (setq ref files) + (while ref + (if (member (cadr ref) submodules) + (setcdr ref (cddr ref)) + (setq ref (cdr ref))))) + files))) (when (project--vc-merge-submodules-p default-directory) ;; Unfortunately, 'ls-files --recurse-submodules' conflicts with '-o'. - (let* ((submodules (project--git-submodules)) - (sub-files + (let ((sub-files (mapcar (lambda (module) (when (file-directory-p module)