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