emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
From: Aaron Ecay <aaronecay@gmail.com>
To: Gary Oberbrunner <garyo@oberbrunner.com>,
	Orgmode Mailing List <emacs-orgmode@gnu.org>
Subject: Re: Errors get suppressed by org-babel-execute-src-block
Date: Wed, 10 Feb 2016 20:23:44 +0000	[thread overview]
Message-ID: <87pow4pb5b.fsf@gmail.com> (raw)
In-Reply-To: <CAFChFyjSR2w04bOMakPpDp0BrVTYVHTPTKNxWP5XfLqQU7UkDA@mail.gmail.com>

[-- Attachment #1: Type: text/plain, Size: 1008 bytes --]

Hi Gary,

2016ko otsailak 8an, Gary Oberbrunner-ek idatzi zuen:
> 
> org-babel-execute-src-block has a big unwind-protect that basically eats
> all errors inside it. I don't think it used to do that. 

The unwind-protect exists since 2010, so you’re probably mistaken about
that (depending on your frame of reference for “used to”...)

That said, the code in question seems very questionable to me.  First
of all, the unwind-protect should not be needed at all, due to the use
of (f)let (IOW, if the unwind-protect was ever needed, it was to paper
over a bug in emacs which should no longer exist).  Secondly, in 2012
commit 57104f9f changed an “org-flet” to a “let” in this function,
which is incorrect (since elisp is a lisp-2).  So the whole thing has
been effectively a no-op since then.

I’d like to install the attached patch to master, if there are no
objections.  That should resolve your concern as well as cleaning up the
dead code.

Aaron

-- 
Aaron Ecay

[-- Attachment #2: 0001-ob-core-remove-cruft.patch --]
[-- Type: text/x-diff, Size: 7551 bytes --]

From bdb68585d5b0ddf5a6c9876028b5f2be2f17e66a Mon Sep 17 00:00:00 2001
From: Aaron Ecay <aaronecay@gmail.com>
Date: Wed, 10 Feb 2016 19:39:04 +0000
Subject: [PATCH] ob-core: remove cruft
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

* lisp/ob-core.el (org-babel-execute-src-block): Simplify.
(org-babel-tramp-handle-call-process-region): Remove.

Commit 57104f9f changed an org-flet to a let, rendering the whole
apparatus of modifying call-process-region inoperative.  Supposedly this
was put in place to work around a bug in
tramp-handle-call-process-region, which was removed from tramp in
2012 (after being renamed tramp-sh-call-process-region).  *shrug*

This commit just removes the whole thing.  It also no longer consults
‘org-src-lang-modes’, which is not helpful here.
---
 lisp/ob-core.el | 133 ++++++++++++++++++++------------------------------------
 1 file changed, 47 insertions(+), 86 deletions(-)

diff --git a/lisp/ob-core.el b/lisp/ob-core.el
index 025985d..77f464f 100644
--- a/lisp/ob-core.el
+++ b/lisp/ob-core.el
@@ -26,6 +26,7 @@
 (eval-when-compile
   (require 'cl))
 (require 'cl-lib)
+(require 'subr-x)			; For `if-let'
 (require 'ob-eval)
 (require 'org-macs)
 (require 'org-compat)
@@ -36,10 +37,8 @@
     nil))
 
 ;; dynamically scoped for tramp
-(defvar org-babel-call-process-region-original nil)
 (defvar org-babel-library-of-babel)
 (defvar org-edit-src-content-indentation)
-(defvar org-src-lang-modes)
 
 (declare-function outline-show-all "outline" ())
 (declare-function org-get-indentation "org" (&optional line))
@@ -679,72 +678,53 @@ block."
 		 (default-directory
 		   (or (and dir (file-name-as-directory (expand-file-name dir)))
 		       default-directory))
-		 (org-babel-call-process-region-original ;; for tramp handler
-		  (or (org-bound-and-true-p
-		       org-babel-call-process-region-original)
-		      (symbol-function 'call-process-region)))
 		 (indent (nth 5 info))
-		 result cmd)
-	    (unwind-protect
-		(let ((call-process-region
-		       (lambda (&rest args)
-			 (apply 'org-babel-tramp-handle-call-process-region
-				args))))
-		  (let ((lang-check
-			 (lambda (f)
-			   (let ((f (intern (concat "org-babel-execute:" f))))
-			     (when (fboundp f) f)))))
-		    (setq cmd
-			  (or (funcall lang-check lang)
-			      (funcall lang-check
-				       (symbol-name
-					(cdr (assoc lang org-src-lang-modes))))
-			      (error "No org-babel-execute function for %s!"
-				     lang))))
-		  (message "executing %s code block%s..."
-			   (capitalize lang)
-			   (if (nth 4 info) (format " (%s)" (nth 4 info)) ""))
-		  (if (member "none" result-params)
-		      (progn
-			(funcall cmd body params)
-			(message "result silenced")
-			(setq result nil))
-		    (setq result
-			  (let ((result (funcall cmd body params)))
-                            (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)))
-		    ;; 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))))
-		    ;; Possibly perform post process provided its appropriate.
-		    (when (cdr (assoc :post params))
-		      (let ((*this* (if (cdr (assoc :file params))
-					(org-babel-result-to-file
-					 (cdr (assoc :file params))
-					 (when (assoc :file-desc params)
-					   (or (cdr (assoc :file-desc params))
-					       result)))
-				      result)))
-			(setq result (org-babel-ref-resolve
-				      (cdr (assoc :post params))))
-			(when (cdr (assoc :file params))
-			  (setq result-params
-				(remove "file" result-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)))))))))
+		 (cmd (intern (concat "org-babel-execute:" lang)))
+		 result)
+	    (unless (fboundp cmd)
+	      (error "No org-babel-execute function for %s!" lang))
+	    (message "executing %s code block%s..."
+		     (capitalize lang)
+		     (if (nth 4 info) (format " (%s)" (nth 4 info)) ""))
+	    (if (member "none" result-params)
+		(progn
+		  (funcall cmd body params)
+		  (message "result silenced")
+		  (setq result nil))
+	      (setq result
+		    (let ((result (funcall cmd body params)))
+		      (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)))
+	      ;; 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))))
+	      ;; Possibly perform post process provided its appropriate.
+	      (when (cdr (assoc :post params))
+		(let ((*this* (if (cdr (assoc :file params))
+				  (org-babel-result-to-file
+				   (cdr (assoc :file params))
+				   (when (assoc :file-desc params)
+				     (or (cdr (assoc :file-desc params))
+					 result)))
+				result)))
+		  (setq result (org-babel-ref-resolve
+				(cdr (assoc :post params))))
+		  (when (cdr (assoc :file params))
+		    (setq result-params
+			  (remove "file" result-params)))))
+	      (org-babel-insert-result
+	       result result-params info new-hash indent lang))
+	    (run-hooks 'org-babel-after-execute-hook)
+	    result)))))))
 
 (defun org-babel-expand-body:generic (body params &optional var-lines)
   "Expand BODY with PARAMS.
@@ -2993,25 +2973,6 @@ character of the string."
    (org-reverse-string
     (org-babel-chomp (org-reverse-string string) regexp)) regexp))
 
