|
@@ -666,42 +666,41 @@ files, when entire projects are published (see
|
|
|
`org-publish-projects')."
|
|
|
(let* ((project
|
|
|
(or project
|
|
|
- (or (org-publish-get-project-from-filename filename)
|
|
|
- (error "File %s not part of any known project"
|
|
|
- (abbreviate-file-name filename)))))
|
|
|
+ (org-publish-get-project-from-filename filename)
|
|
|
+ (user-error "File %S is not part of any known project"
|
|
|
+ (abbreviate-file-name filename))))
|
|
|
(project-plist (cdr project))
|
|
|
(ftname (expand-file-name filename))
|
|
|
(publishing-function
|
|
|
- (let ((fun (plist-get project-plist :publishing-function)))
|
|
|
- (cond ((null fun) (error "No publishing function chosen"))
|
|
|
- ((listp fun) fun)
|
|
|
- (t (list fun)))))
|
|
|
+ (pcase (plist-get project-plist :publishing-function)
|
|
|
+ (`nil (user-error "No publishing function chosen"))
|
|
|
+ ((and f (pred listp)) f)
|
|
|
+ (f (list f))))
|
|
|
(base-dir
|
|
|
(file-name-as-directory
|
|
|
(expand-file-name
|
|
|
(or (plist-get project-plist :base-directory)
|
|
|
- (error "Project %s does not have :base-directory defined"
|
|
|
- (car project))))))
|
|
|
- (pub-dir
|
|
|
+ (user-error "Project %S does not have :base-directory defined"
|
|
|
+ (car project))))))
|
|
|
+ (pub-base-dir
|
|
|
(file-name-as-directory
|
|
|
(file-truename
|
|
|
(or (eval (plist-get project-plist :publishing-directory))
|
|
|
- (error "Project %s does not have :publishing-directory defined"
|
|
|
- (car project))))))
|
|
|
- tmp-pub-dir)
|
|
|
+ (user-error
|
|
|
+ "Project %S does not have :publishing-directory defined"
|
|
|
+ (car project))))))
|
|
|
+ (pub-dir
|
|
|
+ (file-name-directory
|
|
|
+ (expand-file-name (file-relative-name ftname base-dir)
|
|
|
+ pub-base-dir))))
|
|
|
|
|
|
(unless no-cache (org-publish-initialize-cache (car project)))
|
|
|
|
|
|
- (setq tmp-pub-dir
|
|
|
- (file-name-directory
|
|
|
- (concat pub-dir
|
|
|
- (and (string-match (regexp-quote base-dir) ftname)
|
|
|
- (substring ftname (match-end 0))))))
|
|
|
;; Allow chain of publishing functions.
|
|
|
(dolist (f publishing-function)
|
|
|
- (when (org-publish-needed-p filename pub-dir f tmp-pub-dir base-dir)
|
|
|
- (let ((output (funcall f project-plist filename tmp-pub-dir)))
|
|
|
- (org-publish-update-timestamp filename pub-dir f base-dir)
|
|
|
+ (when (org-publish-needed-p filename pub-base-dir f pub-dir base-dir)
|
|
|
+ (let ((output (funcall f project-plist filename pub-dir)))
|
|
|
+ (org-publish-update-timestamp filename pub-base-dir f base-dir)
|
|
|
(run-hook-with-args 'org-publish-after-publishing-hook
|
|
|
filename
|
|
|
output))))
|
|
@@ -1286,23 +1285,19 @@ will be created. Return VALUE."
|
|
|
filename property value nil project-name))))
|
|
|
|
|
|
(defun org-publish-cache-get-file-property
|
|
|
- (filename property &optional default no-create project-name)
|
|
|
+ (filename property &optional default no-create project-name)
|
|
|
"Return the value for a PROPERTY of file FILENAME in publishing cache.
|
|
|
Use cache file of PROJECT-NAME. Return the value of that PROPERTY,
|
|
|
or DEFAULT, if the value does not yet exist. Create the entry,
|
|
|
if necessary, unless NO-CREATE is non-nil."
|
|
|
- ;; Evtl. load the requested cache file:
|
|
|
- (if project-name (org-publish-initialize-cache project-name))
|
|
|
- (let ((pl (org-publish-cache-get filename)) retval)
|
|
|
- (if pl
|
|
|
- (if (plist-member pl property)
|
|
|
- (setq retval (plist-get pl property))
|
|
|
- (setq retval default))
|
|
|
- ;; no pl yet:
|
|
|
- (unless no-create
|
|
|
- (org-publish-cache-set filename (list property default)))
|
|
|
- (setq retval default))
|
|
|
- retval))
|
|
|
+ (when project-name (org-publish-initialize-cache project-name))
|
|
|
+ (let ((properties (org-publish-cache-get filename)))
|
|
|
+ (cond ((null properties)
|
|
|
+ (unless no-create
|
|
|
+ (org-publish-cache-set filename (list property default)))
|
|
|
+ default)
|
|
|
+ ((plist-member properties property) (plist-get properties property))
|
|
|
+ (t default))))
|
|
|
|
|
|
(defun org-publish-cache-get (key)
|
|
|
"Return the value stored in `org-publish-cache' for key KEY.
|