ob-core: Small refactoring

* lisp/ob-core.el (org-babel-get-src-block-info): Small refactoring.
This commit is contained in:
Nicolas Goaziou 2016-06-21 14:42:17 +02:00
parent f8eb0b30ea
commit 1c30dea0ec
1 changed files with 44 additions and 46 deletions

View File

@ -641,34 +641,34 @@ block."
(nth 5 info) (nth 5 info)
(org-babel-where-is-src-block-head))) (org-babel-where-is-src-block-head)))
(info (if info (copy-tree info) (org-babel-get-src-block-info)))) (info (if info (copy-tree info) (org-babel-get-src-block-info))))
;; Merge PARAMS with INFO before considering source block
;; evaluation since both could disagree.
(cl-callf org-babel-merge-params (nth 2 info) params) (cl-callf org-babel-merge-params (nth 2 info) params)
(when (org-babel-check-evaluate info) (when (org-babel-check-evaluate info)
(cl-callf org-babel-process-params (nth 2 info)) (cl-callf org-babel-process-params (nth 2 info))
(let* ((params (nth 2 info)) (let* ((params (nth 2 info))
(cachep (and (not arg) (cdr (assoc :cache params)) (cache (let ((c (cdr (assq :cache params))))
(string= "yes" (cdr (assoc :cache params))))) (and (not arg) c (string= "yes" c))))
(new-hash (when cachep (org-babel-sha1-hash info))) (new-hash (and cache (org-babel-sha1-hash info)))
(old-hash (when cachep (org-babel-current-result-hash))) (old-hash (and cache (org-babel-current-result-hash)))
(cache-current-p (and (not arg) new-hash (current-cache (and new-hash (equal new-hash old-hash))))
(equal new-hash old-hash))))
(cond (cond
(cache-current-p (current-cache
(save-excursion ;; return cached result (save-excursion ;Return cached result.
(goto-char (org-babel-where-is-src-block-result nil info)) (goto-char (org-babel-where-is-src-block-result nil info))
(forward-line) (forward-line)
(skip-chars-forward " \t") (skip-chars-forward " \t")
(let ((result (org-babel-read-result))) (let ((result (org-babel-read-result)))
(message (replace-regexp-in-string (message (replace-regexp-in-string "%" "%%" (format "%S" result)))
"%" "%%" (format "%S" result)))
result))) result)))
((org-babel-confirm-evaluate info) ((org-babel-confirm-evaluate info)
(let* ((lang (nth 0 info)) (let* ((lang (nth 0 info))
(result-params (cdr (assoc :result-params params))) (result-params (cdr (assq :result-params params)))
(body (setf (nth 1 info) (body (setf (nth 1 info)
(if (org-babel-noweb-p params :eval) (if (org-babel-noweb-p params :eval)
(org-babel-expand-noweb-references info) (org-babel-expand-noweb-references info)
(nth 1 info)))) (nth 1 info))))
(dir (cdr (assoc :dir params))) (dir (cdr (assq :dir params)))
(default-directory (default-directory
(or (and dir (file-name-as-directory (expand-file-name dir))) (or (and dir (file-name-as-directory (expand-file-name dir)))
default-directory)) default-directory))
@ -678,44 +678,42 @@ block."
(error "No org-babel-execute function for %s!" lang)) (error "No org-babel-execute function for %s!" lang))
(message "executing %s code block%s..." (message "executing %s code block%s..."
(capitalize lang) (capitalize lang)
(if (nth 4 info) (format " (%s)" (nth 4 info)) "")) (let ((name (nth 4 info)))
(if name (format " (%s)" name) "")))
(if (member "none" result-params) (if (member "none" result-params)
(progn (progn (funcall cmd body params)
(funcall cmd body params) (message "result silenced"))
(message "result silenced")
(setq result nil))
(setq result (setq result
(let ((result (funcall cmd body params))) (let ((r (funcall cmd body params)))
(if (and (eq (cdr (assoc :result-type params)) (if (and (eq (cdr (assq :result-type params)) 'value)
'value)
(or (member "vector" result-params) (or (member "vector" result-params)
(member "table" result-params)) (member "table" result-params))
(not (listp result))) (not (listp r)))
(list (list result)) result))) (list (list r))
r)))
(let ((file (cdr (assq :file params))))
;; If non-empty result and :file then write to :file. ;; If non-empty result and :file then write to :file.
(when (cdr (assoc :file params)) (when file
(when result (when result
(with-temp-file (cdr (assoc :file params)) (with-temp-file file
(insert (insert (org-babel-format-result
(org-babel-format-result result (cdr (assq :sep params))))))
result (cdr (assoc :sep (nth 2 info))))))) (setq result file))
(setq result (cdr (assoc :file params)))) ;; Possibly perform post process provided its
;; Possibly perform post process provided its appropriate. ;; appropriate. Dynamically bind "*this*" to the
(when (cdr (assoc :post params)) ;; actual results of the block.
(let ((*this* (if (cdr (assoc :file params)) (let ((post (cdr (assq :post params))))
(when post
(let ((*this* (if (not file) result
(org-babel-result-to-file (org-babel-result-to-file
(cdr (assoc :file params)) file
(when (assoc :file-desc params) (let ((desc (assq :file-desc params)))
(or (cdr (assoc :file-desc params)) (and desc (or (cdr desc) result)))))))
result))) (setq result (org-babel-ref-resolve post))
result))) (when file
(setq result (org-babel-ref-resolve (setq result-params (remove "file" result-params))))))
(cdr (assoc :post params))))
(when (cdr (assoc :file params))
(setq result-params
(remove "file" result-params)))))
(org-babel-insert-result (org-babel-insert-result
result result-params info new-hash lang)) result result-params info new-hash lang)))
(run-hooks 'org-babel-after-execute-hook) (run-hooks 'org-babel-after-execute-hook)
result))))))) result)))))))