From: Glenn Morris Date: Wed, 19 Jan 2011 03:49:00 +0000 (-0800) Subject: vc-svn fix for bug#7861. X-Git-Tag: emacs-pretest-24.0.90~104^2~618^2~1322^2~204 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=5dd4f3f7c7057b423e2d73c691761d52e5fd695a;p=emacs.git 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. --- diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 7282231025e..0fcc4687ce3 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2011-01-19 Glenn Morris + + * 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 * net/tramp.el (tramp-debug-message): Extend function exclude diff --git a/lisp/vc/vc-svn.el b/lisp/vc/vc-svn.el index 2a4a79f0ec6..d0b6e3841fa 100644 --- a/lisp/vc/vc-svn.el +++ b/lisp/vc/vc-svn.el @@ -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))