-
-
Save mojodna/44537 to your computer and use it in GitHub Desktop.
#!/bin/bash | |
# | |
# git-svn-diff originally by (http://mojodna.net/2009/02/24/my-work-git-workflow.html) | |
# modified by [email protected] | |
# modified by aconway@[redacted] - handle diffs that introduce new files | |
# | |
# Generate an SVN-compatible diff against the tip of the tracking branch | |
# Get the tracking branch (if we're on a branch) | |
TRACKING_BRANCH=`git svn info | grep URL | sed -e 's/.*\/branches\///'` | |
# If the tracking branch has 'URL' at the beginning, then the sed wasn't successful and | |
# we'll fall back to the svn-remote config option | |
if [[ "$TRACKING_BRANCH" =~ URL.* ]] | |
then | |
TRACKING_BRANCH=`git config --get svn-remote.svn.fetch | sed -e 's/.*:refs\/remotes\///'` | |
fi | |
# Get the highest revision number | |
REV=`git svn info | grep 'Last Changed Rev:' | sed -E 's/^.*: ([[:digit:]]*)/\1/'` | |
# Then do the diff from the highest revision on the current branch | |
# and masssage into SVN format | |
git diff --no-prefix $(git rev-list --date-order --max-count=1 $TRACKING_BRANCH) $* | | |
sed -e "/--- \/dev\/null/{ N; s|^--- /dev/null\n+++ \(.*\)|---\1 (revision 0)\n+++\1 (revision 0)|;}" \ | |
-e "s/^--- .*/& (revision $REV)/" \ | |
-e "s/^+++ .*/& (working copy)/" \ | |
-e "s/^diff --git [^[:space:]]*/Index:/" \ | |
-e "s/^index.*/===================================================================/" |
Line 25 has a sed syntax issue that prevents it from running on my OS X setup. I get this error:
sed: 1: "/--- \/dev\/null/{ N; s ...": bad flag in substitute command: '}'
You need a semicolon before the ending curly brace. Fixed here in my fork.
Thanks for the bug reports! They should be fixed now.
I found that the $REV value is incorrect if you're not working with the latest svn revision.
I corrected it to use git svn info
instead like this:
REV=`git svn info | grep 'Last Changed Rev:' | sed -E 's/^.*: ([[:digit:]]*)/\1/'\`
Updated.
Bah! There is a run-away slash at the end of the line that I gave you. It should read:
REV=`git svn info | grep 'Last Changed Rev:' | sed -E 's/^.*: ([[:digit:]]*)/\1/'`
Fixed, thanks!
Forked to make the script a little friendlier to windows and tortoiseSVN (specifically, not referencing /dev/null on deletes) - https://gist.github.com/1387609
Line 26/27/28/29 has a sed syntax issue that prevents it from running on my OS X setup. Can you remove the empty space after each .
After removing the empty spaces, the script work nicely. Thank you.
Removed the trailing spaces here https://gist.github.com/anshulguleria/7f107ce67a0fe23c1b0b
Was causing issue in linux also. Please add this change to your gist too.
Hi, there's a small bug in handling of diffs that introduce new files: the --- and +++ are missing from the rewritten lines (see my fork at https://gist.github.com/795208 for the fix, see http://codereview.appspot.com/3282042/patch/71001/72004 for an example of a broken patch)