Dynamically allocate the log buffer to prevent warning messages
[cvsps-yd.git] / cvsps.1
blobcea0fafc6bdc4811286ce6ebb636b160125488c1
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 \-\-diffs\-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.
106 .B \-A
107 Show ancestor branch when a new branch is found.
109 .B \<repository>
110 Operate on the specified repository (overrides working dir.)
111 .SH "NOTE ON TAG HANDLING"
112 Tags are fundamentally 'file at a time' in cvs, but like everything else,
113 it would be nice to imagine that they are 'repository at a time.'  The
114 approach cvsps takes is that a tag is assigned to a patchset.  The meaning
115 of this is that after this patchset, every revision of every file is after
116 the tag (and conversely, before this patchset, at least one file is still
117 before the tag).  However, there are two kinds of inconsistent (or 'funky')
118 tags that can be created, even when following best practices for cvs.  
120 The first
121 is what is called a FUNKY tag.  A funky tag is one where there are patchsets
122 which are chronologically (and thus by patchset id) earlier than the tag, but
123 are tagwise after.  These tags will be marked as '**FUNKY**' in the Tag: section
124 of the cvsps output.  When a funky tag is specified as one of the '\-r' arguments,
125 there are some number of patchsets which need to be considered out of sequence.  
126 In this case, the patchsets themselves will be labeled FUNKY and will be processed
127 correctly.
129 The second is called an INVALID tag.  An invalid tag is a tag where there are
130 patchsets which are chronologically (and thus by patchset id) earlier than the tag,
131 but which have members which are tagwise both before, and after the tag, in the
132 same patchset.  If an INVALID tag is specified as one of the '\-r' arguments,
133 cvsps will flag each member of the affected patchsets as before or after the tag
134 and the patchset summary will indicate which members are which, and diffs will 
135 be generated accordingly.
136 .SH "NOTE ON CVS VERSIONS"
137 Among the different cvs subcommands used by cvsps is the 'rlog' command.  The
138 rlog command is used to get revision history of a module, and it disregards
139 the current working directory.  The important difference between 'rlog' and 'log'
140 (from cvsps perspective) is the 'rlog' will include log data for files not in
141 the current working directory.  The impact of this is mainly when there are 
142 directories which at one time had files, but are now empty, and have been pruned
143 from the working directory with the '\-P' option.  If 'rlog' is not used, these
144 files logs will not be parsed, and the PatchSet numbering will be unstable.
146 The main problem with 'rlog' is that, until cvs version 1.11.1, 'rlog' was an
147 alias for the 'log' command.  This means, for old versions of cvs, 'rlog' has
148 different semantics and usage.  cvsps will attempt to work around this problem
149 by detecting capable versions of cvs.  If an old version is detected, 'log' will
150 be used instead of 'rlog', and YMMV.
151 .SH "NOTE ON GENERATED DIFFS"
152 Another important note is that cvsps will attempt, whenever possible, to use the
153 r\-commands (rlog, rdiff  and co) instead of the local commands (log, diff, and update).
154 This is to allow cvsps to function without a completely checked out tree.  Because
155 these r\-commands are used, the generated diffs will include the module directory in 
156 them, and it is recommended to apply them in the working directory with the \-p1 option
157 to the patch command.  However, if the \-\-diff\-opts option is specified (to change, for 
158 example, the lines of context), then rdiff cannot be used, because it doesn't support
159 arbitrary options.  In this case, the patches will be generated without the module
160 directory in the path, and \-p0 will be required when applying the patch.  When 
161 diffs are generated in cvs\-direct mode (see below), however, they will always
162 be \-p1 style patches.
163 .SH "NOTE ON BKCVS"
164 The \-\-bkcvs option is a special operating mode that should only be used when parsing
165 the log files from the BK \-> CVS exported linux kernel trees.  cvsps uses special
166 semantics for recreating the BK ChangeSet metadata that has been embedded in the log
167 files for those trees.  The \-\-bkcvs option should only be specified when the cache
168 file is being created or updated (i.e. initial run of cvsps, or when \-u and \-x options
169 are used).
170 .SH "NOTE ON CVS\-DIRECT"
171 As of version 2.0b6 cvsps has a partial implementation of the cvs client code built 
172 in.  This reduces the RTT and/or handshaking overhead from one per patchset member
173 to one per patchset.  This dramatically increases the speed of generating diffs
174 over a slow link, and improves the consistency of operation.  Currently the \-\-cvs\-direct
175 option turns on the use of this code, but it very well may be default by the time
176 2.0 comes out.  The built\-in cvs code attempts to be compatible with cvs, but may
177 have problems, which should be reported.  It honors the CVS_RSH and CVS_SERVER 
178 environment variables, but does not parse the ~/.cvsrc file.
179 .SH "NOTE ON CVSPS RC FILE"
180 CVSps parses an rc file at startup.  This file should be located in ~/.cvsps/cvspsrc.
181 The file should contain arguments, in the exact syntax as the command line, one per line.
182 If an argument takes a parameter, the parameter should be on the same line as the argument.
183 .SH "NOTE ON DATE FORMATS"
184 All dates are reported in localtime.  This can be overridden (as usual) using the TZ
185 environment variable.  Dates as arguments must be in the format 'yyyy/mm/dd hh:mm:ss'; for example,
186 .IP "" 4
187 $ cvsps -d '2004/05/01 00:00:00' -d '2004/07/07 12:00:00'
188 .SH "SEE ALSO"
189 .BR cvs ( 1 ),
190 .BR ci ( 1 ),
191 .BR co ( 1 ),
192 .BR cvs ( 5 ),
193 .BR cvsbug ( 8 ),
194 .BR diff ( 1 ),
195 .BR grep ( 1 ),
196 .BR patch ( 1 ),
197 .BR rcs ( 1 ),
198 .BR rcsdiff ( 1 ),
199 .BR rcsmerge ( 1 ),
200 .BR rlog ( 1 ).
201 .SH "REPORTING BUGS"
202 Report bugs to "David Mansfield <cvsps@dm.cobite.com>"
203 .SH BUGS
204 No known bugs.