cvs2cl.pl version 2.73; 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. --xml-stylesheet FILE Insert xml-stylesheet processing instruction with FILE formatting stylesheet file path 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.