glusterfs/rfc.sh
Csaba Henk 434da60ba4 gerrit: some fixes for the rfc script
In rebase_changes():

- Using "--all" for git fetch is bogus: the scope of this quantification is not
  over the tracked refs of the upsteam repo (which we do want, but that kind
  of universal quantification is already implied by the notion of "tracking"),
  but over the set of all the registered remotes, which is an annoying side effect.

- $EDITOR is weaker than the git configuration settings. For the purpose of the
  script, we need to override any kind of setting, and that can be done
  via $GIT_EDITOR.

Cf. git-fetch(1), git-commit(1).

Change-Id: Ia91ee5c4d42dce9248f26f7697528e3c97355871
BUG: 3234
Reviewed-on: http://review.gluster.com/86
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Anand Avati <avati@gluster.com>
2011-07-23 09:07:58 -07:00

105 lines
1.7 KiB
Bash
Executable File

#!/bin/bash -e
branch="master";
function set_hooks_commit_msg()
{
f=".git/hooks/commit-msg";
u="http://review.gluster.com/tools/hooks/commit-msg";
if [ -x "$f" ]; then
return;
fi
curl -o $f $u || wget -O $f $u;
chmod +x .git/hooks/commit-msg;
}
function is_num()
{
local num;
num="$1";
[ -z "$(echo $num | sed -e 's/[0-9]//g')" ]
}
function rebase_changes()
{
git fetch;
GIT_EDITOR=$0 git rebase -i origin/$branch;
}
function editor_mode()
{
if [ $(basename "$1") = "git-rebase-todo" ]; then
sed -i 's/^pick /reword /g' "$1";
return;
fi
if [ $(basename "$1") = "COMMIT_EDITMSG" ]; then
if grep -qi '^BUG: ' $1; then
return;
fi
while true; do
echo Commit: "\"$(head -n 1 $1)\""
echo -n "Enter Bug ID: "
read bug
if [ -z "$bug" ]; then
return;
fi
if ! is_num "$bug"; then
echo "Invalid Bug ID ($bug)!!!";
continue;
fi
sed -i "s/^\(Change-Id: .*\)$/\1\nBUG: $bug/g" $1;
return;
done
fi
cat <<EOF
$0 - editor_mode called on unrecognized file $1 with content:
$(cat $1)
EOF
return 1;
}
function assert_diverge()
{
git diff origin/$branch..HEAD | grep -q .;
}
function main()
{
if [ -e "$1" ]; then
editor_mode "$@";
return;
fi
set_hooks_commit_msg;
rebase_changes;
assert_diverge;
bug=$(git show --format='%b' | grep -i '^BUG: ' | awk '{print $2}');
if [ -z "$bug" ]; then
git push origin HEAD:refs/for/$branch/rfc;
else
git push origin HEAD:refs/for/$branch/bug-$bug;
fi
}
main "$@"