-(defun org-babel-tramp-handle-call-process-region
-  (start end program &optional delete buffer display &rest args)
-  "Use Tramp to handle `call-process-region'.
-Fixes a bug in `tramp-handle-call-process-region'."
-  (if (and (featurep 'tramp) (file-remote-p default-directory))
-      (let ((tmpfile (tramp-compat-make-temp-file "")))
-	(write-region start end tmpfile)
-	(when delete (delete-region start end))
-	(unwind-protect
-	    ;;	(apply 'call-process program tmpfile buffer display args)
-            ;; bug in tramp
-	    (apply 'process-file program tmpfile buffer display args)
-	  (delete-file tmpfile)))
-    ;; org-babel-call-process-region-original is the original emacs
-    ;; definition.  It is in scope from the let binding in
-    ;; org-babel-execute-src-block
-    (apply org-babel-call-process-region-original
-           start end program delete buffer display args)))
-
 (defun org-babel-local-file-name (file)
   "Return the local name component of FILE."
   (or (file-remote-p file 'localname) file))
-- 
2.7.1


  reply	other threads:[~2016-02-10 20:23 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-02-08 19:02 Errors get suppressed by org-babel-execute-src-block Gary Oberbrunner
2016-02-10 20:23 ` Aaron Ecay [this message]
2016-02-10 22:57   ` Nicolas Goaziou
2016-02-12 17:22     ` Aaron Ecay
2016-02-11 17:08   ` Nick Dokos
2016-02-12 17:31     ` Aaron Ecay
2016-02-12 17:59       ` Nick Dokos
2016-02-14 16:07         ` Aaron Ecay
2016-02-20 13:01           ` Nicolas Goaziou
2016-02-20 13:33             ` Nick Dokos
2016-02-22 16:05               ` Aaron Ecay

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.orgmode.org/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87pow4pb5b.fsf@gmail.com \
    --to=aaronecay@gmail.com \
    --cc=emacs-orgmode@gnu.org \
    --cc=garyo@oberbrunner.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).