#992890 subversion: Broken pipe on the diff command with --diff-cmd

Package:
subversion
Source:
subversion
Description:
Advanced version control system
Submitter:
Vincent Lefevre
Date:
2021-08-26 17:15:03 UTC
Severity:
minor
Tags:
#992890#5
Date:
2021-08-24 17:08:47 UTC
From:
To:
When I pipe the output of "svn diff --diff-cmd diff" and a broken pipe
occurs on the diff command, I get a "Broken pipe" error:

diff: standard output: Broken pipe
svn: E200012: 'diff' returned 2

The cause is that svn runs the diff command with SIGPIPE ignored,
so that diff gets an EPIPE write error instead of being killed by
the signal. I think that a fix should be to reset SIGPIPE to the
default action just before executing the external diff command.

To reproduce the bug:
----------------------------------------
#!/bin/sh

set -e

export LC_ALL=C

mkdir my-test-svn
cd my-test-svn

svnadmin create svn
svn co file://`pwd`/svn wc
cd wc

seq 10000 > file
svn add file
svn diff | head
svn diff --diff-cmd diff | head

cd ../..
rm -rf my-test-svn
----------------------------------------

This gives:

Checked out revision 0.
A         file
Index: file
===================================================================
--- file        (nonexistent)
+++ file        (working copy)
@@ -0,0 +1,10000 @@
+1
+2
+3
+4
+5
Index: file
===================================================================
--- file        (nonexistent)
+++ file        (working copy)
@@ -0,0 +1,10000 @@
+1
+2
+3
+4
+5
diff: standard output: Broken pipe
svn: E200012: 'diff' returned 2

No issue with the first "svn diff". The error occurs only with
"svn diff --diff-cmd diff".

I've also reported the bug upstream:

https://mail-archives.apache.org/mod_mbox/subversion-dev/202108.mbox/%3C20210824151357.GA3011301%40cventin.lip.ens-lyon.fr%3E

#992890#10
Date:
2021-08-26 17:12:19 UTC
From:
To:
Confirmed upstream. I've just reported the bug in the issue tracker.