Function: project--vc-list-files
project--vc-list-files is a byte-compiled function defined in
project.el.gz.
Signature
(project--vc-list-files DIR BACKEND EXTRA-IGNORES)
Source Code
;; Defined in /usr/src/emacs/lisp/progmodes/project.el.gz
(defun project--vc-list-files (dir backend extra-ignores)
(defvar vc-git-use-literal-pathspecs)
(pcase backend
(`Git
(let ((default-directory (expand-file-name (file-name-as-directory dir)))
(args '("-z"))
(vc-git-use-literal-pathspecs nil)
files)
;; Include unregistered.
(setq args (append args '("-c" "-o" "--exclude-standard")))
(when extra-ignores
(setq args (append args
(cons "--"
(mapcar
(lambda (i)
(format
":(exclude,glob,top)%s"
(if (string-match "\\*\\*" i)
;; Looks like pathspec glob
;; format already.
i
(if (string-match "\\./" i)
;; ./abc -> abc
(setq i (substring i 2))
;; abc -> **/abc
(setq i (concat "**/" i))
;; FIXME: '**/abc' should also
;; match a directory with that
;; name, but doesn't (git 2.25.1).
;; Maybe we should replace
;; such entries with two.
(if (string-match "/\\'" i)
;; abc/ -> abc/**
(setq i (concat i "**"))))
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)))
(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)))
(setq files
(apply #'nconc files sub-files))))
;; 'git ls-files' returns duplicate entries for merge conflicts.
;; XXX: Better solutions welcome, but this seems cheap enough.
(delete-consecutive-dups files)))
(`Hg
(let ((default-directory (expand-file-name (file-name-as-directory dir)))
args)
;; Include unregistered.
(setq args (nconc args '("-mcardu" "--no-status" "-0")))
(when extra-ignores
(setq args (nconc args
(mapcan
(lambda (i)
(list "--exclude" i))
extra-ignores))))
(with-temp-buffer
(apply #'vc-hg-command t 0 "." "status" args)
(mapcar
(lambda (s) (concat default-directory s))
(split-string (buffer-string) "\0" t)))))))