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 the header arguments specified at the front of the source code
block." block."
(interactive) (interactive)
(let ((info (or info (org-babel-get-src-block-info)))) (let* ((info (or info (org-babel-get-src-block-info)))
(when (org-babel-confirm-evaluate (params (if params
(let ((i info)) (org-babel-process-params
(setf (nth 2 i) (org-babel-merge-params (nth 2 info) params)) (org-babel-merge-params (nth 2 info) params))
i)) (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)) (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))) (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) (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)
@ -562,7 +564,7 @@ block."
(funcall lang-check (symbol-name (funcall lang-check (symbol-name
(cdr (assoc lang org-src-lang-modes)))) (cdr (assoc lang org-src-lang-modes))))
(error "No org-babel-execute function for %s!" lang)))) (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 (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))
(end-of-line 1) (forward-char 1) (end-of-line 1) (forward-char 1)
@ -576,27 +578,26 @@ block."
(progn (progn
(funcall cmd body params) (funcall cmd body params)
(message "result silenced")) (message "result silenced"))
(setq result (setq result
((lambda (result) ((lambda (result)
(if (and (eq (cdr (assoc :result-type params)) 'value) (if (and (eq (cdr (assoc :result-type params)) 'value)
(or (member "vector" result-params) (or (member "vector" result-params)
(member "table" result-params)) (member "table" result-params))
(not (listp result))) (not (listp result)))
(list (list result)) result)) (list (list result)) result))
(funcall cmd body params))) (funcall cmd body 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 (cdr (assoc :file params))
(when result (when result
(with-temp-file (cdr (assoc :file params)) (with-temp-file (cdr (assoc :file params))
(insert (insert
(org-babel-format-result (org-babel-format-result
result (cdr (assoc :sep (nth 2 info))))))) result (cdr (assoc :sep (nth 2 info)))))))
(setq result (cdr (assoc :file params)))) (setq result (cdr (assoc :file params))))
(org-babel-insert-result (org-babel-insert-result
result result-params info new-hash indent lang) result result-params info new-hash indent lang)
(run-hooks 'org-babel-after-execute-hook) (run-hooks 'org-babel-after-execute-hook)
result result)))
)))
(setq call-process-region 'org-babel-call-process-region-original)))))) (setq call-process-region 'org-babel-call-process-region-original))))))
(defun org-babel-expand-body:generic (body params &optional var-lines) (defun org-babel-expand-body:generic (body params &optional var-lines)