[Orgmode] Re: [Babel] No output returned if just one command is failing

2010-12-02 Thread Dan Davison
Hi Seb, I definitely have some sympathy with your request. On two
occasions I've had to manually make this change just to carry on
working. The change I made is straightforward if you need it as a
temporary hack:

--8---cut here---start-8---
diff --git a/lisp/ob-eval.el b/lisp/ob-eval.el
index 8832d91..1cce003 100644
--- a/lisp/ob-eval.el
+++ b/lisp/ob-eval.el
@@ -57,7 +57,7 @@ STDERR with `org-babel-eval-error-notify'.
  (progn
(with-current-buffer err-buff
  (org-babel-eval-error-notify exit-code (buffer-string)))
-   nil)
+   (buffer-string))
(buffer-string)
 
 (defun org-babel-eval-read-file (file)
--8---cut here---end---8---

But do we actually change babel in this direction? It's important to
distinguish between :results output and :results value here. The change
that seems superficially attractive is to allow :results output to
output the contents of standard output, even if there has been an
error. After all, stdout might contain some useful data, and currently
babel refuses point blank to give it to you if there's been an
error. And as you say, this is the behavior we are used to in the
shell. This hypothetical change would leave the default :results value
alone (so the above patch would need modification).

The thing is that babel currently has a clear, simple, rule which says:
if there's an error, the result is the elisp value nil.

Eric and I have discussed in the past whether there should be any change
in this direction. The idea of a :debug header arg has been floated,
that would allow this behavior. Or tacking stdout on to the error
output. I tend to think that the behavior you request does need to be
made available, somehow, whether by default or not.

Dan

Sébastien Vauban wxhgmqzgwmuf-genee64ty+gs+fvcfc7...@public.gmane.org
writes:

 Hi Eric,

 Eric Schulte wrote:
 I don't forsee adding partial results insertion both because

 - it would add a good deal of complexity to the code to insert results
   part-way through a run

 I can't comment on this, of course.

 - the current behavior of only inserting results on a fully successful
   run is reasonable and is probably more obvious (at least to me) than
   inserting partial results

 Being fond of Babel, I'm using it always, everywhere. I prefer:

 1. typing my shell commands in an Org buffer,
 2. evaluate the block,
 3. get the results automagically inserted in the buffer,
 4. (eventually, version the whole file for later comparisons when updating the
code),
 5. export the whole to HTML and/or PDF.

 The current behavior, even if totally respectable and defendable, inhibits
 such a way of working: if you write (or update) a shell code, and don't see
 (more or less) the same things as the ones you would see in a shell buffer,
 then you can't use such an Org buffer -- as long as one command fails.

 I don't especially want you to change your position, but I'm explaining the
 negative consequences for me.

 Thanks!

 Best regards,
   Seb

___
Emacs-orgmode mailing list
Please use `Reply All' to send replies to the list.
Emacs-orgmode@gnu.org
http://lists.gnu.org/mailman/listinfo/emacs-orgmode


[Orgmode] Re: [Babel] No output returned if just one command is failing

2010-12-02 Thread Sébastien Vauban
Hi Eric,

Sébastien Vauban wrote:
 Eric Schulte wrote:
 I don't forsee adding partial results insertion both because

 - it would add a good deal of complexity to the code to insert results
   part-way through a run

 I can't comment on this, of course.

 - the current behavior of only inserting results on a fully successful run
   is reasonable and is probably more obvious (at least to me) than
   inserting partial results

 Being fond of Babel, I'm using it always, everywhere. I prefer:

 1. typing my shell commands in an Org buffer,
 2. evaluate the block,
 3. get the results automagically inserted in the buffer,
 4. (eventually, version the whole file for later comparisons when updating
the code),
 5. export the whole to HTML and/or PDF.

 The current behavior, even if totally respectable and defendable, inhibits
 such a way of working: if you write (or update) a shell code, and don't see
 (more or less) the same things as the ones you would see in a shell buffer,
 then you can't use such an Org buffer -- as long as one command fails.

 I don't especially want you to change your position, but I'm explaining the
 negative consequences for me.

