Uploaded image for project: 'Subversion'
  1. Subversion
  2. SVN-4879

Broken pipe on the diff command with --diff-cmd

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Open
    • Major
    • Resolution: Unresolved
    • 1.14.1
    • None
    • cmdline client
    • None
    • Debian GNU/Linux.

    Description

      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

      A possible fix (to be tested): instead of ignoring SIGPIPE (using SIG_IGN), use a handler that does nothing. That way, when a command is executed, SIGPIPE will be reset to the default action in the command (i.e. killing the command, unless the command itself changes how it handles SIGPIPE).

      Attachments

        Activity

          People

            Unassigned Unassigned
            vinc17 Vincent Lefevre
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

              Created:
              Updated: