On 3/7/02 3:53 PM, "Philip Martin" <philip@codematters.co.uk> wrote:
> Ben Collins-Sussman <sussman@collab.net> writes:
>
>> William Uther <will+@cs.cmu.edu> writes:
>>
>>> Hi,
>>>
>>> If I make some changes to my working copy, and then run:
>>>
>>> $ svn diff | more
>>>
>>> And then kill the output halfway through ('q' in more), I get the following
>>> error from subversion:
>>>
>>> subversion/libsvn_subr/io.c:1200
>>> svn_error: #21088 : <Error calling external program>
>>> svn_io_run_cmd: error exitwhy 2 for process /usr/bin/diff
>>
>> This has something to do with the way APR is spawning a child 'diff'
>> process, and the way we're displaying its output.
>>
>> Many people more know more about this than I do. Philip? Brane? :-)
>
> When you terminate the more process you close the pipe between more
> and svn. The diff process inherits its stdout from the svn process,
> so when the pipe is closed the diff output is closed. When the diff
> process tries to write to the closed stream it receives SIGPIPE. The
> diff process does not attempt to handle SIGPIPE so the default
> behaviour, which is to abort the process, occurs. The svn function
> svn_io_run_cmd detects that the diff process has aborted and returns
> SVN_ERR_EXTERNAL_PROGRAM. This will cause the above error message to
> be output and the svn process to exit with EXIT_FAILURE.
I figured something like this was happening. Is this what we want to
happen? It seems strange to get a message on stdout simply because I didn't
read all the output.
Is this worth fixing, or is the answer: wait until the internal diff library
is finished :)
Later,
\x/ill :-}
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
For additional commands, e-mail: dev-help@subversion.tigris.org
Received on Wed Jul 3 22:12:36 2002