From 869131a59320d279fa9f18585e93eee125f550d9 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Andr=C3=A9=20Spiegel?= Date: Sat, 5 Jan 2002 17:15:20 +0000 Subject: [PATCH] (vc-branch-part): Return nil if there's no `.' (vc-default-previous-version): Renamed from vc-previous-version. New args BACKEND and FILE. Return nil for revision numbers without a `.' (vc-version-diff): Call vc-BACKEND-previous-version. (vc-steal-lock): Steal lock before composing mail, so that no mail is sent when the stealing goes wrong. And we'll actually see the error in that case now. (vc-finish-steal): Removed. --- lisp/vc.el | 63 ++++++++++++++++++++++++++++++------------------------ 1 file changed, 35 insertions(+), 28 deletions(-) diff --git a/lisp/vc.el b/lisp/vc.el index 6c2b5d954a3..41124f05789 100644 --- a/lisp/vc.el +++ b/lisp/vc.el @@ -6,7 +6,7 @@ ;; Maintainer: Andre Spiegel ;; Keywords: tools -;; $Id: vc.el,v 1.323 2001/11/26 16:17:17 pj Exp $ +;; $Id: vc.el,v 1.324 2001/12/20 18:47:19 pj Exp $ ;; This file is part of GNU Emacs. @@ -365,6 +365,10 @@ ;; `revert' operations itself, without calling the backend system. The ;; default implementation always returns nil. ;; +;; - previous-version (file rev) +;; +;; Return the version number that precedes REV for FILE. +;; ;; - check-headers () ;; ;; Return non-nil if the current buffer contains any version headers. @@ -689,27 +693,32 @@ The keys are \(BUFFER . BACKEND\). See also `vc-annotate-get-backend'.") (defun vc-branch-part (rev) "Return the branch part of a revision number REV." - (substring rev 0 (string-match "\\.[0-9]+\\'" rev))) + (let ((index (string-match "\\.[0-9]+\\'" rev))) + (if index + (substring rev 0 index)))) (defun vc-minor-part (rev) "Return the minor version number of a revision number REV." (string-match "[0-9]+\\'" rev) (substring rev (match-beginning 0) (match-end 0))) -(defun vc-previous-version (rev) - "Guess the version number immediately preceding REV." +(defun vc-default-previous-version (backend file rev) + "Guess the version number immediately preceding REV for FILE. +This default implementation works for .-style version numbers +as used by RCS and CVS." (let ((branch (vc-branch-part rev)) (minor-num (string-to-number (vc-minor-part rev)))) - (if (> minor-num 1) - ;; version does probably not start a branch or release - (concat branch "." (number-to-string (1- minor-num))) - (if (vc-trunk-p rev) - ;; we are at the beginning of the trunk -- - ;; don't know anything to return here - "" - ;; we are at the beginning of a branch -- - ;; return version of starting point - (vc-branch-part branch))))) + (when branch + (if (> minor-num 1) + ;; version does probably not start a branch or release + (concat branch "." (number-to-string (1- minor-num))) + (if (vc-trunk-p rev) + ;; we are at the beginning of the trunk -- + ;; don't know anything to return here + nil + ;; we are at the beginning of a branch -- + ;; return version of starting point + (vc-branch-part branch)))))) ;; File property caching @@ -1510,9 +1519,16 @@ After check-out, runs the normal hook `vc-checkout-hook'." (if (not (yes-or-no-p (format "Steal the lock on %s from %s? " file-description owner))) (error "Steal canceled")) - (compose-mail owner (format "Stolen lock on %s" file-description) - nil nil nil nil - (list (list 'vc-finish-steal file rev))) + (message "Stealing lock on %s..." file) + (with-vc-properties + file + (vc-call steal-lock file rev) + `((vc-state . edited))) + (vc-resynch-buffer file t t) + (message "Stealing lock on %s...done" file) + ;; Write mail after actually stealing, because if the stealing + ;; goes wrong, we don't want to send any mail. + (compose-mail owner (format "Stolen lock on %s" file-description)) (setq default-directory (expand-file-name "~/")) (goto-char (point-max)) (insert @@ -1521,16 +1537,6 @@ After check-out, runs the normal hook `vc-checkout-hook'." ".\n") (message "Please explain why you stole the lock. Type C-c C-c when done."))) -(defun vc-finish-steal (file version) - ;; This is called when the notification has been sent. - (message "Stealing lock on %s..." file) - (with-vc-properties - file - (vc-call steal-lock file version) - `((vc-state . edited))) - (vc-resynch-buffer file t t) - (message "Stealing lock on %s...done" file)) - (defun vc-checkin (file &optional rev comment initial-contents) "Check in FILE. The optional argument REV may be a string specifying the new version @@ -1771,7 +1777,8 @@ versions of all registered files in or below it." (setq rel1-default (vc-workfile-version file))) ;; if the file is not locked, use last and previous version as default (t - (setq rel1-default (vc-previous-version (vc-workfile-version file))) + (setq rel1-default (vc-call previous-version file + (vc-workfile-version file))) (if (string= rel1-default "") (setq rel1-default nil)) (setq rel2-default (vc-workfile-version file)))) ;; construct argument list -- 2.39.2