Take the 2-minute tour ×
Stack Overflow is a question and answer site for professional and enthusiast programmers. It's 100% free, no registration required.

I found diff output is strange when I set --diff-cmd=diff.

➜  svntest  svn diff --diff-cmd=diff -x '' #The cmd `diff` cann't output this format, so strange 
Index: a.c
===================================================================
--- a.c (revision 1)
+++ a.c (working copy)
@@ -0,0 +1 @@
+teste

➜  svntest  svn diff --diff-cmd=diff -x '-i'
Index: a.c
===================================================================
0a1
> teste

I thought the two commands above essentially excute as below, am I wrong?

➜  svntest  diff   -L 'a.c(revision 1)' -L 'a.c(working copy)' '/Users/hilojack/www/svntest/.svn/pristine/da/da39a3ee5e6b4b0d3255bfef95601890afd80709.svn-base' '/Users/hilojack/www/svntest/a.c'
0a1
> teste
➜  svntest  diff  -i -L 'a.c(revision 1)' -L 'a.c(working copy)' '/Users/hilojack/www/svntest/.svn/pristine/da/da39a3ee5e6b4b0d3255bfef95601890afd80709.svn-base' '/Users/hilojack/www/svntest/a.c'
0a1
> teste

I get this from svn help diff

-x [--extensions] ARG    : Default: '-u'. When Subversion is invoking an external diff program, ARG is simply passed along to the program.

The subversion will pass default params -u to external diff program.

➜  svntest  svn diff --diff-cmd=echo
Index: a.c
===================================================================
-u -L a.c   (revision 1) -L a.c (working copy) /Users/hilojack/www/svntest/.svn/pristine/da/da39a3ee5e6b4b0d3255bfef95601890afd80709.svn-base /Users/hilojack/www/svntest/a.c
share|improve this question

1 Answer 1

up vote 0 down vote accepted

Subversion passes the following parameters to the external diff command:

  • -u or the user specified flags via -x'. If-xis null, the-u` is passed anyway.
  • -L
  • Base Title
  • -L
  • Working Copy Title
  • Base file
  • Working copy file

The only way to get rid of -u is to pass in another parameter. I wrote a Perl script I use to do my parsing and then use VIM for my diff:

#! /usr/bin/env perl

use strict;
use warnings;

use constant DIFF => qw(mvim -d -f);

my $parameters = $#ARGV;
my $file1 = $ARGV[$parameters - 1];
my $file2 = $ARGV[$parameters];
my $title1 = $ARGV[$parameters - 4];
my $title2 = $ARGV[$parameters - 2];

$ENV{TITLE} = "$title1  -   $title2";
system DIFF, '-c', 'let &titlestring=$TITLE', $file1, $file2;
share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.