Browse Source

ox-publish: Fix publishing components asynchronously

* lisp/ox-publish.el (org-publish): Ensure asynchronous process
  doesn't encounter :components parts in the project, as it may not
  know how to expand them.

Reported-by: Julien Cubizolles <j.cubizolles@free.fr>
<http://permalink.gmane.org/gmane.emacs.orgmode/92319>
Nicolas Goaziou 10 years ago
parent
commit
f8d7da4c33
1 changed files with 22 additions and 19 deletions
  1. 22 19
      lisp/ox-publish.el

+ 22 - 19
lisp/ox-publish.el

@@ -870,25 +870,28 @@ When optional argument FORCE is non-nil, force publishing all
 files in PROJECT.  With a non-nil optional argument ASYNC,
 publishing will be done asynchronously, in another process."
   (interactive
-   (list
-    (assoc (org-icompleting-read
-	    "Publish project: "
-	    org-publish-project-alist nil t)
-	   org-publish-project-alist)
-    current-prefix-arg))
-  (let ((project-alist  (if (not (stringp project)) (list project)
-			  ;; If this function is called in batch mode,
-			  ;; project is still a string here.
-			  (list (assoc project org-publish-project-alist)))))
-    (if async
-	(org-export-async-start (lambda (results) nil)
-	  `(let ((org-publish-use-timestamps-flag
-		  (if ',force nil ,org-publish-use-timestamps-flag)))
-	     (org-publish-projects ',project-alist)))
-      (save-window-excursion
-	(let* ((org-publish-use-timestamps-flag
-		(if force nil org-publish-use-timestamps-flag)))
-	  (org-publish-projects project-alist))))))
+   (list (assoc (org-icompleting-read "Publish project: "
+				      org-publish-project-alist nil t)
+		org-publish-project-alist)
+	 current-prefix-arg))
+  (let ((project (if (not (stringp project)) project
+		   ;; If this function is called in batch mode,
+		   ;; PROJECT is still a string here.
+		   (assoc project org-publish-project-alist))))
+    (cond
+     ((not project))
+     (async
+      (org-export-async-start (lambda (results) nil)
+	`(let ((org-publish-use-timestamps-flag
+		,(and (not force) org-publish-use-timestamps-flag)))
+	   ;; Expand components right now as external process may not
+	   ;; be aware of complete `org-publish-project-alist'.
+	   (org-publish-projects
+	    ',(org-publish-expand-projects (list project))))))
+     (t (save-window-excursion
+	  (let ((org-publish-use-timestamps-flag
+		 (and (not force) org-publish-use-timestamps-flag)))
+	    (org-publish-projects (list project))))))))
 
 ;;;###autoload
 (defun org-publish-all (&optional force async)