Implement TokenizeWindowsCommandLine.
[oota-llvm.git] / utils / git-svn / git-svnrevert
1 #!/bin/bash
2
3 if [ $# -ne 1 ]; then
4     echo "Invalid arguments!"
5     echo "$0 <commit to revert>"
6     exit 1
7 fi
8
9 if [ -n "$(git status -uno -s --porcelain)" ]; then
10     echo "You have unstashed changes. Please stash and then revert."
11     git status -uno
12     exit 1
13 fi
14
15 COMMIT=$1
16
17 SVN_REVISION=$(git svn find-rev "$COMMIT")
18 if [ $? -ne 0 ]; then
19     echo "Error! Could not find an svn revision for commit $COMMIT!"
20     exit 1
21 fi
22
23 # Grab the one line message for our revert commit message.
24 ONE_LINE_MSG=$(git log --oneline $COMMIT -1 | cut -f2- -d " ")
25
26 # Revert the commit.
27 git revert --no-commit $COMMIT 2>/dev/null
28 if [ $? -ne 0 ]; then
29     echo "Error! Failed to revert commit $COMMIT. Resetting to head."
30     git reset --hard HEAD
31     exit 1
32 fi
33
34 # Create a template in our .git directory.
35 TEMPLATE="`git rev-parse --git-dir`/git-svn-revert-template"
36 cat > $TEMPLATE <<EOF
37 Revert "$ONE_LINE_MSG"
38
39 This reverts commit r$SVN_REVISION.
40 EOF
41
42 # Begin the commit but give our user an opportunity to edit it.
43 git commit --file="$TEMPLATE" --edit
44 if [ $? -ne 0 ]; then
45     echo "Error! Failed to commit reverting commit for commit $COMMIT. Reverting to head."
46     git reset --hard HEAD
47     rm -rf $TEMPLATE
48     exit 1
49 fi
50
51 rm -rf $TEMPLATE
52