Am 14.02.20 um 11:05 schrieb Eli Zaretskii: >> From: Wolfgang Scherer >> Date: Tue, 11 Feb 2020 03:54:03 +0100 >> >>>> I am not sure what you mean by "install the latest patch version on master"? >>> You posted two versions. Maybe there will be further revisions. >> I am not planning on any :-). But I am still not sure, which master you mean. I have no write access to the repository. > Can you describe a simple use case to test your patch, and tell what > are the differences between the situation before and after the patch? > Then I will try the changes, and install them if I see no problems. > > (I'm asking for details because at least part of the changes are > simply white-space changes, and it isn't easy to identify the part(s) > that really change the code workings.) Sorry, I have a whitespace cleaner command that I keep using unconciously. The use case is to have a SRC repository with another SRC sub-repositoy, which in turn contains a further SRC repository. When entering *vc-dir-mode* with `M-x vc-dir` in the topmost repository, the status of all files in all 3 respositories should be shown. OK, the change is not so hard to understand when you know the sequence of events. At First, only *vc-src--parse-state* used a call to `src status -a` to inquire about a single FILE. *vc-src-dir-status-files* used *vc-expand-dirs* to get the status for all files. There was a comment saying it should be fixed by using one call to `src status -a` instead: ```elisp (defun vc-src-dir-status-files (dir files update-function)  ;; FIXME: Use one src status -a call for this  (if (not files) (setq files (vc-expand-dirs (list dir) 'SRC))) ``` The difference is, that the call to `src status -a` provides a more detailed status for all files in a directory with just a single call. This is faster and helps managing the ignore files better. The first step was to extract the status parser as *vc-src--parse-state* for reuse in *vc-srv-dir-status-files*: ```elisp (defun vc-src--parse-state (out)   (when (null (string-match "does not exist or is unreadable" out))     (let ((state (aref out 0)))       (cond        ;; FIXME: What to do about L code?        ((eq state ?.) 'up-to-date)        ((eq state ?A) 'added)        ((eq state ?M) 'edited)        ((eq state ?I) 'ignored)        ((eq state ?R) 'removed)        ((eq state ?!) 'missing)        ((eq state ??) 'unregistered)        (t 'up-to-date))))) ``` The code in *vc-src-state* was replaced by a single call to *vc-src--parse-state*: ```diff @@ -163,32 +177,44 @@ For a description of possible values, see `vc-check-master-templates'."                       "status" "-a" (file-relative-name file))                    (error nil)))))))     (when (eq 0 status) -   [...] +   (vc-src--parse-state out)))) ``` The last diff is a complete refactoring of *vc-src-dir-status-files* to parse directories recursively, so there is no common code. The user visible changes are just that unregistered and ignored files are also shown. Everything else is necessarily identical. I have attached a new patch with minimal whitespace changes.