SYNOPSIS

cvs2cl [options] [\s-1FILE1\s0 [\s-1FILE2\s0 ...]]

DESCRIPTION

cvs2cl produces a GNU-style ChangeLog for CVS-controlled sources by running \*(L"cvs log\*(R" 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 \*(L"utags\*(R". That stands for \*(L"universal tags\*(R" \*(-- 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 \s-1XML\s0 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 \s-1FILE\s0, --file \s-1FILE\s0

Write to \s-1FILE\s0 instead of ChangeLog.

--fsf

Use this if log data is in \s-1FSF\s0 ChangeLog style.

--FSF

Attempt strict FSF-standard compatible output (incompatible with --accum).

-W \s-1SECS\s0, --window \s-1SECS\s0

Window of time within which log entries unify.

-U \s-1UFILE\s0, --usermap \s-1UFILE\s0

Expand usernames to email addresses from \s-1UFILE\s0.

--passwd \s-1PASSWORDFILE\s0

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 \s-1DOMAIN\s0

Domain to build email addresses from.

--gecos

Get user information from \s-1GECOS\s0 data.

-R \s-1REGEXP\s0, --regexp \s-1REGEXP\s0

Include only entries that match \s-1REGEXP\s0. This option may be used multiple times.

-I \s-1REGEXP\s0, --ignore \s-1REGEXP\s0

Ignore files whose names match \s-1REGEXP\s0. 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 \s-1BRANCH\s0, --follow \s-1BRANCH\s0

Show only revisions on or ancestral to \s-1BRANCH\s0.

--follow-only \s-1BRANCH\s0

Like --follow, but sub-branches are not followed.

--no-ancestors

When using -F, only track changes since the \s-1BRANCH\s0 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.

--group-within-date

Group ChangeLog entries on the same date together, instead of having a separate entry for each commit on that date.

--summary

Add \s-1CVS\s0 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 \s-1GMT/UTC\s0 instead of local time.

--accum

Add to an existing ChangeLog (incompatible with --xml and --FSF).

-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 \s-1FILE\s0

Get ChangeLog header from \s-1FILE\s0 ("-" means stdin).

--xml

Output \s-1XML\s0 instead of ChangeLog format (incompatible with --accum).

--xml-encoding \s-1ENCODING\s0

Insert encoding clause in \s-1XML\s0 header.

--xml-stylesheet \s-1FILE\s0

Insert xml-stylesheet processing instruction with \s-1FILE\s0 formatting stylesheet file path in \s-1XML\s0 header.

--noxmlns

Don't include xmlns= attribute in root element.

--hide-filenames

Don't show filenames (ignored for \s-1XML\s0 output).

--no-common-dir

Don't shorten directory names from filenames.

--rcs \s-1CVSROOT\s0

Handle filenames from raw \s-1RCS\s0, for instance those produced by \*(L"cvs rlog\*(R" output, stripping the prefix \s-1CVSROOT\s0.

-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 \s-1XML\s0 output mode.

--ignore-tag \s-1TAG\s0

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 \s-1TAG\s0

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 \s-1FROM_TAG\s0:\s-1TO_TAG\s0

Attempt a delta between two tags (since \s-1FROM_TAG\s0 up to and including \s-1TO_TAG\s0). The algorithm is a simple date-based one (this is a hard problem) so results are imperfect.

-g \s-1OPTS\s0, --global-opts \s-1OPTS\s0

Pass \s-1OPTS\s0 to cvs like in "cvs \s-1OPTS\s0 log ...".

-l \s-1OPTS\s0, --log-opts \s-1OPTS\s0

Pass \s-1OPTS\s0 to cvs log like in "cvs ... log \s-1OPTS\s0".

Notes about the options and arguments:

  • The -I and -F options may appear multiple times.

  • To follow trunk revisions, use "-F trunk\*(L" (\*(R"-F \s-1TRUNK\s0\*(L" also works). This is okay because no would ever, ever be crazy enough to name a branch \*(R"trunk", right? Right.

  • For the -U option, the \s-1UFILE\s0 should be formatted like CVSROOT/users. That is, each line of \s-1UFILE\s0 looks like this:

           jrandom:[email protected]
    

    or maybe even like this jrandom:'Jesse Q. Random <[email protected]>' 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 \s-1DATESPEC\s0 is any date specification valid for \*(L"cvs log -d\*(R". (Note that \s-1CVS\s0 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 \s-1CGI\s0 or \s-1PHP\s0, 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 \s-1PATH\s0 variable.

EXAMPLES

Some examples (working on \s-1UNIX\s0 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 \*(C`cvs2cl-reports {_AT_} red-bean.com\*(C'.

PREREQUISITES

This script requires \*(C`Text::Wrap\*(C', \*(C`Time::Local\*(C', and \*(C`File::Basename\*(C'. It also seems to require \*(C`Perl 5.004_04\*(C' or higher.

OPERATING SYSTEM COMPATIBILITY

Should work on any \s-1OS\s0.

SCRIPT CATEGORIES

Version_Control/CVS

COPYRIGHT

(C) 2001,2002,2003,2004 Martyn J. Pearce, under the \s-1GNU\s0 \s-1GPL\s0.

(C) 1999 Karl Fogel, under the \s-1GNU\s0 \s-1GPL\s0.

cvs2cl is free software; you can redistribute it and/or modify it under the terms of the \s-1GNU\s0 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 \s-1WITHOUT\s0 \s-1ANY\s0 \s-1WARRANTY\s0; without even the implied warranty of \s-1MERCHANTABILITY\s0 or \s-1FITNESS\s0 \s-1FOR\s0 A \s-1PARTICULAR\s0 \s-1PURPOSE\s0. See the \s-1GNU\s0 General Public License for more details.

You may have received a copy of the \s-1GNU\s0 General Public License along with cvs2cl; see the file \s-1COPYING\s0. If not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, \s-1MA\s0 02110-1301 \s-1USA\s0.

[The postal address above has been updated by the Debian package maintainer to reflect the \s-1FSF\s0's current address.]

RELATED TO cvs2cl…

cvs\|(1)