# HG changeset patch # User Stefan Monnier # Date 1182748145 0 # Node ID feafa882a0cf1fc4761dfaede18274d3fb525d5a # Parent 6a5ecb520686986b11538409c78aa1b9249e14bb (autoload-modified-buffers): New var. (autoload-find-destination): Keep it uptodate. (autoload-save-buffers): New fun. (update-file-autoloads): Use it. Re-add the "up to date" message. diff -r 6a5ecb520686 -r feafa882a0cf lisp/ChangeLog --- a/lisp/ChangeLog Mon Jun 25 03:48:10 2007 +0000 +++ b/lisp/ChangeLog Mon Jun 25 05:09:05 2007 +0000 @@ -1,5 +1,10 @@ 2007-06-25 Stefan Monnier + * emacs-lisp/autoload.el (autoload-modified-buffers): New var. + (autoload-find-destination): Keep it uptodate. + (autoload-save-buffers): New fun. + (update-file-autoloads): Use it. Re-add the "up to date" message. + * emacs-lisp/autoload.el: Refactor for upcoming changes. (autoload-find-destination): New function extracted from update-file-autoloads. diff -r 6a5ecb520686 -r feafa882a0cf lisp/emacs-lisp/autoload.el --- a/lisp/emacs-lisp/autoload.el Mon Jun 25 03:48:10 2007 +0000 +++ b/lisp/emacs-lisp/autoload.el Mon Jun 25 05:09:05 2007 +0000 @@ -402,6 +402,13 @@ (kill-buffer (current-buffer)))) (not output-start))) +(defvar autoload-modified-buffers nil) + +(defun autoload-save-buffers () + (while autoload-modified-buffers + (with-current-buffer (pop autoload-modified-buffers) + (save-buffer)))) + ;;;###autoload (defun update-file-autoloads (file &optional save-after) "Update the autoloads for FILE in `generated-autoload-file' @@ -411,23 +418,24 @@ Return FILE if there was no autoload cookie in it, else nil." (interactive "fUpdate autoloads for file: \np") - (let ((existing-buffer (get-file-buffer file))) + (let ((existing-buffer (get-file-buffer file)) + (no-autoloads nil)) (with-temp-buffer ;; Let's presume the file is not visited, so we call ;; autoload-find-destination from a dummy buffer, except if the file ;; is visited, in which case we use that buffer instead. (if existing-buffer (set-buffer existing-buffer)) - (catch 'up-to-date - (let ((buf (autoload-find-destination file))) - (with-current-buffer buf - (let ((no-autoloads (generate-file-autoloads file))) - - (and save-after - (buffer-modified-p) - (save-buffer)) - - (if no-autoloads file)))))))) + (if (catch 'up-to-date + (with-current-buffer (autoload-find-destination file) + (setq no-autoloads (generate-file-autoloads file)) + t)) + (if save-after (autoload-save-buffers)) + (if (interactive-p) + (message "Autoload section for %s is up to date." file)))) + ;; If we caught `up-to-date', it means there are autoload entries, since + ;; otherwise we wouldn't have detected their up-to-dateness. + (if no-autoloads file))) (defun autoload-find-destination (file) "Find the destination point of the current buffer's autoloads. @@ -486,6 +494,8 @@ ;; No later sections in the file. Put before the last page. (goto-char (point-max)) (search-backward "\f" nil t))) + (unless (memq (current-buffer) autoload-modified-buffers) + (push (current-buffer) autoload-modified-buffers)) (current-buffer)))) (defun autoload-remove-section (begin)