CVS2CL(1)
β¨ CVS2CL(1) β cvs2cl, aka the cvs-log-message-to-ChangeLog conversion script β¨
okay bestie, buckle up, we're talking about cvs2cl from section 1 of the manual π
π¦ NAME π¦
cvs2cl β convert cvs log messages to changelogs. that's it, that's the girl π
πΈ SYNOPSIS πΈ
cvs2cl [options] [FILE1 [FILE2 ...]]
π DESCRIPTION π
cvs2cl makes a GNU-style ChangeLog for your CVS-controlled sources by literally running cvs log and parsing whatever comes back. duplicate log messages get unified the Right Way, no cap π«Ά
the default output is designed to be compact and formally unambiguous, but still easy for actual humans to read. it's giving self-explanatory, mostly. the one abbreviation that might trip you up is utags β that stands for "universal tags", and a universal tag is one held by all the files in a given change entry. iconic behavior tbh β
if you need output that's easy for a program to parse, use the --xml option. heads up tho: with XML output, just about all available information gets included with each change entry, whether you asked for it or not β the theory being your parser can just ignore anything it's not looking for. main character energy from the XML, honestly π
if filenames are given as arguments, cvs2cl only shows log information for the named files. simple as π
π OPTIONS π
-h,-help,--help,-?β show a short help and dip out.--versionβ show version and exit.-r,--revisionsβ show revision numbers in the output.-b,--branchesβ show branch names in revisions when possible.-t,--tagsβ show tags (symbolic names) in the output.-T,--tagdatesβ show tags in output on their first occurance.--show-deadβ show dead files π--stdinβ read from stdin, don't runcvs log.--stdoutβ output to stdout, not toChangeLog.-d,--distributedβ putChangeLogs in subdirs.-f FILE,--file FILEβ write toFILEinstead ofChangeLog.--fsfβ use this if your 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 fromUFILE.--passwd PASSWORDFILEβ use the system passwd file for user name expansion. if no mail domain is provided (via--domain), it tries to read one from/etc/mailname, output ofhostname -d,dnsdomainname, ordomain-name.cvs2clexits 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 matchREGEXP. this option may be used multiple times.-I REGEXP,--ignore REGEXPβ ignore files whose names matchREGEXP. 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 toBRANCH.--follow-only BRANCHβ like--follow, but sub-branches are not followed.--no-ancestorsβ when using-F, only track changes since theBRANCHstarted.--no-hide-branch-additionsβ by default, entries generated by cvs for a file added on a branch (a dead1.1entry) 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-Salso).--no-indentβ don't indent log message--gmt,--utcβ show times in GMT/UTC instead of local time.--accumβ add to an existingChangeLog(incompatible with--xmland--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 fromFILE("-"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 withFILEformatting stylesheet file path in XML header.--noxmlnsβ don't includexmlns=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 bycvs rlogoutput, stripping the prefixCVSROOT.-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, and 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, and 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 (sinceFROM_TAGup to and includingTO_TAG). the algorithm is a simple date-based one (this is a hard problem) so results are imperfect. π«-g OPTS,--global-opts OPTSβ passOPTSto cvs like incvs OPTS log ....-l OPTS,--log-opts OPTSβ passOPTSto cvs log like incvs ... log OPTS.
π§ Notes about the options and arguments π§
- the
-Iand-Foptions may appear multiple times. - to follow trunk revisions, use
-F trunk(-F TRUNKalso works). this is okay because no one would ever, ever be crazy enough to name a branchtrunk, right? Right. π - for the
-Uoption, theUFILEshould be formatted likeCVSROOT/users. that is, each line ofUFILElooks 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
cvs2cllike 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
-lso that your shell doesn't interpret spaces as argument separators. - see the 'Common Options' section of the cvs manual (
info cvson 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,
suidperlmay be needed in order to execute as the correct user to enable/cvsrootread lock files to be written for thecvs logcommand. this is likely just a case of changing the/usr/bin/perlcommand to/usr/bin/suidperl, and explicitly declaring thePATHvariable.
π₯ 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 "cvs2cl-reports {_AT_} 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. no gatekeeping β¨
π SCRIPT CATEGORIES π
Version_Control/CVS
π COPYRIGHT π
(C) 2001,2002,2003,2004 Martyn J. Pearce, under the GNU GPL.
(C) 1999 Karl Fogel, 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 β
and that's the whole page bestie, version 2.73 dated 2025-07-23 β go forth and make ChangeLogs, you absolute legend π«Άπ
β¨
π¦ where this page comes from
- fedora 43: cvs2cl 2.73-32.fc43 Β· GPL-2.0-or-later
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms