Browse Source

ox-publish: Small refactoring

* lisp/ox-publish.el (org-publish-file): Use function dedicated to
  files instead of string related ones.  Small refactoring.
(org-publish-cache-get-file-property): Small refactoring.
Nicolas Goaziou 8 years ago
parent
commit
018ce94d88
1 changed files with 29 additions and 34 deletions
  1. 29 34
      lisp/ox-publish.el

+ 29 - 34
lisp/ox-publish.el

@@ -666,42 +666,41 @@ files, when entire projects are published (see
 `org-publish-projects')."
 `org-publish-projects')."
   (let* ((project
   (let* ((project
 	  (or 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))
 	 (project-plist (cdr project))
 	 (ftname (expand-file-name filename))
 	 (ftname (expand-file-name filename))
 	 (publishing-function
 	 (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
 	 (base-dir
 	  (file-name-as-directory
 	  (file-name-as-directory
 	   (expand-file-name
 	   (expand-file-name
 	    (or (plist-get project-plist :base-directory)
 	    (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-name-as-directory
 	   (file-truename
 	   (file-truename
 	    (or (eval (plist-get project-plist :publishing-directory))
 	    (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)))
     (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.
     ;; Allow chain of publishing functions.
     (dolist (f publishing-function)
     (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
 	  (run-hook-with-args 'org-publish-after-publishing-hook
 			      filename
 			      filename
 			      output))))
 			      output))))
@@ -1286,23 +1285,19 @@ will be created.  Return VALUE."
        filename property value nil project-name))))
        filename property value nil project-name))))
 
 
 (defun org-publish-cache-get-file-property
 (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.
   "Return the value for a PROPERTY of file FILENAME in publishing cache.
 Use cache file of PROJECT-NAME.  Return the value of that PROPERTY,
 Use cache file of PROJECT-NAME.  Return the value of that PROPERTY,
 or DEFAULT, if the value does not yet exist.  Create the entry,
 or DEFAULT, if the value does not yet exist.  Create the entry,
 if necessary, unless NO-CREATE is non-nil."
 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)
 (defun org-publish-cache-get (key)
   "Return the value stored in `org-publish-cache' for key KEY.
   "Return the value stored in `org-publish-cache' for key KEY.