* vc/vc-svn.el (vc-svn-parse-status): If there are multiple files

in the status output, assume `filename' is the first.

Fixes: debbugs:15322
This commit is contained in:
Glenn Morris 2013-09-11 23:21:33 -07:00
parent 40e64f0cbd
commit a6ae021fd3
2 changed files with 13 additions and 6 deletions

View file

@ -1,5 +1,8 @@
2013-09-12 Glenn Morris <rgm@gnu.org>
* vc/vc-svn.el (vc-svn-parse-status): If there are multiple files
in the status output, assume `filename' is the first. (Bug#15322)
* vc/vc.el (vc-deduce-fileset): Doc fix.
* calc/calc-help.el (Info-goto-node):

View file

@ -674,19 +674,23 @@ and that it passes `vc-svn-global-switches' to it before FLAGS."
(defun vc-svn-parse-status (&optional filename)
"Parse output of \"svn status\" command in the current buffer.
Set file properties accordingly. Unless FILENAME is non-nil, parse only
information about FILENAME and return its status."
(let (file status propstat)
Set file properties accordingly. If FILENAME is non-nil, return its status."
(let (multifile file status propstat)
(goto-char (point-min))
(while (re-search-forward
;; Ignore the files with status X.
"^\\(?:\\?\\|[ ACDGIMR!~][ MC][ L][ +][ S]..\\([ *]\\) +\\([-0-9]+\\) +\\([0-9?]+\\) +\\([^ ]+\\)\\) +" nil t)
;; If the username contains spaces, the output format is ambiguous,
;; so don't trust the output's filename unless we have to.
(setq file (or filename
(setq file (or (unless multifile filename)
(expand-file-name
(buffer-substring (point) (line-end-position)))))
(setq status (char-after (line-beginning-position))
(buffer-substring (point) (line-end-position))))
;; If we are parsing the result of running status on a directory,
;; there could be multiple files in the output.
;; We assume that filename, if supplied, applies to the first
;; listed file (ie, the directory). Bug#15322.
multifile t
status (char-after (line-beginning-position))
;; Status of the item's properties ([ MC]).
propstat (char-after (1+ (line-beginning-position))))
(if (eq status ??)