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>
This commit is contained in:
Nicolas Goaziou 2017-09-24 10:57:11 +02:00
parent 196ed7feff
commit d40deb6967
2 changed files with 10 additions and 2 deletions

View File

@ -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)

View File

@ -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))