gerrit推送命令
一年多没有更新博客了,今天突发奇想,翻看了以前写的文章,骤觉之前的自己好蠢。参加工作这么长时间,每次想要归纳总结下自己到底成长了什么,学到了什么的时候总说不出来,特别憋屈。由此想到不如还是花一定的时间出来更新博客,以此记录自己的成长。
本文介绍一个shell下的小命令,写这个命令的出发原因是手写gerrit的push命令太长了,举个例子:
git push origin HEAD:refs/for/master%r=zhangsan@lianjia.com,r=lisi@lianjia.com
也曾想过写一个alias简化输入,也有现成的插件可以直接在IDE中指定,还有同事通过git的相关设置自动加reviewers,但这些操作都没有解决一件事情,那就是在不同的项目中提交不同的代码时需要指定不同的reviewers时不太好办,现在工作中在使用的就是写死固定给所有人发,这样大家的体验会比较差,比如如果开通提醒功能,则会被大量的无关信息骚扰;如果关闭提醒功能则导致review不及时。因此需要一个既可以简化输入,又可以动态指定reviewers的小工具。
用法: 将下面的代码加入到你的~/.zshrc
或者 ~/.bashrc
中,执行 source ~/.zshrc
review all
review group1
review user1
review group1 user4
/**
* @see https://gist.github.com/swumao/87c8e2d0b856beb143730906fa3c58f6
*/
review () {
if [ $# != 1 ];then
echo "Usage: review 组名或链家网邮箱前缀 [组名或链家网邮箱前缀...]"
echo "e.g.: review all"
return
fi
group=("all" "group1" "group2")
all=("user1" "user2" "user3" "user4" "user5")
group1=("user1" "user2")
group2=("user3" "user4" "user5")
declare a users
for i in ${@[@]:1}
do
if [[ ${group[@]/$i/} != ${group[@]} ]]; then
eval "group_name=(\$$i)"
for j in ${group_name[@]}
do
if [[ ${users[@]/$j/} == ${users[@]} ]];then
users=(${users[@]} $j)
fi
done
else
if [[ ${users[@]/$i/} == ${users[@]} ]];then
users=(${users[@]} $i)
fi
fi
done
reviewers=""
for i in ${users[@]}
do
reviewers=${reviewers}"r="${i}"@lianjia.com,"
done
branch_name=`git rev-parse --abbrev-ref HEAD`
if [ -z "$branch_name" ];then
echo "! [Branch name missing]"
echo "请在git仓库根目录执行"
return
fi
push_command="git push origin HEAD:refs/for/"${branch_name}%${reviewers}
echo $push_command
eval $push_command
}