vc-svn fix for bug#7861.

* lisp/vc/vc-svn.el (vc-svn-after-dir-status, vc-svn-parse-status):
Also check the property status.
This commit is contained in:
Glenn Morris 2011-01-18 19:49:00 -08:00
parent 29208e8237
commit 5dd4f3f7c7
2 changed files with 22 additions and 10 deletions

View file

@ -1,3 +1,8 @@
2011-01-19 Glenn Morris <rgm@gnu.org>
* vc/vc-svn.el (vc-svn-after-dir-status, vc-svn-parse-status):
Also check the property status. (Bug#7861)
2011-01-18 Michael Albinus <michael.albinus@gmx.de>
* net/tramp.el (tramp-debug-message): Extend function exclude

View file

@ -171,15 +171,18 @@ want to force an empty list of arguments, use t."
(?? . unregistered)
;; This is what vc-svn-parse-status does.
(?~ . edited)))
(re (if remote "^\\(.\\)......? \\([ *]\\) +\\(?:[-0-9]+\\)? \\(.*\\)$"
;; Subexp 2 is a dummy in this case, so the numbers match.
"^\\(.\\)....\\(.\\) \\(.*\\)$"))
(re (if remote "^\\(.\\)\\(.\\).....? \\([ *]\\) +\\(?:[-0-9]+\\)? \\(.*\\)$"
;; Subexp 3 is a dummy in this case, so the numbers match.
"^\\(.\\)\\(.\\)...\\(.\\) \\(.*\\)$"))
result)
(goto-char (point-min))
(while (re-search-forward re nil t)
(let ((state (cdr (assq (aref (match-string 1) 0) state-map)))
(filename (match-string 3)))
(and remote (string-equal (match-string 2) "*")
(propstat (cdr (assq (aref (match-string 2) 0) state-map)))
(filename (match-string 4)))
(if (memq propstat '(conflict edited))
(setq state propstat))
(and remote (string-equal (match-string 3) "*")
;; FIXME are there other possible combinations?
(cond ((eq state 'edited) (setq state 'needs-merge))
((not state) (setq state 'needs-update))))
@ -643,7 +646,7 @@ and that it passes `vc-svn-global-switches' to it before FLAGS."
"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)
(let (file status propstat)
(goto-char (point-min))
(while (re-search-forward
;; Ignore the files with status X.
@ -653,7 +656,9 @@ information about FILENAME and return its status."
(setq file (or filename
(expand-file-name
(buffer-substring (point) (line-end-position)))))
(setq status (char-after (line-beginning-position)))
(setq status (char-after (line-beginning-position))
;; Status of the item's properties ([ MC]).
propstat (char-after (1+ (line-beginning-position))))
(if (eq status ??)
(vc-file-setprop file 'vc-state 'unregistered)
;; Use the last-modified revision, so that searching in vc-print-log
@ -664,7 +669,7 @@ information about FILENAME and return its status."
(vc-file-setprop
file 'vc-state
(cond
((eq status ?\ )
((and (eq status ?\ ) (eq propstat ?\ ))
(if (eq (char-after (match-beginning 1)) ?*)
'needs-update
(vc-file-setprop file 'vc-checkout-time
@ -675,9 +680,11 @@ information about FILENAME and return its status."
(vc-file-setprop file 'vc-working-revision "0")
(vc-file-setprop file 'vc-checkout-time 0)
'added)
((eq status ?C)
;; Conflict in contents or properties.
((or (eq status ?C) (eq propstat ?C))
(vc-file-setprop file 'vc-state 'conflict))
((eq status '?M)
;; Modified contents or properties.
((or (eq status ?M) (eq propstat ?M))
(if (eq (char-after (match-beginning 1)) ?*)
'needs-merge
'edited))