Blame


1 95fee1d4 2014-11-17 rsc #!/usr/local/plan9/bin/rc
2 95fee1d4 2014-11-17 rsc
3 95fee1d4 2014-11-17 rsc git=git
4 95fee1d4 2014-11-17 rsc show=false
5 95fee1d4 2014-11-17 rsc fn gitshow {
6 95fee1d4 2014-11-17 rsc echo '%' git $*
7 95fee1d4 2014-11-17 rsc git $*
8 95fee1d4 2014-11-17 rsc }
9 95fee1d4 2014-11-17 rsc if(! ~ $#* 0 && ~ $1 -v) {
10 95fee1d4 2014-11-17 rsc git=gitshow
11 95fee1d4 2014-11-17 rsc show=true
12 95fee1d4 2014-11-17 rsc shift
13 95fee1d4 2014-11-17 rsc }
14 95fee1d4 2014-11-17 rsc
15 95fee1d4 2014-11-17 rsc if(~ $#* 0) {
16 95fee1d4 2014-11-17 rsc echo 'usage: codereview <command> <args>' >[1=2]
17 95fee1d4 2014-11-17 rsc exit usage
18 95fee1d4 2014-11-17 rsc }
19 95fee1d4 2014-11-17 rsc
20 95fee1d4 2014-11-17 rsc if(~ $#PLAN9 0) {
21 95fee1d4 2014-11-17 rsc PLAN9=/usr/local/plan9
22 95fee1d4 2014-11-17 rsc }
23 95fee1d4 2014-11-17 rsc if(! test -d $PLAN9/lib/git) {
24 95fee1d4 2014-11-17 rsc echo 'codereview: cannot find $PLAN9/lib/git' >[1=2]
25 95fee1d4 2014-11-17 rsc exit git
26 95fee1d4 2014-11-17 rsc }
27 95fee1d4 2014-11-17 rsc
28 95fee1d4 2014-11-17 rsc if(! test -e $PLAN9/.git/hooks/commit-msg) {
29 95fee1d4 2014-11-17 rsc if($show) {
30 95fee1d4 2014-11-17 rsc echo '% ln -s ../../lib/git/commit-msg.hook $PLAN9/.git/hooks/commit-msg'
31 95fee1d4 2014-11-17 rsc }
32 95fee1d4 2014-11-17 rsc ln -s ../../lib/git/commit-msg.hook $PLAN9/.git/hooks/commit-msg
33 95fee1d4 2014-11-17 rsc }
34 95fee1d4 2014-11-17 rsc
35 95fee1d4 2014-11-17 rsc switch($1) {
36 95fee1d4 2014-11-17 rsc case help
37 95fee1d4 2014-11-17 rsc 9 man 1 codereview
38 95fee1d4 2014-11-17 rsc
39 95fee1d4 2014-11-17 rsc case pending
40 95fee1d4 2014-11-17 rsc shift
41 95fee1d4 2014-11-17 rsc if(! ~ $#* 0) {
42 95fee1d4 2014-11-17 rsc echo 'usage: codereview pending' >[1=2]
43 95fee1d4 2014-11-17 rsc exit usage
44 95fee1d4 2014-11-17 rsc }
45 01463bac 2014-11-18 rsc $git branch -v
46 95fee1d4 2014-11-17 rsc
47 95fee1d4 2014-11-17 rsc case create
48 95fee1d4 2014-11-17 rsc shift
49 32f3c4ad 2014-11-17 rsc if(~ $#* 0) {
50 95fee1d4 2014-11-17 rsc echo 'usage: codereview create branchname' >[1=2]
51 95fee1d4 2014-11-17 rsc exit usage
52 95fee1d4 2014-11-17 rsc }
53 95fee1d4 2014-11-17 rsc branch=$1
54 32f3c4ad 2014-11-17 rsc shift
55 32f3c4ad 2014-11-17 rsc if(! git branch -l | 9 grep '\* master$' >/dev/null) {
56 95fee1d4 2014-11-17 rsc echo 'codereview: create not on master branch; use codereview commit' >[1=2]
57 95fee1d4 2014-11-17 rsc exit master
58 95fee1d4 2014-11-17 rsc }
59 95fee1d4 2014-11-17 rsc if($show) {
60 95fee1d4 2014-11-17 rsc echo '% git branch '$branch' && git commit || git branch -d '$branch >[1=2]
61 95fee1d4 2014-11-17 rsc }
62 0edb0468 2014-11-17 rsc git branch $branch && git checkout $branch && git commit -a $* || git branch -d $branch
63 95fee1d4 2014-11-17 rsc
64 95fee1d4 2014-11-17 rsc case commit
65 95fee1d4 2014-11-17 rsc shift
66 32f3c4ad 2014-11-17 rsc if(git branch -l | 9 grep '\* master$' >/dev/null) {
67 95fee1d4 2014-11-17 rsc echo 'codereview: commit on master branch; use codereview create <branchname>' >[1=2]
68 95fee1d4 2014-11-17 rsc exit master
69 95fee1d4 2014-11-17 rsc }
70 95fee1d4 2014-11-17 rsc if(~ `{git merge-base HEAD HEAD} `{git merge-base HEAD master}) {
71 95fee1d4 2014-11-17 rsc # first commit on branch, somehow.
72 95fee1d4 2014-11-17 rsc $git commit $*
73 95fee1d4 2014-11-17 rsc exit $status
74 95fee1d4 2014-11-17 rsc }
75 0edb0468 2014-11-17 rsc $git commit --amend -a $*
76 95fee1d4 2014-11-17 rsc exit $status
77 95fee1d4 2014-11-17 rsc
78 95fee1d4 2014-11-17 rsc case upload
79 32f3c4ad 2014-11-17 rsc if(git branch -l | 9 grep '\* master$' >/dev/null) {
80 95fee1d4 2014-11-17 rsc echo 'codereview: upload on master branch' >[1=2]
81 95fee1d4 2014-11-17 rsc exit master
82 95fee1d4 2014-11-17 rsc }
83 95fee1d4 2014-11-17 rsc if(~ `{git merge-base HEAD HEAD} `{git merge-base HEAD master}) {
84 95fee1d4 2014-11-17 rsc # no commit on branch
85 95fee1d4 2014-11-17 rsc echo 'codereview: no commits yet on this feature branch' >[1=2]
86 95fee1d4 2014-11-17 rsc exit commit
87 95fee1d4 2014-11-17 rsc }
88 95fee1d4 2014-11-17 rsc if(! 9 grep 'machine plan9port-review.googlesource.com' $HOME/.netrc >/dev/null >[2=1]) {
89 95fee1d4 2014-11-17 rsc echo 'codereview: warning: cannot find plan9port-review in netrc' >[1=2]
90 95fee1d4 2014-11-17 rsc }
91 0edb0468 2014-11-17 rsc if(! git status | 9 grep 'nothing to commit, working directory clean' >/dev/null) {
92 0edb0468 2014-11-17 rsc echo 'codereview: warning: local changes not yet committed' >[1=2]
93 0edb0468 2014-11-17 rsc git status
94 0edb0468 2014-11-17 rsc }
95 95fee1d4 2014-11-17 rsc $git push https://plan9port-review.googlesource.com/plan9 HEAD:refs/for/master >[2=1] | 9 sed 's/.* //'
96 95fee1d4 2014-11-17 rsc
97 95fee1d4 2014-11-17 rsc case sync
98 95fee1d4 2014-11-17 rsc shift
99 95fee1d4 2014-11-17 rsc if(! ~ $#* 0) {
100 95fee1d4 2014-11-17 rsc echo 'usage: codereview sync' >[1=2]
101 95fee1d4 2014-11-17 rsc exit usage
102 95fee1d4 2014-11-17 rsc }
103 95fee1d4 2014-11-17 rsc $git fetch -q
104 95fee1d4 2014-11-17 rsc
105 95fee1d4 2014-11-17 rsc branch=`{git branch -l | 9 sed -n 's/^\* //p'}
106 95fee1d4 2014-11-17 rsc if(~ $branch master) {
107 95fee1d4 2014-11-17 rsc $git merge -q --ff-only origin/master
108 95fee1d4 2014-11-17 rsc exit $status
109 95fee1d4 2014-11-17 rsc }
110 95fee1d4 2014-11-17 rsc
111 95fee1d4 2014-11-17 rsc if(~ `{git merge-base HEAD HEAD} `{git merge-base HEAD master}) {
112 95fee1d4 2014-11-17 rsc # no commit on branch
113 95fee1d4 2014-11-17 rsc git merge -q --ff-only origin/master
114 95fee1d4 2014-11-17 rsc exit $status
115 95fee1d4 2014-11-17 rsc }
116 95fee1d4 2014-11-17 rsc
117 95fee1d4 2014-11-17 rsc # Exactly this commit in master. Fast-forward from master and delete this branch.
118 32f3c4ad 2014-11-17 rsc if(git branch -r --contains HEAD | 9 grep '^ *origin/master$' >/dev/null) {
119 95fee1d4 2014-11-17 rsc $git checkout -q master
120 95fee1d4 2014-11-17 rsc $git merge -q --ff-only origin/master
121 95fee1d4 2014-11-17 rsc $git branch -q -d $branch
122 95fee1d4 2014-11-17 rsc exit $status
123 95fee1d4 2014-11-17 rsc }
124 95fee1d4 2014-11-17 rsc
125 95fee1d4 2014-11-17 rsc changeid=`{git log -n 1 | 9 sed -n 's/^ Change-Id: //p'}
126 95fee1d4 2014-11-17 rsc if(~ $#changeid 0) {
127 95fee1d4 2014-11-17 rsc echo 'codereview: cannot find change id'
128 95fee1d4 2014-11-17 rsc exit changeid
129 95fee1d4 2014-11-17 rsc }
130 95fee1d4 2014-11-17 rsc
131 32f3c4ad 2014-11-17 rsc if(git log --grep 'Change-Id: '$changeid origin/master | 9 grep . >/dev/null) {
132 95fee1d4 2014-11-17 rsc # Something like this got submitted.
133 95fee1d4 2014-11-17 rsc $git checkout -q master
134 95fee1d4 2014-11-17 rsc $git merge -q --ff-only origin/master
135 95fee1d4 2014-11-17 rsc echo 'Change submitted but perhaps not identical to your copy.' >[1=2]
136 95fee1d4 2014-11-17 rsc echo 'To remove old copy:' git branch -d $branch >[1=2]
137 95fee1d4 2014-11-17 rsc exit 1
138 95fee1d4 2014-11-17 rsc }
139 95fee1d4 2014-11-17 rsc
140 32f3c4ad 2014-11-17 rsc if(git branch -r --contains master | 9 grep '^ *origin/master$' >/dev/null)
141 95fee1d4 2014-11-17 rsc $git branch -f master origin/master
142 95fee1d4 2014-11-17 rsc $git rebase -q origin/master
143 95fee1d4 2014-11-17 rsc
144 95fee1d4 2014-11-17 rsc case *
145 95fee1d4 2014-11-17 rsc echo 'codereview: unrecognized command '$1 >[1=2]
146 95fee1d4 2014-11-17 rsc exit usage
147 95fee1d4 2014-11-17 rsc }