summaryrefslogtreecommitdiff
path: root/logerrit
diff options
context:
space:
mode:
authorBjoern Michaelsen <bjoern.michaelsen@canonical.com>2012-06-20 15:42:27 -0500
committerBjoern Michaelsen <bjoern.michaelsen@canonical.com>2012-06-21 17:51:19 +0200
commitfe49f23529a52c33ca3e2f673d242273bcaa7108 (patch)
treecd68c4fab0fbd39ecc7dc49d14e1936e5c954909 /logerrit
parentade85a43e1369cb9e0026f048ed410a964db48d9 (diff)
add helper script for gerrit CLI integration
Change-Id: I5705530ee4d5b93bc66ca23463098ac45f49323d
Diffstat (limited to 'logerrit')
-rwxr-xr-xlogerrit187
1 files changed, 187 insertions, 0 deletions
diff --git a/logerrit b/logerrit
new file mode 100755
index 000000000000..b3d223354a3b
--- /dev/null
+++ b/logerrit
@@ -0,0 +1,187 @@
+#!/bin/sh
+
+#GERRITHOST=gerrit.libreoffice.org
+GERRITHOST=logerrit
+GERRITURL=ssh://$GERRITHOST/core
+
+get_SHA_for_change() {
+ SHA=`ssh ${GERRITHOST?} gerrit query --all-approvals change:$1|grep ref|tail -1|cut -d: -f2`
+}
+
+ask_tristate() {
+ case $1 in
+ [yY] | [yY][Ee][Ss] | [+] )
+ ANSWER=y
+ ;;
+ [nN] | [n|N][O|o] | [-] )
+ ANSWER=n
+ ;;
+ [] )
+ ANSWER=
+ ;;
+ * )
+ echo "Please answer with either +,-,y,n,yes,no or the empty string."
+ exit 1
+ ;;
+ esac
+
+}
+
+case "$1" in
+ help)
+ echo "Usage: ./logerrit subcommand [options]"
+ echo "subcommands:"
+ echo " test test your gerrit setup"
+ echo " submit [BRANCH] submit your change for review to a branch"
+ echo " nextchange [BRANCH] reset branch to the remote to start with the next change"
+ echo " checkout CHANGEID checkout the changes for review"
+ echo " pull CHANGEID pull (and merge) the changes on current branch"
+ echo " cherry-pick CHANGEID cherry-pick the change on current branch"
+ echo " patch CHANGEID show the change as a patch"
+ echo " review [CHANGEID] interactively review a change (current one if no changeid given)"
+ echo " query .... query for changes for review on project core"
+ echo " <any other gerrit command>"
+ exit
+ ;;
+ test)
+ if test -n "`ssh $GERRITHOST 2>&1|grep \"Welcome to Gerrit Code Review\"`"
+ then
+ echo "Your gerrit setup was succesfull!"
+ else
+ echo "There seems to be trouble."
+ echo "please have the output of: ssh -vvvv logerrit"
+ echo "at hand when looking for help."
+ fi
+ ;;
+ submit)
+ BRANCH=$2
+ if test -z "$BRANCH"
+ then
+ BRANCH=`git symbolic-ref HEAD 2> /dev/null`
+ BRANCH="${BRANCH##refs/heads/}"
+ if test -z "$BRANCH"
+ then
+ echo "no branch specified, and could not guess the current branch"
+ exit 1
+ fi
+ echo "no branch specified, guessing current branch $BRANCH"
+ fi
+ git push $GERRITURL HEAD:refs/for/$BRANCH
+ ;;
+ nextchange)
+ CHANGEID=`git log --format=format:%b -1 HEAD|grep Change-Id|cut -d: -f2|tr -d \ `
+ if test -z "$CHANGEID"
+ then
+ CHANGEID="NOCHANGEID"
+ fi
+ BACKUPBRANCH=backup/$CHANGEID-`date +%F-%H%M%S`
+ git branch $BACKUPBRANCH
+ echo "current state backed up as $BACKUPBRANCH"
+ BRANCH=$2
+ if test -z "$BRANCH"
+ then
+ BRANCH=`git symbolic-ref HEAD 2> /dev/null`
+ BRANCH="${BRANCH##refs/heads/}"
+ if test -z "$BRANCH"
+ then
+ echo "no branch specified, and could not guess the current branch"
+ exit 1
+ fi
+ echo "no branch specified, guessing current branch $BRANCH"
+ fi
+ git reset --hard remotes/origin/$BRANCH
+ ;;
+ review)
+ CHANGEID=$2
+ if test -z "$CHANGEID"
+ then
+ CHANGEID=`git log --format=format:%b -1 HEAD|grep Change-Id|cut -d: -f2`
+ if test -z "$CHANGEID"
+ then
+ echo "could not find a Change-Id in your last commit, sorry"
+ exit 1
+ fi
+ echo "no Change-Id given on the command line, reviewing change$CHANGEID"
+ fi
+ MESSAGEREQ=""
+ read -p 'was the change verified to build sucessfully (+) or found not to build (-) or none of that ()? ' VERIFIED
+ ask_tristate $VERIFIED
+ case "$ANSWER" in
+ "y")
+ VERIFIEDFLAG=--verified=+1
+ ;;
+ "n")
+ VERIFIEDFLAG="--verified=-1"
+ MESSAGEREQ="$MESSAGEREQ and explain why you could not verify this"
+ ;;
+ *)
+ VERIFIEDFLAG="--verified=0"
+ ;;
+
+ esac
+ read -p 'is the code looking good (+), bad (-) or none of that ()? ' CODEREVIEW
+ ask_tristate $CODEREVIEW
+ case "$ANSWER" in
+ "y")
+ read -p 'do you approve and submit the change (+) too, or prefer someone else to do that ()? ' CODEREVIEW
+ ask_tristate $CODEREVIEW
+ case "$ANSWER" in
+ "y")
+ CODEREVIEWFLAG="--codereview=2 --submit"
+ ;;
+ "n")
+ CODEREVIEWFLAG="--codereview=1"
+ ;;
+ *)
+ CODEREVIEWFLAG="--codereview=1"
+ ;;
+ esac
+ ;;
+ "n")
+ read -p 'do you still allow the change to go in () or not (-)? ' CODEREVIEW
+ ask_tristate $CODEREVIEW
+ case "$ANSWER" in
+ "y")
+ CODEREVIEWFLAG="--codereview=-1"
+ MESSAGEREQ="$MESSAGEREQ and explain why you have reservations about the code"
+ ;;
+ "n")
+ CODEREVIEWFLAG="--codereview=-2"
+ MESSAGEREQ="$MESSAGEREQ and explain why you want to block this"
+ ;;
+ *)
+ CODEREVIEWFLAG="--codereview=-1"
+ MESSAGEREQ="$MESSAGEREQ and explain why you have reservations about the code"
+ ;;
+ esac
+ ;;
+ *)
+ ;;
+ esac
+ read -p "please type a friendly comment$MESSAGEREQ: " MESSAGE
+ echo ssh ${GERRITHOST?} gerrit review -m \"$MESSAGE\" $VERIFIEDFLAG $CODEREVIEWFLAG $CHANGEID
+ ;;
+ checkout)
+ get_SHA_for_change $2
+ git fetch $GERRITURL $SHA && git checkout FETCH_HEAD
+ ;;
+ pull)
+ get_SHA_for_change $2
+ git pull $GERRITURL $SHA
+ ;;
+ cherry-pick)
+ get_SHA_for_change $2
+ git fetch $GERRITURL $SHA && git cherry-pick FETCH_HEAD
+ ;;
+ patch)
+ get_SHA_for_change $2
+ git fetch $GERRITURL $SHA && git format-patch -1 --stdout FETCH_HEAD
+ ;;
+ query)
+ shift
+ ssh ${GERRITHOST?} gerrit query project:core $@
+ ;;
+ *)
+ ssh ${GERRITHOST?} gerrit $@
+ ;;
+esac