changeset 81604:feafa882a0cf

(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.
author Stefan Monnier <monnier@iro.umontreal.ca>
date Mon, 25 Jun 2007 05:09:05 +0000
parents 6a5ecb520686
children 69c77f0f3507
files lisp/ChangeLog lisp/emacs-lisp/autoload.el
diffstat 2 files changed, 26 insertions(+), 11 deletions(-) [+]
line wrap: on
line diff
--- 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  <monnier@iro.umontreal.ca>
 
+	* 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.
--- 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)