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:
parent
f3e6c9f3a4
commit
a80a6b0308
@ -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)
|
||||
|
||||
|
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user