2014-05-09 5 views
0

J'ai trouvé la sortie de diff est étrange quand j'ai réglé --diff-cmd=diff. Je pensais que les deux commandes ci-dessus s'exécutent essentiellement comme ci-dessous, ai-je tort?Pourquoi 'svn diff --diff-cmd = diff' affiche le format de diff interne?

➜ 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 

Je reçois ce billet depuis svn help diff

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

La subversion passera par défaut params -u au programme diff externe.

➜ 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 

Répondre

0

Subversion transmet les paramètres suivants pour la commande diff externe:

  • -u ou l'utilisateur spécifié par l'intermédiaire des drapeaux -x'. If -x is null, the -u` est passé de toute façon.
  • -L
  • base Titre
  • -L
  • Brouillon Titre
  • fichier de base
  • travail fichier copie

Le seul moyen de se débarrasser de -u est à passer dans un autre paramètre . J'ai écrit un script Perl que j'utilise pour faire mon analyse, puis j'utilise VIM pour mon 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;