all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Frederick Giasson <fred@fgiasson.com>
To: emacs-orgmode@gnu.org
Subject: Re: [PATCH] expose nrepl's timeout setting in ob-clojure.el
Date: Wed, 6 Apr 2016 10:48:51 -0400	[thread overview]
Message-ID: <570521D3.4030009@fgiasson.com> (raw)
In-Reply-To: <87twjfcbt6.fsf@nicolasgoaziou.fr>

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

Hi Nicolas!

>> -;;; ob-clojure.el --- Babel Functions for Clojure    -*- lexical-binding: t; -*-
>> +;;; ob-clojure.el --- org-babel functions for clojure evaluation
> Your patch reverts a change introduced in development version. Could you
> rebase it on top of latest Org first?

Yeah sorry, I did this from the latest published version, not master. 
Fixed now.

>
>>   ;; Copyright (C) 2009-2016 Free Software Foundation, Inc.
>>   
>> @@ -55,6 +55,7 @@
>>   
>>   (defvar org-babel-default-header-args:clojure '())
>>   (defvar org-babel-header-args:clojure '((package . :any)))
>> +(defvar org-babel-clojure-nrepl-timeout 10)
> Would it make sense to turn it into a defcustom instead? If so, this
> should be added in etc/ORG-NEWS file.

Patch attached.

> Bonus points if Worg documentation
> about this back-end

Patch attached.

>
>>   (defcustom org-babel-clojure-backend
>>     (cond ((featurep 'cider) 'cider)
>> @@ -67,7 +68,7 @@
>>   
>>   (defun org-babel-expand-body:clojure (body params)
>>     "Expand BODY according to PARAMS, return the expanded body."
>> -  (let* ((vars (org-babel--get-vars params))
>> +  (let* ((vars (mapcar #'cdr (org-babel-get-header params :var)))
> You are also reverting a previous change here.

Fixed.

>
>> 	 (result-params (cdr (assoc :result-params params)))
>>   	 (print-level nil) (print-length nil)
>>   	 (body (org-babel-trim
>> @@ -94,8 +95,9 @@
>>          (let ((result-params (cdr (assoc :result-params params))))
>>   	 (setq result
>>   	       (nrepl-dict-get
>> -		(nrepl-sync-request:eval
>> -		 expanded (cider-current-connection) (cider-current-session))
>> +		(let ((nrepl-sync-request-timeout org-babel-clojure-nrepl-timeout))
>> +		  (nrepl-sync-request:eval
>> +		   expanded (cider-current-connection) (cider-current-session)))
> It seems you need to define `nrepl-sync-request-timeout' as
> a dynamically scoped variable:
>
>    (defvar nrepl-sync-request-timeout)
>
> Indeed "ob-clojure.el" uses lexical binding, even though you disabled it
> in the first line of your patch ;)

Fixed :)

> Eventually, could you add an appropriate commit message for this patch?
> Something like
>
>    ob-clojure: Make REPL timeout configurable
>
>    * lisp/ob-clojure.el (org-babel-clojure-nrepl-timeout):  New variable.
>    (org-babel-expand-body:clojure): Use new variable.
>
>    ... explanations about the motivation of the change...

Patch attached.


Hope everything is good now!

Thanks,

Fred


[-- Attachment #2: 0001-Document-the-new-option-ob-clojure-option-org-babel-.patch --]
[-- Type: text/plain, Size: 1216 bytes --]

From c8e89d774590e9b39604252b3a344f95b56e3924 Mon Sep 17 00:00:00 2001
From: Frederick Giasson <fred@fgiasson.com>
Date: Wed, 6 Apr 2016 10:00:18 -0400
Subject: [PATCH] Document the new option ob-clojure option
 "org-babel-clojure-sync-nrepl-timeout".

---
 org-contrib/babel/languages/ob-doc-clojure.org | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/org-contrib/babel/languages/ob-doc-clojure.org b/org-contrib/babel/languages/ob-doc-clojure.org
index 72942df..17c0f20 100644
--- a/org-contrib/babel/languages/ob-doc-clojure.org
+++ b/org-contrib/babel/languages/ob-doc-clojure.org
@@ -90,6 +90,17 @@ Add these lines to your .emacs file to configure CIDER:
   (require 'cider)
 #+END_SRC
 
+Optionally you can specify the Cider timeout by setting the =org-babel-clojure-sync-nrepl-timeout=
+setting option. The value is in seconds and if set to =nil= then no timeout will occur.
+
+#+BEGIN_SRC emacs-lisp
+  ; Disable Cider's timeout
+  (setq org-babel-clojure-sync-nrepl-timeout nil)
+
+  ; Set the timeout to 20 seconds
+  (setq org-babel-clojure-sync-nrepl-timeout 20)
+#+END_SRC
+
 ** Create a Clojure Project with Leiningen
 
 Create a Leiningen project directory tree:
-- 
1.9.5.msysgit.0


[-- Attachment #3: 0001-Update-of-ORG-NEWS-to-mention-the-addition-of-the-ne.patch --]
[-- Type: text/plain, Size: 918 bytes --]

From 9a81363719f3078d13de9b971440ee6fd456b4b2 Mon Sep 17 00:00:00 2001
From: Frederick Giasson <fred@fgiasson.com>
Date: Wed, 6 Apr 2016 10:24:54 -0400
Subject: [PATCH 1/2] Update of ORG-NEWS to mention the addition of the new
 setting "org-babel-clojure-sync-nrepl-timeout"

---
 etc/ORG-NEWS | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/etc/ORG-NEWS b/etc/ORG-NEWS
index 82d5ad0..e684587 100644
--- a/etc/ORG-NEWS
+++ b/etc/ORG-NEWS
@@ -106,6 +106,10 @@ becomes
 : ("pdf" . (lambda (file link) (foo)))
 
 ** New features
+*** New option =org-babel-clojure-sync-nrepl-timeout= for =org-babel-clojure=
+This new option tells the =org-babel-clojure= module the length of the timeout 
+of a synchronous call to the nREPL. This value is in seconds. If =nil= then
+no timeout will occur.
 *** New org-protocol key=value syntax
 
 Org-protocol can now handle query-style parameters such as:
-- 
1.9.5.msysgit.0


[-- Attachment #4: 0002-Addition-of-a-new-customization-variable-called-org-.patch --]
[-- Type: text/plain, Size: 1796 bytes --]

From dab6472228d1a0a41831dcae969335d0a7fb7531 Mon Sep 17 00:00:00 2001
From: Frederick Giasson <fred@fgiasson.com>
Date: Wed, 6 Apr 2016 10:46:35 -0400
Subject: [PATCH 2/2] Addition of a new customization variable called
 "org-babel-clojure-sync-nrepl-timeout" which expose the Cider timeout setting
 as a custom variable.

The timeout is in second, and if nil is specified and timeout is disabled.

With previous version, the timeout was set to 10 seconds, and if you were running a function that was taking more than 10 seconds, then you were getting a nREPL timeout error. This is why it is important to expose that setting to the org-mode users.
---
 lisp/ob-clojure.el | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/lisp/ob-clojure.el b/lisp/ob-clojure.el
index 89a09a9..86f1cff 100644
--- a/lisp/ob-clojure.el
+++ b/lisp/ob-clojure.el
@@ -56,6 +56,12 @@
 (defvar org-babel-default-header-args:clojure '())
 (defvar org-babel-header-args:clojure '((package . :any)))
 
+(defcustom org-babel-clojure-sync-nrepl-timeout 10
+  "Timeout value, in seconds, of a Clojure sync call. 
+   If the value is nil, timeout is disabled."
+  :type 'integer
+  :group 'org-babel)
+
 (defcustom org-babel-clojure-backend
   (cond ((featurep 'cider) 'cider)
 	(t 'slime))
@@ -94,8 +100,9 @@
        (let ((result-params (cdr (assoc :result-params params))))
 	 (setq result
 	       (nrepl-dict-get
-		(nrepl-sync-request:eval
-		 expanded (cider-current-connection) (cider-current-session))
+		(let ((nrepl-sync-request-timeout org-babel-clojure-sync-nrepl-timeout))
+		  (nrepl-sync-request:eval
+		   expanded (cider-current-connection) (cider-current-session)))
 		(if (or (member "output" result-params)
 			(member "pp" result-params))
 		    "out"
-- 
1.9.5.msysgit.0


  reply	other threads:[~2016-04-06 14:48 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-03-29 17:38 [PATCH] expose nrepl's timeout setting in ob-clojure.el Frederick Giasson
2016-04-06  9:43 ` Nicolas Goaziou
2016-04-06 14:48   ` Frederick Giasson [this message]
2016-04-10  8:20     ` Nicolas Goaziou
2016-04-11 14:03       ` Frederick Giasson
2016-04-12 20:18         ` Nicolas Goaziou
2016-04-13 20:15           ` Frederick Giasson
2016-04-06 16:27   ` [PATCH] new :async feature for org-babel-clojure Frederick Giasson
2016-04-20 12:17     ` Frederick Giasson
2016-04-20 21:59       ` Nicolas Goaziou
2016-04-21 12:34         ` Frederick Giasson
2016-04-26 19:21           ` Nicolas Goaziou
2016-04-27 12:00             ` Frederick Giasson

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

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

  git send-email \
    --in-reply-to=570521D3.4030009@fgiasson.com \
    --to=fred@fgiasson.com \
    --cc=emacs-orgmode@gnu.org \
    /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 external index

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

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.