|  | #!/bin/bash | 
|  |  | 
|  | if [ $# -ne 1 ]; then | 
|  | echo "Invalid arguments!" | 
|  | echo "$0 <commit to revert>" | 
|  | exit 1 | 
|  | fi | 
|  |  | 
|  | if [ -n "$(git status -uno -s --porcelain)" ]; then | 
|  | echo "You have unstashed changes. Please stash and then revert." | 
|  | git status -uno | 
|  | exit 1 | 
|  | fi | 
|  |  | 
|  | COMMIT=$1 | 
|  |  | 
|  | SVN_REVISION=$(git svn find-rev "$COMMIT") | 
|  | if [ $? -ne 0 ]; then | 
|  | echo "Error! Could not find an svn revision for commit $COMMIT!" | 
|  | exit 1 | 
|  | fi | 
|  |  | 
|  | # Grab the one line message for our revert commit message. | 
|  | ONE_LINE_MSG=$(git log --oneline $COMMIT -1 | cut -f2- -d " ") | 
|  |  | 
|  | # Revert the commit. | 
|  | git revert --no-commit $COMMIT 2>/dev/null | 
|  | if [ $? -ne 0 ]; then | 
|  | echo "Error! Failed to revert commit $COMMIT. Resetting to head." | 
|  | git reset --hard HEAD | 
|  | exit 1 | 
|  | fi | 
|  |  | 
|  | # Create a template in our .git directory. | 
|  | TEMPLATE="`git rev-parse --git-dir`/git-svn-revert-template" | 
|  | cat > $TEMPLATE <<EOF | 
|  | Revert "$ONE_LINE_MSG" | 
|  |  | 
|  | This reverts commit r$SVN_REVISION. | 
|  | EOF | 
|  |  | 
|  | # Begin the commit but give our user an opportunity to edit it. | 
|  | git commit --file="$TEMPLATE" --edit | 
|  | if [ $? -ne 0 ]; then | 
|  | echo "Error! Failed to commit reverting commit for commit $COMMIT. Reverting to head." | 
|  | git reset --hard HEAD | 
|  | rm -rf $TEMPLATE | 
|  | exit 1 | 
|  | fi | 
|  |  | 
|  | rm -rf $TEMPLATE | 
|  |  |