Function: org-publish-cache-file-needs-publishing
org-publish-cache-file-needs-publishing is a byte-compiled function
defined in ox-publish.el.gz.
Signature
(org-publish-cache-file-needs-publishing FILENAME &optional PUB-DIR PUB-FUNC BASE-DIR)
Documentation
Check the timestamp of the last publishing of FILENAME.
Return non-nil if the file needs publishing. This is the case if either FILENAME does not occur in the publication cache or if FILENAME, or any file included by it, was modified after the most recent publication.
Source Code
;; Defined in /usr/src/emacs/lisp/org/ox-publish.el.gz
(defun org-publish-cache-file-needs-publishing
(filename &optional pub-dir pub-func _base-dir)
"Check the timestamp of the last publishing of FILENAME.
Return non-nil if the file needs publishing. This is the case
if either FILENAME does not occur in the publication cache or
if FILENAME, or any file included by it, was modified after the
most recent publication."
(unless org-publish-cache
(error
"`org-publish-cache-file-needs-publishing' called, but no cache present"))
(let* ((key (org-publish-timestamp-filename filename pub-dir pub-func))
(pstamp (org-publish-cache-get key))
(org-inhibit-startup t)
included-files-mtime)
(when (equal (file-name-extension filename) "org")
(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 (org-element-type-p element 'keyword)
(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-mtime-of-src
(expand-file-name include-filename (file-name-directory filename)))
included-files-mtime))))))))))
(or (null pstamp)
(let ((mtime (org-publish-cache-mtime-of-src filename)))
(or (time-less-p pstamp mtime)
(cl-some (lambda (ct) (time-less-p pstamp ct))
included-files-mtime))))))