85c7f925a2
Change-Id: Id9abc3ab45af8b6e44904090e179ce67a3f45796 Reviewed-on: https://gerrit.libreoffice.org/2541 Reviewed-by: Thomas Arnhold <thomas@arnhold.org> Reviewed-by: Eike Rathke <erack@redhat.com> Tested-by: Eike Rathke <erack@redhat.com>
215 lines
5.9 KiB
Bash
Executable file
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|--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
|