Update git-svnrevert to accept git and svn revisions
authorRenato Golin <renato.golin@linaro.org>
Wed, 8 Oct 2014 09:32:47 +0000 (09:32 +0000)
committerRenato Golin <renato.golin@linaro.org>
Wed, 8 Oct 2014 09:32:47 +0000 (09:32 +0000)
Interchangeable commit ids can now be used on this git-svnrevert, which
will figure out what kind of commit that is (if you use format rNNNN for SVN
commits) and make sure the right ids are used in the right places.

It's a little bit more robust and user-friendly.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@219290 91177308-0d34-0410-b5e6-96231b3b80d8

utils/git-svn/git-svnrevert

index 06a9c440915f1e26261def374fd48e8b4c0daba7..f15e7abfb3f1015bbb073b6865b3b0c289ec8e79 100755 (executable)
@@ -2,7 +2,7 @@
 
 if [ $# -ne 1 ]; then
     echo "Invalid arguments!"
-    echo "$0 <commit to revert>"
+    echo "$0 <rNNNNNN | git-hash>"
     exit 1
 fi
 
@@ -13,20 +13,27 @@ if [ -n "$(git status -uno -s --porcelain)" ]; then
 fi
 
 COMMIT=$1
-
-SVN_REVISION=$(git svn find-rev "$COMMIT")
+OTHER=$(git svn find-rev "$COMMIT")
 if [ $? -ne 0 ]; then
-    echo "Error! Could not find an svn revision for commit $COMMIT!"
+    echo "Error! Could not find an svn/git revision for commit $COMMIT!"
     exit 1
 fi
 
+if [ -n "$(echo $COMMIT | grep '^r[0-9]\+')" ]; then
+  SVN=`echo $COMMIT | sed -e 's/^r//'`
+  GIT=$OTHER
+else
+  SVN=$OTHER
+  GIT=$COMMIT
+fi
+
 # Grab the one line message for our revert commit message.
-ONE_LINE_MSG=$(git log --oneline $COMMIT -1 | cut -f2- -d " ")
+ONE_LINE_MSG=$(git log --oneline $GIT -1 | cut -f2- -d " ")
 
 # Revert the commit.
-git revert --no-commit $COMMIT 2>/dev/null
+git revert --no-commit $GIT 2>/dev/null
 if [ $? -ne 0 ]; then
-    echo "Error! Failed to revert commit $COMMIT. Resetting to head."
+    echo "Error! Failed to revert commit r$SVN. Resetting to head."
     git reset --hard HEAD
     exit 1
 fi
@@ -36,13 +43,13 @@ TEMPLATE="`git rev-parse --git-dir`/git-svn-revert-template"
 cat > $TEMPLATE <<EOF
 Revert "$ONE_LINE_MSG"
 
-This reverts commit r$SVN_REVISION.
+This reverts commit r$SVN.
 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."
+    echo "Error! Failed to commit reverting commit for commit r$SVN. Reverting to head."
     git reset --hard HEAD
     rm -rf $TEMPLATE
     exit 1