tags:

views:

821

answers:

3

Following a blog I created a batch file wm.bat

"d:\svnroot\external\winmerge\WinMerge.exe" /B /WAIT "d:\svnroot\external\winmerge\WinMergeU.exe" /e /ub /dl %3 /dr %5 %6 %7

and tried calling

svn diff | wm

but that didn't work. So how do I integrate winmerge or similar utility with svn diff.

Edit: Extending on David's answer below, changing the default for windows requires editing the config file located at (for XP)

C:\Documents and Settings\{username}\Application Data\Subversion\config

or (Vista)

C:\Users\{username}\AppData\Roaming\Subversion\config
+6  A: 

Ok, looking at the original blog post this is what you want:

svn diff --diff-cmd wm [optional-filename]

If you want to see what is actually happening here (i.e. what sort of parameters the svn diff passes to the nominated diff-cmd), you can just use svn diff --diff-cmd echo and see what it says:

[~/src/gosmore-dev]$ svn diff --diff-cmd echo
Index: gosmore.cpp
===================================================================
-u -L gosmore.cpp   (revision 13753) -L gosmore.cpp (working copy) .svn/text-base/gosmore.cpp.svn-base gosmore.cpp

Some quotes were removed above, but basically you can see that svn diff will pass

-u -L "<left-label>" -L "<right-label>" <left-file> <right-file>

to your batch file. The batch file you have is used to turn these commands into the format that WinMerge understands.

More details and examples on how this all works is provided in the svn book, as indicated in gimpf's (now removed) answer.

To make your batch file always be used you need to add the following line in the [helpers] section in your local subversion config file (~/.subversion/config under linux, I'm not sure where in Windows) (see this earlier SO question)

diff-cmd=wm.bat
David Dean
A: 

After creating a batch file that contains a call to your favorite merge program, you can configure Subversion to always use your batch file in Windows (without requiring the --diff-cmd argument on each use) by modifying the line

# diff-cmd = diff_program (diff, gdiff, etc.)

in the file C:\Documents and Settings\username\Application Data\Subversion\config. This line should be changed to point to your batch file. For example:

diff-cmd = c:\bin\wm.bat
Michael Venable
A: 

Check out this link:

http://blog.tplus1.com/index.php/2007/08/29/how-to-use-vimdiff-as-the-subversion-diff-tool/

Here is a copy for SOer's convienience:

Get this diffwrap.sh script and save it anywhere. I saved mine in my $HOME/bin directory. Make sure to make it executable! I’m showing it below:

!/bin/sh

Configure your favorite diff program here. DIFF="/usr/bin/vimdiff"

Subversion provides the paths we need as the sixth and seventh

parameters. LEFT=${6} RIGHT=${7}

Call the diff command (change the following line to make sense for

your merge program). $DIFF $LEFT $RIGHT

Return an errorcode of 0 if no differences were detected, 1 if some

were.

Any other errorcode will be treated as fatal.

Then change your $HOME/.subversion/config file to point at that script:

[helpers] diff-cmd = /home/matt/bin/diffwrap.sh

Then go diff a file!

pierr