瀏覽代碼

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 年之前
父節點
當前提交
091bf02514
共有 1 個文件被更改,包括 36 次插入35 次删除
  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
 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)