b910d1d9b7
Change-Id: I44dee045cef9227b62666ed08206a342fe37b18c
214 lines
7.7 KiB
Bash
Executable file
214 lines
7.7 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`
|
|
}
|
|
|
|
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
|
|
}
|
|
|
|
logerrit() {
|
|
echo "Host logerrit"
|
|
echo " IdentityFile ~/.ssh/id_rsa"
|
|
echo " User $1"
|
|
echo " Port 29418"
|
|
echo " HostName gerrit.libreoffice.org"
|
|
echo "Host gerrit.libreoffice.org"
|
|
echo " IdentityFile ~/.ssh/id_rsa"
|
|
echo " User $1"
|
|
echo " Port 29418"
|
|
echo " HostName gerrit.libreoffice.org"
|
|
}
|
|
|
|
case "$1" in
|
|
help|--help|"")
|
|
echo "Usage: ./logerrit subcommand [options]"
|
|
echo "simple and basic tool to interact with LibreOffice gerrit"
|
|
echo "see https://wiki.documentfoundation.org/Development/gerrit for details."
|
|
echo
|
|
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 " 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)
|
|
cd $(dirname $(readlink -f $0))
|
|
ssh_home="$HOME/.ssh";
|
|
ssh_key=
|
|
created_ssh=
|
|
if ! test -d $ssh_home; then
|
|
echo "It appears that you have no ssh setup, running ssh-keygen to create that:"
|
|
mkdir $ssh_home
|
|
chmod 0700 $ssh_home
|
|
created_ssh=TRUE
|
|
echo
|
|
echo "Hit enter to generate an ssh key - you will need to enter a pass-phrase"
|
|
echo
|
|
read
|
|
ssh-keygen -t rsa -f "$ssh_home/id_rsa"
|
|
fi
|
|
if test -d $ssh_home; then
|
|
if test -f "$ssh_home/id_rsa.pub"; then
|
|
ssh_key=`cat $ssh_home/id_rsa.pub`;
|
|
elif test -f "$ssh_home/id_dsa.pub"; then
|
|
ssh_key=`cat $ssh_home/id_dsa.pub`;
|
|
fi
|
|
fi
|
|
echo "Please go to https://gerrit.libreoffice.org/ and:"
|
|
echo "- press the 'register' button in the top right corner"
|
|
echo "- after login set yourself a username (its recommended to use your IRC-nick)"
|
|
if test "z$ssh_key" = "z"; then
|
|
echo "- add your public ssh-key into the ssh keys settings."
|
|
else
|
|
echo "- paste the key below into the 'Add SSH Public Key' box."
|
|
echo
|
|
echo "$ssh_key"
|
|
echo
|
|
fi
|
|
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
|
|
if test "z$created_ssh" = "z"; then
|
|
echo
|
|
echo "Please now add the following to your ~/.ssh/config, creating the file if needed:"
|
|
echo
|
|
logerrit $GERRITUSER
|
|
echo
|
|
else
|
|
echo "Automatically creating your ssh config"
|
|
(logerrit $GERRITUSER) > "$ssh_home/config"
|
|
fi
|
|
# setup the remote properly ...
|
|
git config remote.origin.pushurl ssh://logerrit/core
|
|
echo "To see if your setup was successful, run './logerrit test' then."
|
|
# a good place to make sure the hooks are set up
|
|
./g -z
|
|
;;
|
|
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
|
|
;;
|
|
checkout)
|
|
get_SHA_for_change $2
|
|
git fetch $GERRITURL $SHA && git checkout FETCH_HEAD
|
|
;;
|
|
review)
|
|
echo "'./logerrit review' has be removed as obsolete."
|
|
echo "Please use either:"
|
|
echo " - git-review: https://wiki.documentfoundation.org/Development/GitReview"
|
|
echo " - or the web-UI directly: https://gerrit.libreoffice.org/"
|
|
echo "Both provide a better experience."
|
|
exit 1;
|
|
;;
|
|
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
|