10063 basic support for smatch
[unleashed.git] / usr / src / tools / scripts / webrev.1onbld
blobc166ea8cfae91f1ece2fc76aa525bae39caf7a32
1 .\"
2 .\" CDDL HEADER START
3 .\"
4 .\" The contents of this file are subject to the terms of the
5 .\" Common Development and Distribution License (the "License").
6 .\" You may not use this file except in compliance with the License.
7 .\"
8 .\" You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 .\" or http://www.opensolaris.org/os/licensing.
10 .\" See the License for the specific language governing permissions
11 .\" and limitations under the License.
12 .\"
13 .\" When distributing Covered Code, include this CDDL HEADER in each
14 .\" file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 .\" If applicable, add the following below this CDDL HEADER, with the
16 .\" fields enclosed by brackets "[]" replaced with your own identifying
17 .\" information: Portions Copyright [yyyy] [name of copyright owner]
18 .\"
19 .\" CDDL HEADER END
20 .\"
21 .\" Copyright 2010 Sun Microsystems, Inc.  All rights reserved.
22 .\" Use is subject to license terms.
23 .\"
24 .\"
25 .TH WEBREV 1ONBLD "Mar 27, 2016"
26 .SH NAME
27 webrev \- Generate HTML codereview materials
28 .SH SYNOPSIS
29 .B webrev
31 .I common-options
34 .B webrev
36 .I common-options
38 .I file-list-file
40 .I -
42 .B webrev
44 .I common-options
46 .B -w
47 .I wx-file
49 .SH DESCRIPTION
50 .B webrev
51 builds a set of HTML files suitable for performing code review of
52 source changes in a web browser.
53 It supports Git and Subversion repositories.
54 At its most basic, usage is:
55 .nf
56         $ webrev
57 .fi
59 In which case \fBwebrev\fR attempts to figure out the list of files
60 for review.  If that fails, or if more control
61 over the set of files is needed, a \fIfile list\fR may be specified.
62 \fBwebrev\fR also attempts to deduce a
63 .I basis for comparison
64 (interchangeably called the \fIparent\fR, but see SCM INTERACTIONS below).
65 A basis for comparison is needed in order to determine the differences
66 introduced by the code changes under review.
68 By default, \fBwebrev\fR creates a \fIwebrev\fR directory in the
69 workspace directory that contains the generated HTML files, a generated
70 PDF review, and a patch representing the changes.  It also places a
71 copy of the file list in that directory, and of both the old and new
72 raw files in the \fB$webrev_root/raw_files\fR directory.
73 To output the webrev somewhere other than the default location, use the
74 \fI-o <outdir>\fR option, or set the \fBWDIR\fR environment variable.
75 For example:
76 .nf
77         $ webrev -o ~/public_html/myreview/
78 .fi
79 .PP
80 In the index file, each file is listed on a line with a link to the
81 relevant review materials.  Comments for each change will be included
82 automatically.  Cross references to bug (or other information) tracking
83 databases in the comments will become hyperlinks in the associated web
84 interface, according to the rules in CROSS REFERENCING below.
86 As a review aid, content may be added to the \fIindex\fR file in two ways.
87 First, the author may manually edit the file (for example by including
88 text that explains the changes in front of the links for each file).
89 Note that if webrev is run again, manual edits will be lost.  Second,
90 if a file named \fIwebrev-info\fR is present at the root of the workspace,
91 it will be automatically included in the \fIindex\fR file.  To include a
92 different file, see the \fI-i\fR option.
94 For each file in the file list, \fBwebrev\fR compares the file with the
95 version in the basis for comparison (i.e. the parent workspace) and
96 generates a variety of HTML renderings of the differences between
97 the two files; which of these renderings to use is largely a matter
98 of personal preference.  Additional, webrev emits a patch, the old
99 and new versions of the file, and a "raw" copy of the file which is
100 suitable for download.  For files which express differences, source
101 is formatted according to the following color coding:
104      unchanged : black
105        removed : brown
106        changed : blue
107            new : bold blue
110 .SH SCM INTERACTIONS
112 .B webrev
113 attempts to interact with the source code management system currently in use.
114 .B webrev
115 needs to be able locate the code under review (i.e. the workspace) and
116 the basis for comparison (i.e. the parent).  The method for doing so
117 depends upon the SCM in use, which
118 .B webrev
119 will also attempt to auto-discover.  In all cases,
120 .B webrev
121 must either discover the list of files which have changed, or else this list
122 must be manually specified, either in "webrev file list" format or in "wx"
123 format.
124 See FILE LIST for more details.
126 In all cases, if the user has activated the workspace with the
127 .BR ws (1ONBLD)
129 .BR bldenv (1ONBLD)
130 commands, \fBwebrev\fR will use the \fBCODEMGR_PARENT\fR and
131 \fBCODEMGR_WS\fR environment variables to identify parent and child
132 workspaces respectively.
133 To manually specify the basis for comparison, use the -p option or
134 specify the \fBCODEMGR_PARENT\fR variable in either the file list or
135 the environment.
137 .SS Discovering the SCM in use.
138 .B webrev
139 makes use of
140 .BR which_scm (1ONBLD)
141 to determine the SCM in use for a given workspace.
143 .SS Git
144 In the case of Git \fBwebrev\fR will attempt to use the output from the
145 .BR git (1)
146 "git rev-parse --git-dir" command to identify the workspace root, and will
147 attempt to use the remote branch which the current branch is tracking as the
148 parent, if none is specified 'origin/master' will be used.
150 The parent specified when using git is, in all cases, a git 'tree-ish' and
151 never an actual git repository, remote or otherwise.  Anything specifiable to
152 git as a tree-ish should, similarly, be specifiable as a parent for webrev.
153 This includes branches, explicit revisions, reflog entries, etc. See
154 .BR git-rev-parse (1)
156 .SS Subversion
157 In the case of Subversion \fBwebrev\fR will attempt to use the output
158 from the
159 .BR svn (1)
160 "svn info" to find the workspace root and subversion repository URL.
162 The file list will be created from the output of the "svn status" command.
164 .SH CROSS REFERENCING
166 After extracting comments (see FILE LIST below),
167 .B webrev
168 will translate cross references into hyperlinks.  By default, information
169 about available information tracking systems can be found in
170 /opt/onbld/etc/its.reg, and the specification of a local domain and
171 selection and prioritization of systems
172 in /opt/onbld/etc/its.conf.  These file formats are self documenting.  Also
173 see the -I and -C options below.
174 .SH OPTIONS
175 .TP 10
176 .BI "-c " revision
177 Generate webrev for single commit specified by \fIrevision\fR (git only).
178 .TP 10
179 .BI "-C " priority-file
180 In addition to the system default and an optional user-supplied ~/.its.conf,
181 use the specified file to specify a local domain list and prioritize the list
182 of information tracking systems to be searched automatically when resolving cross
183 references.
184 .TP 10
185 .BI "-D"
186 Delete remote webrev via SFTP. Default remote host is \fIcr.opensolaris.org\fR,
187 default remote directory for removal is the same as workspace/repository
188 basename. Remote target can be overriden using -t option. If combined with
189 -U the deletion will be performed first. Also, if used together with -U
190 and the removal fails, no upload is done. Without -U option no webrev will
191 be generated, just like if -n option was used. The deletion is done by
192 moving the webrev to special directory in user's home directory. It is
193 expected that the remote host periodically runs a script which deletes
194 the contents of this directory. See the ENVIRONMENT VARIABLES section for
195 more details about this directory.
196 .TP 10
197 .BI "-h " head-revision
198 Specify the explicit head to generate webrev from (git only).
199 .TP 10
200 .BI "-I " information-file
201 Use the specified file to seed the list of information tracking systems.
202 .TP 10
203 .BI "-i " include-file
204 Include the specified file into the index.html file which is generated
205 as part of the webrev.  This allows a snippet of XHTML to be added by
206 the webrev author. User content is contained by a <div> tag and
207 the markup should validate as XHTML 1.0 Transitional.
208 .TP 10
209 .BI "-N"
210 Suppress all comments from all output forms html, txt and pdf.
211 .TP 10
212 .BI "-n"
213 Do not generate webrev. Useful whenever only upload is needed.
214 .TP 10
215 .B -O
216 Enable \fIOpenSolaris\fR mode: information tracking system hyperlinks
217 are generated using the EXTERNAL_URL field from the specified its.reg entry,
218 instead of the default INTERNAL_URL_domain field, and sources which appear in
219 \fIusr/closed\fR are automatically elided from the review.
220 .TP 10
221 .BI "-o " output-dir
222 Place output from running the script in the directory specified.  If
223 specified, this option takes precedence over the WDIR environment variable.
224 .TP 10
225 .BI "-p " basis-of-comparison
226 Specify a basis of comparison meaningful for the SCM currently in use.
227 See SCM INTERACTIONS and INCREMENTAL REVIEWS.
228 .TP 10
229 .BI "-t " target
230 Upload target. Specified in form of URI identifier. For SCP/SFTP it is
231 \fIssh://user@remote_host:remote_dir\fR and for rsync it is
232 \fIrsync://user@remote_host:remote_dir\fR. This option can override the
233 -o option if the URI is fully specified. The target is relative to
234 the top level directory of the default sftp/rsync directory tree.
235 .TP 10
236 .BI "-U"
237 Upload the webrev. Default remote host is \fIcr.opensolaris.org\fR.
238 Default transport is rsync. If it fails, fallback to SCP/SFTP transport
239 is done.
240 .TP 10
241 .BI "-w " wx-file
242 Extract the file list from the wx "active" file specified.  'wx' uses
243 this mode when invoking webrev.  The list is assumed to be in the
244 format expected by the \fIwx\fR package.  See FILE LIST, below.
246 .SH FILE LIST
248 .B Webrev
249 needs to be told or to discover which files have changed in a
250 given workspace.  By default,
251 .B webrev
252 will attempt to autodetect the
253 list of changed files by first consulting
254 .BR wx "(1)."
255 If this information is not available, webrev tries to consult the SCM (Source
256 Code Manager) currently in use.  If that fails, the user must intervene by
257 specifying either a file list or additional options specific to the SCM in use.
259 .SS Webrev Format
260 A webrev formatted file list contains a list of all the files to
261 be included in the review with paths relative to the workspace
262 directory, e.g.
265 \f(CWusr/src/uts/common/fs/nfs/nfs_subr.c
266 usr/src/uts/common/fs/nfs/nfs_export.c
267 usr/src/cmd/fs.d/nfs/mountd/mountd.c
270 Include the paths of any files added, deleted, or modified.
271 You can keep this list of files in the webrev directory
272 that webrev creates in the workspace directory
273 (CODEMGR_WS).
275 If CODEMGR_WS is not set, it may be specified as an environment variable
276 within the file list, e.g.
279 \f(CWCODEMGR_WS=/home/brent/myws
280 usr/src/uts/common/fs/nfs/nfs_subr.c
281 usr/src/uts/common/fs/nfs/nfs_export.c
282 usr/src/cmd/fs.d/nfs/mountd/mountd.c
285 To compare the workspace against one other than the parent (see also
286 the -p option), include a CODEMGR_PARENT line in the file list, like:
289 \f(CWCODEMGR_WS=/home/brent/myws
290 CODEMGR_PARENT=/ws/onnv-gate
291 usr/src/uts/common/fs/nfs/nfs_subr.c
292 usr/src/uts/common/fs/nfs/nfs_export.c
293 usr/src/cmd/fs.d/nfs/mountd/mountd.c
296 Finally, run webrev with the name of the file containing the file list as an
297 argument, e.g.
299         $ webrev file.list
302 If "-" is supplied as the name of the file, then stdin will be used.
304 .SS wx Format
305 If the \fI-w\fR flag is specified then \fBwebrev\fR
306 will assume the file list is in the format expected by the "wx" package:
307 pathname lines alternating with SCCS comment lines separated by blank
308 lines, e.g.
311 \f(CWusr/src/uts/common/fs/nfs/nfs_subr.c
313 1206578 Fix spelling error in comment
315 usr/src/uts/common/fs/nfs/nfs_export.c
317 4039272 cstyle fixes
319 usr/src/cmd/fs.d/nfs/mountd/mountd.c
321 1927634 mountd daemon doesn't handle expletives
324 .SH INCREMENTAL REVIEWS
325 When conducting multiple rounds of code review, it may be desirable to
326 generate a webrev which represents the delta between reviews.  In this
327 case, set the parent workspace to the path to the old webrev:
331 \f(CW$ webrev -o ~/public_html/myreview-rd2/ \\
332          -p ~/public_html/myreview/
335 .SH ENVIRONMENT VARIABLES
336 The following environment variables allow for customization of \fBwebrev\fR:
339 \fBCDIFFCMD\fR and \fBUDIFFCMD\fR are used when generating Cdiffs and Udiffs
340 respectively; their default values are "diff -b -C 5" and "diff -b -U
341 5".  To generate diffs with more (or less) than 5 lines of context or
342 with more (or less) strict whitespace handling, set one or both of
343 these variables in the user environment accordingly.
345 \fBWDIR\fR sets the output directory.  It is functionally equivalent to
346 the \fI-o\fR option.
348 \fBWDIFF\fR specifies the command used to generate Wdiffs. Wdiff generates a
349 full unified context listing with line numbers where unchanged
350 sections of code may be expanded and collapsed.  It also provides a
351 "split" feature that shows the same file in two HTML frames one above the
352 other.  The default path for this script is
353 /ws/onnv-gate/public/bin/wdiff but WDIFF may be set to customize this
354 to use a more convenient location.
356 \fBWEBREV_TRASH_DIR\fR specifies alternative location of trash directory
357 for remote webrev deletion using the \fI-D\fR option. The directory is
358 relative to the top level directory of the default sftp/rsync directory tree.
359 The default value of this directory is ".trash".
361 .SH UPLOADING WEBREVS
362 A webrev can be uploaded to remote site using the -U option. To simply
363 generate new webrev and upload it to the default remote host use the following
364 command:
367 \f(CW$ webrev -U
370 This will generate the webrev to local directory named 'webrev' and upload it
371 to remote host with remote directory name equal to local workspace/repository
372 name. To change both local and remote directory name, -U can be combined with
373 -o option. The following command will store the webrev to local directory named
374 "foo.onnv" and upload it to the remote host with the same directory name:
377 \f(CW$ webrev -U -o $CODEMGR_WS/foo.onnv
380 If there is a need for manual change of the webrev before uploading,
381 -U can be combined with -n option so that first command will just generate
382 the webrev and the second command will upload it without generating it again:
385 \f(CW$ webrev
386 \f(CW$ webrev -n -U
389 For custom remote targets, -t option allows to specify all components:
392 \f(CW$ webrev -U -t \\
393         ssh://user@cr.opensolaris.org:foo/bar/bugfix.onnv
396 If the remote path is specified as absolute, \fBwebrev\fR will assume all the
397 directories are already created. If the path is relative, \fBwebrev\fR will
398 try to create all needed directories. This only works with SCP/SFTP transport.
400 By default, rsync transport will use SSH for transferring the data to remote
401 site. To specify custom username, use entry in SSH client configuration file,
402 for example:
405 \f(CWHost cr.opensolaris.org
406   Hostname cr.opensolaris.org
407   User vkotal
410 .SH DELETING WEBREVS
411 When deleting a webrev directory on remote site which has a different name
412 than the basename of local repository it is necessary to specify the output
413 option:
416 \f(CW$ webrev -Do webrev-foo.onnv
419 Otherwise \fBwebrev\fR will attempt to remove remote directory with the same
420 name as basename of the local repository.
422 For the nested directory case it is necessary to specify the full target:
425 \f(CW$ webrev -D -t \\
426         ssh://user@cr.opensolaris.org:foo/bar/bugfix.onnv
429 This will remove just the \fIbugfix.onnv\fR directory.
431 .SH SEE ALSO
432 .BR git "(1),"
433 .BR ssh_config "(4),"
434 .BR svn "(1),"
435 .BR which_scm "(1ONBLD)"
437 .SH ACKNOWLEDGEMENTS
438 Acknowledgements to Rob Thurlow, Mike Eisler, Lin Ling,
439 Rod Evans, Mike Kupfer, Greg Onufer, Glenn Skinner,
440 Oleg Larin, David Robinson, Matthew Cross, David L. Paktor,
441 Neal Gafter, John Beck, Darren Moffat, Norm Shulman, Bill Watson,
442 Pedro Rubio and Bill Shannon for valuable feedback and insight in
443 building webrev.
445 Have fun!
448                 Brent Callaghan  11/28/96