ob-core.el: Do not ask for confirmation if cached value is current
authorAchim Gratz <Stromeko@Stromeko.DE>
Tue, 26 Feb 2013 20:23:37 +0000 (21:23 +0100)
committerBastien Guerry <bzg@altern.org>
Wed, 27 Feb 2013 08:44:27 +0000 (09:44 +0100)
* 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).

lisp/ob-core.el

index 3278bf9..a6124e2 100644 (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)