BTW, what's the internal definition (in Org Babel) of unsuccessful run of
a (sh) command block?

Is it return code != 0?

If yes, such a sh block would never produce any results when the machine is
not a known name (as first command would fail):

#+begin_src sh :var machine :results output
ping $machine
rc=$?
if [ $rc == 0 ]; then
echo Machine pinged successfully with its name...;
else
echo Trying to ping machine by its IP...;
ipmachine=$(grep whichever-list.txt | cut -f 2);
ping $ipmachine
fi
#+end_src

(the above is just a simply sample of code which includes tests of rc)

Though, it does currently work with both known and unknown machines. So I'm
clearly missing something here.

Best regards,
  Seb

-- 
Sébastien Vauban


___
Emacs-orgmode mailing list
Please use `Reply All' to send replies to the list.
Emacs-orgmode@gnu.org
http://lists.gnu.org/mailman/listinfo/emacs-orgmode


[Orgmode] Re: [Babel] No output returned if just one command is failing

2010-12-02 Thread Eric Schulte
Hi,

You both make good points in favor of this behavior, and I had no idea
this would be as easy as Dan's patch below, I was thinking that some
sort of intermediate results return would be required.

I would be open to either of Dan's suggested changes
1. return partial results for :results output
2. return partial results controlled by some new header argument

I am worried by the prospect of partial results being used by another
code block in chained code block execution.  Perhaps some special care
should be taken to ensure that this will not happen, or perhaps this
should happen only in case two above where the user has explicitly
specified that partial results are OK.

Thoughts? -- Eric

Dan Davison dandavis...@gmail.com writes:

 Hi Seb, I definitely have some sympathy with your request. On two
 occasions I've had to manually make this change just to carry on
 working. The change I made is straightforward if you need it as a
 temporary hack:

 diff --git a/lisp/ob-eval.el b/lisp/ob-eval.el
 index 8832d91..1cce003 100644
 --- a/lisp/ob-eval.el
 +++ b/lisp/ob-eval.el
 @@ -57,7 +57,7 @@ STDERR with `org-babel-eval-error-notify'.
   (progn
 (with-current-buffer err-buff
   (org-babel-eval-error-notify exit-code (buffer-string)))
 -   nil)
 +   (buffer-string))
 (buffer-string)
  
  (defun org-babel-eval-read-file (file)

 But do we actually change babel in this direction? It's important to
 distinguish between :results output and :results value here. The change
 that seems superficially attractive is to allow :results output to
 output the contents of standard output, even if there has been an
 error. After all, stdout might contain some useful data, and currently
 babel refuses point blank to give it to you if there's been an
 error. And as you say, this is the behavior we are used to in the
 shell. This hypothetical change would leave the default :results value
 alone (so the above patch would need modification).

 The thing is that babel currently has a clear, simple, rule which says:
 if there's an error, the result is the elisp value nil.

 Eric and I have discussed in the past whether there should be any change
 in this direction. The idea of a :debug header arg has been floated,
 that would allow this behavior. Or tacking stdout on to the error
 output. I tend to think that the behavior you request does need to be
 made available, somehow, whether by default or not.

 Dan

 Sébastien Vauban wxhgmqzgwmuf-genee64ty+gs+fvcfc7...@public.gmane.org
 writes:

 Hi Eric,

 Eric Schulte wrote:
 I don't forsee adding partial results insertion both because

 - it would add a good deal of complexity to the code to insert results
   part-way through a run

 I can't comment on this, of course.

 - the current behavior of only inserting results on a fully successful
   run is reasonable and is probably more obvious (at least to me) than
   inserting partial results

 Being fond of Babel, I'm using it always, everywhere. I prefer:

 1. typing my shell commands in an Org buffer,
 2. evaluate the block,
 3. get the results automagically inserted in the buffer,
 4. (eventually, version the whole file for later comparisons when updating 
 the
code),
 5. export the whole to HTML and/or PDF.

 The current behavior, even if totally respectable and defendable, inhibits
 such a way of working: if you write (or update) a shell code, and don't see
 (more or less) the same things as the ones you would see in a shell buffer,
 then you can't use such an Org buffer -- as long as one command fails.

 I don't especially want you to change your position, but I'm explaining the
 negative consequences for me.

 Thanks!

 Best regards,
   Seb

___
Emacs-orgmode mailing list
Please use `Reply All' to send replies to the list.
Emacs-orgmode@gnu.org
http://lists.gnu.org/mailman/listinfo/emacs-orgmode


[Orgmode] Re: [Babel] No output returned if just one command is failing

2010-12-02 Thread Sébastien Vauban
Hi Eric and Dan,

Dan Davison wrote:
 Sébastien Vauban wrote:
 Eric Schulte wrote:
 I don't forsee adding partial results insertion both because

 - it would add a good deal of complexity to the code to insert results
   part-way through a run

 I can't comment on this, of course.

 - the current behavior of only inserting results on a fully successful run
   is reasonable and is probably more obvious (at least to me) than
   inserting partial results

 Being fond of Babel, I'm using it always, everywhere. I prefer:

 1. typing my shell commands in an Org buffer,
 2. evaluate the block,
 3. get the results automagically inserted in the buffer,
 4. (eventually, version the whole file for later comparisons when updating
the code),
 5. export the whole to HTML and/or PDF.

 The current behavior, even if totally respectable and defendable, inhibits
 such a way of working: if you write (or update) a shell code, and don't see
 (more or less) the same things as the ones you would see in a shell buffer,
 then you can't use such an Org buffer -- as long as one command fails.

 I don't especially want you to change your position, but I'm explaining the
 negative consequences for me.

 I definitely have some sympathy with your request. On two occasions I've had
 to manually make this change just to carry on working.

 But do we actually change babel in this direction? [...]

 The thing is that babel currently has a clear, simple, rule which says: if
 there's an error, the result is the elisp value nil.

 Eric and I have discussed in the past whether there should be any change
 in this direction. The idea of a :debug header arg has been floated,
 that would allow this behavior. Or tacking stdout on to the error
 output. I tend to think that the behavior you request does need to be
 made available, somehow, whether by default or not.

If find this conclusion a bit contradictory with the fact that you even needed
it yourself. I'm not talking of having this by default, but somehow possible.
But, I know, we (you) have to ensure everything stays coherent, and somehow
simple...

BTW, what's the internal definition (in Org Babel) of unsuccessful run of
a (sh) command block?

Is it return code != 0?

If yes, such a sh block would never produce any results when the machine is
not a known name (as first command would fail):

#+begin_src sh :var machine :results output
ping $machine
rc=$?
if [ $rc == 0 ]; then
echo Machine pinged successfully with its name...;
else
echo Trying to ping machine by its IP...;
ipmachine=$(grep whichever-list.txt | cut -f 2);
ping $ipmachine
fi
#+end_src

(the above is just a simply sample of code which includes tests of rc)

Though, it does currently work with both known and unknown machines. So I'm
clearly missing something here.

Best regards,
  Seb

PS- I already sent this (the last paragraphs) hours ago. It did not reach the
ML. Is it a Gmane problem?  Or something else (Gnus)?

-- 
Sébastien Vauban


___
Emacs-orgmode mailing list
Please use `Reply All' to send replies to the list.
Emacs-orgmode@gnu.org
http://lists.gnu.org/mailman/listinfo/emacs-orgmode


[Orgmode] Re: [Babel] No output returned if just one command is failing

2010-12-02 Thread Dan Davison


Sébastien Vauban wxhgmqzgwmuf-genee64ty+gs+fvcfc7...@public.gmane.org
writes:

 Hi Eric and Dan,

 Dan Davison wrote:
 Sébastien Vauban wrote:
 Eric Schulte wrote:
 I don't forsee adding partial results insertion both because

 - it would add a good deal of complexity to the code to insert results
   part-way through a run

 I can't comment on this, of course.

 - the current behavior of only inserting results on a fully successful run
   is reasonable and is probably more obvious (at least to me) than
   inserting partial results

 Being fond of Babel, I'm using it always, everywhere. I prefer:

 1. typing my shell commands in an Org buffer,
 2. evaluate the block,
 3. get the results automagically inserted in the buffer,
 4. (eventually, version the whole file for later comparisons when updating
the code),
 5. export the whole to HTML and/or PDF.

 The current behavior, even if totally respectable and defendable, inhibits
 such a way of working: if you write (or update) a shell code, and don't see
 (more or less) the same things as the ones you would see in a shell buffer,
 then you can't use such an Org buffer -- as long as one command fails.

 I don't especially want you to change your position, but I'm explaining the
 negative consequences for me.

 I definitely have some sympathy with your request. On two occasions I've had
 to manually make this change just to carry on working.

 But do we actually change babel in this direction? [...]

 The thing is that babel currently has a clear, simple, rule which says: if
 there's an error, the result is the elisp value nil.

 Eric and I have discussed in the past whether there should be any change
 in this direction. The idea of a :debug header arg has been floated,
 that would allow this behavior. Or tacking stdout on to the error
 output. I tend to think that the behavior you request does need to be
 made available, somehow, whether by default or not.

 If find this conclusion a bit contradictory with the fact that you even needed
 it yourself.

Hey Seb -- you mis-read me there. I was agreeing with you that the
behavior should be made available.


___
Emacs-orgmode mailing list
Please use `Reply All' to send replies to the list.
Emacs-orgmode@gnu.org
http://lists.gnu.org/mailman/listinfo/emacs-orgmode


[Orgmode] Re: [Babel] No output returned if just one command is failing

2010-12-02 Thread Sébastien Vauban
Hi Dan and Eric,

Dan Davison wrote:
 Sébastien Vauban writes:
 Dan Davison wrote:
 Sébastien Vauban wrote:
 Eric Schulte wrote:
 I don't forsee adding partial results insertion both because

 - it would add a good deal of complexity to the code to insert results
   part-way through a run

 I can't comment on this, of course.

 - the current behavior of only inserting results on a fully successful run
   is reasonable and is probably more obvious (at least to me) than
   inserting partial results

 Being fond of Babel, I'm using it always, everywhere. I prefer:

 1. typing my shell commands in an Org buffer,
 2. evaluate the block,
 3. get the results automagically inserted in the buffer,
 4. (eventually, version the whole file for later comparisons when updating
the code),
 5. export the whole to HTML and/or PDF.

 The current behavior, even if totally respectable and defendable, inhibits
 such a way of working: if you write (or update) a shell code, and don't see
 (more or less) the same things as the ones you would see in a shell buffer,
 then you can't use such an Org buffer -- as long as one command fails.

 I don't especially want you to change your position, but I'm explaining the
 negative consequences for me.

 I definitely have some sympathy with your request. On two occasions I've had
 to manually make this change just to carry on working.

 But do we actually change babel in this direction? [...]

 The thing is that babel currently has a clear, simple, rule which says: if
 there's an error, the result is the elisp value nil.

 Eric and I have discussed in the past whether there should be any change
 in this direction. The idea of a :debug header arg has been floated,
 that would allow this behavior. Or tacking stdout on to the error
 output. I tend to think that the behavior you request does need to be
 made available, somehow, whether by default or not.

 If find this conclusion a bit contradictory with the fact that you even 
 needed
 it yourself.

 Hey Seb -- you mis-read me there. I was agreeing with you that the
 behavior should be made available.

Yes, it seems I did add a implicit *not* in your last sentence...

My impressions are that shell blocks may be a totally different beast from the
other source blocks. If so, it could legitimate a slightly different treatment
(or default set of options).

All of this discussion once again turns around the handling of errors, and the
two streams (stdout and stderr). Aaaah, here's well a proof it's different
from the rest (languages such as emacs-lisp), at least in their classic usage?

My dream would be to be able to write, debug and use code blocks from Org, and
only Org. Not be forced to use the shell because some unknown condition make
them return an error.

Note: Can you explain me what's an error in the case of a sh block?  See
my previous post(s) of today. Thanks...

Maybe once acceptable solution would be to output everything as it is in the
terminal, mixing both streams.

A possible dream of mine could maybe even become true here: the possibility to
clearly distinguish both streams by coloring them differently in the Org
results: for example, all lines from stdout in black, all lines from stderr in
red...

Though, I understand Eric's fears of problems for chained blocks execution.
But, anyway, what else would you expect than what occurs in a terminal?  Why
should it be different?

Best regards,
  Seb

-- 
Sébastien Vauban


___
Emacs-orgmode mailing list
Please use `Reply All' to send replies to the list.
Emacs-orgmode@gnu.org
http://lists.gnu.org/mailman/listinfo/emacs-orgmode


[Orgmode] Re: [Babel] No output returned if just one command is failing

2010-12-02 Thread Sébastien Vauban
Hi Eric,

Eric Schulte wrote:
 You both make good points in favor of this behavior, and I had no idea
 this would be as easy as Dan's patch below, I was thinking that some
 sort of intermediate results return would be required.

 I would be open to either of Dan's suggested changes
 1. return partial results for :results output
 2. return partial results controlled by some new header argument

 I am worried by the prospect of partial results being used by another
 code block in chained code block execution.  Perhaps some special care
 should be taken to ensure that this will not happen, or perhaps this
 should happen only in case two above where the user has explicitly
 specified that partial results are OK.

As I just expressed it, I would vote for show the results as they are, and
as they would be in a terminal. No special header needed, in my current view
of the Babel world.

In fact, I find the words partial results to be rather negative. They just
are the results a terminal would display: they're *all the available results*
that the block can generate in its execution context.

Best regards,
  Seb

PS- I wanna repeat I may be proven wrong. Maybe I don't think (yet?) at all
impacts such a decision may have!

-- 
Sébastien Vauban


___
Emacs-orgmode mailing list
Please use `Reply All' to send replies to the list.
Emacs-orgmode@gnu.org
http://lists.gnu.org/mailman/listinfo/emacs-orgmode


[Orgmode] Re: [Babel] No output returned if just one command is failing

2010-12-01 Thread Sébastien Vauban
Hi Eric,

Eric Schulte wrote:
 I don't forsee adding partial results insertion both because

 - it would add a good deal of complexity to the code to insert results
   part-way through a run

I can't comment on this, of course.

 - the current behavior of only inserting results on a fully successful
   run is reasonable and is probably more obvious (at least to me) than
   inserting partial results

Being fond of Babel, I'm using it always, everywhere. I prefer:

1. typing my shell commands in an Org buffer,
2. evaluate the block,
3. get the results automagically inserted in the buffer,
4. (eventually, version the whole file for later comparisons when updating the
   code),
5. export the whole to HTML and/or PDF.

The current behavior, even if totally respectable and defendable, inhibits
such a way of working: if you write (or update) a shell code, and don't see
(more or less) the same things as the ones you would see in a shell buffer,
then you can't use such an Org buffer -- as long as one command fails.

I don't especially want you to change your position, but I'm explaining the
negative consequences for me.

Thanks!

Best regards,
  Seb

-- 
Sébastien Vauban


___
Emacs-orgmode mailing list
Please use `Reply All' to send replies to the list.
Emacs-orgmode@gnu.org
http://lists.gnu.org/mailman/listinfo/emacs-orgmode