ob-core.el: Do not ask for confirmation if cached value is current

* ob-core.el (org-babel-execute-src-block): Do not run
`org-babel-confirm-evaluate´ if source block has a cache and the
cache value is current (there is no evaluation involved in this
case).
This commit is contained in:
Achim Gratz 2013-02-26 21:23:37 +01:00 committed by Bastien Guerry
parent 72cc2e99d8
commit 091bf02514
1 changed files with 36 additions and 35 deletions

View File

@ -521,21 +521,23 @@ Optionally supply a value for PARAMS which will be merged with
the header arguments specified at the front of the source code
block."
(interactive)
(let ((info (or info (org-babel-get-src-block-info))))
(when (org-babel-confirm-evaluate
(let ((i info))
(setf (nth 2 i) (org-babel-merge-params (nth 2 info) params))
i))
(let* ((info (or info (org-babel-get-src-block-info)))
(params (if params
(org-babel-process-params
(org-babel-merge-params (nth 2 info) params))
(nth 2 info)))
(cache-p (and (not arg) (cdr (assoc :cache params))
(string= "yes" (cdr (assoc :cache params)))))
(new-hash (when cache-p (org-babel-sha1-hash info)))
(old-hash (when cache-p (org-babel-current-result-hash)))
(cache-current (and (not arg) new-hash (equal new-hash old-hash))))
(when (or cache-current-p
(org-babel-confirm-evaluate
(let ((i info))
(setf (nth 2 i) (org-babel-merge-params (nth 2 info) params))
i)))
(let* ((lang (nth 0 info))
(params (if params
(org-babel-process-params
(org-babel-merge-params (nth 2 info) params))
(nth 2 info)))
(cache? (and (not arg) (cdr (assoc :cache params))
(string= "yes" (cdr (assoc :cache params)))))
(result-params (cdr (assoc :result-params params)))
(new-hash (when cache? (org-babel-sha1-hash info)))
(old-hash (when cache? (org-babel-current-result-hash)))
(body (setf (nth 1 info)
(if (org-babel-noweb-p params :eval)
(org-babel-expand-noweb-references info)
@ -562,7 +564,7 @@ block."
(funcall lang-check (symbol-name
(cdr (assoc lang org-src-lang-modes))))
(error "No org-babel-execute function for %s!" lang))))
(if (and (not arg) new-hash (equal new-hash old-hash))
(if cache-current-p
(save-excursion ;; return cached result
(goto-char (org-babel-where-is-src-block-result nil info))
(end-of-line 1) (forward-char 1)
@ -576,27 +578,26 @@ block."
(progn
(funcall cmd body params)
(message "result silenced"))
(setq result
((lambda (result)
(if (and (eq (cdr (assoc :result-type params)) 'value)
(or (member "vector" result-params)
(member "table" result-params))
(not (listp result)))
(list (list result)) result))
(funcall cmd body params)))
;; if non-empty result and :file then write to :file
(when (cdr (assoc :file params))
(when result
(with-temp-file (cdr (assoc :file params))
(insert
(org-babel-format-result
result (cdr (assoc :sep (nth 2 info)))))))
(setq result (cdr (assoc :file params))))
(org-babel-insert-result
result result-params info new-hash indent lang)
(run-hooks 'org-babel-after-execute-hook)
result
)))
(setq result
((lambda (result)
(if (and (eq (cdr (assoc :result-type params)) 'value)
(or (member "vector" result-params)
(member "table" result-params))
(not (listp result)))
(list (list result)) result))
(funcall cmd body params)))
;; if non-empty result and :file then write to :file
(when (cdr (assoc :file params))
(when result
(with-temp-file (cdr (assoc :file params))
(insert
(org-babel-format-result
result (cdr (assoc :sep (nth 2 info)))))))
(setq result (cdr (assoc :file params))))
(org-babel-insert-result
result result-params info new-hash indent lang)
(run-hooks 'org-babel-after-execute-hook)
result)))
(setq call-process-region 'org-babel-call-process-region-original))))))
(defun org-babel-expand-body:generic (body params &optional var-lines)