1CVS2CL(1) CVS-log-message-to-ChangeLog conversion script CVS2CL(1)
2
3
4
6 cvs2cl - convert cvs log messages to changelogs
7
9 cvs2cl [options] [FILE1 [FILE2 ...]]
10
12 cvs2cl produces a GNU-style ChangeLog for CVS-controlled sources by
13 running "cvs log" and parsing the output. Duplicate log messages get
14 unified in the Right Way.
15
16 The default output of cvs2cl is designed to be compact, formally unam‐
17 biguous, but still easy for humans to read. It should be largely
18 self-explanatory; the one abbreviation that might not be obvious is
19 "utags". That stands for "universal tags" -- a universal tag is one
20 held by all the files in a given change entry.
21
22 If you need output that's easy for a program to parse, use the --xml
23 option. Note that with XML output, just about all available informa‐
24 tion is included with each change entry, whether you asked for it or
25 not, on the theory that your parser can ignore anything it's not look‐
26 ing for.
27
28 If filenames are given as arguments cvs2cl only shows log information
29 for the named files.
30
32 -h, -help, --help, -?
33 Show a short help and exit.
34
35 --version
36 Show version and exit.
37
38 -r, --revisions
39 Show revision numbers in output.
40
41 -b, --branches
42 Show branch names in revisions when possible.
43
44 -t, --tags
45 Show tags (symbolic names) in output.
46
47 -T, --tagdates
48 Show tags in output on their first occurance.
49
50 --show-dead
51 Show dead files.
52
53 --stdin
54 Read from stdin, don't run cvs log.
55
56 --stdout
57 Output to stdout not to ChangeLog.
58
59 -d, --distributed
60 Put ChangeLogs in subdirs.
61
62 -f FILE, --file FILE
63 Write to FILE instead of ChangeLog.
64
65 --fsf
66 Use this if log data is in FSF ChangeLog style.
67
68 --FSF
69 Attempt strict FSF-standard compatible output.
70
71 -W SECS, --window SECS
72 Window of time within which log entries unify.
73
74 -U UFILE, --usermap UFILE
75 Expand usernames to email addresses from UFILE.
76
77 --passwd PASSWORDFILE
78 Use system passwd file for user name expansion. If no mail domain
79 is provided (via --domain), it tries to read one from /etc/mail‐
80 name, output of hostname -d, dnsdomainname, or domain-name. cvs2cl
81 exits with an error if none of those options is successful. Use a
82 domain of '' to prevent the addition of a mail domain.
83
84 --domain DOMAIN
85 Domain to build email addresses from.
86
87 --gecos
88 Get user information from GECOS data.
89
90 -R REGEXP, --regexp REGEXP
91 Include only entries that match REGEXP. This option may be used
92 multiple times.
93
94 -I REGEXP, --ignore REGEXP
95 Ignore files whose names match REGEXP. This option may be used
96 multiple times. The regexp is a perl regular expression. It is
97 matched as is; you may want to prefix with a ^ or suffix with a $
98 to anchor the match.
99
100 -C, --case-insensitive
101 Any regexp matching is done case-insensitively.
102
103 -F BRANCH, --follow BRANCH
104 Show only revisions on or ancestral to BRANCH.
105
106 --follow-only BRANCH
107 Like --follow, but sub-branches are not followed.
108
109 --no-ancestors
110 When using -F, only track changes since the BRANCH started.
111
112 --no-hide-branch-additions
113 By default, entries generated by cvs for a file added on a branch
114 (a dead 1.1 entry) are not shown. This flag reverses that action.
115
116 -S, --separate-header
117 Blank line between each header and log message.
118
119 --summary
120 Add CVS change summary information.
121
122 --no-wrap
123 Don't auto-wrap log message (recommend -S also).
124
125 --no-indent
126 Don't indent log message
127
128 --gmt, --utc
129 Show times in GMT/UTC instead of local time.
130
131 --accum
132 Add to an existing ChangeLog (incompatible with --xml).
133
134 -w, --day-of-week
135 Show day of week.
136
137 --no-times
138 Don't show times in output.
139
140 --chrono
141 Output log in chronological order (default is reverse chronological
142 order).
143
144 --header FILE
145 Get ChangeLog header from FILE ("-" means stdin).
146
147 --xml
148 Output XML instead of ChangeLog format.
149
150 --xml-encoding ENCODING.
151 Insert encoding clause in XML header.
152
153 --noxmlns
154 Don't include xmlns= attribute in root element.
155
156 --hide-filenames
157 Don't show filenames (ignored for XML output).
158
159 --no-common-dir
160 Don't shorten directory names from filenames.
161
162 --rcs CVSROOT
163 Handle filenames from raw RCS, for instance those produced by "cvs
164 rlog" output, stripping the prefix CVSROOT.
165
166 -P, --prune
167 Don't show empty log messages.
168
169 --lines-modified
170 Output the number of lines added and the number of lines removed
171 for each checkin (if applicable). At the moment, this only affects
172 the XML output mode.
173
174 --ignore-tag TAG
175 Ignore individual changes that are associated with a given tag.
176 May be repeated, if so, changes that are associated with any of the
177 given tags are ignored.
178
179 --show-tag TAG
180 Log only individual changes that are associated with a given tag.
181 May be repeated, if so, changes that are associated with any of the
182 given tags are logged.
183
184 --delta FROM_TAG:TO_TAG
185 Attempt a delta between two tags (since FROM_TAG up to and includ‐
186 ing TO_TAG). The algorithm is a simple date-based one (this is a
187 hard problem) so results are imperfect.
188
189 -g OPTS, --global-opts OPTS
190 Pass OPTS to cvs like in "cvs OPTS log ...".
191
192 -l OPTS, --log-opts OPTS
193 Pass OPTS to cvs log like in "cvs ... log OPTS".
194
195 Notes about the options and arguments:
196
197 · The -I and -F options may appear multiple times.
198
199 · To follow trunk revisions, use "-F trunk" ("-F TRUNK" also works).
200 This is okay because no would ever, ever be crazy enough to name a
201 branch "trunk", right? Right.
202
203 · For the -U option, the UFILE should be formatted like CVS‐
204 ROOT/users. That is, each line of UFILE looks like this:
205
206 jrandom:jrandom@red-bean.com
207
208 or maybe even like this
209
210 jrandom:'Jesse Q. Random <jrandom@red-bean.com>'
211
212 Don't forget to quote the portion after the colon if necessary.
213
214 · Many people want to filter by date. To do so, invoke cvs2cl like
215 this:
216
217 cvs2cl -l "-d'DATESPEC'"
218
219 where DATESPEC is any date specification valid for "cvs log -d".
220 (Note that CVS 1.10.7 and below requires there be no space between
221 -d and its argument).
222
223 · Dates/times are interpreted in the local time zone.
224
225 · Remember to quote the argument to `-l' so that your shell doesn't
226 interpret spaces as argument separators.
227
228 · See the 'Common Options' section of the cvs manual ('info cvs' on
229 UNIX-like systems) for more information.
230
231 · Note that the rules for quoting under windows shells are different.
232
233 · To run in an automated environment such as CGI or PHP, suidperl may
234 be needed in order to execute as the correct user to enable /cvs‐
235 root read lock files to be written for the 'cvs log' command. This
236 is likely just a case of changing the /usr/bin/perl command to
237 /usr/bin/suidperl, and explicitly declaring the PATH variable.
238
240 Some examples (working on UNIX shells):
241
242 # logs after 6th March, 2003 (inclusive)
243 cvs2cl -l "-d'>2003-03-06'"
244 # logs after 4:34PM 6th March, 2003 (inclusive)
245 cvs2cl -l "-d'>2003-03-06 16:34'"
246 # logs between 4:46PM 6th March, 2003 (exclusive) and
247 # 4:34PM 6th March, 2003 (inclusive)
248 cvs2cl -l "-d'2003-03-06 16:46>2003-03-06 16:34'"
249
250 Some examples (on non-UNIX shells):
251
252 # Reported to work on windows xp/2000
253 cvs2cl -l "-d"">2003-10-18;today<"""
254
256 Karl Fogel
257 Melissa O'Neill
258 Martyn J. Pearce
259
260 Contributions from
261
262 Mike Ayers
263 Tim Bradshaw
264 Richard Broberg
265 Nathan Bryant
266 Oswald Buddenhagen
267 Neil Conway
268 Arthur de Jong
269 Mark W. Eichin
270 Dave Elcock
271 Reid Ellis
272 Simon Josefsson
273 Robin Hugh Johnson
274 Terry Kane
275 Pete Kempf
276 Akos Kiss
277 Claus Klein
278 Eddie Kohler
279 Richard Laager
280 Kevin Lilly
281 Karl-Heinz Marbaise
282 Mitsuaki Masuhara
283 Henrik Nordstrom
284 Joe Orton
285 Peter Palfrader
286 Thomas Parmelan
287 Jordan Russell
288 Jacek Sliwerski
289 Johannes Stezenbach
290 Joseph Walton
291 Ernie Zapata
292
294 Please report bugs to "bug-cvs2cl@red-bean.com".
295
297 This script requires "Text::Wrap", "Time::Local", and "File::Basename".
298 It also seems to require "Perl 5.004_04" or higher.
299
301 Should work on any OS.
302
304 Version_Control/CVS
305
307 (C) 2001,2002,2003,2004 Martyn J. Pearce <fluffy@cpan.org>, under the
308 GNU GPL.
309
310 (C) 1999 Karl Fogel <kfogel@red-bean.com>, under the GNU GPL.
311
312 cvs2cl is free software; you can redistribute it and/or modify it under
313 the terms of the GNU General Public License as published by the Free
314 Software Foundation; either version 2, or (at your option) any later
315 version.
316
317 cvs2cl is distributed in the hope that it will be useful, but WITHOUT
318 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
319 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
320 for more details.
321
322 You may have received a copy of the GNU General Public License along
323 with cvs2cl; see the file COPYING. If not, write to the Free Software
324 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
325 USA.
326
328 cvs(1)
329
330
331
3322.62 2007-04-24 CVS2CL(1)