Mercurial > emacs
changeset 73445:59e895845146
(vc-switch-backend): Try to be more careful with unwanted
side-effect due to mixing various backends's file properties.
author | Stefan Monnier <monnier@iro.umontreal.ca> |
---|---|
date | Fri, 20 Oct 2006 07:58:11 +0000 |
parents | ee7eeb5732b2 |
children | 9895afa2b157 |
files | lisp/ChangeLog lisp/vc.el |
diffstat | 2 files changed, 29 insertions(+), 19 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/ChangeLog Fri Oct 20 07:56:20 2006 +0000 +++ b/lisp/ChangeLog Fri Oct 20 07:58:11 2006 +0000 @@ -1,5 +1,8 @@ 2006-10-20 Stefan Monnier <monnier@iro.umontreal.ca> + * vc.el (vc-switch-backend): Try to be more careful with unwanted + side-effect due to mixing various backends's file properties. + * vc-svn.el (vc-svn-parse-status): Remove unused arg `localp'. Add arg `filename' instead. Don't set vc-backend if `filename' is set. Return `filename's status if applicable. Update callers.
--- a/lisp/vc.el Fri Oct 20 07:56:20 2006 +0000 +++ b/lisp/vc.el Fri Oct 20 07:58:11 2006 +0000 @@ -2682,25 +2682,32 @@ (error "There is no version-controlled file in this buffer")) (let ((backend (vc-backend buffer-file-name)) (backends nil)) - (unless backend - (error "File %s is not under version control" buffer-file-name)) - ;; Find the registered backends. - (dolist (backend vc-handled-backends) - (when (vc-call-backend backend 'registered buffer-file-name) - (push backend backends))) - ;; Find the next backend. - (let ((def (car (delq backend (append (memq backend backends) backends)))) - (others (delete backend backends))) - (cond - ((null others) (error "No other backend to switch to")) - (current-prefix-arg - (intern - (upcase - (completing-read - (format "Switch to backend [%s]: " def) - (mapcar (lambda (b) (list (downcase (symbol-name b)))) backends) - nil t nil nil (downcase (symbol-name def)))))) - (t def)))))) + (unwind-protect + (progn + (unless backend + (error "File %s is not under version control" buffer-file-name)) + ;; Find the registered backends. + (dolist (backend vc-handled-backends) + (when (vc-call-backend backend 'registered buffer-file-name) + (push backend backends))) + ;; Find the next backend. + (let ((def (car (delq backend + (append (memq backend backends) backends)))) + (others (delete backend backends))) + (cond + ((null others) (error "No other backend to switch to")) + (current-prefix-arg + (intern + (upcase + (completing-read + (format "Switch to backend [%s]: " def) + (mapcar (lambda (b) (list (downcase (symbol-name b)))) backends) + nil t nil nil (downcase (symbol-name def)))))) + (t def)))) + ;; Calling the `registered' method can mess up the file + ;; properties, so we want to revert them to what they were. + (if (and backend (delete backend backends)) + (vc-call-backend backend 'registered buffer-file-name)))))) (unless (eq backend (vc-backend file)) (vc-file-clearprops file) (vc-file-setprop file 'vc-backend backend)