2012-06-20 15:42:27 -05:00
|
|
|
#!/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`
|
|
|
|
}
|
|
|
|
|
2012-07-05 06:22:47 -05:00
|
|
|
get_REVISION_for_change() {
|
|
|
|
REVISION=`ssh ${GERRITHOST?} gerrit query --all-approvals change:$1|grep revision|tail -1|cut -d: -f2`
|
|
|
|
}
|
|
|
|
|
2012-06-20 15:42:27 -05:00
|
|
|
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")
|
2012-06-26 11:45:02 -05:00
|
|
|
read -p 'do you approve the change (+) too, or prefer someone else to do that ()? ' CODEREVIEW
|
2012-06-20 15:42:27 -05:00
|
|
|
ask_tristate $CODEREVIEW
|
|
|
|
case "$ANSWER" in
|
|
|
|
"y")
|
2012-06-29 02:59:14 -05:00
|
|
|
CODEREVIEWFLAG="--code-review=2"
|
2012-06-20 15:42:27 -05:00
|
|
|
;;
|
|
|
|
"n")
|
2012-06-29 02:59:14 -05:00
|
|
|
CODEREVIEWFLAG="--code-review=1"
|
2012-06-20 15:42:27 -05:00
|
|
|
;;
|
|
|
|
*)
|
2012-06-29 02:59:14 -05:00
|
|
|
CODEREVIEWFLAG="--code-review=1"
|
2012-06-20 15:42:27 -05:00
|
|
|
;;
|
|
|
|
esac
|
|
|
|
;;
|
|
|
|
"n")
|
|
|
|
read -p 'do you still allow the change to go in () or not (-)? ' CODEREVIEW
|
|
|
|
ask_tristate $CODEREVIEW
|
|
|
|
case "$ANSWER" in
|
|
|
|
"y")
|
2012-06-29 02:59:14 -05:00
|
|
|
CODEREVIEWFLAG="--code-review=-1"
|
2012-06-20 15:42:27 -05:00
|
|
|
MESSAGEREQ="$MESSAGEREQ and explain why you have reservations about the code"
|
|
|
|
;;
|
|
|
|
"n")
|
2012-06-29 02:59:14 -05:00
|
|
|
CODEREVIEWFLAG="--code-review=-2"
|
2012-06-20 15:42:27 -05:00
|
|
|
MESSAGEREQ="$MESSAGEREQ and explain why you want to block this"
|
|
|
|
;;
|
|
|
|
*)
|
2012-06-29 02:59:14 -05:00
|
|
|
CODEREVIEWFLAG="--code-review=-1"
|
2012-06-20 15:42:27 -05:00
|
|
|
MESSAGEREQ="$MESSAGEREQ and explain why you have reservations about the code"
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
;;
|
|
|
|
*)
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
read -p "please type a friendly comment$MESSAGEREQ: " MESSAGE
|
2012-07-05 06:22:47 -05:00
|
|
|
get_REVISION_for_change $CHANGEID
|
|
|
|
ssh ${GERRITHOST?} gerrit review -m \"$MESSAGE\" $VERIFIEDFLAG $CODEREVIEWFLAG $REVISION
|
2012-06-20 15:42:27 -05:00
|
|
|
;;
|
|
|
|
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
|