emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

master 89404b4f69: Make partial loaddefs updates work again


From: Lars Ingebrigtsen
Subject: master 89404b4f69: Make partial loaddefs updates work again
Date: Tue, 31 May 2022 14:08:32 -0400 (EDT)

branch: master
commit 89404b4f69f9677189b55d9914bccf3ba0ef0c18
Author: Lars Ingebrigtsen <larsi@gnus.org>
Commit: Lars Ingebrigtsen <larsi@gnus.org>

    Make partial loaddefs updates work again
    
    * lisp/emacs-lisp/loaddefs-gen.el (loaddefs-generate): Only update
    the loaddefs section for the files that have changed.  This makes
    "git pull" (when few/no Lisp files have changed much faster).
---
 lisp/emacs-lisp/loaddefs-gen.el | 67 ++++++++++++++++++++++++++---------------
 1 file changed, 43 insertions(+), 24 deletions(-)

diff --git a/lisp/emacs-lisp/loaddefs-gen.el b/lisp/emacs-lisp/loaddefs-gen.el
index 729a604ff4..3a3f7c1b2a 100644
--- a/lisp/emacs-lisp/loaddefs-gen.el
+++ b/lisp/emacs-lisp/loaddefs-gen.el
@@ -442,7 +442,7 @@ FILE's name."
            (if lp
                "(add-to-list 'load-path (directory-file-name
                          (or (file-name-directory #$) (car load-path))))\n\n")
-           "\n"
+           "\n;;; End of scraped data\n\n"
            ;; This is used outside of autoload.el, eg cus-dep, finder.
            (if feature
                (format "(provide '%s)\n"
@@ -508,6 +508,7 @@ If INCLUDE-PACKAGE-VERSION, include package version data."
                                 (directory-files (expand-file-name d)
                                                   t files-re))
                               (if (consp dir) dir (list dir)))))
+         (updating (file-exists-p output-file))
          (defs nil))
 
     ;; Collect all the autoload data.
@@ -518,28 +519,31 @@ If INCLUDE-PACKAGE-VERSION, include package version data."
           (file-count 0))
       (dolist (file files)
         (progress-reporter-update progress (setq file-count (1+ file-count)))
-        ;; Do not insert autoload entries for excluded files.
-        (setq defs (nconc
-                   (loaddefs-generate--parse-file
-                     file output-file
-                     ;; We only want the package name from the
-                     ;; excluded files.
-                     (and include-package-version
-                          (if (member (expand-file-name file) excluded-files)
-                              'only
-                            t)))
-                    defs)))
+        (when (or (not updating)
+                  (file-newer-than-file-p file output-file))
+          (setq defs (nconc
+                     (loaddefs-generate--parse-file
+                       file output-file
+                       ;; We only want the package name from the
+                       ;; excluded files.
+                       (and include-package-version
+                            (if (member (expand-file-name file) excluded-files)
+                                'only
+                              t)))
+                      defs))))
       (progress-reporter-done progress))
 
     ;; Generate the loaddef files.  First group per output file.
     (dolist (fdefs (seq-group-by #'car defs))
       (with-temp-buffer
-        (insert (loaddefs-generate--rubric (car fdefs) nil t))
-        (search-backward "\f")
-        (when extra-data
-          (insert extra-data)
-          (ensure-empty-lines 1))
-        ;; The group by source file (and sort alphabetically).
+        (if updating
+            (insert-file-contents output-file)
+          (insert (loaddefs-generate--rubric (car fdefs) nil t))
+          (search-backward "\f")
+          (when extra-data
+            (insert extra-data)
+            (ensure-empty-lines 1)))
+        ;; Then group by source file (and sort alphabetically).
         (dolist (section (sort (seq-group-by #'cadr (cdr fdefs))
                                (lambda (e1 e2)
                                  (string<
@@ -548,18 +552,33 @@ If INCLUDE-PACKAGE-VERSION, include package version data."
                                   (file-name-sans-extension
                                    (file-name-nondirectory (car e2)))))))
           (pop section)
-          (let ((relfile (file-relative-name
-                          (cadar section)
-                          (file-name-directory (car fdefs)))))
-            (insert "\f\n;;; Generated autoloads from " relfile "\n\n")
+          (let* ((relfile (file-relative-name
+                           (cadar section)
+                           (file-name-directory (car fdefs))))
+                 (head (concat "\n\f\n;;; Generated autoloads from "
+                               relfile "\n\n")))
+            (when updating
+              ;; If we're updating an old loaddefs file, then see if
+              ;; there's a section here for this file already.
+              (goto-char (point-min))
+              (if (not (search-forward head nil t))
+                  ;; It's a new file; put the data at the end.
+                  (progn
+                    (goto-char (point-max))
+                    (search-backward "\f\n"))
+                ;; Delete the old version of the section.
+                (delete-region (match-beginning 0)
+                               (and (search-forward "\n\f\n;;;")
+                                    (match-beginning 0)))
+                (forward-line -2)))
+            (insert head)
             (dolist (def (reverse section))
               (setq def (caddr def))
               (if (stringp def)
                   (princ def (current-buffer))
                 (loaddefs-generate--print-form def))
               (unless (bolp)
-                (insert "\n")))
-            (insert "\n")))
+                (insert "\n")))))
         (write-region (point-min) (point-max) (car fdefs) nil 'silent)
         (byte-compile-info (file-relative-name (car fdefs) lisp-directory)
                            t "GEN")))))



reply via email to

[Prev in Thread] Current Thread [Next in Thread]