Skip to content

Instantly share code, notes, and snippets.

@dtjm
Created August 13, 2010 17:34
Show Gist options
  • Star 19 You must be signed in to star a gist
  • Fork 6 You must be signed in to fork a gist
  • Save dtjm/523243 to your computer and use it in GitHub Desktop.
Save dtjm/523243 to your computer and use it in GitHub Desktop.
Wrapper to use OS X FileMerge when calling `svn diff`
[helpers]
### ...
### Set diff-cmd to the absolute path of your 'diff' program.
### This will override the compile-time default, which is to use
### Subversion's internal diff implementation.
diff-cmd = ~/bin/svn-diffwrap.sh
#!/bin/sh
#
# Put this somewhere like ~/bin
#
# Configure your favorite diff program here.
#DIFF="/Users/username/bin/mvim -d"
#DIFF="/usr/bin/vimdiff"
DIFF="/usr/bin/opendiff"
# 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.
@michaelxor
Copy link

This is handy, thanks. I am using svn 1.7.10 and it doesn't seem to like the ~ in the config file. Any tips to get this working?

Edit: In the mean time, I've moved svn-diffwrap.sh into the .subversion directory, and now .subversion/config uses:

diff-cmd = svn-diffwrap.sh

Works as expected.

@clops
Copy link

clops commented Feb 3, 2014

Awesome one, thanks!

@troya2
Copy link

troya2 commented Mar 11, 2014

Put quotes around $LEFT and $RIGHT on line 30 to handle filenames and paths with spaces:

$DIFF "$LEFT" "$RIGHT"

@rstackhouse
Copy link

When I run your script via the terminal a la:

svn diff --diff-cmd ~/bin/svn-diffwrap.sh

It works fine.

But when I edit the ~/.subversion/config file, like you illustrated above, I get something like this:

computer:svn rstackhouse$ svn diff
Index: <file>
===================================================================
exec of '~/bin/svn-diffwrap.sh' failed: No such file or directorysvn: E200012: '~/bin/svn-diffwrap.sh' returned 255

Any idea why?

@bozakov
Copy link

bozakov commented Dec 6, 2014

Any idea why?

Try using the full home directory path instead of ~.

@iosappdeveloper
Copy link

Even I get this error when i do svn diff on terminal app (OS X 10.11.1)
exec of 'svn-diffwrap.sh' failed: No such file or directorysvn: E200012: 'svn-diffwrap.sh' returned 255

I moved the file to ~/.subversion folder (parallel to config) and updated ~/.subversion/config [helpers] with
diff-cmd=svn-diffwrap.sh

And, I made it executable using the mentioned command
$ls -l svn-diffwrap.sh
-rwxr-xr-x@ 1 staff 959 Nov 3 14:53 svn-diffwrap.sh

Any help please?

@iosappdeveloper
Copy link

Ok, I found a solution for the error mentioned above (no such file or directory)...
diff-cmd=/Users/<YourUser>/.subversion/svn-diffwrap.sh

i.e. specify full path from '/' folder

@IgorGanapolsky
Copy link

@dtjm @iosappdeveloper This is a useful fix to specify svn-diffwrap. Saved me a ton of time. @changetip $1

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment