aboutsummaryrefslogtreecommitdiff
path: root/bin
diff options
context:
space:
mode:
authorRuss Cox <rsc@swtch.com>2014-11-16 18:58:40 -0500
committerRuss Cox <rsc@swtch.com>2014-11-16 21:21:28 -0500
commit95fee1d42e537209727d9493d1ea3784a8af310a (patch)
tree0e76e924a668b6cbdd0ec889512571b1fff2127a /bin
parent58d8f6c7bac88dee274d8ba47e86e56a829f0856 (diff)
downloadplan9port-95fee1d42e537209727d9493d1ea3784a8af310a.tar.gz
plan9port-95fee1d42e537209727d9493d1ea3784a8af310a.tar.bz2
plan9port-95fee1d42e537209727d9493d1ea3784a8af310a.zip
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
Diffstat (limited to 'bin')
-rwxr-xr-xbin/codereview144
1 files changed, 142 insertions, 2 deletions
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 <command> <args>' >[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 <branchname>' >[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
+}