office-gobmx/logerrit
Miklos Vajna 1ed4210d8e logerrit: kill copy-paste
Change-Id: I2478ef0f886867c2d2247febf1b29b90fd32e5e7
2013-03-26 16:21:37 +01:00

259 lines
9.4 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() {
TYPE=$1
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/$TYPE/$BRANCH
}
case "$1" in
help|--help|"")
echo "Usage: ./logerrit subcommand [options]"
echo "simple and basic tool to interact with LibreOffice gerrit"
echo "subcommands:"
echo " setup walking you though your gerrit setup"
echo " test test your gerrit setup"
echo
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 " submit-draft [BRANCH] submit your change as draft"
echo " resubmit-draft [BRANCH] create a new Change-Id and submit your change as draft"
echo " (yes, this modifies your last commit)"
echo " (yes, this modifies your last commit)"
echo " nextchange [BRANCH] reset branch to the remote to start with the next change"
echo "Note: drafts are only visibly to yourself and those that you explicitly add as reviewers."
echo
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
echo "advanced users should consider using git review instead:"
echo "http://wiki.documentfoundation.org/Development/GitReview"
exit
;;
setup)
echo "Please go to https://gerrit.libreoffice.org/ and:"
echo "- press the 'sign-in' button in the top right corner"
echo "- after login set yourself a username (its recommended to use your IRC-nick)"
echo "- upload your public ssh-key."
echo
echo "Note that you need to register additional email addresses, if you want to"
echo "commit from them. Additional emails must be confirmed with repling to the"
echo "invitation mail it sends you."
echo
read -p 'Which user name did you choose? ' GERRITUSER
echo
echo "Please now add the following to your ~/.ssh/config, creating the file if needed:"
echo
echo "Host logerrit"
echo " IdentityFile ~/.ssh/id_rsa"
echo " User $GERRIUSER"
echo " Port 29418"
echo " HostName gerrit.libreoffice.org"
echo "Host gerrit.libreoffice.org"
echo " IdentityFile ~/.ssh/id_rsa"
echo " User $GERRIUSER"
echo " Port 29418"
echo " HostName gerrit.libreoffice.org"
echo
echo "To see if your setup was successful, run './logerrit test' then."
;;
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 'for' $2
;;
resubmit)
git log -1 --pretty=%B | grep -v ^Change-Id: | git commit --amend -F -
submit 'for' $2
;;
submit-draft)
submit drafts $2
;;
resubmit-draft)
git log -1 --pretty=%B | grep -v ^Change-Id: | git commit --amend -F -
submit drafts $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