aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndré Spiegel2000-10-03 12:24:15 +0000
committerAndré Spiegel2000-10-03 12:24:15 +0000
commit72cfc5fb64a56945a9ba6df6a06cf6cddf480456 (patch)
treef9ed45cdd7d66f081c192c4b7903f6721f0d0675
parentfb0d6a7904bd5e641b586564be25037d2bbd66ec (diff)
downloademacs-72cfc5fb64a56945a9ba6df6a06cf6cddf480456.tar.gz
emacs-72cfc5fb64a56945a9ba6df6a06cf6cddf480456.zip
(vc-transfer-file, vc-default-receive-file): Rewritten to factorize
backend-specific code cleanly. (vc-unregister): Function removed.
-rw-r--r--lisp/vc.el92
1 files changed, 44 insertions, 48 deletions
diff --git a/lisp/vc.el b/lisp/vc.el
index 3984c44470a..4b37dd516db 100644
--- a/lisp/vc.el
+++ b/lisp/vc.el
@@ -5,7 +5,7 @@
5;; Author: FSF (see below for full credits) 5;; Author: FSF (see below for full credits)
6;; Maintainer: Andre Spiegel <spiegel@gnu.org> 6;; Maintainer: Andre Spiegel <spiegel@gnu.org>
7 7
8;; $Id$ 8;; $Id: vc.el,v 1.275 2000/10/03 11:22:13 spiegel Exp $
9 9
10;; This file is part of GNU Emacs. 10;; This file is part of GNU Emacs.
11 11
@@ -93,7 +93,7 @@
93;; Only required if files can be locked by somebody else. 93;; Only required if files can be locked by somebody else.
94;; * register (file rev comment) 94;; * register (file rev comment)
95;; * unregister (file backend) 95;; * unregister (file backend)
96;; - receive-file (file move) 96;; - receive-file (file rev)
97;; - responsible-p (file) 97;; - responsible-p (file)
98;; Should also work if FILE is a directory (ends with a slash). 98;; Should also work if FILE is a directory (ends with a slash).
99;; - could-register (file) 99;; - could-register (file)
@@ -1128,15 +1128,6 @@ The default is to return nil always."
1128The default implementation returns t for all files." 1128The default implementation returns t for all files."
1129 t) 1129 t)
1130 1130
1131(defun vc-unregister (file)
1132 "Unregister FILE from version control system BACKEND."
1133 (vc-call unregister file)
1134 (vc-file-clearprops file))
1135
1136(defun vc-default-unregister (backend file)
1137 "Default implementation of `vc-unregister', signals an error."
1138 (error "Unregistering files is not supported for %s" backend))
1139
1140(defun vc-resynch-window (file &optional keep noquery) 1131(defun vc-resynch-window (file &optional keep noquery)
1141 "If FILE is in the current buffer, either revert or unvisit it. 1132 "If FILE is in the current buffer, either revert or unvisit it.
1142The choice between revert (to see expanded keywords) and unvisit depends on 1133The choice between revert (to see expanded keywords) and unvisit depends on
@@ -2290,47 +2281,52 @@ base level. If NEW-BACKEND has a lower precedence than the current
2290backend, then commit all changes that were made under the current 2281backend, then commit all changes that were made under the current
2291backend to NEW-BACKEND, and unregister FILE from the current backend. 2282backend to NEW-BACKEND, and unregister FILE from the current backend.
2292\(If FILE is not yet registered under NEW-BACKEND, register it.)" 2283\(If FILE is not yet registered under NEW-BACKEND, register it.)"
2293 (let ((old-backend (vc-backend file))) 2284 (let* ((old-backend (vc-backend file))
2285 (edited (memq (vc-state file) '(edited needs-merge)))
2286 (registered (vc-call-backend new-backend 'registered file))
2287 (move
2288 (and registered ; Never move if not registered in new-backend yet.
2289 ;; move if new-backend comes later in vc-handled-backends
2290 (or (memq new-backend (memq old-backend vc-handled-backends))
2291 (y-or-n-p "Final transfer ? "))))
2292 (comment nil))
2294 (if (eq old-backend new-backend) 2293 (if (eq old-backend new-backend)
2295 (error "%s is the current backend of %s" 2294 (error "%s is the current backend of %s" new-backend file))
2296 new-backend file) 2295 (if registered
2297 (with-vc-properties 2296 (set-file-modes file (logior (file-modes file) 128))
2298 file 2297 ;; `registered' might have switched under us.
2299 (vc-call-backend new-backend 'receive-file file 2298 (vc-switch-backend file old-backend)
2300 ;; set MOVE argument if new-backend 2299 (let ((copy (and edited (make-temp-name file)))
2301 ;; comes later in vc-handled-backends 2300 (rev (vc-workfile-version file)))
2302 (memq new-backend 2301 ;; Go back to the base unmodified file.
2303 (memq old-backend vc-handled-backends))) 2302 (unwind-protect
2304 `((vc-backend ,new-backend)))) 2303 (progn
2305 (vc-resynch-buffer file t t))) 2304 (when copy (copy-file file copy)) ; (vc-revert-file file))
2306 2305 ; TODO: uncomment when we
2307(defun vc-default-receive-file (backend file move) 2306 ; have local version caching
2308 "Let BACKEND receive FILE from another version control system. 2307 (vc-call-backend new-backend 'receive-file file rev))
2309If MOVE is non-nil, then FILE is unregistered from the old 2308 (when copy
2310backend and its comment history is used as the initial contents 2309 (vc-switch-backend file new-backend)
2311of the log entry buffer." 2310 (unless (eq (vc-checkout-model file) 'implicit)
2312 (let ((old-backend (vc-backend file)) 2311 (vc-checkout file t nil))
2313 (rev (vc-workfile-version file)) 2312 (rename-file copy file 'ok-if-already-exists)))))
2314 (state (vc-state file)) 2313 (when move
2315 (comment (and move (vc-call comment-history file)))) 2314 (vc-switch-backend file old-backend)
2316 (if move (vc-unregister file)) 2315 (setq comment (vc-call comment-history file))
2317 (vc-file-clearprops file) 2316 (vc-call unregister file))
2318 (if (not (vc-call-backend backend 'registered file)) 2317 (vc-switch-backend file new-backend)
2319 (with-vc-properties 2318 (when (or move edited)
2320 file
2321 ;; TODO: If the file was 'edited under the old backend,
2322 ;; this should actually register the version
2323 ;; it was based on.
2324 (vc-call-backend backend 'register file rev "")
2325 `((vc-backend ,backend)))
2326 (vc-file-setprop file 'vc-backend backend)
2327 (vc-file-setprop file 'vc-state 'edited)
2328 (set-file-modes file
2329 (logior (file-modes file) 128)))
2330 (when (or move (eq state 'edited))
2331 (vc-file-setprop file 'vc-state 'edited) 2319 (vc-file-setprop file 'vc-state 'edited)
2332 (vc-checkin file nil comment (stringp comment))))) 2320 (vc-checkin file nil comment (stringp comment)))))
2333 2321
2322(defun vc-default-unregister (backend file)
2323 "Default implementation of `vc-unregister', signals an error."
2324 (error "Unregistering files is not supported for %s" backend))
2325
2326(defun vc-default-receive-file (backend file rev)
2327 "Let BACKEND receive FILE from another version control system."
2328 (vc-call-backend backend 'register file rev ""))
2329
2334(defun vc-rename-master (oldmaster newfile templates) 2330(defun vc-rename-master (oldmaster newfile templates)
2335 "Rename OLDMASTER to be the master file for NEWFILE based on TEMPLATES." 2331 "Rename OLDMASTER to be the master file for NEWFILE based on TEMPLATES."
2336 (let* ((dir (file-name-directory (expand-file-name oldmaster))) 2332 (let* ((dir (file-name-directory (expand-file-name oldmaster)))