office-gobmx/logerrit
Miklos Vajna f9fa180e42 logerrit: --code-review=2 in review implies --submit
Change-Id: Ibd21dfdb76536ea0e0a71791a91ec87e31d49960
2012-08-22 14:15:14 +02:00

215 lines
5.9 KiB
Bash
Executable file

#!/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`
}
get_REVISION_for_change() {
REVISION=`ssh ${GERRITHOST?} gerrit query --all-approvals change:$1|grep revision|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
}
submit() {
BRANCH=$1
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
}
case "$1" in
help)
echo "Usage: ./logerrit subcommand [options]"
echo "simple and basic tool to interact with LibreOffice gerrit"
echo "subcommands:"
echo " test test your gerrit setup"
echo " --- for submitters:"
echo " submit [BRANCH] submit your change for review"
echo " resubmit [BRANCH] create a new Change-Id and submit your change for review"
echo " (yes, this modifies your last commit)"
echo " nextchange [BRANCH] reset branch to the remote to start with the next change"
echo " --- for reviewers:"
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>"
echo "advanced users should consider using git review instead:"
echo "http://wiki.documentfoundation.org/Development/GitReview"
exit
;;
test)
if test -n "`ssh $GERRITHOST 2>&1|grep \"Welcome to Gerrit Code Review\"`"
then
echo "Your gerrit setup was successful!"
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)
submit $2
;;
resubmit)
git log -1 --pretty=%B | grep -v ^Change-Id: | git commit --amend -F -
submit $2
;;
nextchange)
if test -n "`git status -s -uno`"
then
echo "You have uncommitted changes. Please commit or stash these:"
git status
exit 1
fi
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 successfully (+) 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
SUBMITFLAG=""
case "$ANSWER" in
"y")
read -p 'do you approve the change (+) too, or prefer someone else to do that ()? ' CODEREVIEW
ask_tristate $CODEREVIEW
case "$ANSWER" in
"y")
CODEREVIEWFLAG="--code-review=2"
SUBMITFLAG="--submit"
;;
"n")
CODEREVIEWFLAG="--code-review=1"
;;
*)
CODEREVIEWFLAG="--code-review=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="--code-review=-1"
MESSAGEREQ="$MESSAGEREQ and explain why you have reservations about the code"
;;
"n")
CODEREVIEWFLAG="--code-review=-2"
MESSAGEREQ="$MESSAGEREQ and explain why you want to block this"
;;
*)
CODEREVIEWFLAG="--code-review=-1"
MESSAGEREQ="$MESSAGEREQ and explain why you have reservations about the code"
;;
esac
;;
*)
;;
esac
read -p "please type a friendly comment$MESSAGEREQ: " MESSAGE
get_REVISION_for_change $CHANGEID
ssh ${GERRITHOST?} gerrit review -m \"$MESSAGE\" $VERIFIEDFLAG $CODEREVIEWFLAG $SUBMITFLAG $REVISION
;;
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