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:
or maybe even like this
jrandom:'Jesse Q. Random <
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
".
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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
SEE ALSO
cvs(1)