Browse Source

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).
Achim Gratz 12 years ago
parent
commit
091bf02514
1 changed files with 36 additions and 35 deletions
  1. 36 35
      lisp/ob-core.el

+ 36 - 35
lisp/ob-core.el

@@ -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))))
-    (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))
       (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
-		      ((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))))))
 	  (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)