Mercurial > emacs
changeset 2226:b2216b3b8f57
(vc-header-strings) Name changed to vc-header-alist, to match the
docs.
(vc-finish-logentry, vc-next-comment, vc-previous-comment,
vc-comment-search-forward, vc-comment-search-backward) The VC comment
ring is now a separate buffer from *VC-log*; editing of old comments
is no longer destructive.
author | Eric S. Raymond <esr@snark.thyrsus.com> |
---|---|
date | Wed, 17 Mar 1993 13:58:48 +0000 |
parents | 19e1e3cb7415 |
children | d86258329922 |
files | lisp/vc.el |
diffstat | 1 files changed, 89 insertions(+), 59 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/vc.el Wed Mar 17 13:23:14 1993 +0000 +++ b/lisp/vc.el Wed Mar 17 13:58:48 1993 +0000 @@ -3,9 +3,9 @@ ;; Copyright (C) 1992 Free Software Foundation, Inc. ;; Author: Eric S. Raymond <esr@snark.thyrsus.com> -;; Version: 5.0 +;; Version: 5.2 -;; $Id: vc.el,v 1.26.1.1 1993/03/16 20:54:53 eggert Exp $ +;; $Id: vc.el,v 1.27 1993/03/16 21:09:56 eggert Exp eric $ ;; This file is part of GNU Emacs. @@ -90,7 +90,8 @@ "\n#ifndef lint\nstatic char vcid[] = \"\%s\";\n#endif /* lint */\n")) "*Associate static header string templates with file types. A \%s in the template is replaced with the first string associated with the file's -verson-control type in vc-header-strings.") +verson-control type in vc-header-alist.") + (defvar vc-comment-alist '((nroff-mode ".\\\"" "")) "*Special comment delimiters to be used in generating vc headers only. @@ -220,7 +221,7 @@ (- (point) (length context-string)))))))) (defun vc-revert-buffer1 (&optional arg no-confirm) - ;; This code was shamelessly lifted from Sebastian Kremer's rcs.el mode. + ;; Most of this was shamelessly lifted from Sebastian Kremer's rcs.el mode. ;; Revert buffer, try to keep point and mark where user expects them in spite ;; of changes because of expanded version-control key words. ;; This is quite important since otherwise typeahead won't work as expected. @@ -232,7 +233,11 @@ (vc-position-context (mark-marker)))) ;; Make the right thing happen in transient-mark-mode. (mark-active nil)) + + ;; the actual revisit (revert-buffer arg no-confirm) + + ;; Restore point and mark (let ((new-point (vc-find-position-by-context point-context))) (if new-point (goto-char new-point))) (if mark-context @@ -344,7 +349,7 @@ (defun vc-checkout-writeable-buffer () "Retrieve a writeable copy of the latest version of the current buffer's file." - (vc-checkout buffer-file-name t) + (vc-checkout (buffer-file-name) t) ) ;;;###autoload @@ -461,28 +466,32 @@ (interactive) (goto-char (point-max)) (if (not (bolp)) (newline)) - ;; delimit current page + ;; Append the contents of the log buffer to the comment ring (save-excursion - (widen) + (set-buffer (get-buffer-create "*VC-comment-ring*")) (goto-char (point-max)) + (set-mark (point)) + (insert-buffer-substring "*VC-log*") (if (and (not (bobp)) (not (= (char-after (1- (point))) ?\f))) - (insert-char ?\f 1))) - (if (not (bobp)) - (forward-char -1)) - (mark-page) - ;; Check for errors - (vc-backend-logentry-check vc-log-file) + (insert-char ?\f 1)) + (if (not (bobp)) + (forward-char -1)) + (exchange-point-and-mark) + ;; Check for errors + (vc-backend-logentry-check vc-log-file) + ) ;; OK, do it to it (if vc-log-operation (funcall vc-log-operation vc-log-file vc-log-version - (buffer-substring (region-beginning) (1- (region-end)))) + (buffer-string)) (error "No log operation is pending.")) ;; Return to "parent" buffer of this checkin and remove checkin window (pop-to-buffer (get-file-buffer vc-log-file)) (delete-window (get-buffer-window "*VC-log*")) (bury-buffer "*VC-log*") + (bury-buffer "*VC-comment-ring*") ;; Now make sure we see the expanded headers (vc-resynch-window buffer-file-name vc-keep-workfiles t) (run-hooks vc-log-after-operation-hook) @@ -493,42 +502,54 @@ (defun vc-next-comment () "Fill the log buffer with the next message in the msg ring." (interactive) - (widen) - (forward-page) - (if (= (point) (point-max)) - (goto-char (point-min))) - (mark-page) - (narrow-to-page)) + (erase-buffer) + (save-excursion + (set-buffer "*VC-comment-ring*") + (forward-page) + (if (= (point) (point-max)) + (goto-char (point-min))) + (mark-page) + (append-to-buffer "*VC-log*" (point) (1- (mark))) + )) (defun vc-previous-comment () "Fill the log buffer with the previous message in the msg ring." (interactive) - (widen) - (if (= (point) (point-min)) - (goto-char (point-max))) - (backward-page) - (mark-page) - (narrow-to-page)) + (erase-buffer) + (save-excursion + (set-buffer "*VC-comment-ring*") + (if (= (point) (point-min)) + (goto-char (point-max))) + (backward-page) + (mark-page) + (append-to-buffer "*VC-log*" (point) (1- (mark))) + )) (defun vc-comment-search-backward (regexp) "Fill the log buffer with the last message in the msg ring matching REGEXP." (interactive "sSearch backward for: ") - (widen) - (if (= (point) (point-min)) - (goto-char (point-max))) - (re-search-backward regexp nil t) - (mark-page) - (narrow-to-page)) + (erase-buffer) + (save-excursion + (set-buffer "*VC-comment-ring*") + (if (= (point) (point-min)) + (goto-char (point-max))) + (re-search-backward regexp nil t) + (mark-page) + (append-to-buffer "*VC-log*" (point) (1- (mark))) + )) (defun vc-comment-search-forward (regexp) "Fill the log buffer with the next message in the msg ring matching REGEXP." (interactive "sSearch forward for: ") - (widen) - (if (= (point) (point-min)) - (goto-char (point-max))) - (re-search-forward regexp nil t) - (mark-page) - (narrow-to-page)) + (erase-buffer) + (save-excursion + (set-buffer "*VC-comment-ring*") + (if (= (point) (point-max)) + (goto-char (point-min))) + (re-search-forward regexp nil t) + (mark-page) + (append-to-buffer "*VC-log*" (point) (1- (mark))) + )) ;; Additional entry points for examining version histories @@ -602,7 +623,7 @@ (defun vc-insert-headers () "Insert headers in a file for use with your version-control system. Headers desired are inserted at the start of the buffer, and are pulled from -the variable vc-header-strings" +the variable vc-header-alist" (interactive) (save-excursion (save-restriction @@ -675,14 +696,17 @@ )) (defun vc-lookup-triple (file name) - (or - name - (let ((firstchar (aref name 0))) - (and (>= firstchar ?0) (<= firstchar ?9) name)) - (car (vc-master-info - (concat (vc-backend-subdirectory-name file) "/" vc-name-assoc-file) - (list (concat name "\t:\t" file "\t\\(.+\\)")))) - )) + ;; Return the numeric version corresponding to a named snapshot of file + ;; If name is nil or a version number string it's just passed through + (cond ((null name) "") + ((let ((firstchar (aref name 0))) + (and (>= firstchar ?0) (<= firstchar ?9))) + name) + (t + (car (vc-master-info + (concat (vc-backend-subdirectory-name file) "/" vc-name-assoc-file) + (list (concat name "\t:\t" file "\t\\(.+\\)")))) + ))) ;; Named-configuration entry points @@ -766,14 +790,18 @@ (defun vc-cancel-version (norevert) "Undo your latest checkin." (interactive "P") - (let ((target (vc-your-latest-version (buffer-file-name)))) - (if (null target) - (error "You didn't check in the last change.")) - (and (yes-or-no-p (format "Remove version %s from master? " target)) - (vc-backend-uncheck (buffer-file-name) target))) - (if norevert - (vc-mode-line (buffer-file-name)) - (vc-checkout (buffer-file-name) nil)) + (let ((target (concat (vc-latest-version (buffer-file-name)))) + (yours (concat (vc-your-latest-version))) + (prompt (if (string-equal yours target) + "Remove your version %s from master?" + "Version %s was not your change. Remove it anyway?"))) + (if (null (yes-or-no-p (format prompt target))) + nil + (vc-backend-uncheck (buffer-file-name) target) + (if norevert + (vc-mode-line (buffer-file-name)) + (vc-checkout (buffer-file-name) nil))) + ) ) (defun vc-rename-file (old new) @@ -963,7 +991,8 @@ ;; ;; Everything eventually funnels through these functions. To implement ;; support for a new version-control system, add another branch to the -;; vc-backend-dispatch macro (in vc-hooks.el) and fill it in in each call. +;; vc-backend-dispatch macro and fill it in in each call. The variable +;; vc-master-templates in vc-hooks.el will also have to change. (defmacro vc-backend-dispatch (f s r) "Execute FORM1 or FORM2 depending on whether we're using SCCS or RCS." @@ -1091,7 +1120,6 @@ (vc-backend-dispatch file (if (>= (- (region-end) (region-beginning)) 512) ;; SCCS (progn - (message "Reverting %s..." file) (goto-char 512) (error "Log must be less than 512 characters. Point is now at char 512."))) @@ -1101,7 +1129,6 @@ (defun vc-backend-checkin (file &optional rev comment) ;; Register changes to FILE as level REV with explanatory COMMENT. ;; Automatically retrieves a read-only version of the file with - (message "Reverting %s...done" file) ;; keywords expanded if vc-keep-workfiles is non-nil, otherwise ;; it deletes the workfile. (message "Checking in %s..." file) @@ -1185,6 +1212,9 @@ (defun vc-backend-diff (file oldvers &optional newvers) ;; Get a difference report between two versions + (if (eq (vc-backend-deduce file) 'SCCS) + (setq oldvers (vc-lookup-triple file oldvers)) + (setq newvers (vc-lookup-triple file newvers))) (apply 'vc-do-command 1 (or (vc-backend-dispatch file "vcdiff" "rcsdiff") (error "File %s is not under version control." file)) @@ -1252,7 +1282,7 @@ vc-diff-options A list consisting of the flags to be used for generating context diffs. - vc-header-strings Which keywords to insert when adding headers + vc-header-alist Which keywords to insert when adding headers with \\[vc-insert-headers]. Defaults to '(\"\%\W\%\") under SCCS, '(\"\$Id\$\") under RCS.