cvs2cl.pl version 2.72; distributed under the GNU GPL. Usage: cvs2cl [*options*] [*FILE1* [*FILE2* ...]] 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 (incompatible with --accum). -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. --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 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 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 *FILE* Get ChangeLog header from *FILE* ("-" means stdin). --xml Output XML instead of ChangeLog format (incompatible with --accum). --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 ' Don't forget to quote the portion after the colon if necessary. * Many people want to filter by date. To do so, invoke cvs2cl.pl like this: cvs2cl.pl -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.