Add rfc.sh to help with gerrit workflow.
Change-Id: If2af58cd4724b440d47385c10f202c9441cdf4bb
This commit is contained in:
parent
081dd16832
commit
46c5ed75e1
136
tools/rfc.sh
Executable file
136
tools/rfc.sh
Executable file
@ -0,0 +1,136 @@
|
|||||||
|
#!/bin/sh -e
|
||||||
|
# Copyright (c) 2010-2011 Gluster, Inc. <http://www.gluster.com>
|
||||||
|
# This initial version of this file was taken from the source tree
|
||||||
|
# of GlusterFS. It was not directly attributed, but is assumed to be
|
||||||
|
# Copyright (c) 2010-2011 Gluster, Inc and release GPLv3
|
||||||
|
# Subsequent modifications are Copyright (c) 2011 OpenStack, LLC.
|
||||||
|
#
|
||||||
|
# GlusterFS is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published
|
||||||
|
# by the Free Software Foundation; either version 3 of the License,
|
||||||
|
# or (at your option) any later version.
|
||||||
|
#
|
||||||
|
# GlusterFS is distributed in the hope that it will be useful, but
|
||||||
|
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
# General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program. If not, see
|
||||||
|
# <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
|
||||||
|
branch="master";
|
||||||
|
|
||||||
|
set_hooks_commit_msg()
|
||||||
|
{
|
||||||
|
top_dir=`git rev-parse --show-toplevel`
|
||||||
|
f="${top_dir}/.git/hooks/commit-msg";
|
||||||
|
u="https://review.openstack.org/tools/hooks/commit-msg";
|
||||||
|
|
||||||
|
if [ -x "$f" ]; then
|
||||||
|
return;
|
||||||
|
fi
|
||||||
|
|
||||||
|
curl -o $f $u || wget -O $f $u;
|
||||||
|
|
||||||
|
chmod +x $f;
|
||||||
|
|
||||||
|
GIT_EDITOR=true git commit --amend
|
||||||
|
}
|
||||||
|
|
||||||
|
add_remote()
|
||||||
|
{
|
||||||
|
username=$1
|
||||||
|
project=$2
|
||||||
|
|
||||||
|
echo "No remote set, testing ssh://$username@review.openstack.org:29418"
|
||||||
|
if ssh -p29418 -o StrictHostKeyChecking=no $username@review.openstack.org gerrit ls-projects >/dev/null 2>&1
|
||||||
|
then
|
||||||
|
echo "$username@review.openstack.org:29418 worked."
|
||||||
|
echo "Creating a git remote called gerrit that maps to:"
|
||||||
|
echo " ssh://$username@review.openstack.org:29418/$project"
|
||||||
|
git remote add gerrit ssh://$username@review.openstack.org:29418/$project
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
check_remote()
|
||||||
|
{
|
||||||
|
if ! git remote | grep gerrit >/dev/null 2>&1
|
||||||
|
then
|
||||||
|
origin_project=`git remote show origin | grep 'Fetch URL' | perl -nle '@fields = split(m|[:/]|); $len = $#fields; print $fields[$len-1], "/", $fields[$len];'`
|
||||||
|
if add_remote $USERNAME $origin_project
|
||||||
|
then
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
echo "Your local name doesn't work on Gerrit."
|
||||||
|
echo -n "Enter Gerrit username (same as launchpad): "
|
||||||
|
read gerrit_user
|
||||||
|
if add_remote $gerrit_user $origin_project
|
||||||
|
then
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
echo "Can't infer where gerrit is - please set a remote named"
|
||||||
|
echo "gerrit manually and then try again."
|
||||||
|
echo
|
||||||
|
echo "For more information, please see:"
|
||||||
|
echo "\thttp://wiki.openstack.org/GerritWorkflow"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
rebase_changes()
|
||||||
|
{
|
||||||
|
git fetch;
|
||||||
|
|
||||||
|
GIT_EDITOR=true git rebase -i origin/$branch || exit $?;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
assert_diverge()
|
||||||
|
{
|
||||||
|
if ! git diff origin/$branch..HEAD | grep -q .
|
||||||
|
then
|
||||||
|
echo "No changes between the current branch and origin/$branch."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
main()
|
||||||
|
{
|
||||||
|
set_hooks_commit_msg;
|
||||||
|
|
||||||
|
check_remote;
|
||||||
|
|
||||||
|
rebase_changes;
|
||||||
|
|
||||||
|
assert_diverge;
|
||||||
|
|
||||||
|
bug=$(git show --format='%s %b' | perl -nle 'if (/\b([Bb]ug|[Ll][Pp])\s*[#:]?\s*(\d+)/) {print "$2"; exit}')
|
||||||
|
|
||||||
|
bp=$(git show --format='%s %b' | perl -nle 'if (/\b([Bb]lue[Pp]rint|[Bb][Pp])\s*[#:]?\s*([0-9a-zA-Z-_]+)/) {print "$2"; exit}')
|
||||||
|
|
||||||
|
if [ "$DRY_RUN" = 1 ]; then
|
||||||
|
drier='echo -e Please use the following command to send your commits to review:\n\n'
|
||||||
|
else
|
||||||
|
drier=
|
||||||
|
fi
|
||||||
|
|
||||||
|
local_branch=`git branch | grep -Ei "\* (.*)" | cut -f2 -d' '`
|
||||||
|
if [ -z "$bug" ]; then
|
||||||
|
if [ -z "$bp" ]; then
|
||||||
|
$drier git push gerrit HEAD:refs/for/$branch/$local_branch;
|
||||||
|
else
|
||||||
|
$drier git push gerrit HEAD:refs/for/$branch/bp/$bp;
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
$drier git push gerrit HEAD:refs/for/$branch/bug/$bug;
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
main "$@"
|
Loading…
Reference in New Issue
Block a user