summaryrefslogtreecommitdiff
path: root/lisp/vc.el
diff options
context:
space:
mode:
authorStefan Monnier <monnier@iro.umontreal.ca>2005-12-23 04:57:28 +0000
committerStefan Monnier <monnier@iro.umontreal.ca>2005-12-23 04:57:28 +0000
commit04864eb004fb57359c3d881aac1b334f75d78570 (patch)
treecbf727e7bd8968d68bd65c274258022f856dd874 /lisp/vc.el
parent0ee01fffb7c96345023e45b66b7fd564bed3a383 (diff)
downloademacs-04864eb004fb57359c3d881aac1b334f75d78570.tar.gz
Remove unnecessary leading * in docstrings.
(vc-annotate-mode-map): Move initialization into declaration. (vc-static-header-alist): Nitpick on the regexp. (vc-default-init-version): New fun. (vc-register): Use it. (vc-insert-headers): Use dolist. (vc-annotate-get-backend): Remove unused function. (vc-annotate-add-menu): Remove. Build the menu directly at toplevel. (vc-annotate-mode): Remove corresponding call. (vc-annotate-car-last-cons): Simplify. (vc-annotate-buffers): Remove var. (vc-annotate-backend): Make it buffer-local. (vc-annotate): Move the interaction to the interactive spec. Add a `buf' argument. (vc-annotate-warp-version): Use this new `buf' argument to avoid killing&creating a vc-annotate buffer, which is very disruptive when the buffers are shown in dedicated frames.
Diffstat (limited to 'lisp/vc.el')
-rw-r--r--lisp/vc.el302
1 files changed, 128 insertions, 174 deletions
diff --git a/lisp/vc.el b/lisp/vc.el
index d06e49ef1ba..6d82b56f9b6 100644
--- a/lisp/vc.el
+++ b/lisp/vc.el
@@ -469,12 +469,12 @@
:group 'tools)
(defcustom vc-suppress-confirm nil
- "*If non-nil, treat user as expert; suppress yes-no prompts on some things."
+ "If non-nil, treat user as expert; suppress yes-no prompts on some things."
:type 'boolean
:group 'vc)
(defcustom vc-delete-logbuf-window t
- "*If non-nil, delete the *VC-log* buffer and window after each logical action.
+ "If non-nil, delete the *VC-log* buffer and window after each logical action.
If nil, bury that buffer instead.
This is most useful if you have multiple windows on a frame and would like to
preserve the setting."
@@ -482,12 +482,12 @@ preserve the setting."
:group 'vc)
(defcustom vc-initial-comment nil
- "*If non-nil, prompt for initial comment when a file is registered."
+ "If non-nil, prompt for initial comment when a file is registered."
:type 'boolean
:group 'vc)
(defcustom vc-default-init-version "1.1"
- "*A string used as the default version number when a new file is registered.
+ "A string used as the default version number when a new file is registered.
This can be overridden by giving a prefix argument to \\[vc-register]. This
can also be overridden by a particular VC backend."
:type 'string
@@ -495,12 +495,12 @@ can also be overridden by a particular VC backend."
:version "20.3")
(defcustom vc-command-messages nil
- "*If non-nil, display run messages from back-end commands."
+ "If non-nil, display run messages from back-end commands."
:type 'boolean
:group 'vc)
(defcustom vc-checkin-switches nil
- "*A string or list of strings specifying extra switches for checkin.
+ "A string or list of strings specifying extra switches for checkin.
These are passed to the checkin program by \\[vc-checkin]."
:type '(choice (const :tag "None" nil)
(string :tag "Argument String")
@@ -510,7 +510,7 @@ These are passed to the checkin program by \\[vc-checkin]."
:group 'vc)
(defcustom vc-checkout-switches nil
- "*A string or list of strings specifying extra switches for checkout.
+ "A string or list of strings specifying extra switches for checkout.
These are passed to the checkout program by \\[vc-checkout]."
:type '(choice (const :tag "None" nil)
(string :tag "Argument String")
@@ -520,7 +520,7 @@ These are passed to the checkout program by \\[vc-checkout]."
:group 'vc)
(defcustom vc-register-switches nil
- "*A string or list of strings; extra switches for registering a file.
+ "A string or list of strings; extra switches for registering a file.
These are passed to the checkin program by \\[vc-register]."
:type '(choice (const :tag "None" nil)
(string :tag "Argument String")
@@ -530,30 +530,30 @@ These are passed to the checkin program by \\[vc-register]."
:group 'vc)
(defcustom vc-dired-listing-switches "-al"
- "*Switches passed to `ls' for vc-dired. MUST contain the `l' option."
+ "Switches passed to `ls' for vc-dired. MUST contain the `l' option."
:type 'string
:group 'vc
:version "21.1")
(defcustom vc-dired-recurse t
- "*If non-nil, show directory trees recursively in VC Dired."
+ "If non-nil, show directory trees recursively in VC Dired."
:type 'boolean
:group 'vc
:version "20.3")
(defcustom vc-dired-terse-display t
- "*If non-nil, show only locked files in VC Dired."
+ "If non-nil, show only locked files in VC Dired."
:type 'boolean
:group 'vc
:version "20.3")
(defcustom vc-directory-exclusion-list '("SCCS" "RCS" "CVS" "MCVS" ".svn" "{arch}")
- "*List of directory names to be ignored when walking directory trees."
+ "List of directory names to be ignored when walking directory trees."
:type '(repeat string)
:group 'vc)
(defcustom vc-diff-switches nil
- "*A string or list of strings specifying switches for diff under VC.
+ "A string or list of strings specifying switches for diff under VC.
When running diff under a given BACKEND, VC concatenates the values of
`diff-switches', `vc-diff-switches', and `vc-BACKEND-diff-switches' to
get the switches for that command. Thus, `vc-diff-switches' should
@@ -568,7 +568,7 @@ specific to any particular backend."
:version "21.1")
(defcustom vc-allow-async-revert nil
- "*Specifies whether the diff during \\[vc-revert-buffer] may be asynchronous.
+ "Specifies whether the diff during \\[vc-revert-buffer] may be asynchronous.
Enabling this option means that you can confirm a revert operation even
if the local changes in the file have not been found and displayed yet."
:type '(choice (const :tag "No" nil)
@@ -578,7 +578,7 @@ if the local changes in the file have not been found and displayed yet."
;;;###autoload
(defcustom vc-checkout-hook nil
- "*Normal hook (list of functions) run after checking out a file.
+ "Normal hook (list of functions) run after checking out a file.
See `run-hooks'."
:type 'hook
:group 'vc
@@ -595,7 +595,7 @@ See `run-hooks'."
;;;###autoload
(defcustom vc-checkin-hook nil
- "*Normal hook (list of functions) run after a checkin is done.
+ "Normal hook (list of functions) run after a checkin is done.
See also `log-edit-done-hook'."
:type 'hook
:options '(log-edit-comment-to-change-log)
@@ -603,13 +603,13 @@ See also `log-edit-done-hook'."
;;;###autoload
(defcustom vc-before-checkin-hook nil
- "*Normal hook (list of functions) run before a file is checked in.
+ "Normal hook (list of functions) run before a file is checked in.
See `run-hooks'."
:type 'hook
:group 'vc)
(defcustom vc-logentry-check-hook nil
- "*Normal hook run by `vc-backend-logentry-check'.
+ "Normal hook run by `vc-backend-logentry-check'.
Use this to impose your own rules on the entry in addition to any the
version control backend imposes itself."
:type 'hook
@@ -634,25 +634,25 @@ version control backend imposes itself."
(300. . "#00CCFF")
(320. . "#00CC99")
(340. . "#0099FF"))
- "*Association list of age versus color, for \\[vc-annotate].
+ "Association list of age versus color, for \\[vc-annotate].
Ages are given in units of fractional days. Default is eighteen steps
using a twenty day increment."
:type 'alist
:group 'vc)
(defcustom vc-annotate-very-old-color "#0046FF"
- "*Color for lines older than the current color range in \\[vc-annotate]]."
+ "Color for lines older than the current color range in \\[vc-annotate]]."
:type 'string
:group 'vc)
(defcustom vc-annotate-background "black"
- "*Background color for \\[vc-annotate].
+ "Background color for \\[vc-annotate].
Default color is used if nil."
:type 'string
:group 'vc)
(defcustom vc-annotate-menu-elements '(2 0.5 0.1 0.01)
- "*Menu elements for the mode-specific menu of VC-Annotate mode.
+ "Menu elements for the mode-specific menu of VC-Annotate mode.
List of factors, used to expand/compress the time scale. See `vc-annotate'."
:type '(repeat number)
:group 'vc)
@@ -660,24 +660,23 @@ List of factors, used to expand/compress the time scale. See `vc-annotate'."
(defvar vc-annotate-mode-map
(let ((m (make-sparse-keymap)))
(define-key m [menu-bar] (make-sparse-keymap "VC-Annotate"))
+ (define-key m "A" 'vc-annotate-revision-previous-to-line)
+ (define-key m "D" 'vc-annotate-show-diff-revision-at-line)
+ (define-key m "J" 'vc-annotate-revision-at-line)
+ (define-key m "L" 'vc-annotate-show-log-revision-at-line)
+ (define-key m "N" 'vc-annotate-next-version)
+ (define-key m "P" 'vc-annotate-prev-version)
+ (define-key m "W" 'vc-annotate-workfile-version)
m)
"Local keymap used for VC-Annotate mode.")
-(define-key vc-annotate-mode-map "A" 'vc-annotate-revision-previous-to-line)
-(define-key vc-annotate-mode-map "D" 'vc-annotate-show-diff-revision-at-line)
-(define-key vc-annotate-mode-map "J" 'vc-annotate-revision-at-line)
-(define-key vc-annotate-mode-map "L" 'vc-annotate-show-log-revision-at-line)
-(define-key vc-annotate-mode-map "N" 'vc-annotate-next-version)
-(define-key vc-annotate-mode-map "P" 'vc-annotate-prev-version)
-(define-key vc-annotate-mode-map "W" 'vc-annotate-workfile-version)
-
(defvar vc-annotate-mode-menu nil
"Local keymap used for VC-Annotate mode's menu bar menu.")
;; Header-insertion hair
(defcustom vc-static-header-alist
- '(("\\.c$" .
+ '(("\\.c\\'" .
"\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
@@ -713,9 +712,7 @@ and that its contents match what the master file says."
;; Variables the user doesn't need to know about.
(defvar vc-log-operation nil)
(defvar vc-log-after-operation-hook nil)
-(defvar vc-annotate-buffers nil
- "Alist of current \"Annotate\" buffers and their corresponding backends.
-The keys are \(BUFFER . BACKEND\). See also `vc-annotate-get-backend'.")
+
;; In a log entry buffer, this is a local variable
;; that points to the buffer for which it was made
;; (either a file, or a VC dired buffer).
@@ -1367,6 +1364,8 @@ merge in the changes into your working copy."
;; These functions help the vc-next-action entry point
+(defun vc-default-init-version (backend) vc-default-init-version)
+
;;;###autoload
(defun vc-register (&optional set-version comment)
"Register the current file into a version control system.
@@ -1398,10 +1397,8 @@ first backend that could register the file is used."
(if set-version
(read-string (format "Initial version level for %s: "
(buffer-name)))
- (let ((backend (vc-responsible-backend buffer-file-name)))
- (if (vc-find-backend-function backend 'init-version)
- (vc-call-backend backend 'init-version)
- vc-default-init-version)))
+ (vc-call-backend (vc-responsible-backend buffer-file-name)
+ 'init-version))
(or comment (not vc-initial-comment))
nil
"Enter initial comment."
@@ -1937,24 +1934,19 @@ the variable `vc-BACKEND-header'."
(widen)
(if (or (not (vc-check-headers))
(y-or-n-p "Version headers already exist. Insert another set? "))
- (progn
- (let* ((delims (cdr (assq major-mode vc-comment-alist)))
- (comment-start-vc (or (car delims) comment-start "#"))
- (comment-end-vc (or (car (cdr delims)) comment-end ""))
- (hdsym (vc-make-backend-sym (vc-backend buffer-file-name)
- 'header))
- (hdstrings (and (boundp hdsym) (symbol-value hdsym))))
- (mapcar (lambda (s)
- (insert comment-start-vc "\t" s "\t"
- comment-end-vc "\n"))
- hdstrings)
- (if vc-static-header-alist
- (mapcar (lambda (f)
- (if (string-match (car f) buffer-file-name)
- (insert (format (cdr f) (car hdstrings)))))
- vc-static-header-alist))
- )
- )))))
+ (let* ((delims (cdr (assq major-mode vc-comment-alist)))
+ (comment-start-vc (or (car delims) comment-start "#"))
+ (comment-end-vc (or (car (cdr delims)) comment-end ""))
+ (hdsym (vc-make-backend-sym (vc-backend buffer-file-name)
+ 'header))
+ (hdstrings (and (boundp hdsym) (symbol-value hdsym))))
+ (dolist (s hdstrings)
+ (insert comment-start-vc "\t" s "\t"
+ comment-end-vc "\n"))
+ (if vc-static-header-alist
+ (dolist (f vc-static-header-alist)
+ (if (string-match (car f) buffer-file-name)
+ (insert (format (cdr f) (car hdstrings)))))))))))
(defun vc-clear-headers (&optional file)
"Clear all version headers in the current buffer (or FILE).
@@ -2897,8 +2889,7 @@ Uses `rcs2log' which only works for RCS and CVS."
(concat odefault f))))
files)))
"done"
- (pop-to-buffer
- (set-buffer (get-buffer-create "*vc*")))
+ (pop-to-buffer (get-buffer-create "*vc*"))
(erase-buffer)
(insert-file-contents tempfile)
"failed"))
@@ -2913,9 +2904,9 @@ Uses `rcs2log' which only works for RCS and CVS."
;; annotate-mode, which replaces it with the more sensible "span-to
;; days", along with autoscaling support.
(defvar vc-annotate-ratio nil "Global variable.")
-(defvar vc-annotate-backend nil "Global variable.")
;; internal buffer-local variables
+(defvar vc-annotate-backend nil)
(defvar vc-annotate-parent-file nil)
(defvar vc-annotate-parent-rev nil)
(defvar vc-annotate-parent-display-mode nil)
@@ -2924,12 +2915,6 @@ Uses `rcs2log' which only works for RCS and CVS."
;; The fontification is done by vc-annotate-lines instead of font-lock.
'((vc-annotate-lines)))
-(defun vc-annotate-get-backend (buffer)
- "Return the backend matching \"Annotate\" buffer BUFFER.
-Return nil if no match made. Associations are made based on
-`vc-annotate-buffers'."
- (cdr (assoc buffer vc-annotate-buffers)))
-
(define-derived-mode vc-annotate-mode fundamental-mode "Annotate"
"Major mode for output buffers of the `vc-annotate' command.
@@ -2939,8 +2924,7 @@ menu items."
(set (make-local-variable 'truncate-lines) t)
(set (make-local-variable 'font-lock-defaults)
'(vc-annotate-font-lock-keywords t))
- (view-mode 1)
- (vc-annotate-add-menu))
+ (view-mode 1))
(defun vc-annotate-display-default (&optional ratio)
"Display the output of \\[vc-annotate] using the default color range.
@@ -2987,70 +2971,48 @@ cover the range from the oldest annotation to the newest."
(format "Spanned to %.1f days old" (- current oldest))))))
;; Menu -- Using easymenu.el
-(defun vc-annotate-add-menu ()
- "Add the menu 'Annotate' to the menu bar in VC-Annotate mode."
- (let ((menu-elements vc-annotate-menu-elements)
- (menu-def
- '("VC-Annotate"
- ["Default" (unless (null vc-annotate-display-mode)
- (setq vc-annotate-display-mode nil)
- (vc-annotate-display-select))
- :style toggle :selected (null vc-annotate-display-mode)]))
- (oldest-in-map (vc-annotate-car-last-cons vc-annotate-color-map)))
- (while menu-elements
- (let* ((element (car menu-elements))
- (days (* element oldest-in-map)))
- (setq menu-elements (cdr menu-elements))
- (setq menu-def
- (append menu-def
- `([,(format "Span %.1f days" days)
- (unless (and (numberp vc-annotate-display-mode)
- (= vc-annotate-display-mode ,days))
- (vc-annotate-display-select nil ,days))
- :style toggle :selected
- (and (numberp vc-annotate-display-mode)
- (= vc-annotate-display-mode ,days)) ])))))
- (setq menu-def
- (append menu-def
- (list
- ["Span ..."
- (let ((days
- (float (string-to-number
- (read-string "Span how many days? ")))))
- (vc-annotate-display-select nil days)) t])
- (list "--")
- (list
- ["Span to Oldest"
- (unless (eq vc-annotate-display-mode 'scale)
- (vc-annotate-display-select nil 'scale))
- :style toggle :selected
- (eq vc-annotate-display-mode 'scale)])
- (list
- ["Span Oldest->Newest"
- (unless (eq vc-annotate-display-mode 'fullscale)
- (vc-annotate-display-select nil 'fullscale))
- :style toggle :selected
- (eq vc-annotate-display-mode 'fullscale)])
- (list "--")
- (list ["Annotate previous revision"
- (call-interactively 'vc-annotate-prev-version)])
- (list ["Annotate next revision"
- (call-interactively 'vc-annotate-next-version)])
- (list ["Annotate revision at line"
- (vc-annotate-revision-at-line)])
- (list ["Annotate revision previous to line"
- (vc-annotate-revision-previous-to-line)])
- (list ["Annotate latest revision"
- (vc-annotate-workfile-version)])
- (list ["Show log of revision at line"
- (vc-annotate-show-log-revision-at-line)])
- (list ["Show diff of revision at line"
- (vc-annotate-show-diff-revision-at-line)])))
-
- ;; Define the menu
- (if (or (featurep 'easymenu) (load "easymenu" t))
- (easy-menu-define vc-annotate-mode-menu vc-annotate-mode-map
- "VC Annotate Display Menu" menu-def))))
+(easy-menu-define vc-annotate-mode-menu vc-annotate-mode-map
+ "VC Annotate Display Menu"
+ `("VC-Annotate"
+ ["Default" (unless (null vc-annotate-display-mode)
+ (setq vc-annotate-display-mode nil)
+ (vc-annotate-display-select))
+ :style toggle :selected (null vc-annotate-display-mode)]
+ ,@(let ((oldest-in-map (vc-annotate-car-last-cons vc-annotate-color-map)))
+ (mapcar (lambda (element)
+ (let ((days (* element oldest-in-map)))
+ `([,(format "Span %.1f days" days)
+ (unless (and (numberp vc-annotate-display-mode)
+ (= vc-annotate-display-mode ,days))
+ (vc-annotate-display-select nil ,days))
+ :style toggle :selected
+ (and (numberp vc-annotate-display-mode)
+ (= vc-annotate-display-mode ,days)) ])))
+ vc-annotate-menu-elements))
+ ["Span ..."
+ (let ((days
+ (float (string-to-number
+ (read-string "Span how many days? ")))))
+ (vc-annotate-display-select nil days)) t]
+ "--"
+ ["Span to Oldest"
+ (unless (eq vc-annotate-display-mode 'scale)
+ (vc-annotate-display-select nil 'scale))
+ :style toggle :selected
+ (eq vc-annotate-display-mode 'scale)]
+ ["Span Oldest->Newest"
+ (unless (eq vc-annotate-display-mode 'fullscale)
+ (vc-annotate-display-select nil 'fullscale))
+ :style toggle :selected
+ (eq vc-annotate-display-mode 'fullscale)]
+ "--"
+ ["Annotate previous revision" vc-annotate-prev-version]
+ ["Annotate next revision" vc-annotate-next-version]
+ ["Annotate revision at line" vc-annotate-revision-at-line]
+ ["Annotate revision previous to line" vc-annotate-revision-previous-to-line]
+ ["Annotate latest revision" vc-annotate-workfile-version]
+ ["Show log of revision at line" vc-annotate-show-log-revision-at-line]
+ ["Show diff of revision at line" vc-annotate-show-diff-revision-at-line]))
(defun vc-annotate-display-select (&optional buffer mode)
"Highlight the output of \\[vc-annotate].
@@ -3083,7 +3045,7 @@ use; you may override this using the second optional arg MODE."
;;;; the contents in BUFFER.
;;;###autoload
-(defun vc-annotate (prefix &optional revision display-mode)
+(defun vc-annotate (file rev &optional display-mode buf)
"Display the edit history of the current file using colors.
This command creates a buffer that shows, for each line of the current
@@ -3108,48 +3070,44 @@ Customization variables:
mode-specific menu. `vc-annotate-color-map' and
`vc-annotate-very-old-color' defines the mapping of time to
colors. `vc-annotate-background' specifies the background color."
- (interactive "P")
+ (interactive
+ (save-current-buffer
+ (vc-ensure-vc-buffer)
+ (list buffer-file-name
+ (let ((def (vc-workfile-version buffer-file-name)))
+ (if (null current-prefix-arg) def
+ (read-string
+ (format "Annotate from version (default %s): " def)
+ nil nil def)))
+ (if (null current-prefix-arg)
+ vc-annotate-display-mode
+ (float (string-to-number
+ (read-string "Annotate span days (default 20): "
+ nil nil "20")))))))
(vc-ensure-vc-buffer)
- (let* ((temp-buffer-name nil)
- (temp-buffer-show-function 'vc-annotate-display-select)
- (rev (or revision (vc-workfile-version buffer-file-name)))
- (bfn buffer-file-name)
- (vc-annotate-version
- (if prefix (read-string
- (format "Annotate from version (default %s): " rev)
- nil nil rev)
- rev)))
- (if display-mode
- (setq vc-annotate-display-mode display-mode)
- (if prefix
- (setq vc-annotate-display-mode
- (float (string-to-number
- (read-string "Annotate span days (default 20): "
- nil nil "20"))))))
- (setq temp-buffer-name (format "*Annotate %s (rev %s)*"
- (buffer-name) vc-annotate-version))
- (setq vc-annotate-backend (vc-backend buffer-file-name))
+ (setq vc-annotate-display-mode display-mode) ;Not sure why. --Stef
+ (let* ((temp-buffer-name (format "*Annotate %s (rev %s)*" (buffer-name) rev))
+ (temp-buffer-show-function 'vc-annotate-display-select))
(message "Annotating...")
+ ;; If BUF is specified it tells in which buffer we should put the
+ ;; annotations. This is used when switching annotations to another
+ ;; revision, so we should update the buffer's name.
+ (if buf (with-current-buffer buf
+ (rename-buffer temp-buffer-name t)
+ ;; In case it had to be uniquified.
+ (setq temp-buffer-name (buffer-name))))
(if (not (vc-find-backend-function vc-annotate-backend 'annotate-command))
(error "Sorry, annotating is not implemented for %s"
vc-annotate-backend))
(with-output-to-temp-buffer temp-buffer-name
- (vc-call-backend vc-annotate-backend 'annotate-command
- buffer-file-name
- (get-buffer temp-buffer-name)
- vc-annotate-version))
- (save-excursion
- (set-buffer temp-buffer-name)
- (set (make-local-variable 'vc-annotate-parent-file) bfn)
- (set (make-local-variable 'vc-annotate-parent-rev) vc-annotate-version)
+ (vc-call annotate-command file (get-buffer temp-buffer-name) rev))
+ (with-current-buffer temp-buffer-name
+ (set (make-local-variable 'vc-annotate-backend) (vc-backend file))
+ (set (make-local-variable 'vc-annotate-parent-file) file)
+ (set (make-local-variable 'vc-annotate-parent-rev) rev)
(set (make-local-variable 'vc-annotate-parent-display-mode)
- vc-annotate-display-mode))
+ display-mode))
- ;; Don't use the temp-buffer-name until the buffer is created
- ;; (only after `with-output-to-temp-buffer'.)
- (setq vc-annotate-buffers
- (append vc-annotate-buffers
- (list (cons (get-buffer temp-buffer-name) vc-annotate-backend))))
(message "Annotating... done")))
(defun vc-annotate-prev-version (prefix)
@@ -3274,20 +3232,16 @@ revision."
((stringp revspec) (setq newrev revspec))
(t (error "Invalid argument to vc-annotate-warp-version")))
(when newrev
- (save-window-excursion
- (find-file vc-annotate-parent-file)
- (vc-annotate nil newrev vc-annotate-parent-display-mode))
- (kill-buffer (current-buffer)) ;; kill the buffer we started from
- (switch-to-buffer (car (car (last vc-annotate-buffers))))
+ (vc-annotate vc-annotate-parent-file newrev
+ vc-annotate-parent-display-mode
+ (current-buffer))
(goto-line (min oldline (progn (goto-char (point-max))
(previous-line)
(line-number-at-pos))))))))
(defun vc-annotate-car-last-cons (a-list)
"Return car of last cons in association list A-LIST."
- (if (not (eq nil (cdr a-list)))
- (vc-annotate-car-last-cons (cdr a-list))
- (car (car a-list))))
+ (caar (last a-list)))
(defun vc-annotate-time-span (a-list span &optional quantize)
"Apply factor SPAN to the time-span of association list A-LIST.