summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorJames E. Blair <james.blair@rackspace.com>2011-11-16 09:27:59 -0800
committerJames E. Blair <james.blair@rackspace.com>2011-11-16 09:27:59 -0800
commitd14e421ade04ecac86d0bd7bb56ded1c66f88ad9 (patch)
treeb56d98d605380cbd7b96f8d1d1f31a172dc9fa6c /tools
parent2229163a7a4f47e2b8306bcdf7d42183fd6967de (diff)
downloadpython-novaclient-d14e421ade04ecac86d0bd7bb56ded1c66f88ad9.tar.gz
Add rfc.sh.
This is a tool to help with submitting changes to gerrit. Change-Id: I962c8e79bf10d881548a9c258065fb83a5d89cb4
Diffstat (limited to 'tools')
-rwxr-xr-xtools/rfc.sh145
1 files changed, 145 insertions, 0 deletions
diff --git a/tools/rfc.sh b/tools/rfc.sh
new file mode 100755
index 00000000..0bc15319
--- /dev/null
+++ b/tools/rfc.sh
@@ -0,0 +1,145 @@
+#!/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 project_list=`ssh -p29418 -o StrictHostKeyChecking=no $username@review.openstack.org gerrit ls-projects 2>/dev/null`
+ then
+ echo "$username@review.openstack.org:29418 worked."
+ if echo $project_list | grep $project >/dev/null
+ then
+ 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
+ else
+ echo "The current project name, $project, is not a known project."
+ echo "Please either reclone from github/gerrit or create a"
+ echo "remote named gerrit that points to the intended project."
+ return 1
+ fi
+
+ 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 "$@"