Browse Source

ox-publish: Fix :base-extension any with :recursive t

* lisp/ox-publish.el (org-publish-get-base-files): Ensure MATCH regexp
  is always a string since `directory-files-recursively' requires it.
* testing/lisp/test-ox-publish.el (test-org-publish/get-project-from-filename):
  Add test.

Suggested-by: Jens Lechtenboerger <lechten@wi.uni-muenster.de>
<http://lists.gnu.org/archive/html/emacs-orgmode/2017-09/msg00528.html>
Nicolas Goaziou 3 months ago
parent
commit
d40deb6967
2 changed files with 10 additions and 2 deletions
  1. 2 2
      lisp/ox-publish.el
  2. 8 0
      testing/lisp/test-ox-publish.el

+ 2 - 2
lisp/ox-publish.el

@@ -435,8 +435,8 @@ This splices all the components into the list."
   (let* ((base-dir (file-name-as-directory
 		    (org-publish-property :base-directory project)))
 	 (extension (or (org-publish-property :base-extension project) "org"))
-	 (match (and (not (eq extension 'any))
-		     (concat "^[^\\.].*\\.\\(" extension "\\)$")))
+	 (match (if (eq extension 'any) ""
+		  (format "^[^\\.].*\\.\\(%s\\)$" extension)))
 	 (base-files
 	  (cl-remove-if #'file-directory-p
 			(if (org-publish-property :recursive project)

+ 8 - 0
testing/lisp/test-ox-publish.el

@@ -394,6 +394,14 @@ Unless set otherwise in PROPERTIES, `:base-directory' is set to
 	  (org-publish-project-alist
 	   `(("p" :base-directory ,base :base-extension any))))
      (org-publish-get-project-from-filename file)))
+  ;; Pathological case: Handle both :extension any and :recursive t.
+  (should
+   (let* ((base (expand-file-name "examples/pub/" org-test-dir))
+	  (file (expand-file-name "sub/c.org" base))
+	  (org-publish-project-alist
+	   `(("p" :base-directory ,base :recursive t :base-extension any))))
+     (org-publish-get-base-files (org-publish-get-project-from-filename file))))
+
   ;; Check :exclude property.
   (should-not
    (let* ((base (expand-file-name "examples/pub/" org-test-dir))