branch: externals/org
commit aa0fa8c75360d2aa491b9ae10e59d22de2aedc92
Author: Gustav Wikström <gus...@whil.se>
Commit: Gustav Wikström <gus...@whil.se>

    lisp/ox-publish.el: Speedup when looking for file changes
    
    * lisp/ox-publish.el (org-publish-cache-file-needs-publishing):
    Speedup using delayed hooks and temp buffers instead of finding files.
---
 lisp/ox-publish.el | 45 ++++++++++++++++++++++-----------------------
 1 file changed, 22 insertions(+), 23 deletions(-)

diff --git a/lisp/ox-publish.el b/lisp/ox-publish.el
index b07f326..3b9666d 100644
--- a/lisp/ox-publish.el
+++ b/lisp/ox-publish.el
@@ -1290,29 +1290,28 @@ the file including them will be republished as well."
         (org-inhibit-startup t)
         included-files-ctime)
     (when (equal (file-name-extension filename) "org")
-      (let ((visiting (find-buffer-visiting filename))
-           (buf (find-file-noselect filename))
-           (case-fold-search t))
-       (unwind-protect
-           (with-current-buffer buf
-             (goto-char (point-min))
-             (while (re-search-forward "^[ \t]*#\\+INCLUDE:" nil t)
-               (let ((element (org-element-at-point)))
-                 (when (eq 'keyword (org-element-type element))
-                   (let* ((value (org-element-property :value element))
-                          (filename
-                           (and (string-match "\\`\\(\".+?\"\\|\\S-+\\)" value)
-                                (let ((m (org-strip-quotes
-                                          (match-string 1 value))))
-                                  ;; Ignore search suffix.
-                                  (if (string-match "::.*?\\'" m)
-                                      (substring m 0 (match-beginning 0))
-                                    m)))))
-                     (when filename
-                       (push (org-publish-cache-ctime-of-src
-                              (expand-file-name filename))
-                             included-files-ctime)))))))
-         (unless visiting (kill-buffer buf)))))
+      (let ((case-fold-search t))
+       (with-temp-buffer
+          (delay-mode-hooks
+            (org-mode)
+            (insert-file-contents filename)
+           (goto-char (point-min))
+           (while (re-search-forward "^[ \t]*#\\+INCLUDE:" nil t)
+             (let ((element (org-element-at-point)))
+               (when (eq 'keyword (org-element-type element))
+                 (let* ((value (org-element-property :value element))
+                        (include-filename
+                         (and (string-match "\\`\\(\".+?\"\\|\\S-+\\)" value)
+                              (let ((m (org-strip-quotes
+                                        (match-string 1 value))))
+                                ;; Ignore search suffix.
+                                (if (string-match "::.*?\\'" m)
+                                    (substring m 0 (match-beginning 0))
+                                  m)))))
+                   (when include-filename
+                     (push (org-publish-cache-ctime-of-src
+                            (expand-file-name include-filename 
(file-name-directory filename)))
+                           included-files-ctime))))))))))
     (or (null pstamp)
        (let ((ctime (org-publish-cache-ctime-of-src filename)))
          (or (time-less-p pstamp ctime)

Reply via email to