diff options
| author | André Spiegel | 2000-10-03 12:24:15 +0000 |
|---|---|---|
| committer | André Spiegel | 2000-10-03 12:24:15 +0000 |
| commit | 72cfc5fb64a56945a9ba6df6a06cf6cddf480456 (patch) | |
| tree | f9ed45cdd7d66f081c192c4b7903f6721f0d0675 | |
| parent | fb0d6a7904bd5e641b586564be25037d2bbd66ec (diff) | |
| download | emacs-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.el | 92 |
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." | |||
| 1128 | The default implementation returns t for all files." | 1128 | The 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. |
| 1142 | The choice between revert (to see expanded keywords) and unvisit depends on | 1133 | The 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 | |||
| 2290 | backend, then commit all changes that were made under the current | 2281 | backend, then commit all changes that were made under the current |
| 2291 | backend to NEW-BACKEND, and unregister FILE from the current backend. | 2282 | backend 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)) |
| 2309 | If MOVE is non-nil, then FILE is unregistered from the old | 2308 | (when copy |
| 2310 | backend and its comment history is used as the initial contents | 2309 | (vc-switch-backend file new-backend) |
| 2311 | of 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))) |