From 95fee1d42e537209727d9493d1ea3784a8af310a Mon Sep 17 00:00:00 2001 From: Russ Cox Date: Sun, 16 Nov 2014 18:58:40 -0500 Subject: all: update for Git - rewrite .gitignore to use git patterns - mv hg(1) to git(1) and rewrite - add lib/git/commit-msg.hook - add skeleton codereview script - update codereview(1) Change-Id: I061cd8e4de77ebbd6037a7c5d1582cd1d986f62f --- bin/codereview | 144 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 142 insertions(+), 2 deletions(-) (limited to 'bin') diff --git a/bin/codereview b/bin/codereview index 5339d566..307091a7 100755 --- a/bin/codereview +++ b/bin/codereview @@ -1,2 +1,142 @@ -#!/bin/sh -$PLAN9/bin/codereview.py -r rsc --cc codebot --send_mail "$@" +#!/usr/local/plan9/bin/rc + +git=git +show=false +fn gitshow { + echo '%' git $* + git $* +} +if(! ~ $#* 0 && ~ $1 -v) { + git=gitshow + show=true + shift +} + +if(~ $#* 0) { + echo 'usage: codereview ' >[1=2] + exit usage +} + +if(~ $#PLAN9 0) { + PLAN9=/usr/local/plan9 +} +if(! test -d $PLAN9/lib/git) { + echo 'codereview: cannot find $PLAN9/lib/git' >[1=2] + exit git +} + +if(! test -e $PLAN9/.git/hooks/commit-msg) { + if($show) { + echo '% ln -s ../../lib/git/commit-msg.hook $PLAN9/.git/hooks/commit-msg' + } + ln -s ../../lib/git/commit-msg.hook $PLAN9/.git/hooks/commit-msg +} + +switch($1) { +case help + 9 man 1 codereview + +case pending + shift + if(! ~ $#* 0) { + echo 'usage: codereview pending' >[1=2] + exit usage + } + $git branch --list + +case create + shift + if(! ~ $#* 1) { + echo 'usage: codereview create branchname' >[1=2] + exit usage + } + branch=$1 + if(! git branch -l | 9 grep '\* master$') { + echo 'codereview: create not on master branch; use codereview commit' >[1=2] + exit master + } + if($show) { + echo '% git branch '$branch' && git commit || git branch -d '$branch >[1=2] + } + git branch $branch && git commit $* || git branch -d $branch + +case commit + shift + if(git branch -l | 9 grep '\* master$') { + echo 'codereview: commit on master branch; use codereview create ' >[1=2] + exit master + } + if(~ `{git merge-base HEAD HEAD} `{git merge-base HEAD master}) { + # first commit on branch, somehow. + $git commit $* + exit $status + } + $git commit --amend $* + exit $status + +case upload + if(git branch -l | 9 grep '\* master$') { + echo 'codereview: upload on master branch' >[1=2] + exit master + } + if(~ `{git merge-base HEAD HEAD} `{git merge-base HEAD master}) { + # no commit on branch + echo 'codereview: no commits yet on this feature branch' >[1=2] + exit commit + } + if(! 9 grep 'machine plan9port-review.googlesource.com' $HOME/.netrc >/dev/null >[2=1]) { + echo 'codereview: warning: cannot find plan9port-review in netrc' >[1=2] + } + $git push https://plan9port-review.googlesource.com/plan9 HEAD:refs/for/master >[2=1] | 9 sed 's/.* //' + +case sync + shift + if(! ~ $#* 0) { + echo 'usage: codereview sync' >[1=2] + exit usage + } + $git fetch -q + + branch=`{git branch -l | 9 sed -n 's/^\* //p'} + if(~ $branch master) { + $git merge -q --ff-only origin/master + exit $status + } + + if(~ `{git merge-base HEAD HEAD} `{git merge-base HEAD master}) { + # no commit on branch + git merge -q --ff-only origin/master + exit $status + } + + # Exactly this commit in master. Fast-forward from master and delete this branch. + if(git branch -r --contains HEAD | 9 grep '^ *origin/master$') { + $git checkout -q master + $git merge -q --ff-only origin/master + $git branch -q -d $branch + exit $status + } + + changeid=`{git log -n 1 | 9 sed -n 's/^ Change-Id: //p'} + if(~ $#changeid 0) { + echo 'codereview: cannot find change id' + exit changeid + } + + if(git log --grep 'Change-Id: '$changeid origin/master | 9 grep .) { + # Something like this got submitted. + $git checkout -q master + $git merge -q --ff-only origin/master + echo 'Change submitted but perhaps not identical to your copy.' >[1=2] + echo 'To remove old copy:' git branch -d $branch >[1=2] + exit 1 + } + + if(git branch -r --contains master | 9 grep '^ *origin/master$') + $git branch -f master origin/master + $git rebase -q origin/master + +case * + echo 'codereview: unrecognized command '$1 >[1=2] + exit usage +} -- cgit v1.2.3