NAME
cvs2cl - convert cvs log messages to changelogs
SYNOPSIS
cvs2cl [options] [FILE1 [FILE2 ...]]
DESCRIPTION
cvs2cl produces a GNU-style ChangeLog for CVS-controlled sources by
running "cvs log" and parsing the output. Duplicate log messages get
unified in the Right Way.
The default output of cvs2cl is designed to be compact, formally
unambiguous, but still easy for humans to read. It should be largely
self-explanatory; the one abbreviation that might not be obvious is
"utags". That stands for "universal tags" -- a universal tag is one
held by all the files in a given change entry.
If you need output that’s easy for a program to parse, use the --xml
option. Note that with XML output, just about all available
information is included with each change entry, whether you asked for
it or not, on the theory that your parser can ignore anything it’s not
looking for.
If filenames are given as arguments cvs2cl only shows log information
for the named files.
OPTIONS
-h, -help, --help, -?
Show a short help and exit.
--version
Show version and exit.
-r, --revisions
Show revision numbers in output.
-b, --branches
Show branch names in revisions when possible.
-t, --tags
Show tags (symbolic names) in output.
-T, --tagdates
Show tags in output on their first occurance.
--show-dead
Show dead files.
--stdin
Read from stdin, don’t run cvs log.
--stdout
Output to stdout not to ChangeLog.
-d, --distributed
Put ChangeLogs in subdirs.
-f FILE, --file FILE
Write to FILE instead of ChangeLog.
--fsf
Use this if log data is in FSF ChangeLog style.
--FSF
Attempt strict FSF-standard compatible output.
-W SECS, --window SECS
Window of time within which log entries unify.
-U UFILE, --usermap UFILE
Expand usernames to email addresses from UFILE.
--passwd PASSWORDFILE
Use system passwd file for user name expansion. If no mail domain
is provided (via --domain), it tries to read one from
/etc/mailname, output of hostname -d, dnsdomainname, or domain-
name. cvs2cl exits with an error if none of those options is
successful. Use a domain of ’’ to prevent the addition of a mail
domain.
--domain DOMAIN
Domain to build email addresses from.
--gecos
Get user information from GECOS data.
-R REGEXP, --regexp REGEXP
Include only entries that match REGEXP. This option may be used
multiple times.
-I REGEXP, --ignore REGEXP
Ignore files whose names match REGEXP. This option may be used
multiple times. The regexp is a perl regular expression. It is
matched as is; you may want to prefix with a ^ or suffix with a $
to anchor the match.
-C, --case-insensitive
Any regexp matching is done case-insensitively.
-F BRANCH, --follow BRANCH
Show only revisions on or ancestral to BRANCH.
--follow-only BRANCH
Like --follow, but sub-branches are not followed.
--no-ancestors
When using -F, only track changes since the BRANCH started.
--no-hide-branch-additions
By default, entries generated by cvs for a file added on a branch
(a dead 1.1 entry) are not shown. This flag reverses that action.
-S, --separate-header
Blank line between each header and log message.
--summary
Add CVS change summary information.
--no-wrap
Don’t auto-wrap log message (recommend -S also).
--no-indent
Don’t indent log message
--gmt, --utc
Show times in GMT/UTC instead of local time.
--accum
Add to an existing ChangeLog (incompatible with --xml).
-w, --day-of-week
Show day of week.
--no-times
Don’t show times in output.
--chrono
Output log in chronological order (default is reverse chronological
order).
--header FILE
Get ChangeLog header from FILE ("-" means stdin).
--xml
Output XML instead of ChangeLog format.
--xml-encoding ENCODING.
Insert encoding clause in XML header.
--noxmlns
Don’t include xmlns= attribute in root element.
--hide-filenames
Don’t show filenames (ignored for XML output).
--no-common-dir
Don’t shorten directory names from filenames.
--rcs CVSROOT
Handle filenames from raw RCS, for instance those produced by "cvs
rlog" output, stripping the prefix CVSROOT.
-P, --prune
Don’t show empty log messages.
--lines-modified
Output the number of lines added and the number of lines removed
for each checkin (if applicable). At the moment, this only affects
the XML output mode.
--ignore-tag TAG
Ignore individual changes that are associated with a given tag.
May be repeated, if so, changes that are associated with any of the
given tags are ignored.
--show-tag TAG
Log only individual changes that are associated with a given tag.
May be repeated, if so, changes that are associated with any of the
given tags are logged.
--delta FROM_TAG:TO_TAG
Attempt a delta between two tags (since FROM_TAG up to and
including TO_TAG). The algorithm is a simple date-based one (this
is a hard problem) so results are imperfect.
-g OPTS, --global-opts OPTS
Pass OPTS to cvs like in "cvs OPTS log ...".
-l OPTS, --log-opts OPTS
Pass OPTS to cvs log like in "cvs ... log OPTS".
Notes about the options and arguments:
· The -I and -F options may appear multiple times.
· To follow trunk revisions, use "-F trunk" ("-F TRUNK" also works).
This is okay because no would ever, ever be crazy enough to name a
branch "trunk", right? Right.
· For the -U option, the UFILE should be formatted like
CVSROOT/users. That is, each line of UFILE looks like this:
jrandom:jrandom@red-bean.com
or maybe even like this
jrandom:’Jesse Q. Random <jrandom@red-bean.com>’
Don’t forget to quote the portion after the colon if necessary.
· Many people want to filter by date. To do so, invoke cvs2cl like
this:
cvs2cl -l "-d’DATESPEC’"
where DATESPEC is any date specification valid for "cvs log -d".
(Note that CVS 1.10.7 and below requires there be no space between
-d and its argument).
· Dates/times are interpreted in the local time zone.
· Remember to quote the argument to ‘-l’ so that your shell doesn’t
interpret spaces as argument separators.
· See the ’Common Options’ section of the cvs manual (’info cvs’ on
UNIX-like systems) for more information.
· Note that the rules for quoting under windows shells are different.
· To run in an automated environment such as CGI or PHP, suidperl may
be needed in order to execute as the correct user to enable
/cvsroot read lock files to be written for the ’cvs log’ command.
This is likely just a case of changing the /usr/bin/perl command to
/usr/bin/suidperl, and explicitly declaring the PATH variable.
EXAMPLES
Some examples (working on UNIX shells):
# logs after 6th March, 2003 (inclusive)
cvs2cl -l "-d’>2003-03-06’"
# logs after 4:34PM 6th March, 2003 (inclusive)
cvs2cl -l "-d’>2003-03-06 16:34’"
# logs between 4:46PM 6th March, 2003 (exclusive) and
# 4:34PM 6th March, 2003 (inclusive)
cvs2cl -l "-d’2003-03-06 16:46>2003-03-06 16:34’"
Some examples (on non-UNIX shells):
# Reported to work on windows xp/2000
cvs2cl -l "-d"">2003-10-18;today<"""
AUTHORS
Karl Fogel
Melissa O’Neill
Martyn J. Pearce
Contributions from
Mike Ayers
Tim Bradshaw
Richard Broberg
Nathan Bryant
Oswald Buddenhagen
Neil Conway
Arthur de Jong
Mark W. Eichin
Dave Elcock
Reid Ellis
Simon Josefsson
Robin Hugh Johnson
Terry Kane
Pete Kempf
Akos Kiss
Claus Klein
Eddie Kohler
Richard Laager
Kevin Lilly
Karl-Heinz Marbaise
Mitsuaki Masuhara
Henrik Nordstrom
Joe Orton
Peter Palfrader
Thomas Parmelan
Jordan Russell
Jacek Sliwerski
Johannes Stezenbach
Joseph Walton
Ernie Zapata
BUGS
Please report bugs to "bug-cvs2cl@red-bean.com".
PREREQUISITES
This script requires "Text::Wrap", "Time::Local", and "File::Basename".
It also seems to require "Perl 5.004_04" or higher.
OPERATING SYSTEM COMPATIBILITY
Should work on any OS.
SCRIPT CATEGORIES
Version_Control/CVS
COPYRIGHT
(C) 2001,2002,2003,2004 Martyn J. Pearce <fluffy@cpan.org>, under the
GNU GPL.
(C) 1999 Karl Fogel <kfogel@red-bean.com>, under the GNU GPL.
cvs2cl is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free
Software Foundation; either version 2, or (at your option) any later
version.
cvs2cl is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You may have received a copy of the GNU General Public License along
with cvs2cl; see the file COPYING. If not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
USA.
[The postal address above has been updated by the Debian package
maintainer to reflect the FSF’s current address.]
SEE ALSO
cvs(1)