1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2025-01-01 11:14:55 +00:00

(vc-svn-after-dir-status): Handle `svn status -u' output.

(vc-svn-dir-status): Respect vc-stay-local-p.  (Bug#1046)
This commit is contained in:
Glenn Morris 2008-10-04 20:24:24 +00:00
parent f3e6c9f3a4
commit a80a6b0308
2 changed files with 22 additions and 6 deletions

View File

@ -1,5 +1,8 @@
2008-10-04 Glenn Morris <rgm@gnu.org>
* vc-svn.el (vc-svn-after-dir-status): Handle `svn status -u' output.
(vc-svn-dir-status): Respect vc-stay-local-p. (Bug#1046)
* vc-cvs.el (vc-cvs-dir-status-heuristic): New function.
(vc-cvs-dir-status): Respect vc-stay-local-p. (Bug#1046)

View File

@ -1,6 +1,7 @@
;;; vc-svn.el --- non-resident support for Subversion version-control
;; Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
;; Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008
;; Free Software Foundation, Inc.
;; Author: FSF (see vc.el for full credits)
;; Maintainer: Stefan Monnier <monnier@gnu.org>
@ -146,7 +147,9 @@ If you want to force an empty list of arguments, use t."
"SVN-specific state heuristic."
(vc-svn-state file 'local))
(defun vc-svn-after-dir-status (callback)
;; FIXME it would be better not to have the "remote" argument,
;; but to distinguish the two output formats based on content.
(defun vc-svn-after-dir-status (callback &optional remote)
(let ((state-map '((?A . added)
(?C . conflict)
(?D . removed)
@ -156,11 +159,18 @@ If you 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.
"^\\(.\\)....\\(.\\) \\(.*\\)$"))
result)
(goto-char (point-min))
(while (re-search-forward "^\\(.\\)..... \\(.*\\)$" nil t)
(while (re-search-forward re nil t)
(let ((state (cdr (assq (aref (match-string 1) 0) state-map)))
(filename (match-string 2)))
(filename (match-string 3)))
(and remote (string-equal (match-string 2) "*")
;; FIXME are there other possible combinations?
(cond ((eq state 'edited) (setq state 'needs-merge))
((not state) (setq state 'needs-update))))
(when state
(setq result (cons (list filename state) result)))))
(funcall callback result)))
@ -169,9 +179,12 @@ If you want to force an empty list of arguments, use t."
"Run 'svn status' for DIR and update BUFFER via CALLBACK.
CALLBACK is called as (CALLBACK RESULT BUFFER), where
RESULT is a list of conses (FILE . STATE) for directory DIR."
(vc-svn-command (current-buffer) 'async nil "status")
;; FIXME should this rather be all the files in dir?
(let ((remote (not (vc-stay-local-p dir))))
(vc-svn-command (current-buffer) 'async nil "status"
(if remote "-u"))
(vc-exec-after
`(vc-svn-after-dir-status (quote ,callback))))
`(vc-svn-after-dir-status (quote ,callback) ,remote))))
(defun vc-svn-dir-status-files (dir files default-state callback)
(apply 'vc-svn-command (current-buffer) 'async nil "status" files)