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
diff --git a/.gitignore b/.gitignore index ae8348c..8957273 100644 --- a/.gitignore +++ b/.gitignore
@@ -1,27 +1,23 @@ -(^|/)CVS($|/) -(^|/)\.hg($|/) -(^|/)\.hgtags($|/) -^plan9.log$ -^plan9-reverse.log$ -^state$ -^state.old$ -^state.journal$ -\.o$ -\.a$ -^man/man[0-9]+/.*\.html$ -^src/.*/o\.[^/]+$ -y.tab.[ch]$ -^src/cmd/rc/x.tab.h$ -^unix/.*\.tgz$ -^bin/ -^log/ -^dict/ -^postscript/font/ -\.orig$ +plan9.log +plan9-reverse.log +state +state.old +state.journal +*.o +*.a +man/man?/*.html +src/**/o.* +y.tab.[ch] +src/cmd/rc/x.tab.h +unix/*.tgz +bin/ +log/ +dict/ +postscript/font/ +*.orig config install.log install.sum last-change -lib/codereview/codereview.pyc src/cmd/awk/y.output src/cmd/devdraw/latin1.h
diff --git a/bin/codereview b/bin/codereview index 5339d56..307091a 100755 --- a/bin/codereview +++ b/bin/codereview Binary files differ
diff --git a/lib/git/commit-msg.hook b/lib/git/commit-msg.hook new file mode 100755 index 0000000..985016b --- /dev/null +++ b/lib/git/commit-msg.hook
@@ -0,0 +1,104 @@ +#!/bin/sh +# From Gerrit Code Review 2.2.1 +# +# Part of Gerrit Code Review (http://code.google.com/p/gerrit/) +# +# Copyright (C) 2009 The Android Open Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +CHANGE_ID_AFTER="Bug|Issue" +MSG="$1" + +# Check for, and add if missing, a unique Change-Id +# +add_ChangeId() { + clean_message=`sed -e ' + /^diff --git a\/.*/{ + s/// + q + } + /^Signed-off-by:/d + /^#/d + ' "$MSG" | git stripspace` + if test -z "$clean_message" + then + return + fi + + if grep -i '^Change-Id:' "$MSG" >/dev/null + then + return + fi + + id=`_gen_ChangeId` + perl -e ' + $MSG = shift; + $id = shift; + $CHANGE_ID_AFTER = shift; + + undef $/; + open(I, $MSG); $_ = <I>; close I; + s|^diff --git a/.*||ms; + s|^#.*$||mg; + exit unless $_; + + @message = split /\n/; + $haveFooter = 0; + $startFooter = @message; + for($line = @message - 1; $line >= 0; $line--) { + $_ = $message[$line]; + + if (/^[a-zA-Z0-9-]+:/ && !m,^[a-z0-9-]+://,) { + $haveFooter++; + next; + } + next if /^[ []/; + $startFooter = $line if ($haveFooter && /^\r?$/); + last; + } + + @footer = @message[$startFooter+1..@message]; + @message = @message[0..$startFooter]; + push(@footer, "") unless @footer; + + for ($line = 0; $line < @footer; $line++) { + $_ = $footer[$line]; + next if /^($CHANGE_ID_AFTER):/i; + last; + } + splice(@footer, $line, 0, "Change-Id: I$id"); + + $_ = join("\n", @message, @footer); + open(O, ">$MSG"); print O; close O; + ' "$MSG" "$id" "$CHANGE_ID_AFTER" +} +_gen_ChangeIdInput() { + echo "tree `git write-tree`" + if parent=`git rev-parse HEAD^0 2>/dev/null` + then + echo "parent $parent" + fi + echo "author `git var GIT_AUTHOR_IDENT`" + echo "committer `git var GIT_COMMITTER_IDENT`" + echo + printf '%s' "$clean_message" +} +_gen_ChangeId() { + _gen_ChangeIdInput | + git hash-object -t commit --stdin +} + + +add_ChangeId
diff --git a/man/man1/codereview.1 b/man/man1/codereview.1 index 86d07b2..0b713c4 100644 --- a/man/man1/codereview.1 +++ b/man/man1/codereview.1
@@ -2,70 +2,154 @@ .SH NAME codereview \- review of submitted changes (experimental) .SH SYNOPSIS -.B hg +.B git .B diff +.B HEAD .I path ... .PP .B codereview -.I path ... +[ +.B -v +] +.B create +.I name +[ +.B -a +] .PP .B codereview -.B -i -.I issue -.I path ... +[ +.B -v +] +.B commit +[ +.B -a +] +.PP +.B codereview +[ +.B -v +] +.B upload +.PP +.B codereview +[ +.B -v +] +.B pending +.PP +.B codereview +[ +.B -v +] +.B sync .SH DESCRIPTION .I Codereview -uploads suggested changes to the code review server -.I codereview.appspot.com -and sends email to reviewers. +manages the review and submission of changes to the Plan 9 from User Space project. It must be used from within a Plan 9 from User Space tree -checked out via Mercurial +checked out via Git (see -.IR hg (1)). +.IR git (1)). .PP -A developer makes changes to a local copy of the tree -and reviews them locally using -.I hg -.I diff . -When the changes are ready for external review, the -developer creates a review issue by running +A developer makes changes to a local copy of the tree, +reviews them by using +.I git +.I diff +.IR HEAD +and then commits them to a ``feature branch'' +using .I codereview -naming the files to be reviewed. -.I Codereview -prompts for a Google Accounts user name -and password to log in to -.I http://codereview.appspot.com/ -and create a new review issue. -Once created, it prints a line like -.EX -Issue created. URL: http://codereview.appspot.com/96161 -.EE -among other output. -.PP -The reviewer will likely respond with comments -and suggestions for improving the submission. -After making the changes, reupload by repeating -the +.IR create . +.I Git +requires that changes be added to a ``staging area'' before the initial commit, +using commands such as +.I git +.I add +and +.I git +.IR rm . +The +.B -a +option causes .I codereview -command with the -.B -i -option to specify the issue number -(in the above example, 96161). +.I create +to add all local modifications to the staging area as part of the initial commit. .PP -Once the reviewer accepts the changes, they will be applied -automatically using the patch uploaded to the review server. -To update the local tree, run -.I hg -.I pull -with the -.B -u -option. -.SH SEE ALSO -.HR http://codereview.appspot.com/ -.SH BUGS +Once a feature branch is created, files can still be edited, but they must then be +incorporated into the change by using +.I codereview +.IR commit . +.PP +If other changes have been committed since the feature branch was created, +.I codereview +.I sync +will update it to be based on the most recent copy of the repository. +.PP +When the code is ready for review, +.I codereview +.I upload +uploads the change to +.HR https://plan9port-review.googlesource.com/ +for review. +In order to upload, +.I git +must have access to a +.I $HOME/.netrc +that contains a password obtained from +.HR https://plan9port-review.googlesource.com/#/settings/http-password . +.PP +The most likely initial result of a code review is suggestions for +improving the code. +After making those changes, repeat the +.I codereview +.I commit +and +.I codereview +.I upload +steps. +.PP +Once the code is ready, it will be submitted by the reviewer using the web interface. +At that point, +.I codereview +.I sync +.PP The .I codereview -command should be replaced by a proper Mercurial extension. +.I pending +command lists the active feature branches. .PP -Making changes to the repository via patches -discards the executable bit on new shell scripts. +All the +.I codereview +commands take a leading +.B -v +option, which causes them to print +.I git +commands being executed. +This can be useful for debugging +.IR codereview . +.PP +The +.I codereview +command depends on a +.I git +``commit hook'' +script being in place to add +.L Change-Id +lines to the commit messages. +.I Codereview +installs the hook at startup, if necessary, +by adding a symbolic link from +.B $PLAN9/.git/hooks/commit-msg +to +.BR $PLAN9/lib/git/commit-msg.hook . +.SH SEE ALSO +.IR git (1), +.HR http://plan9port-review.googlesource.com/ +.SH BUGS +.I Git +is too complicated to use. +The +.I codereview +script helps, but a working understanding of +.I git +is still required.
diff --git a/man/man1/git.1 b/man/man1/git.1 new file mode 100644 index 0000000..2cedace --- /dev/null +++ b/man/man1/git.1
@@ -0,0 +1,89 @@ +.TH HG 1 +.SH NAME +git, hg, cvs \- introduction to using plan9port Git repository +.SH SYNOPSIS +.B git +.B clone +.B http://code.swtch.com/plan9port +.B plan9 +.PP +.B git +.B pull +.PP +.B git +.B diff +.I revision +[ +.I path ... +] +.PP +.B gitk +.PP +.B web +.B http://code.swtch.com/plan9port +.SH DESCRIPTION +The master source tree for Plan 9 from User Space is maintained +using the source control system Git +as a substitute for Plan 9's +\fIreplica\fR(8) and dump file system. +.PP +The first argument to +.I git +is a command, which determines the form of the rest of the command line. +.PP +The +.B clone +command downloads a copy of the tree into the directory +.BR plan9 , +which it will create. +After +.B git +.BR clone , +the other commands listed +should be run within the +.B plan9 +directory tree. +.PP +Git downloads the entire revision history +of Plan 9 from User Space +in addition to the current tree. +.PP +.I Git +.I pull +incorporates changes from the master repository +into the local revision history and applies them to the +current file tree. +.PP +.I Git +.I diff +runs Unix's +.IR diff (1) +to compare the files in the local tree with the corresponding +files in the revision history. +The special revision +.B HEAD +refers to the most recent version in the version history. +.PP +.I Gitk +starts an interactive history viewer. +.PP +The Git tree can be inspected on the web at +.HR http://code.swtch.com/plan9port/ "" . +.SH FILES +.TP +.B \*9/.git +directory containing Mercurial local repository +.TP +.B .gitignore +list of files and wildcards to exclude from Git operations +.SH SEE ALSO +.IR codereview (1) +.PP +Unix's +\fIgit\fR(1), +.HR http://git-scm.com/doc +.PP +.HR http://code.swtch.com/plan9port/ +.SH BUGS +Plan 9 from User Space is no longer accessible using CVS or Mercurial; +you must use Git.
diff --git a/man/man1/hg.1 b/man/man1/hg.1 deleted file mode 100644 index b46dfc1..0000000 --- a/man/man1/hg.1 +++ /dev/null
@@ -1,111 +0,0 @@ -.TH HG 1 -.SH NAME -hg, cvs \- introduction to using plan9port Mercurial repository -.SH SYNOPSIS -.B hg -.B clone -.B http://code.swtch.com/plan9port -.B plan9 -.PP -.B hg -.B pull -.B -u -.PP -.B hg -.B diff -[ -.B -r -.I revision -] -[ -.I path ... -] -.PP -.B hg -.B serve -.PP -.B hg -.B view -.PP -.B web -.B http://code.swtch.com/plan9port -.SH DESCRIPTION -The master source tree for Plan 9 from User Space is maintained -using the source control system Mercurial -as a substitute for Plan 9's -\fIreplica\fR(8) and dump file system. -.PP -The first argument to -.I hg -is a command, which determines the form of the rest of the command line. -.PP -The -.B clone -command downloads a copy of the tree into the directory -.BR plan9 , -which it will create. -After -.B hg -.BR clone , -the other commands listed -should be run within the -.B plan9 -directory tree. -.PP -Unlike CVS, Mercurial downloads the entire revision history -of Plan 9 from User Space -in addition to the current tree. -.PP -.I Hg -.I pull -incorporates changes from the master repository -into the local revision history. -The -.B -u -flag applies these changes to the current file tree. -.PP -.I Hg -.I diff -runs Unix's -.IR diff (1) -to compare the files in the local tree with the corresponding -files in the revision history. -By default it compares against the version that was most recently -incorporated into the local tree. -The -.B -r -flag specifies an alternate version to compare against. -The special revision -.B tip -refers to the most recent version on the server. -.PP -.I Hg -.I serve -starts an HTTP server serving information about -the local repository at the address -.BR http://localhost:8000/ . -.PP -.I Hg -.I view -starts an interactive history viewer. -.PP -The Mercurial tree can be inspected on the web at -.HR http://code.swtch.com/plan9port/ "" . -.SH FILES -.TP -.B \*9/.hg -directory containing Mercurial local repository -.TP -.B .hgignore -list of files and wildcards to exclude from Mercurial operations -.SH SEE ALSO -.IR codereview (1) -.PP -Unix's -\fIhg\fR(1), -.HR http://www.selenic.com/mercurial/wiki/ -.PP -.HR http://code.swtch.com/plan9port/ -.SH BUGS -Plan 9 from User Space is no longer accessible using CVS; -you must use Mercurial.