Add test about issue with no commit on a branch
[cvsps-hv.git] / cvsps.1
blobcacaa19c2b49313e92f8d1b4bda7508d46fd0efe
1 .TH "cvsps" 1
2 .SH NAME
3 CVSps \- create patchset information from CVS
4 .SH SYNOPSIS
5 .B cvsps
6 [\-h] [\-x] [\-u] [\-z <fuzz>] [\-g] [\-s <patchset>] [\-a <author>] [\-f <file>] [\-d <date1> [\-d <date2>]] [\-l <text>] [\-b <branch>] [\-r <tag> [\-r <tag>]] [\-p <directory>] [\-v] [\-t] [\-\-norc] [\-\-summary\-first] [\-\-test\-log <filename>] [\-\-bkcvs] [\-\-no\-rlog] [\-\-diff\-opts <option string>] [\-\-cvs\-direct] [\-\-debuglvl <bitmask>] [\-Z <compression>] [\-\-root <cvsroot>] [\-q] [\-A] [<repository>] 
7 .SH DESCRIPTION
8 CVSps is a program for generating 'patchset' information from a CVS
9 repository.  A patchset in this case is defined as a set of changes made
10 to a collection of files, and all committed at the same time (using a
11 single 'cvs commit' command).  This information is valuable to seeing the
12 big picture of the evolution of a cvs project.  While cvs tracks revision
13 information, it is often difficult to see what changes were committed
14 'atomically' to the repository.
15 .SH OPTIONS
16 .TP
17 .B \-h
18 display usage summary
19 .TP
20 .B \-x
21 ignore (and rebuild) ~/.cvsps/cvsps.cache file
22 .TP
23 .B \-u
24 update ~/.cvsps/cvsps.cache file
25 .TP
26 .B \-z <fuzz>
27 set the timestamp fuzz factor for identifying patch sets
28 .TP
29 .B \-g
30 generate diffs of the selected patch sets
31 .TP
32 .B \-s <patchset>[\-[<patchset>]][,<patchset>...]
33 generate a diff for a given patchsets and patchset ranges
34 .TP
35 .B \-a <author>
36 restrict output to patchsets created by author
37 .TP
38 .B \-f <file>
39 restrict output to patchsets involving file
40 .TP
41 .B \-d <date1> \-d <date2>
42 if just one date specified, show
43 revisions newer than date1.  If two dates specified,
44 show revisions between two dates.
45 .TP
46 .B \-l <regex>
47 restrict output to patchsets matching regex in log message
48 .TP
49 .B \-b <branch>
50 restrict output to patchsets affecting history of branch.
51 If you want to restrict to the main branch, use a branch of 'HEAD'.
52 .TP
53 .B \-r <tag1> \-r <tag2>
54 if just one tag specified, show
55 revisions since tag1. If two tags specified, show
56 revisions between the two tags.
57 .TP
58 .B \-p <dir>
59 output individual patchsets as files in <dir> as <dir>/<patchset>.patch
60 .TP
61 .B \-v
62 show very verbose parsing messages
63 .TP
64 .B \-t
65 show some brief memory usage statistics
66 .TP
67 .B \-\-norc
68 when invoking cvs, ignore the .cvsrc file
69 .TP
70 .B \-\-summary\-first
71 when multiple patchset diffs are being generated, put the patchset
72 summary for all patchsets at the beginning of the output.
73 .TP
74 .B \-\-test\-log <captured cvs log file>
75 for testing changes, you can capture cvs log output, then test against
76 this captured file instead of hammering some poor CVS server
77 .TP
78 .B \-\-bkcvs
79 (see note below) for use in parsing the BK\->CVS tree log formats only.  This enables
80 some hacks which are not generally applicable.
81 .TP
82 .B \-\-no\-rlog
83 disable the use of rlog internally.  Note: rlog is
84 required for stable PatchSet numbering.  Use with care.
85 .TP
86 .B \-\-diff\-opts <option string>
87 send a custom set of options to diff, for example to increase
88 the number of context lines, or change the diff format.
89 .TP
90 .B \-\-cvs\-direct (\-\-no\-cvs\-direct)
91 enable (disable) built\-in cvs client code. This enables the 'pipelining' of multiple
92 requests over a single client, reducing the overhead of handshaking and
93 authentication to one per PatchSet instead of one per file.
94 .TP
95 .B \-\-debuglvl <bitmask>
96 enable various debug output channels.
97 .TP
98 .B \-Z <compression>
99 A value 1\-9 which specifies amount of compression.  A value of 0 disables compression.
101 .B \-\-root <cvsroot>
102 Override the setting of CVSROOT (overrides working dir. and environment).  For --cvs-direct only.
104 .B \-q
105 Be quiet about warnings.
107 .B \-A
108 Show ancestor branch when a new branch is found.
110 .B \<repository>
111 Operate on the specified repository (overrides working dir.)
112 .SH "NOTE ON TAG HANDLING"
113 Tags are fundamentally 'file at a time' in cvs, but like everything else,
114 it would be nice to imagine that they are 'repository at a time.'  The
115 approach cvsps takes is that a tag is assigned to a patchset.  The meaning
116 of this is that after this patchset, every revision of every file is after
117 the tag (and conversely, before this patchset, at least one file is still
118 before the tag).  However, there are two kinds of inconsistent (or 'funky')
119 tags that can be created, even when following best practices for cvs.  
121 The first
122 is what is called a FUNKY tag.  A funky tag is one where there are patchsets
123 which are chronologically (and thus by patchset id) earlier than the tag, but
124 are tagwise after.  These tags will be marked as '**FUNKY**' in the Tag: section
125 of the cvsps output.  When a funky tag is specified as one of the '\-r' arguments,
126 there are some number of patchsets which need to be considered out of sequence.  
127 In this case, the patchsets themselves will be labeled FUNKY and will be processed
128 correctly.
130 The second is called an INVALID tag.  An invalid tag is a tag where there are
131 patchsets which are chronologically (and thus by patchset id) earlier than the tag,
132 but which have members which are tagwise both before, and after the tag, in the
133 same patchset.  If an INVALID tag is specified as one of the '\-r' arguments,
134 cvsps will flag each member of the affected patchsets as before or after the tag
135 and the patchset summary will indicate which members are which, and diffs will 
136 be generated accordingly.
137 .SH "NOTE ON CVS VERSIONS"
138 Among the different cvs subcommands used by cvsps is the 'rlog' command.  The
139 rlog command is used to get revision history of a module, and it disregards
140 the current working directory.  The important difference between 'rlog' and 'log'
141 (from cvsps perspective) is the 'rlog' will include log data for files not in
142 the current working directory.  The impact of this is mainly when there are 
143 directories which at one time had files, but are now empty, and have been pruned
144 from the working directory with the '\-P' option.  If 'rlog' is not used, these
145 files logs will not be parsed, and the PatchSet numbering will be unstable.
147 The main problem with 'rlog' is that, until cvs version 1.11.1, 'rlog' was an
148 alias for the 'log' command.  This means, for old versions of cvs, 'rlog' has
149 different semantics and usage.  cvsps will attempt to work around this problem
150 by detecting capable versions of cvs.  If an old version is detected, 'log' will
151 be used instead of 'rlog', and YMMV.
152 .SH "NOTE ON GENERATED DIFFS"
153 Another important note is that cvsps will attempt, whenever possible, to use the
154 r\-commands (rlog, rdiff  and co) instead of the local commands (log, diff, and update).
155 This is to allow cvsps to function without a completely checked out tree.  Because
156 these r\-commands are used, the generated diffs will include the module directory in 
157 them, and it is recommended to apply them in the working directory with the \-p1 option
158 to the patch command.  However, if the \-\-diff\-opts option is specified (to change, for 
159 example, the lines of context), then rdiff cannot be used, because it doesn't support
160 arbitrary options.  In this case, the patches will be generated without the module
161 directory in the path, and \-p0 will be required when applying the patch.  When 
162 diffs are generated in cvs\-direct mode (see below), however, they will always
163 be \-p1 style patches.
164 .SH "NOTE ON BKCVS"
165 The \-\-bkcvs option is a special operating mode that should only be used when parsing
166 the log files from the BK \-> CVS exported linux kernel trees.  cvsps uses special
167 semantics for recreating the BK ChangeSet metadata that has been embedded in the log
168 files for those trees.  The \-\-bkcvs option should only be specified when the cache
169 file is being created or updated (i.e. initial run of cvsps, or when \-u and \-x options
170 are used).
171 .SH "NOTE ON CVS\-DIRECT"
172 As of version 2.0b6 cvsps has a partial implementation of the cvs client code built 
173 in.  This reduces the RTT and/or handshaking overhead from one per patchset member
174 to one per patchset.  This dramatically increases the speed of generating diffs
175 over a slow link, and improves the consistency of operation.  Currently the \-\-cvs\-direct
176 option turns on the use of this code, but it very well may be default by the time
177 2.0 comes out.  The built\-in cvs code attempts to be compatible with cvs, but may
178 have problems, which should be reported.  It honors the CVS_RSH and CVS_SERVER 
179 environment variables, but does not parse the ~/.cvsrc file.
180 .SH "NOTE ON CVSPS RC FILE"
181 CVSps parses an rc file at startup.  This file should be located in ~/.cvsps/cvspsrc.
182 The file should contain arguments, in the exact syntax as the command line, one per line.
183 If an argument takes a parameter, the parameter should be on the same line as the argument.
184 .SH "NOTE ON DATE FORMATS"
185 All dates are reported in localtime.  This can be overridden (as usual) using the TZ
186 environment variable.  Dates as arguments must be in the format 'yyyy/mm/dd hh:mm:ss'; for example,
187 .IP "" 4
188 $ cvsps -d '2004/05/01 00:00:00' -d '2004/07/07 12:00:00'
189 .SH "SEE ALSO"
190 .BR cvs ( 1 ),
191 .BR ci ( 1 ),
192 .BR co ( 1 ),
193 .BR cvs ( 5 ),
194 .BR cvsbug ( 8 ),
195 .BR diff ( 1 ),
196 .BR grep ( 1 ),
197 .BR patch ( 1 ),
198 .BR rcs ( 1 ),
199 .BR rcsdiff ( 1 ),
200 .BR rcsmerge ( 1 ),
201 .BR rlog ( 1 ).
202 .SH "REPORTING BUGS"
203 Report bugs to "David Mansfield <cvsps@dm.cobite.com>"
204 .SH BUGS
205 No known bugs.