gnu rcs · the rcs file is also known (colloquially) as the “comma-v file”, due to its name...

38
GNU RCS for version 5.9.4, 18 January 2015 Thien-Thi Nguyen

Upload: dinhthu

Post on 13-Sep-2018

217 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: GNU RCS · The RCS file is also known (colloquially) as the “comma-v file”, due to its name often ending in ,v (e.g., a.c,v). A revision number is a branch number followed by

GNU RCSfor version 594 18 January 2015

Thien-Thi Nguyen

This manual is for GNU RCS (version 594 18 January 2015)

Copyright ccopy 2010ndash2015 Thien-Thi Nguyen

Permission is granted to copy distribute andor modify this document underthe terms of the GNU Free Documentation License Version 13 or any laterversion published by the Free Software Foundation with no Invariant Sectionswith no Front-Cover Texts and with no Back-Cover Texts A copy of the licenseis included in the appendix entitled ldquoGNU Free Documentation Licenserdquo

i

Table of Contents

1 Overview 111 Credits 112 Concepts 1

121 Interaction model 1122 Working file 2123 RCS file 2124 Fundamental operations 3125 Keywords 3

13 Quick tour 4

2 Usage 721 Common elements 7

211 Revision options 7212 Date option 8213 Description option 8214 Substitution mode option 8215 Log message option 9216 Misc common options 9217 Environment 10

22 Invoking ci 1123 Invoking co 1224 Invoking ident 1325 Invoking merge 1426 Invoking rcs 14

261 modern 14262 legacy 15

27 Invoking rcsclean 1628 Invoking rcsdiff 1729 Invoking rcsmerge 17210 Invoking rlog 18

3 Hacking 2031 File format 20

311 File format grammar 20312 Additional particulars of the file format 21

32 Still missing 2333 Reporting bugs 25

Appendix A GNU Free Documentation License 26

Index 34

Chapter 1 Overview 1

1 Overview

GNU RCS (Revision Control System) manages multiple revisions of files RCS can storeretrieve log identify and merge revisions It is useful for files that are revised frequentlyeg programs documentation graphics and papers It can handle text as well as binaryfiles although functionality is reduced for the latter

A normal installation includes the commands ci co ident merge rcs rcsclean rcsdiffrcsmerge and rlog (see Chapter 2 [Usage] page 7) These are small and fast programs(amenable to scripting) and indeed the distribution also includes the script rcsfreeze showingsome of the possibilities

RCS works with versions stored on a single filesystem or machine edited by one person ata time Other version control systems such as Bazaar (httpwwwgnuorgsoftwarebazaar) CVS Subversion and Git support distributed access in various ways Which ismore appropriate depends on the task at hand

11 Credits

RCS was designed and built by Walter F Tichy of Purdue University RCS version 3 wasreleased in 1983

Adam Hammer Thomas Narten and Daniel Trinkle of Purdue supported RCS throughversion 43 released in 1990 Guy Harris of Sun contributed many porting fixes PaulEggert of System Development Corporation contributed bug fixes and tuneups Jay Lepreaucontributed 43BSD support

Paul Eggert of Twin Sun wrote the changes for RCS versions 55 and 56 (1991) RichBraun of Kronos and Andy Glew of Intel contributed ideas for new options Bill Hahn ofStratus contributed ideas for setuid support Ideas for piece tables came from Joe Berkovitzof Stratus and Walter F Tichy Matt Cross of Stratus contributed test case ideas AdamHammer of Purdue QAed

Paul Eggert wrote most of the changes for RCS 57 K Richard Pixley of Cygnus Supportcontributed several bug fixes Robert Lupton of Princeton and Daniel Trinkle contributedideas for lsquo$Namersquo expansion Brendan Kehoe of Cygnus Support suggested rlogrsquos -N optionPaul D Smith of Data General suggested improvements in option and error processingAdam Hammer of Purdue QAed

Thien-Thi Nguyen is responsibile for RCS 58 He modernized the code base build sys-tem and manual pages fixing some bugs on the way He added standard --help --versionprocessing and wrote the documentation you are reading (gladly taking inspiration fromthe paper1 and manpages originally written by Walter F Tichy)

12 Concepts

121 Interaction model

The interaction model is straightforward For each working file you initialize its RCS fileonce then enter a cycle of checkout modification and checkin operations Along the way

1 Source (troff) and several output formats are available from the RCS homepage (httpwwwgnuorgsoftwarercs)

Chapter 1 Overview 2

you can tweak some of the RCS filersquos metadata as well All of this is done through RCScommands you need not modify the RCS file directly (and in fact you should probablyavoid doing so lest RCS become confused) This model is somewhat analogous to using alibrary (of books) With a library you sign up for a library card (initialize) then enter acycle of taking a book home (checkout) enjoying it (NB without modification one hopes)and returning it to the library (checkin)

Furthermore you can compare revisions in the RCS file against each other examine theuser- (hopefully high) quality descriptions of the changes each revision embodies mergeselected revisions and so forth

122 Working file

RCS commands operate on one pair of files at a time The working file is what you normallyview and edit (eg a file of C programming language source code named ac) Because theworking filersquos contents can be extracted from the RCS file (called instantiating a workingfile) it can be safely deleted to regain some disk space

123 RCS file

The RCS file is a separate file conventionally placed in the subdirectory RCS wherein RCScommands organize the initial and subsequent revisions of the working file associatingwith each revision a unique revision number along with the remembered particulars of thecheckin that produced it It also contains a description of the working file and various othermetadata described below

The RCS file is also known (colloquially) as the ldquocomma-v filerdquo due to its name oftenending in v (eg acv)

A revision number is a branch number followed by a dot followed by an integer and abranch number is an odd number of integers separated by dot A revision number with onedot (implying a branch number without any dots) is said to be on the trunk All integersare positive For example

11 -- revision number for initial checkin (typically)

branch number 1

94142 -- more complicated (perhaps after much gnarly hacking)

branch number 941

333333333 -- not a valid revision number

however a perfectly valid branch number

The branch point of a non-trunk branch is the revision number formed by removing thebranchrsquos trailing integer To compute the next higher branch or revision number add oneto the trailing integer The highest-numbered revision on a branch is called the tip of thebranch (or branch tip) Continuing the example

11 -- on trunk no branch point

next higher branch number 2

next higher revision number 12

94142 -- not on trunk branch point 94

Chapter 1 Overview 3

next higher branch number 942

next higher revision number 94143

333333333 -- not on trunk branch point 333333

next higher branch number 333333334

next higher revision number 3333333331

In addition to this ldquotreerdquo of thus-linked revisions the RCS file keeps track of the defaultbranch ie the branch whose tip corresponds to the most recent checkin as well as thesymbolic names a list of associations between a user-supplied (and presumably meaningful)symbol and an underlying branch or revision number

The RCS file contains two pieces of information used to implement its access controlpolicy The first is a list of usernames If non-empty only those users listed can modifythe RCS file (via RCS commands) The second is a list of locks ie association betweena username and a revision number If a lock usernamerevno exists that means onlyusername may modify revno (that is do a checkin operation to deposit the next higherrevision or a higher revision number on the same branch as revno)

124 Fundamental operations

The checkin operation records the contents of the working file in the RCS file assigning ita new (normally the next higher) revision number and recording the username timestampstate (a short symbol) and user-supplied log message (a textual description of the changesleading to that revision) It uses diff to find the differences between the tip of the defaultbranch and the working file thereby writing the minimal amount of information needed tobe able to recreate the contents of the previous tip

The checkout operation identifies a specific revision from the RCS file and either dis-plays the content to standard output or instantiates a working file overwriting any currentinstantiation with the selected revision In either case the content may undergo keywordexpansion which replaces text of the form lsquo$Keyword$rsquo with (possibly) different text com-prising the keyword and its value depending on the current keyword expansion mode (seeSection 214 [Substitution mode option] page 8)

125 Keywords

The keywords and their values are

Author The login name of the user who checked in the revision

Date The date and time the revision was checked in May include an appendedtimezone offset

Header A standard header containing the absolute RCS filename the revision numberthe date and time the author the state and the locker (if locked) May includean appended timezone offset

Id Same as lsquoHeaderrsquo except that only the basename appears (no directory com-ponents)

Locker The login name of the user who locked the revision (empty if not locked)

Chapter 1 Overview 4

Log The log message supplied during checkin preceded by a header containing theRCS filename the revision number the author and the date and time Mayinclude an appended timezone offset

Existing log messages are not replaced Instead the new log message is insertedafter lsquo$Log$rsquo This is useful for accumulating a complete change log in asource file

Each inserted line is prefixed by the string that prefixes the lsquo$Log$rsquo line Forexample if the lsquo$Log$rsquo line is

$Log tancc $

then RCS prefixes each line of the log with lsquo rsquo (slash slash space) This isuseful for languages with comments that go to the end of the line

The convention for other languages is to use a lsquo rsquo (space asterisk space)prefix inside a multiline comment For example the initial log comment of a Cprogram conventionally is of the following form

$Log$

For backwards compatibility with older versions of RCS if the log prefix is lsquorsquoor lsquo(rsquo surrounded by optional white space inserted log lines contain a spaceinstead of lsquorsquo or lsquo(rsquo however this usage is obsolescent and should not be reliedon

Name The symbolic name used to check out the revision if any For example lsquoco-rJoersquo generates lsquo$Name Joe $rsquo Plain co generates just lsquo$Name $rsquo

RCSfile The basename of the RCS file

Revision The revision number assigned to the revision

Source The absolute RCS filename

State The state assigned to the revision with the -s option of rcs or ci

13 Quick tour

This section complements the preceding section (see Section 12 [Concepts] page 1) pre-senting a handful of RCS commands in quick succession For details on individual RCScommands See Chapter 2 [Usage] page 7

Suppose you have a file fc that you wish to put under control of RCS If you have notalready done so make an RCS directory with the command

mkdir RCS

Then invoke the checkin command

ci fc

This command creates an RCS file in directory RCS stores fc into it as revision 11 anddeletes fc It also asks you for a description The description should be a synopsis of thecontents of the file All later checkin commands will ask you for a log entry which shouldsummarize the changes that you made

To get back the working file fc in the previous example use the checkout command

Chapter 1 Overview 5

co fc

This command extracts the latest revision from the RCS file and writes it into fc If youwant to edit fc you must lock it as you check it out with the command

co -l fc

You can now edit fc Suppose after some editing you want to know what changes thatyou have made The command

rcsdiff fc

tells you the difference between the most recently checked-in version and the working fileYou can check the file back in by invoking

ci fc

This increments the revision number properly If ci complains with the message

ci error no lock set by your name

then you have tried to check in a file even though you did not lock it when you checked itout Of course it is too late now to do the checkout with locking because another checkoutwould overwrite your modifications Instead invoke

rcs -l fc

This command will lock the latest revision for you unless somebody else got ahead of youalready In this case yoursquoll have to negotiate with that person

Locking assures that you and only you can check in the next update and avoids nastyproblems if several people work on the same file Even if a revision is locked it can still bechecked out for reading compiling etc All that locking prevents is a checkin by anybodybut the locker

If your RCS file is private ie if you are the only person who is going to deposit revisionsinto it strict locking is not needed and you can turn it off If strict locking is turned offthe owner of the RCS file need not have a lock for checkin all others still do Turning strictlocking off and on is done with the commands

rcs -U fc disable strict lockingrcs -L fc enable strict locking

If you donrsquot want to clutter your working directory with RCS files create a subdirectorycalled RCS in your working directory and move all your RCS files there RCS commandswill look first into that directory to find needed files All the commands discussed abovewill still work without any modification See Section 21 [Common elements] page 7

To avoid the deletion of the working file during checkin (in case you want to continueediting or compiling) invoke one of

ci -l fc checkin + locked checkoutci -u fc checkin + unlocked checkout

These commands check in fc as usual then perform an implicit checkout The first formalso locks the checked in revision the second one doesnrsquot Thus these options save you onecheckout operation The first form is useful if you want to continue editing the second oneif you just want to read the file Both update the keyword substitutions in your workingfile see Section 12 [Concepts] page 1

You can give ci the number you want assigned to a checked-in revision Assume all yourrevisions were numbered 11 12 13 etc and you would like to start release 2 Either ofthe commands

Chapter 1 Overview 6

ci -r2 fc

ci -r21 fc

assigns the number 21 to the new revision From then on ci will number the subsequentrevisions with 22 23 etc The corresponding co commands

co -r2 fc

co -r21 fc

retrieve the latest revision numbered 2x and the revision 21 respectively co withouta revision number selects the latest revision on the trunk ie the highest revision with anumber consisting of two fields Numbers with more than two fields are needed for branchesFor example to start a branch at revision 13 invoke

ci -r131 fc

This command starts a branch numbered 1 at revision 13 and assigns the number 1311to the new revision Here is a diagram showing the new revision in relation to its branchand the trunk

11 -- 12 -- 13 -- 14 -- 15

|

[131] -- 1311

For more information about branches See Section 12 [Concepts] page 1

Chapter 2 Usage 7

2 Usage

This chapter describes how to invoke RCS commands including common command-lineelements as well options specific to each command

21 Common elements

All RCS commands accept --help and --version See Section ldquoCommand-Line Interfacesrdquoin The GNU Coding Standards

Aside from --help and --version RCS commands take the form lsquo-letter[arg]rsquo iea hyphen followed by a single letter optionally followed by extra information The squarebraces mean that the extra information is optional (No square braces means that the extrainformation is required) In any case when specified the extra information must abut theletter there can be no intervening whitespace

co -u 14 foo wrong space between -u and 14

co -u14 foo ok

Furthermore options must appear before file names (if any) on the command line

ident foo -q wrong option after file nameident -q foo ok

Lastly pairs of RCS and working files can be specified in three ways (a) both are given (b)only the working file is given (c) only the RCS file is given For (a) both RCS and workingfiles may have arbitrary directory components RCS commands pair them up intelligentlyFor (b) RCS commands will look first into the directory RCS if it exists to find theassociated RCS file

211 Revision options

As to be expected in a revision control system many options are of the form lsquo-flag[rev]rsquowhere flag is a single letter (eg lsquorrsquo) If ommitted rev defaults to the latest revision onthe default branch A revision can be specified in many ways

brn Straightforward dot-notation where br specifies the branch

n Like brn using the default branch

br Like brn using the a command-specific computation of n given the currenttip i For ci (see Section 22 [ci] page 11) n would be i + 1 while for othercommands n would be simply i

name This is the symbolic name of a revision as assigned previously by a ci -n orci -N command

$ The command computes the effective revision by examining the values of key-word expansions in the working file

For commands that accept a range of revisions the syntax is generally rev1rev2 ie tworevisions (specified as described above) separated by a colon

Chapter 2 Usage 8

212 Date option

Some commands accept an option of the form lsquo-ddatersquo to specify a date an absolute pointin time (to second resolution) expressed in a date format These also accept lsquo-zzonersquo tospecify the timezone The special value lsquoLTrsquo stands for the local time zone RCS recognizesmany date formats and time zones For example the following dates are equivalent if localtime is January 11 1990 8pm Pacific Standard Time eight hours west of CoordinatedUniversal Time (UTC)

800 pm lt

400 AM Jan 12 1990 default is UTC

1990-01-12 040000+00 ISO 8601 (UTC)

1990-01-11 200000-08 ISO 8601 (local time)

19900112 040000 traditional RCS format

Thu Jan 11 200000 1990 LT output of ctime(3) + LT

Thu Jan 11 200000 PST 1990 output of date(1)

Fri Jan 12 040000 GMT 1990

Thu 11 Jan 1990 200000 -0800 Internet RFC 822

12-January-1990 0400 WET

Most fields in the date and time can be defaulted The default time zone is normally UTCbut this can be overridden by the -z option The other defaults are determined in the orderyear month day hour minute and second (most to least significant) At least one of thesefields must be provided For omitted fields that are of higher significance than the highestprovided field the time zonersquos current values are assumed For all other omitted fields thelowest possible values are assumed For example without -z the date lsquo20 1030rsquo defaultsto lsquo103000 UTCrsquo of the 20th of the UTC time zonersquos current month and year Note thatfor the shell the datetime must be quoted if it contains spaces

RCS also accepts some other formats which specify only the date portion (omitting thetime portion)

YYYY-DDD DDD is the day of year 1-366

YYYY-wWW-D

WW is the ISO week number 0-53 (actually ISO week numbers are 1-53 week0 is a GNU RCS extension) and D is the ISO day number 1-7 (Monday throughSunday)

213 Description option

Some commands accept an option of the form lsquo-t-textrsquo or lsquo-tfile-namersquo This optionis to set or update the RCS file description text In the first form text is used directlyexcluding the leading hyphen (lsquo-rsquo) that distinguishes the two forms In the second formthe description text is taken from the contents of file-name

214 Substitution mode option

Some commands accept an option of the form -ksubst used to control how keywords (seeSection 12 [Concepts] page 1) are expanded in the working file In the following table ofsubst values the example keyword is lsquoRevisionrsquo and its value is lsquo513rsquo

kv Generate lsquo$Revision 513 $rsquo (dollar-sign keyword colon space value spacedollar-sign) A lockerrsquos name is inserted in the value of the Header Id and

Chapter 2 Usage 9

Locker keyword strings only as a file is being locked ie by ci -l and co -lThis is the default substitution mode

kvl Like -kkv except that a lockerrsquos name is always inserted if the given revisionis currently locked

k Generate lsquo$Revision$rsquo (dollar-sign keyword dollar-sign) This is useful whencomparing different revisions of a file Log messages are inserted after Log key-words even if -kk is specified since this tends to be more useful when mergingchanges

o Like -kkv but use the old value present in the working file just before it waschecked in This can be useful for file formats that cannot tolerate any changesto substrings that happen to take the form of keyword strings

b Like -ko but do all file io in binary mode This makes little difference onPOSIX and Unix hosts but on DOS-like hosts one should use rcs -i -kb toinitialize an RCS file intended to be used for binary files Also on all hostsrcsmerge normally refuses to merge files when -kb is in effect

v Generate lsquo513rsquo (value only) Further keyword substitution cannot be per-formed once the keyword names are removed so this should be used with careBecause of this danger of losing keywords -kv cannot be combined with -land the owner write permission of the working file is turned off to edit the filelater check it out again without -kv

215 Log message option

Both ci and rcs allow a log message to be specified with the -m option If themsg argumentto this option is empty RCS uses the default lsquo empty log message rsquo This particularmessage is handled specially (ie filtered out) by rlog

216 Misc common options

Other common options are -I -q -s -T -V -w -x

-I This option enables interactive mode More precisely it forces interactive modewhereby RCS commands believe that their standard input is a terminal nor-mally a precondition for displaying a prompt to receive input (such as a log mes-sage on checkin) The intention of -I is for scripting situations where standardinput is actually not a terminal but you know beforehand (without prompting)that input is needed and you are ready to provide it on standard input anyway

-q This option enables quiet mode Commands work silently (unless there is anerror condition) and suppress warnings and prompts

-sstate Specify the state to be state

-T This option controls how commands timestamp the RCS file Normally RCScommands set the RCS filersquos timestamp when modifying it in the ldquonaturalrdquo way(without taking any particular care) With -T on the other hand the com-mands either preserve the timestamp (for standalone lockunlock operations)or use the timestamp of the working file (for ci)

Chapter 2 Usage 10

This can be useful if the RCS file is found in a makefile targetrsquos list of pre-requisites (see Section ldquoRule Syntaxrdquo in The GNU Make Manual) that is ifsome target should be rebuilt if the RCS file is newer than it In that case youcan do lsquorcs -u -Trsquo for example to unlock a revision in the RCS file withouttriggering a recompilation

-V Behave like --version ie display command version information and exitsuccessfully NB This option is obsolete and its support will be removed insome future release

-Vn n specifies the RCS (major) version to emulate Valid values for n are 3 4 5Version 5 is the current version so -V5 does nothing special

In versions prior to 5 RCS outputs lsquotrsquo (tab U+09) between the lsquorsquo (colon) andthe value (for keyword substitution) instead of space uses the RCS file commentstring to prefix each line in the Log expansion instead of computing it on thefly from the input text writesreads localtime instead of UTC and displaysslightly different output for rlog

For version 4 the Header expansion unconditionally includes Locker lockeras if the kvl substitution mode were specified (see Section 214 [Substitutionmode option] page 8)

For version 3 the Header expansion omits the directories from the filename andsays only Locked instead of the state

-wlogin Some commands accept an option of the form lsquo-wloginrsquo to specify the loginname of the author of a revision ie ldquowhordquo is responsible

-xsuff Specify suff as the slash-separated list of file name suffixes used to recognizean RCS file The default value is lsquovrsquo that is first try with lsquovrsquo then try withan empty suffix

This basename search occurs within (ie starting from the beginning) the largerdirectory search loop which comprises two candidates dRCS and d where dis the directory component of the working file name For example given theworking file ac in the current directory RCS tries in order these candidates

RCSacv

RCSac

acv

ac

Note that the last candidate is impossible (and is in fact discarded) becausethe working and RCS files cannot have the same name

217 Environment

Various environment variables influence how RCS works

[Environment Variable]RCSINITAnother way to set common options is with the lsquoRCSINITrsquo environment variable Thisis a space-separated list of options Use lsquorsquo (backslash) to escape significant spaceFor example

Chapter 2 Usage 11

Set the value make it available to subsequent commandsRCSINIT=-q -xv -zLT

export RCSINIT

Use it (implicitly)rlog -L foo

This example in Bourne shell syntax arranges for RCS commands to operate as ifeach command-line had prepended lsquo-q -xv -zLTrsquo to the rest of the command-lineThe effective command-line that rlog sees is thus lsquo-q -xv -zLT -L foorsquo

[Environment Variable]RCS_MEM_LIMITNormally for speed commands either memory map or copy into memory the RCS fileif its size is less than thememory limit currently defaulting to ldquounlimitedrdquo Otherwise(or if the initially-tried speedy ways fail) the commands fall back to using standardio routines

You can adjust the memory limit by setting the lsquoRCS_MEM_LIMITrsquo environment variableto a numeric value (measured in kilobytes) An empty value is silently ignored

As a side effect specifying the memory limit inhibits fall-back to slower routines(This env var is mostly intended for testing RCS normally you can leave it unsetProbably it will be removed in a future release)

[Environment Variable]TMPDIR[Environment Variable]TMP[Environment Variable]TEMP

Commands sometimes create temporary files normally in a system-dependent direc-tory such as tmp You can override this directory by specifying another one asthe value of one of the environment variables TMPDIR TMP or TEMP (checked in thatorder)

[Environment Variable]LOGNAME[Environment Variable]USER

Absent -wlogin or when login is omitted (see Section 216 [Misc common options]page 9) commands check environment variables LOGNAME and USER (in that order)If neither of these are set RCS queries the host for and uses your login

22 Invoking ci

rcs ci [options] file

(or ldquocirdquo instead of ldquorcs cirdquo)

The ci command adds a revision to the RCS file reflecting the current state of the workingfile This operation is also known as ldquocheckinrdquo

-f[rev] Force new entry even if no content changed

-I[rev]

-q[rev] See Section 216 [Misc common options] page 9

-i[rev] Initial checkin error if the RCS file already exists

-j[rev] Just checkin donrsquot initialize error if the RCS file does not exist

Chapter 2 Usage 12

-k[rev] Compute revision from working file keywords

-r Release lock and delete working file

-rrev Do normal checkin

-l[rev] Like -r but immediately checkout locked (co -l) afterwards

-u[rev] Like -l but checkout unlocked (co -u)

-M[rev] Reset working file mtime (relevant for -l -u)

Multiple flags in -fiIjklMqru may be given except for -r -l -u which are mutuallyexclusive For a fully specified revision of the form brn nmust be greater than any existingon br or br must be new If rev is omitted compute it from the last lock (co -l) perhapsstarting a new branch If there is no lock use defbr(L+1) See Section 211 [Revisionoptions] page 7

-d[date]

-zzone See Section 212 [Date option] page 8 If no date specified use the workingfile modification time

-m[msg] Use msg as the log message See Section 215 [Log message option] page 9

-nname

-Nname Assign symbolic name to the entry For -n name must be new (no previousassignment) For -N overwrite any previous assignment

-sstate See Section 216 [Misc common options] page 9 Set the state

-t-text

-tfile-name

See Section 213 [Description option] page 8

-T Set the RCS filersquos modification time to the new revisionrsquos time if the former pre-cedes the latter and there is a new revision preserve the RCS filersquos modificationtime otherwise

-wwho Use who as the author

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

23 Invoking co

rcs co [options] file

(or ldquocordquo instead of ldquorcs cordquo)

The co command retrieves a revision from the RCS file writing a new working file Thisoperation is also known as ldquocheckoutrdquo

-f[rev] Force overwrite of working file

-I[rev]

-q[rev] See Section 216 [Misc common options] page 9

-p[rev] Write to stdout instead of the working file

Chapter 2 Usage 13

-r[rev] Normal checkout

-l[rev] Like -r but also lock

-u[rev] Like -l but unlock

-M[rev] Reset working file mtime (relevant for -l -u)

Multiple flags in -fIlMpqru may be given except for -r -l -u which are mutuallyexclusive See Section 211 [Revision options] page 7

-ksubst See Section 214 [Substitution mode option] page 8

-ddate

-zzone See Section 212 [Date option] page 8 Select latest before or on date

-jjoins Merge using joins a list of revrev pairs NB This option is obsolete (seeSection 29 [rcsmerge] page 17)

-sstate See Section 216 [Misc common options] page 9 Select matching state

-S Enable self-same mode In this mode the owner of a lock is unimportantjust that it exists Effectively this prevents you from checking out the samerevision twice

$ whoami

ttn

$ co -l -f z

RCSzv --gt z

revision 11 (locked)

done

$ co -S -l -f z

RCSzv --gt z

co RCSzv Revision 11 is already locked by ttn

-T Preserve the modification time on the RCS file even if it changes because a lockis added or removed

-wwho Select matching login who

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

24 Invoking ident

ident [options] [file ]

If no file is specified scan standard input The ident command scans its input for keywords(see Section 12 [Concepts] page 1) displaying to standard output what it finds

-q Normally if no patterns are found for a file ident emits a warning This optionsuppresses the warning

Chapter 2 Usage 14

-V Note that -Vn is not a valid option for ident in contrast to most other RCScommands (see Section 216 [Misc common options] page 9)

In addition to the normal keyword pattern for Subversion 12 (and later) compatibility1ident also recognizes patterns having one of the forms

$keyword text $

two colons and space after keyword

space before ending $

$keyword text$

two colons and space after keyword

hash before ending $

25 Invoking merge

merge [options] receiving-sibling parent other-sibling

The merge command combines the differences between a the parent and the other siblingand the differences between the parent and the receiving sibling It writes the result to thereceiving sibling

-A

-E

-e Use diff3 -A -E (default) or -e respectively

-p Write to stdout instead of overwriting receiving-sibling

-q See Section 216 [Misc common options] page 9 Suppress conflict warnings

-Llabel (up to three times) Specify the conflict labels for receiving-sibling parent andother-sibling respectively

-V Note that -Vn is not a valid option for merge in contrast to most other RCScommands (see Section 216 [Misc common options] page 9)

26 Invoking rcs

The rcs command is unique in the set of RCS programs in that it has two usages themodern (for RCS 590 and later) and the legacy

261 modern

rcs [options] command [command-arg ]

This rcs usage dispatches to command passing along command-arg without interpreta-tion

--commands

Display a list of available commands including a one-line description and exitsuccessfully

1 The fixed-length keyword syntax is described in detail in Version Control with Subversion chapterldquoAdvanced Topicsrdquo section ldquoKeyword Substitutionrdquo

Chapter 2 Usage 15

--aliases

Display a list of command aliases and exit successfully

--help command

Display help for a particular command and exit successfully For example todisplay help for the legacy interface use

--help frob

262 legacy

rcs frob [options] file

(or ldquorcsrdquo instead of ldquorcs frobrdquo)

This rcs usage performs various administrative operations on the RCS file depending onthe options given

-i Create and initialize a new RCS file

-L Set strict locking

-U Set non-strict locking

-M Donrsquot send mail when breaking someone elsersquos lock

-T Preserve the modification time on the RCS file unless a revision is removed

-I

-q See Section 216 [Misc common options] page 9

-alogins Append logins (comma-separated list of usernames) to access-list

-e[logins]

Erase logins (comma-separated list of usernames) from access-list If logins isomitted clear the access-list

-Afile-name

Append access-list of file-name to current access-list

-b[rev] Set default branch to that of rev or highest branch on trunk if rev is omitted

-l[rev] Lock a revision

-u[rev] Unlock a revision

-cstring Set comment leader to string NB Donrsquot use obsolete

-ksubst See Section 214 [Substitution mode option] page 8

-mrev[msg]

Replace log message with msg See Section 215 [Log message option] page 9

-nname[[rev]]

If rev is omitted delete symbolic name Otherwise associate name with rev name must be new

-Nname[[rev]]

Like -n but overwrite any previous assignment

-orange Delete (also known as ldquooutdaterdquo) revisions in range

Chapter 2 Usage 16

rev single revision

br latest revision on branch br

rev1rev2

rev1 to rev2 on same branch inclusive

rev beginning of branch to rev

rev rev to end of branch

-sstate[rev]

See Section 216 [Misc common options] page 9 Set state

-t-text

-tfile-name

See Section 213 [Description option] page 8 Replace description

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

These options have no effect and are included solely for consistency with other comamnds(see Section 217 [Environment] page 10) -zzone

27 Invoking rcsclean

rcs clean [options] [file ]

(or ldquorcscleanrdquo instead of ldquorcs cleanrdquo)

The rcsclean command removes working files that are not being worked on If given -u italso unlocks and removes working files that are being worked on but have not changed Ifno file is specified operate on all the working files in the current directory

-r[rev] Specify revision

-u[rev] Unlock if is locked and no differences found

-n[rev] Dry run (no act donrsquot operate)

-q[rev] See Section 216 [Misc common options] page 9

-ksubst See Section 214 [Substitution mode option] page 8

-T Preserve the modification time on the RCS file even it changes because a lockis removed

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

-zzone See Section 212 [Date option] page 8

Chapter 2 Usage 17

28 Invoking rcsdiff

rcs diff [options] file

(or ldquorcsdiffrdquo instead of ldquorcs diffrdquo)

The rcsdiff command runs diff to compare two revisions in an RCS file See Section ldquoIn-voking diffrdquo in The GNU Diffutils Manaual

-rrev (zero one or two times) Name a revision If given two revisions (lsquo-rrev1-rrev2rsquo) compare those revisions If given only one revision (lsquo-rrevrsquo) comparethe working file with it If given no revisions compare the working file with thelatest revision on the default branch

-ksubst See Section 214 [Substitution mode option] page 8

-q See Section 216 [Misc common options] page 9

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

-zzone See Section 212 [Date option] page 8

These options have no effect and are included solely for consistency with other comamnds(see Section 217 [Environment] page 10) -T

Additionally the following options (and their argument if any) are passed to the underlyingdiff command

-0 -1 -2 -3 -4 -5 -6 -7 -8 -9 -B -C -D -F -H -I

-L -U -W -a -b -c -d -e -f -h -i -n -p -t -u -w -y

long options (that start with --)

(Not all of these options are meaningful)

29 Invoking rcsmerge

rcs merge [options] file

(or ldquorcsmergerdquo instead of ldquorcs mergerdquo)

The rcsmerge command incorporates the changes between two revisions of an RCS file intothe corresponding working file

-A

-E

-e Passed to the diff3 command The default if none are specified is -E With -esuppress warnings on conflict The -A style generates the most verbose outputSee Section ldquoInvoking diff3rdquo in The GNU Diffutils Manual

-p[rev] Write to stdout instead of overwriting the working file

-q[rev] See Section 216 [Misc common options] page 9

-rrev (one or two times) specify a revision

One or two revisions must be specified (using -p -q -r) If only one is specified the secondrevision defaults to the latest revision on the default branch

Chapter 2 Usage 18

-ksubst See Section 214 [Substitution mode option] page 8

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

-zzone See Section 212 [Date option] page 8

These options have no effect and are included solely for consistency with other comamnds(see Section 217 [Environment] page 10) -T

210 Invoking rlog

rcs log [options] file

(or ldquorlogrdquo instead of ldquorcs logrdquo)

The rlog command displays information about RCS files

-L Ignore RCS files with no locks set

-R Print only the name of the RCS file

-h Print only the ldquoheaderrdquo information

-t Like -h but also include the description

-N Omit symbolic names

-b Select the default branch

-ddates See Section 212 [Date option] page 8 Select revisions based on timestampin the range dates with spec

d single revision d or earlier

d1ltd2

d2gtd1 between d1 and d2 exclusive

ltd

dgt before d

gtd

dlt after d

Instead of lsquoltrsquo or lsquogtrsquo you can use lsquolt=rsquo or lsquogt=rsquo respectively to specify inclusiveranges dates may also be a list of semicolon-separated specs

-l[who] Select revisions locked by who (comma-separated list of usernames) only or byanyone if who is omitted

-r[revs] Select revisions in revs a comma-separated list of range specs one of revrev rev rev1rev2

-sstates See Section 216 [Misc common options] page 9 states can also be a comma-separated list of states Select revisions with specified state(s)

-w[who] Select revisions checked in by who (comma-separated list of usernames) or bythe user if who is omitted

Chapter 2 Usage 19

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

-zzone See Section 212 [Date option] page 8

These options have no effect and are included solely for consistency with other comamnds(see Section 217 [Environment] page 10) lsquo-qrsquo lsquo-Trsquo

Chapter 3 Hacking 20

3 Hacking

This chapter in contrast to the previous (see Chapter 2 [Usage] page 7) is introspective Itdescribes an important aspect of RCS interop with other programs and development ideasand methods

31 File format

An RCS filersquos contents are described by the grammar below1 Overall the format is freendashformat text In most environments RCS uses the ISO 88591 encoding visible graphiccharacters are (octal) codes 041ndash176 and 240ndash377 and whitespace characters are codes010ndash015 and 040TODO Discuss or point to encoding compatibility issues

311 File format grammar

The meta syntax in this section uses the following conventions lsquo|rsquo (U+7C) separates al-ternatives lsquorsquo (U+7B) and lsquorsquo (U+7D) enclose optional phrases lsquorsquo and lsquorsquo (trailing U+2A)enclose phrases that can be repeated zero or more times lsquorsquo and lsquo+rsquo (trailing U+2B) enclosephrases that must appear at least once and can be repeated terminal symbols are in lsquorsquo(two U+22)

rcstext = admin delta desc deltatext

admin = head num

branch num

access id

symbols sym num

locks id num

strict

integrity intstring

comment string

expand string

delta = num

date num

author id

state id

branches num

next num

commitid sym

desc = desc string

deltatext = num

log string

text string

1 This section is adapted from the lsquorcsfile(5)rsquo manpage written by Walter F Tichy

Chapter 3 Hacking 21

num = digit | +

digit = 0 through 9

id = idchar | +

sym = idchar+

idchar = any visible graphic character except special

special = $ | | | | |

string = any character with doubled

word = id | num | string |

intchar = any character except

thirdp = ^L intchar

intstring = intchar thirdp

312 Additional particulars of the file format

bull In releases prior to 58 (2011-08-30) the grammar included the production

newphrase = id word

and used it in the admin delta and deltatext productions This allowed third-partyprograms to interoperate with RCS by storing opaque (to RCS) data in the file

As of 58 in the name of progress (towards more systematic file integrity support) theonly area reserved for third-party interop is in the (string) value of the integrity fieldspecifically after the first formfeed (U+0C) A further restriction (for all programs) isthat the integrity value must not contain lsquorsquo

bull Whitespace has no significance except in strings However whitespace cannot appearwithin an id num or sym and an RCS file must end with newline (U+0A) Strings areenclosed by lsquorsquo (U+40) If a string contains a lsquorsquo it must be doubled otherwise stringscan contain arbitrary binary data

bull Identifiers are case sensitive Keywords are in lower case only The sets of keywordsand identifiers can overlap

bull Dates which appear after the date keyword are of the form Ymmddhhmmss whereY is the year mm the month (01ndash12) dd the day (01ndash31) hh the hour (00ndash23) mm theminute (00ndash59) and ss the second (00ndash60) Y contains just the last two digits of theyear for years from 1900 through 1999 and all the digits of years thereafter Dates usethe Gregorian calendar times use UTC

bull The delta nodes form a tree All nodes whose numbers consist of a single pair (eg 2321 13) are on the trunk and are linked through the next field in order of decreasing

Chapter 3 Hacking 22

numbers The head field in the admin node points to the head of that sequence (iecontains the highest pair) The branch node in the admin node indicates the defaultbranch (or revision) for most RCS operations If empty the default branch is thehighest branch on the trunk

All delta nodes whose numbers consist of 2n fields (n ge 2) (eg 3111 2122) arelinked as follows All nodes whose first 2nminus1 number fields are identical are linkedthrough the next field in order of increasing numbers For each such sequence thedelta node whose number is identical to the first 2nminus2 number fields of the delta

nodes on that sequence is called the branchpoint The branches field of a node containsa list of the numbers of the first nodes of all sequences for which it is a branchpointThis list is ordered in increasing numbers See Figure 31

Chapter 3 Hacking 23

Head

|

|

v

---------

| |

| 21 |

| |

1213 1311 | | 1222 122111

--------- --------- --------- --------- -------------

^ ^ | ^ ^

| | | | |

| | v | |

| --------- |

| 13 |

--------- -----------

1211 131 1221 12211

--------- ---------

^ | ^

| | |

| v |

| --------- |

| 12 |

---------------------- ---------

121 122

|

|

v

---------

11

Figure 31 The organization of an example RCS file

32 Still missing

RCS is still missing some features The following is an unordered list of ldquoto-do musingsrdquo keptby the RCS maintainers If you would like to hack on an item See Section 33 [Reportingbugs] page 25

bull Add an option to rcsmerge so that it can use an arbitrary program to do the 3-waymerge instead of the default merge Likewise for rcsdiff and diff It should be possibleto pass arbitrary options to these programs and to the subsidiary co invocations

bull Add format options for finer control over the output of ident and rlog Eg thereshould be an easy way for rlog to output lines like lsquosrcmainc 24 wftrsquo one for

Chapter 3 Hacking 24

each locked revision rlog options should have three orthogonal types selecting filesselecting revisions and selecting rlog format

bull Add format options for finer control over the output of keyword strings Eg thereshould be some way to prepend lsquo()rsquo and there should be some way to change lsquo$rsquo tosome other character to disable further substitution These options should make theresulting files uneditable like lsquo-kvrsquo

bull Add long options eg --keyword-substitution Unfortunately RCSrsquos option syntaxis incompatible with getopt Perhaps the best way is to overload rcs eg lsquorcs diff

--keyword-substitution=old filersquo instead of lsquorcsdiff -ko filersquo

bull rlog -rMN should work even if M and N have different numbers of fields so long asM is an ancestor of N or vice versa

bull rcs should evaluate options in order this allows rcs -oS -nS

bull Be able to redo your most recent checkin with minor changes

bull co -u shouldnrsquot complain about a lsquo+wrsquo working file if contents donrsquot change

bull Add a lsquo-rsquo option to take the list of file names from standard input Perhaps the filenames should be null-terminated not newline-terminated so that those that containnewlines are handled properly

bull Permit multiple optionndashfilename pairs eg co -r14 a -r15 b

bull Add an option to break a symbolic link to an RCS file instead of breaking the hardlink that it points to

bull Add ways to specify the earliest revision the most recent revision the earliest or latestrevision on a particular branch and the parent or child of some other revision

bull If a user has multiple locks perhaps ci should fall back on the method of ci -k to figureout which revision to use

bull Add an option to rcsclean to clean directories recursively

bull Write an rcsck program that repairs corrupted RCS files much as fsck repairs corruptedfile systems For example it should remove stale lock files

bull Update the date parser to use the more modern getdatey by Bellovin Salz andBerets or the even more modern getdate by Moraes None of these getdate imple-mentations are as robust as RCSrsquos old warhorse in avoiding problems like arithmeticoverflow so theyrsquoll have to be fixed first (Perhaps we can use gnulib module getdate)

bull Break up the code into a library so that itrsquos easier to write new programs that manip-ulate RCS files and so that useless code is removed from the existing programs Forexample the rcs command contains unnecessary keyword substitution baggage andthe merge command can be greatly pruned

bull Make it easier to use your favorite text editor to edit log messages etc instead ofhaving to type them in irretrievably at the terminal

bull Let the user specify a search path for default branches eg to use L as the defaultbranch if it works and M otherwise Let the user require that at least one entry inthe search path works Let the user say that later entries in the search path are readonly ie one cannot check in changes to them This should be an option settable bylsquoRCSINITrsquo

bull Add a way for a user to see which revisions affected which lines

Chapter 3 Hacking 25

bull Have rlog -nN F print just the revision number that N translates to Eg rlog -nB

F would print the highest revision on the branch B Use this to add an option -bB torcsbranch to freeze the named branch This should interact well with default branches

bull Add a co option that prints the revision number before each line as SCCSrsquos get -m

does [I implemented this for Emacs 22 as a subroutine of vc-annotate qv mdashttn]

33 Reporting bugs

To report bugs or suggest enhancements for GNU RCS please visit its homepage (httpwwwgnuorgsoftwarercs) to find directions on how to ldquofile a bug reportrdquo online orsend electronic mail to help-rcsgnuorg (If you use the web interface you donrsquot needto also send email since that is done automatically)

For bug reports please include enough information for the maintainers to reproduce theproblem Generally speaking that means

bull The RCS version command(s) and manual section(s) involved

bull Hardware and operating system names and versions

bull The contents of any input files necessary to reproduce the bug

bull The expected behavior andor output

bull A description of the problem and samples of any erroneous output

bull Options you gave to configure other than specifying installation directories

bull Anything else that you think would be helpful

When in doubt whether something is needed or not include it Itrsquos better to include toomuch than to leave out something important

Patches are welcome if possible please make them with lsquogit format-patchrsquo and includeChangeLog entries (see Section ldquoChange Logrdquo in The GNU Emacs Manual) Please followthe existing coding style

Appendix A GNU Free Documentation License 26

Appendix A GNU Free Documentation License

Version 13 3 November 2008

Copyright ccopy 2000 2001 2002 2007 2008 Free Software Foundation Inchttpfsforg

Everyone is permitted to copy and distribute verbatim copiesof this license document but changing it is not allowed

0 PREAMBLE

The purpose of this License is to make a manual textbook or other functional anduseful document free in the sense of freedom to assure everyone the effective freedomto copy and redistribute it with or without modifying it either commercially or non-commercially Secondarily this License preserves for the author and publisher a wayto get credit for their work while not being considered responsible for modificationsmade by others

This License is a kind of ldquocopyleftrdquo which means that derivative works of the documentmust themselves be free in the same sense It complements the GNU General PublicLicense which is a copyleft license designed for free software

We have designed this License in order to use it for manuals for free software becausefree software needs free documentation a free program should come with manualsproviding the same freedoms that the software does But this License is not limited tosoftware manuals it can be used for any textual work regardless of subject matter orwhether it is published as a printed book We recommend this License principally forworks whose purpose is instruction or reference

1 APPLICABILITY AND DEFINITIONS

This License applies to any manual or other work in any medium that contains anotice placed by the copyright holder saying it can be distributed under the termsof this License Such a notice grants a world-wide royalty-free license unlimited induration to use that work under the conditions stated herein The ldquoDocumentrdquobelow refers to any such manual or work Any member of the public is a licensee andis addressed as ldquoyourdquo You accept the license if you copy modify or distribute the workin a way requiring permission under copyright law

A ldquoModified Versionrdquo of the Document means any work containing the Document ora portion of it either copied verbatim or with modifications andor translated intoanother language

A ldquoSecondary Sectionrdquo is a named appendix or a front-matter section of the Documentthat deals exclusively with the relationship of the publishers or authors of the Documentto the Documentrsquos overall subject (or to related matters) and contains nothing thatcould fall directly within that overall subject (Thus if the Document is in part atextbook of mathematics a Secondary Section may not explain any mathematics) Therelationship could be a matter of historical connection with the subject or with relatedmatters or of legal commercial philosophical ethical or political position regardingthem

The ldquoInvariant Sectionsrdquo are certain Secondary Sections whose titles are designated asbeing those of Invariant Sections in the notice that says that the Document is released

Appendix A GNU Free Documentation License 27

under this License If a section does not fit the above definition of Secondary then it isnot allowed to be designated as Invariant The Document may contain zero InvariantSections If the Document does not identify any Invariant Sections then there are none

The ldquoCover Textsrdquo are certain short passages of text that are listed as Front-CoverTexts or Back-Cover Texts in the notice that says that the Document is released underthis License A Front-Cover Text may be at most 5 words and a Back-Cover Text maybe at most 25 words

A ldquoTransparentrdquo copy of the Document means a machine-readable copy representedin a format whose specification is available to the general public that is suitable forrevising the document straightforwardly with generic text editors or (for images com-posed of pixels) generic paint programs or (for drawings) some widely available drawingeditor and that is suitable for input to text formatters or for automatic translation toa variety of formats suitable for input to text formatters A copy made in an otherwiseTransparent file format whose markup or absence of markup has been arranged tothwart or discourage subsequent modification by readers is not Transparent An imageformat is not Transparent if used for any substantial amount of text A copy that isnot ldquoTransparentrdquo is called ldquoOpaquerdquo

Examples of suitable formats for Transparent copies include plain ASCII withoutmarkup Texinfo input format LaTEX input format SGML or XML using a publiclyavailable DTD and standard-conforming simple HTML PostScript or PDF designedfor human modification Examples of transparent image formats include PNG XCFand JPG Opaque formats include proprietary formats that can be read and editedonly by proprietary word processors SGML or XML for which the DTD andor pro-cessing tools are not generally available and the machine-generated HTML PostScriptor PDF produced by some word processors for output purposes only

The ldquoTitle Pagerdquo means for a printed book the title page itself plus such followingpages as are needed to hold legibly the material this License requires to appear in thetitle page For works in formats which do not have any title page as such ldquoTitle Pagerdquomeans the text near the most prominent appearance of the workrsquos title preceding thebeginning of the body of the text

The ldquopublisherrdquo means any person or entity that distributes copies of the Documentto the public

A section ldquoEntitled XYZrdquo means a named subunit of the Document whose title eitheris precisely XYZ or contains XYZ in parentheses following text that translates XYZ inanother language (Here XYZ stands for a specific section name mentioned below suchas ldquoAcknowledgementsrdquo ldquoDedicationsrdquo ldquoEndorsementsrdquo or ldquoHistoryrdquo) To ldquoPreservethe Titlerdquo of such a section when you modify the Document means that it remains asection ldquoEntitled XYZrdquo according to this definition

The Document may include Warranty Disclaimers next to the notice which states thatthis License applies to the Document These Warranty Disclaimers are considered tobe included by reference in this License but only as regards disclaiming warrantiesany other implication that these Warranty Disclaimers may have is void and has noeffect on the meaning of this License

2 VERBATIM COPYING

Appendix A GNU Free Documentation License 28

You may copy and distribute the Document in any medium either commercially ornoncommercially provided that this License the copyright notices and the licensenotice saying this License applies to the Document are reproduced in all copies andthat you add no other conditions whatsoever to those of this License You may not usetechnical measures to obstruct or control the reading or further copying of the copiesyou make or distribute However you may accept compensation in exchange for copiesIf you distribute a large enough number of copies you must also follow the conditionsin section 3

You may also lend copies under the same conditions stated above and you may publiclydisplay copies

3 COPYING IN QUANTITY

If you publish printed copies (or copies in media that commonly have printed covers) ofthe Document numbering more than 100 and the Documentrsquos license notice requiresCover Texts you must enclose the copies in covers that carry clearly and legibly allthese Cover Texts Front-Cover Texts on the front cover and Back-Cover Texts onthe back cover Both covers must also clearly and legibly identify you as the publisherof these copies The front cover must present the full title with all words of the titleequally prominent and visible You may add other material on the covers in additionCopying with changes limited to the covers as long as they preserve the title of theDocument and satisfy these conditions can be treated as verbatim copying in otherrespects

If the required texts for either cover are too voluminous to fit legibly you should putthe first ones listed (as many as fit reasonably) on the actual cover and continue therest onto adjacent pages

If you publish or distribute Opaque copies of the Document numbering more than 100you must either include a machine-readable Transparent copy along with each Opaquecopy or state in or with each Opaque copy a computer-network location from whichthe general network-using public has access to download using public-standard networkprotocols a complete Transparent copy of the Document free of added material Ifyou use the latter option you must take reasonably prudent steps when you begindistribution of Opaque copies in quantity to ensure that this Transparent copy willremain thus accessible at the stated location until at least one year after the last timeyou distribute an Opaque copy (directly or through your agents or retailers) of thatedition to the public

It is requested but not required that you contact the authors of the Document wellbefore redistributing any large number of copies to give them a chance to provide youwith an updated version of the Document

4 MODIFICATIONS

You may copy and distribute a Modified Version of the Document under the conditionsof sections 2 and 3 above provided that you release the Modified Version under preciselythis License with the Modified Version filling the role of the Document thus licensingdistribution and modification of the Modified Version to whoever possesses a copy ofit In addition you must do these things in the Modified Version

A Use in the Title Page (and on the covers if any) a title distinct from that of theDocument and from those of previous versions (which should if there were any

Appendix A GNU Free Documentation License 29

be listed in the History section of the Document) You may use the same title asa previous version if the original publisher of that version gives permission

B List on the Title Page as authors one or more persons or entities responsible forauthorship of the modifications in the Modified Version together with at least fiveof the principal authors of the Document (all of its principal authors if it has fewerthan five) unless they release you from this requirement

C State on the Title page the name of the publisher of the Modified Version as thepublisher

D Preserve all the copyright notices of the Document

E Add an appropriate copyright notice for your modifications adjacent to the othercopyright notices

F Include immediately after the copyright notices a license notice giving the publicpermission to use the Modified Version under the terms of this License in the formshown in the Addendum below

G Preserve in that license notice the full lists of Invariant Sections and required CoverTexts given in the Documentrsquos license notice

H Include an unaltered copy of this License

I Preserve the section Entitled ldquoHistoryrdquo Preserve its Title and add to it an itemstating at least the title year new authors and publisher of the Modified Versionas given on the Title Page If there is no section Entitled ldquoHistoryrdquo in the Docu-ment create one stating the title year authors and publisher of the Documentas given on its Title Page then add an item describing the Modified Version asstated in the previous sentence

J Preserve the network location if any given in the Document for public access toa Transparent copy of the Document and likewise the network locations given inthe Document for previous versions it was based on These may be placed in theldquoHistoryrdquo section You may omit a network location for a work that was publishedat least four years before the Document itself or if the original publisher of theversion it refers to gives permission

K For any section Entitled ldquoAcknowledgementsrdquo or ldquoDedicationsrdquo Preserve the Titleof the section and preserve in the section all the substance and tone of each of thecontributor acknowledgements andor dedications given therein

L Preserve all the Invariant Sections of the Document unaltered in their text andin their titles Section numbers or the equivalent are not considered part of thesection titles

M Delete any section Entitled ldquoEndorsementsrdquo Such a section may not be includedin the Modified Version

N Do not retitle any existing section to be Entitled ldquoEndorsementsrdquo or to conflict intitle with any Invariant Section

O Preserve any Warranty Disclaimers

If the Modified Version includes new front-matter sections or appendices that qualifyas Secondary Sections and contain no material copied from the Document you may atyour option designate some or all of these sections as invariant To do this add their

Appendix A GNU Free Documentation License 30

titles to the list of Invariant Sections in the Modified Versionrsquos license notice Thesetitles must be distinct from any other section titles

You may add a section Entitled ldquoEndorsementsrdquo provided it contains nothing butendorsements of your Modified Version by various partiesmdashfor example statements ofpeer review or that the text has been approved by an organization as the authoritativedefinition of a standard

You may add a passage of up to five words as a Front-Cover Text and a passage of upto 25 words as a Back-Cover Text to the end of the list of Cover Texts in the ModifiedVersion Only one passage of Front-Cover Text and one of Back-Cover Text may beadded by (or through arrangements made by) any one entity If the Document alreadyincludes a cover text for the same cover previously added by you or by arrangementmade by the same entity you are acting on behalf of you may not add another butyou may replace the old one on explicit permission from the previous publisher thatadded the old one

The author(s) and publisher(s) of the Document do not by this License give permissionto use their names for publicity for or to assert or imply endorsement of any ModifiedVersion

5 COMBINING DOCUMENTS

You may combine the Document with other documents released under this Licenseunder the terms defined in section 4 above for modified versions provided that youinclude in the combination all of the Invariant Sections of all of the original documentsunmodified and list them all as Invariant Sections of your combined work in its licensenotice and that you preserve all their Warranty Disclaimers

The combined work need only contain one copy of this License and multiple identicalInvariant Sections may be replaced with a single copy If there are multiple InvariantSections with the same name but different contents make the title of each such sectionunique by adding at the end of it in parentheses the name of the original author orpublisher of that section if known or else a unique number Make the same adjustmentto the section titles in the list of Invariant Sections in the license notice of the combinedwork

In the combination you must combine any sections Entitled ldquoHistoryrdquo in the vari-ous original documents forming one section Entitled ldquoHistoryrdquo likewise combine anysections Entitled ldquoAcknowledgementsrdquo and any sections Entitled ldquoDedicationsrdquo Youmust delete all sections Entitled ldquoEndorsementsrdquo

6 COLLECTIONS OF DOCUMENTS

You may make a collection consisting of the Document and other documents releasedunder this License and replace the individual copies of this License in the variousdocuments with a single copy that is included in the collection provided that youfollow the rules of this License for verbatim copying of each of the documents in allother respects

You may extract a single document from such a collection and distribute it individu-ally under this License provided you insert a copy of this License into the extracteddocument and follow this License in all other respects regarding verbatim copying ofthat document

Appendix A GNU Free Documentation License 31

7 AGGREGATION WITH INDEPENDENT WORKS

A compilation of the Document or its derivatives with other separate and independentdocuments or works in or on a volume of a storage or distribution medium is calledan ldquoaggregaterdquo if the copyright resulting from the compilation is not used to limit thelegal rights of the compilationrsquos users beyond what the individual works permit Whenthe Document is included in an aggregate this License does not apply to the otherworks in the aggregate which are not themselves derivative works of the Document

If the Cover Text requirement of section 3 is applicable to these copies of the Documentthen if the Document is less than one half of the entire aggregate the Documentrsquos CoverTexts may be placed on covers that bracket the Document within the aggregate or theelectronic equivalent of covers if the Document is in electronic form Otherwise theymust appear on printed covers that bracket the whole aggregate

8 TRANSLATION

Translation is considered a kind of modification so you may distribute translationsof the Document under the terms of section 4 Replacing Invariant Sections withtranslations requires special permission from their copyright holders but you mayinclude translations of some or all Invariant Sections in addition to the original versionsof these Invariant Sections You may include a translation of this License and all thelicense notices in the Document and any Warranty Disclaimers provided that youalso include the original English version of this License and the original versions ofthose notices and disclaimers In case of a disagreement between the translation andthe original version of this License or a notice or disclaimer the original version willprevail

If a section in the Document is Entitled ldquoAcknowledgementsrdquo ldquoDedicationsrdquo or ldquoHis-toryrdquo the requirement (section 4) to Preserve its Title (section 1) will typically requirechanging the actual title

9 TERMINATION

You may not copy modify sublicense or distribute the Document except as expresslyprovided under this License Any attempt otherwise to copy modify sublicense ordistribute it is void and will automatically terminate your rights under this License

However if you cease all violation of this License then your license from a particularcopyright holder is reinstated (a) provisionally unless and until the copyright holderexplicitly and finally terminates your license and (b) permanently if the copyrightholder fails to notify you of the violation by some reasonable means prior to 60 daysafter the cessation

Moreover your license from a particular copyright holder is reinstated permanently ifthe copyright holder notifies you of the violation by some reasonable means this is thefirst time you have received notice of violation of this License (for any work) from thatcopyright holder and you cure the violation prior to 30 days after your receipt of thenotice

Termination of your rights under this section does not terminate the licenses of partieswho have received copies or rights from you under this License If your rights havebeen terminated and not permanently reinstated receipt of a copy of some or all of thesame material does not give you any rights to use it

Appendix A GNU Free Documentation License 32

10 FUTURE REVISIONS OF THIS LICENSE

The Free Software Foundation may publish new revised versions of the GNU FreeDocumentation License from time to time Such new versions will be similar in spiritto the present version but may differ in detail to address new problems or concernsSee httpwwwgnuorgcopyleft

Each version of the License is given a distinguishing version number If the Documentspecifies that a particular numbered version of this License ldquoor any later versionrdquoapplies to it you have the option of following the terms and conditions either of thatspecified version or of any later version that has been published (not as a draft) bythe Free Software Foundation If the Document does not specify a version number ofthis License you may choose any version ever published (not as a draft) by the FreeSoftware Foundation If the Document specifies that a proxy can decide which futureversions of this License can be used that proxyrsquos public statement of acceptance of aversion permanently authorizes you to choose that version for the Document

11 RELICENSING

ldquoMassive Multiauthor Collaboration Siterdquo (or ldquoMMC Siterdquo) means any World WideWeb server that publishes copyrightable works and also provides prominent facilitiesfor anybody to edit those works A public wiki that anybody can edit is an example ofsuch a server A ldquoMassive Multiauthor Collaborationrdquo (or ldquoMMCrdquo) contained in thesite means any set of copyrightable works thus published on the MMC site

ldquoCC-BY-SArdquo means the Creative Commons Attribution-Share Alike 30 license pub-lished by Creative Commons Corporation a not-for-profit corporation with a principalplace of business in San Francisco California as well as future copyleft versions of thatlicense published by that same organization

ldquoIncorporaterdquo means to publish or republish a Document in whole or in part as partof another Document

An MMC is ldquoeligible for relicensingrdquo if it is licensed under this License and if all worksthat were first published under this License somewhere other than this MMC andsubsequently incorporated in whole or in part into the MMC (1) had no cover textsor invariant sections and (2) were thus incorporated prior to November 1 2008

The operator of an MMC Site may republish an MMC contained in the site underCC-BY-SA on the same site at any time before August 1 2009 provided the MMC iseligible for relicensing

Appendix A GNU Free Documentation License 33

ADDENDUM How to use this License for your documents

To use this License in a document you have written include a copy of the License in thedocument and put the following copyright and license notices just after the title page

Copyright (C) year your name

Permission is granted to copy distribute andor modify this document

under the terms of the GNU Free Documentation License Version 13

or any later version published by the Free Software Foundation

with no Invariant Sections no Front-Cover Texts and no Back-Cover

Texts A copy of the license is included in the section entitled lsquolsquoGNU

Free Documentation Licensersquorsquo

If you have Invariant Sections Front-Cover Texts and Back-Cover Texts replace theldquowith Textsrdquo line with this

with the Invariant Sections being list their titles with

the Front-Cover Texts being list and with the Back-Cover Texts

being list

If you have Invariant Sections without Cover Texts or some other combination of thethree merge those two alternatives to suit the situation

If your document contains nontrivial examples of program code we recommend releasingthese examples in parallel under your choice of free software license such as the GNUGeneral Public License to permit their use in free software

Index 34

Index

Aaccess control policy 3Author 3author specifying 10

Bbehavior prior to version 5 10behavior version 3 10behavior version 4 10binary-old-keyword-value substitution mode 9branch growth 7branch number 2branch tip 2branch default 3bug reporting 25

Ccase sensitivity file format 21checkin 3checklist for bug reports 25checkout 3checkout implicit 5ci invocation 11co invocation 12comma-v file format 1command help 7command version 7command-line option to specify a revision 7credits 1

DDate 3date formats 8date specifying 8dates file format 21default branch 3default branch setting 15deleting revisions 15description of working file 2description text specifying 8

Eempty log message 9emulation previous RCS versions 10encoding file format 20environment variables 10

Ffeatures still missing 23

file names on the command-line 7format RCSfile 20

Ggrammar file format 20

HHeader 3history 1

IId 3ident invocation 13implicit checkout circumstance 5implicit checkout locked 12implicit checkout unlocked 12instantiating a working file 2interaction model 1interactive mode 9invocation ci 11invocation co 12invocation ident 13invocation merge 14invocation rcs 14 15invocation rcsclean 16invocation rcsdiff 17invocation rcsmerge 17invocation rlog 18

Kkeyword-only substitution mode 9keyword-value substitution mode 8keyword-value-locker substitution mode 9keywords table of 3

Llayout of nodes file format 21license 1Locker 3locking a revision 15locking on implicit checkout 12locking non-strict 5locking set non-strict 15locking set strict 15locking strict 5locks in RCS file 3Log 3log message empty 9LOGNAME 11

Index 35

Mmemory limit 11merge invocation 14model interaction 1

NName 4names symbolic 3node layout file format 21non-strict locking 5number branch 2number revision 2

Oold-keyword-value substitution mode 9order of options and file names 7outdating revisions 15overview 1

Ppairing RCS and working files 7patches contributing 25problems 25projects related 1

Qquiet mode 9

Rrange of revisions specifying 7RCS file 2rcs invocation 14 15RCS version emulation 10RCS_MEM_LIMIT 11rcsclean invocation 16rcsdiff invocation 17RCSfile 4RCSfile format 20RCSINIT 10rcsmerge invocation 17removing revisions 15reporting bugs 25Revision 4revision number 2revision range specifying 7

revision specifying 7revisions tree of 3rlog invocation 18

SSource 4specifying a date 8specifying a range of revisions 7specifying a revision 7specifying a state 9specifying a suffix list 10specifying a timedate 8specifying author 10specifying description text 8specifying substitution mode 8State 4state specifying 9strict locking 5substitution mode default 8substitution mode specifying 8suffix list specifying 10symbolic names 3

TTEMP 11third-party interop file format 21Tichy Walter F 1time zone 8timedate specifying 8tip 2tip increment 7TMP 11TMPDIR 11tree of revisions 3

Uunlocking a revision 15USER 11

Vvalue-only substitution mode 9

Wwhitespace file format 21working file description 2working file instantiation 2

  • Overview
    • Credits
    • Concepts
      • Interaction model
      • Working file
      • RCS file
      • Fundamental operations
      • Keywords
        • Quick tour
          • Usage
            • Common elements
              • Revision options
              • Date option
              • Description option
              • Substitution mode option
              • Log message option
              • Misc common options
              • Environment
                • Invoking ci
                • Invoking co
                • Invoking ident
                • Invoking merge
                • Invoking rcs
                  • modern
                  • legacy
                    • Invoking rcsclean
                    • Invoking rcsdiff
                    • Invoking rcsmerge
                    • Invoking rlog
                      • Hacking
                        • File format
                          • File format grammar
                          • Additional particulars of the file format
                            • Still missing
                            • Reporting bugs
                              • GNU Free Documentation License
                              • Index
Page 2: GNU RCS · The RCS file is also known (colloquially) as the “comma-v file”, due to its name often ending in ,v (e.g., a.c,v). A revision number is a branch number followed by

This manual is for GNU RCS (version 594 18 January 2015)

Copyright ccopy 2010ndash2015 Thien-Thi Nguyen

Permission is granted to copy distribute andor modify this document underthe terms of the GNU Free Documentation License Version 13 or any laterversion published by the Free Software Foundation with no Invariant Sectionswith no Front-Cover Texts and with no Back-Cover Texts A copy of the licenseis included in the appendix entitled ldquoGNU Free Documentation Licenserdquo

i

Table of Contents

1 Overview 111 Credits 112 Concepts 1

121 Interaction model 1122 Working file 2123 RCS file 2124 Fundamental operations 3125 Keywords 3

13 Quick tour 4

2 Usage 721 Common elements 7

211 Revision options 7212 Date option 8213 Description option 8214 Substitution mode option 8215 Log message option 9216 Misc common options 9217 Environment 10

22 Invoking ci 1123 Invoking co 1224 Invoking ident 1325 Invoking merge 1426 Invoking rcs 14

261 modern 14262 legacy 15

27 Invoking rcsclean 1628 Invoking rcsdiff 1729 Invoking rcsmerge 17210 Invoking rlog 18

3 Hacking 2031 File format 20

311 File format grammar 20312 Additional particulars of the file format 21

32 Still missing 2333 Reporting bugs 25

Appendix A GNU Free Documentation License 26

Index 34

Chapter 1 Overview 1

1 Overview

GNU RCS (Revision Control System) manages multiple revisions of files RCS can storeretrieve log identify and merge revisions It is useful for files that are revised frequentlyeg programs documentation graphics and papers It can handle text as well as binaryfiles although functionality is reduced for the latter

A normal installation includes the commands ci co ident merge rcs rcsclean rcsdiffrcsmerge and rlog (see Chapter 2 [Usage] page 7) These are small and fast programs(amenable to scripting) and indeed the distribution also includes the script rcsfreeze showingsome of the possibilities

RCS works with versions stored on a single filesystem or machine edited by one person ata time Other version control systems such as Bazaar (httpwwwgnuorgsoftwarebazaar) CVS Subversion and Git support distributed access in various ways Which ismore appropriate depends on the task at hand

11 Credits

RCS was designed and built by Walter F Tichy of Purdue University RCS version 3 wasreleased in 1983

Adam Hammer Thomas Narten and Daniel Trinkle of Purdue supported RCS throughversion 43 released in 1990 Guy Harris of Sun contributed many porting fixes PaulEggert of System Development Corporation contributed bug fixes and tuneups Jay Lepreaucontributed 43BSD support

Paul Eggert of Twin Sun wrote the changes for RCS versions 55 and 56 (1991) RichBraun of Kronos and Andy Glew of Intel contributed ideas for new options Bill Hahn ofStratus contributed ideas for setuid support Ideas for piece tables came from Joe Berkovitzof Stratus and Walter F Tichy Matt Cross of Stratus contributed test case ideas AdamHammer of Purdue QAed

Paul Eggert wrote most of the changes for RCS 57 K Richard Pixley of Cygnus Supportcontributed several bug fixes Robert Lupton of Princeton and Daniel Trinkle contributedideas for lsquo$Namersquo expansion Brendan Kehoe of Cygnus Support suggested rlogrsquos -N optionPaul D Smith of Data General suggested improvements in option and error processingAdam Hammer of Purdue QAed

Thien-Thi Nguyen is responsibile for RCS 58 He modernized the code base build sys-tem and manual pages fixing some bugs on the way He added standard --help --versionprocessing and wrote the documentation you are reading (gladly taking inspiration fromthe paper1 and manpages originally written by Walter F Tichy)

12 Concepts

121 Interaction model

The interaction model is straightforward For each working file you initialize its RCS fileonce then enter a cycle of checkout modification and checkin operations Along the way

1 Source (troff) and several output formats are available from the RCS homepage (httpwwwgnuorgsoftwarercs)

Chapter 1 Overview 2

you can tweak some of the RCS filersquos metadata as well All of this is done through RCScommands you need not modify the RCS file directly (and in fact you should probablyavoid doing so lest RCS become confused) This model is somewhat analogous to using alibrary (of books) With a library you sign up for a library card (initialize) then enter acycle of taking a book home (checkout) enjoying it (NB without modification one hopes)and returning it to the library (checkin)

Furthermore you can compare revisions in the RCS file against each other examine theuser- (hopefully high) quality descriptions of the changes each revision embodies mergeselected revisions and so forth

122 Working file

RCS commands operate on one pair of files at a time The working file is what you normallyview and edit (eg a file of C programming language source code named ac) Because theworking filersquos contents can be extracted from the RCS file (called instantiating a workingfile) it can be safely deleted to regain some disk space

123 RCS file

The RCS file is a separate file conventionally placed in the subdirectory RCS wherein RCScommands organize the initial and subsequent revisions of the working file associatingwith each revision a unique revision number along with the remembered particulars of thecheckin that produced it It also contains a description of the working file and various othermetadata described below

The RCS file is also known (colloquially) as the ldquocomma-v filerdquo due to its name oftenending in v (eg acv)

A revision number is a branch number followed by a dot followed by an integer and abranch number is an odd number of integers separated by dot A revision number with onedot (implying a branch number without any dots) is said to be on the trunk All integersare positive For example

11 -- revision number for initial checkin (typically)

branch number 1

94142 -- more complicated (perhaps after much gnarly hacking)

branch number 941

333333333 -- not a valid revision number

however a perfectly valid branch number

The branch point of a non-trunk branch is the revision number formed by removing thebranchrsquos trailing integer To compute the next higher branch or revision number add oneto the trailing integer The highest-numbered revision on a branch is called the tip of thebranch (or branch tip) Continuing the example

11 -- on trunk no branch point

next higher branch number 2

next higher revision number 12

94142 -- not on trunk branch point 94

Chapter 1 Overview 3

next higher branch number 942

next higher revision number 94143

333333333 -- not on trunk branch point 333333

next higher branch number 333333334

next higher revision number 3333333331

In addition to this ldquotreerdquo of thus-linked revisions the RCS file keeps track of the defaultbranch ie the branch whose tip corresponds to the most recent checkin as well as thesymbolic names a list of associations between a user-supplied (and presumably meaningful)symbol and an underlying branch or revision number

The RCS file contains two pieces of information used to implement its access controlpolicy The first is a list of usernames If non-empty only those users listed can modifythe RCS file (via RCS commands) The second is a list of locks ie association betweena username and a revision number If a lock usernamerevno exists that means onlyusername may modify revno (that is do a checkin operation to deposit the next higherrevision or a higher revision number on the same branch as revno)

124 Fundamental operations

The checkin operation records the contents of the working file in the RCS file assigning ita new (normally the next higher) revision number and recording the username timestampstate (a short symbol) and user-supplied log message (a textual description of the changesleading to that revision) It uses diff to find the differences between the tip of the defaultbranch and the working file thereby writing the minimal amount of information needed tobe able to recreate the contents of the previous tip

The checkout operation identifies a specific revision from the RCS file and either dis-plays the content to standard output or instantiates a working file overwriting any currentinstantiation with the selected revision In either case the content may undergo keywordexpansion which replaces text of the form lsquo$Keyword$rsquo with (possibly) different text com-prising the keyword and its value depending on the current keyword expansion mode (seeSection 214 [Substitution mode option] page 8)

125 Keywords

The keywords and their values are

Author The login name of the user who checked in the revision

Date The date and time the revision was checked in May include an appendedtimezone offset

Header A standard header containing the absolute RCS filename the revision numberthe date and time the author the state and the locker (if locked) May includean appended timezone offset

Id Same as lsquoHeaderrsquo except that only the basename appears (no directory com-ponents)

Locker The login name of the user who locked the revision (empty if not locked)

Chapter 1 Overview 4

Log The log message supplied during checkin preceded by a header containing theRCS filename the revision number the author and the date and time Mayinclude an appended timezone offset

Existing log messages are not replaced Instead the new log message is insertedafter lsquo$Log$rsquo This is useful for accumulating a complete change log in asource file

Each inserted line is prefixed by the string that prefixes the lsquo$Log$rsquo line Forexample if the lsquo$Log$rsquo line is

$Log tancc $

then RCS prefixes each line of the log with lsquo rsquo (slash slash space) This isuseful for languages with comments that go to the end of the line

The convention for other languages is to use a lsquo rsquo (space asterisk space)prefix inside a multiline comment For example the initial log comment of a Cprogram conventionally is of the following form

$Log$

For backwards compatibility with older versions of RCS if the log prefix is lsquorsquoor lsquo(rsquo surrounded by optional white space inserted log lines contain a spaceinstead of lsquorsquo or lsquo(rsquo however this usage is obsolescent and should not be reliedon

Name The symbolic name used to check out the revision if any For example lsquoco-rJoersquo generates lsquo$Name Joe $rsquo Plain co generates just lsquo$Name $rsquo

RCSfile The basename of the RCS file

Revision The revision number assigned to the revision

Source The absolute RCS filename

State The state assigned to the revision with the -s option of rcs or ci

13 Quick tour

This section complements the preceding section (see Section 12 [Concepts] page 1) pre-senting a handful of RCS commands in quick succession For details on individual RCScommands See Chapter 2 [Usage] page 7

Suppose you have a file fc that you wish to put under control of RCS If you have notalready done so make an RCS directory with the command

mkdir RCS

Then invoke the checkin command

ci fc

This command creates an RCS file in directory RCS stores fc into it as revision 11 anddeletes fc It also asks you for a description The description should be a synopsis of thecontents of the file All later checkin commands will ask you for a log entry which shouldsummarize the changes that you made

To get back the working file fc in the previous example use the checkout command

Chapter 1 Overview 5

co fc

This command extracts the latest revision from the RCS file and writes it into fc If youwant to edit fc you must lock it as you check it out with the command

co -l fc

You can now edit fc Suppose after some editing you want to know what changes thatyou have made The command

rcsdiff fc

tells you the difference between the most recently checked-in version and the working fileYou can check the file back in by invoking

ci fc

This increments the revision number properly If ci complains with the message

ci error no lock set by your name

then you have tried to check in a file even though you did not lock it when you checked itout Of course it is too late now to do the checkout with locking because another checkoutwould overwrite your modifications Instead invoke

rcs -l fc

This command will lock the latest revision for you unless somebody else got ahead of youalready In this case yoursquoll have to negotiate with that person

Locking assures that you and only you can check in the next update and avoids nastyproblems if several people work on the same file Even if a revision is locked it can still bechecked out for reading compiling etc All that locking prevents is a checkin by anybodybut the locker

If your RCS file is private ie if you are the only person who is going to deposit revisionsinto it strict locking is not needed and you can turn it off If strict locking is turned offthe owner of the RCS file need not have a lock for checkin all others still do Turning strictlocking off and on is done with the commands

rcs -U fc disable strict lockingrcs -L fc enable strict locking

If you donrsquot want to clutter your working directory with RCS files create a subdirectorycalled RCS in your working directory and move all your RCS files there RCS commandswill look first into that directory to find needed files All the commands discussed abovewill still work without any modification See Section 21 [Common elements] page 7

To avoid the deletion of the working file during checkin (in case you want to continueediting or compiling) invoke one of

ci -l fc checkin + locked checkoutci -u fc checkin + unlocked checkout

These commands check in fc as usual then perform an implicit checkout The first formalso locks the checked in revision the second one doesnrsquot Thus these options save you onecheckout operation The first form is useful if you want to continue editing the second oneif you just want to read the file Both update the keyword substitutions in your workingfile see Section 12 [Concepts] page 1

You can give ci the number you want assigned to a checked-in revision Assume all yourrevisions were numbered 11 12 13 etc and you would like to start release 2 Either ofthe commands

Chapter 1 Overview 6

ci -r2 fc

ci -r21 fc

assigns the number 21 to the new revision From then on ci will number the subsequentrevisions with 22 23 etc The corresponding co commands

co -r2 fc

co -r21 fc

retrieve the latest revision numbered 2x and the revision 21 respectively co withouta revision number selects the latest revision on the trunk ie the highest revision with anumber consisting of two fields Numbers with more than two fields are needed for branchesFor example to start a branch at revision 13 invoke

ci -r131 fc

This command starts a branch numbered 1 at revision 13 and assigns the number 1311to the new revision Here is a diagram showing the new revision in relation to its branchand the trunk

11 -- 12 -- 13 -- 14 -- 15

|

[131] -- 1311

For more information about branches See Section 12 [Concepts] page 1

Chapter 2 Usage 7

2 Usage

This chapter describes how to invoke RCS commands including common command-lineelements as well options specific to each command

21 Common elements

All RCS commands accept --help and --version See Section ldquoCommand-Line Interfacesrdquoin The GNU Coding Standards

Aside from --help and --version RCS commands take the form lsquo-letter[arg]rsquo iea hyphen followed by a single letter optionally followed by extra information The squarebraces mean that the extra information is optional (No square braces means that the extrainformation is required) In any case when specified the extra information must abut theletter there can be no intervening whitespace

co -u 14 foo wrong space between -u and 14

co -u14 foo ok

Furthermore options must appear before file names (if any) on the command line

ident foo -q wrong option after file nameident -q foo ok

Lastly pairs of RCS and working files can be specified in three ways (a) both are given (b)only the working file is given (c) only the RCS file is given For (a) both RCS and workingfiles may have arbitrary directory components RCS commands pair them up intelligentlyFor (b) RCS commands will look first into the directory RCS if it exists to find theassociated RCS file

211 Revision options

As to be expected in a revision control system many options are of the form lsquo-flag[rev]rsquowhere flag is a single letter (eg lsquorrsquo) If ommitted rev defaults to the latest revision onthe default branch A revision can be specified in many ways

brn Straightforward dot-notation where br specifies the branch

n Like brn using the default branch

br Like brn using the a command-specific computation of n given the currenttip i For ci (see Section 22 [ci] page 11) n would be i + 1 while for othercommands n would be simply i

name This is the symbolic name of a revision as assigned previously by a ci -n orci -N command

$ The command computes the effective revision by examining the values of key-word expansions in the working file

For commands that accept a range of revisions the syntax is generally rev1rev2 ie tworevisions (specified as described above) separated by a colon

Chapter 2 Usage 8

212 Date option

Some commands accept an option of the form lsquo-ddatersquo to specify a date an absolute pointin time (to second resolution) expressed in a date format These also accept lsquo-zzonersquo tospecify the timezone The special value lsquoLTrsquo stands for the local time zone RCS recognizesmany date formats and time zones For example the following dates are equivalent if localtime is January 11 1990 8pm Pacific Standard Time eight hours west of CoordinatedUniversal Time (UTC)

800 pm lt

400 AM Jan 12 1990 default is UTC

1990-01-12 040000+00 ISO 8601 (UTC)

1990-01-11 200000-08 ISO 8601 (local time)

19900112 040000 traditional RCS format

Thu Jan 11 200000 1990 LT output of ctime(3) + LT

Thu Jan 11 200000 PST 1990 output of date(1)

Fri Jan 12 040000 GMT 1990

Thu 11 Jan 1990 200000 -0800 Internet RFC 822

12-January-1990 0400 WET

Most fields in the date and time can be defaulted The default time zone is normally UTCbut this can be overridden by the -z option The other defaults are determined in the orderyear month day hour minute and second (most to least significant) At least one of thesefields must be provided For omitted fields that are of higher significance than the highestprovided field the time zonersquos current values are assumed For all other omitted fields thelowest possible values are assumed For example without -z the date lsquo20 1030rsquo defaultsto lsquo103000 UTCrsquo of the 20th of the UTC time zonersquos current month and year Note thatfor the shell the datetime must be quoted if it contains spaces

RCS also accepts some other formats which specify only the date portion (omitting thetime portion)

YYYY-DDD DDD is the day of year 1-366

YYYY-wWW-D

WW is the ISO week number 0-53 (actually ISO week numbers are 1-53 week0 is a GNU RCS extension) and D is the ISO day number 1-7 (Monday throughSunday)

213 Description option

Some commands accept an option of the form lsquo-t-textrsquo or lsquo-tfile-namersquo This optionis to set or update the RCS file description text In the first form text is used directlyexcluding the leading hyphen (lsquo-rsquo) that distinguishes the two forms In the second formthe description text is taken from the contents of file-name

214 Substitution mode option

Some commands accept an option of the form -ksubst used to control how keywords (seeSection 12 [Concepts] page 1) are expanded in the working file In the following table ofsubst values the example keyword is lsquoRevisionrsquo and its value is lsquo513rsquo

kv Generate lsquo$Revision 513 $rsquo (dollar-sign keyword colon space value spacedollar-sign) A lockerrsquos name is inserted in the value of the Header Id and

Chapter 2 Usage 9

Locker keyword strings only as a file is being locked ie by ci -l and co -lThis is the default substitution mode

kvl Like -kkv except that a lockerrsquos name is always inserted if the given revisionis currently locked

k Generate lsquo$Revision$rsquo (dollar-sign keyword dollar-sign) This is useful whencomparing different revisions of a file Log messages are inserted after Log key-words even if -kk is specified since this tends to be more useful when mergingchanges

o Like -kkv but use the old value present in the working file just before it waschecked in This can be useful for file formats that cannot tolerate any changesto substrings that happen to take the form of keyword strings

b Like -ko but do all file io in binary mode This makes little difference onPOSIX and Unix hosts but on DOS-like hosts one should use rcs -i -kb toinitialize an RCS file intended to be used for binary files Also on all hostsrcsmerge normally refuses to merge files when -kb is in effect

v Generate lsquo513rsquo (value only) Further keyword substitution cannot be per-formed once the keyword names are removed so this should be used with careBecause of this danger of losing keywords -kv cannot be combined with -land the owner write permission of the working file is turned off to edit the filelater check it out again without -kv

215 Log message option

Both ci and rcs allow a log message to be specified with the -m option If themsg argumentto this option is empty RCS uses the default lsquo empty log message rsquo This particularmessage is handled specially (ie filtered out) by rlog

216 Misc common options

Other common options are -I -q -s -T -V -w -x

-I This option enables interactive mode More precisely it forces interactive modewhereby RCS commands believe that their standard input is a terminal nor-mally a precondition for displaying a prompt to receive input (such as a log mes-sage on checkin) The intention of -I is for scripting situations where standardinput is actually not a terminal but you know beforehand (without prompting)that input is needed and you are ready to provide it on standard input anyway

-q This option enables quiet mode Commands work silently (unless there is anerror condition) and suppress warnings and prompts

-sstate Specify the state to be state

-T This option controls how commands timestamp the RCS file Normally RCScommands set the RCS filersquos timestamp when modifying it in the ldquonaturalrdquo way(without taking any particular care) With -T on the other hand the com-mands either preserve the timestamp (for standalone lockunlock operations)or use the timestamp of the working file (for ci)

Chapter 2 Usage 10

This can be useful if the RCS file is found in a makefile targetrsquos list of pre-requisites (see Section ldquoRule Syntaxrdquo in The GNU Make Manual) that is ifsome target should be rebuilt if the RCS file is newer than it In that case youcan do lsquorcs -u -Trsquo for example to unlock a revision in the RCS file withouttriggering a recompilation

-V Behave like --version ie display command version information and exitsuccessfully NB This option is obsolete and its support will be removed insome future release

-Vn n specifies the RCS (major) version to emulate Valid values for n are 3 4 5Version 5 is the current version so -V5 does nothing special

In versions prior to 5 RCS outputs lsquotrsquo (tab U+09) between the lsquorsquo (colon) andthe value (for keyword substitution) instead of space uses the RCS file commentstring to prefix each line in the Log expansion instead of computing it on thefly from the input text writesreads localtime instead of UTC and displaysslightly different output for rlog

For version 4 the Header expansion unconditionally includes Locker lockeras if the kvl substitution mode were specified (see Section 214 [Substitutionmode option] page 8)

For version 3 the Header expansion omits the directories from the filename andsays only Locked instead of the state

-wlogin Some commands accept an option of the form lsquo-wloginrsquo to specify the loginname of the author of a revision ie ldquowhordquo is responsible

-xsuff Specify suff as the slash-separated list of file name suffixes used to recognizean RCS file The default value is lsquovrsquo that is first try with lsquovrsquo then try withan empty suffix

This basename search occurs within (ie starting from the beginning) the largerdirectory search loop which comprises two candidates dRCS and d where dis the directory component of the working file name For example given theworking file ac in the current directory RCS tries in order these candidates

RCSacv

RCSac

acv

ac

Note that the last candidate is impossible (and is in fact discarded) becausethe working and RCS files cannot have the same name

217 Environment

Various environment variables influence how RCS works

[Environment Variable]RCSINITAnother way to set common options is with the lsquoRCSINITrsquo environment variable Thisis a space-separated list of options Use lsquorsquo (backslash) to escape significant spaceFor example

Chapter 2 Usage 11

Set the value make it available to subsequent commandsRCSINIT=-q -xv -zLT

export RCSINIT

Use it (implicitly)rlog -L foo

This example in Bourne shell syntax arranges for RCS commands to operate as ifeach command-line had prepended lsquo-q -xv -zLTrsquo to the rest of the command-lineThe effective command-line that rlog sees is thus lsquo-q -xv -zLT -L foorsquo

[Environment Variable]RCS_MEM_LIMITNormally for speed commands either memory map or copy into memory the RCS fileif its size is less than thememory limit currently defaulting to ldquounlimitedrdquo Otherwise(or if the initially-tried speedy ways fail) the commands fall back to using standardio routines

You can adjust the memory limit by setting the lsquoRCS_MEM_LIMITrsquo environment variableto a numeric value (measured in kilobytes) An empty value is silently ignored

As a side effect specifying the memory limit inhibits fall-back to slower routines(This env var is mostly intended for testing RCS normally you can leave it unsetProbably it will be removed in a future release)

[Environment Variable]TMPDIR[Environment Variable]TMP[Environment Variable]TEMP

Commands sometimes create temporary files normally in a system-dependent direc-tory such as tmp You can override this directory by specifying another one asthe value of one of the environment variables TMPDIR TMP or TEMP (checked in thatorder)

[Environment Variable]LOGNAME[Environment Variable]USER

Absent -wlogin or when login is omitted (see Section 216 [Misc common options]page 9) commands check environment variables LOGNAME and USER (in that order)If neither of these are set RCS queries the host for and uses your login

22 Invoking ci

rcs ci [options] file

(or ldquocirdquo instead of ldquorcs cirdquo)

The ci command adds a revision to the RCS file reflecting the current state of the workingfile This operation is also known as ldquocheckinrdquo

-f[rev] Force new entry even if no content changed

-I[rev]

-q[rev] See Section 216 [Misc common options] page 9

-i[rev] Initial checkin error if the RCS file already exists

-j[rev] Just checkin donrsquot initialize error if the RCS file does not exist

Chapter 2 Usage 12

-k[rev] Compute revision from working file keywords

-r Release lock and delete working file

-rrev Do normal checkin

-l[rev] Like -r but immediately checkout locked (co -l) afterwards

-u[rev] Like -l but checkout unlocked (co -u)

-M[rev] Reset working file mtime (relevant for -l -u)

Multiple flags in -fiIjklMqru may be given except for -r -l -u which are mutuallyexclusive For a fully specified revision of the form brn nmust be greater than any existingon br or br must be new If rev is omitted compute it from the last lock (co -l) perhapsstarting a new branch If there is no lock use defbr(L+1) See Section 211 [Revisionoptions] page 7

-d[date]

-zzone See Section 212 [Date option] page 8 If no date specified use the workingfile modification time

-m[msg] Use msg as the log message See Section 215 [Log message option] page 9

-nname

-Nname Assign symbolic name to the entry For -n name must be new (no previousassignment) For -N overwrite any previous assignment

-sstate See Section 216 [Misc common options] page 9 Set the state

-t-text

-tfile-name

See Section 213 [Description option] page 8

-T Set the RCS filersquos modification time to the new revisionrsquos time if the former pre-cedes the latter and there is a new revision preserve the RCS filersquos modificationtime otherwise

-wwho Use who as the author

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

23 Invoking co

rcs co [options] file

(or ldquocordquo instead of ldquorcs cordquo)

The co command retrieves a revision from the RCS file writing a new working file Thisoperation is also known as ldquocheckoutrdquo

-f[rev] Force overwrite of working file

-I[rev]

-q[rev] See Section 216 [Misc common options] page 9

-p[rev] Write to stdout instead of the working file

Chapter 2 Usage 13

-r[rev] Normal checkout

-l[rev] Like -r but also lock

-u[rev] Like -l but unlock

-M[rev] Reset working file mtime (relevant for -l -u)

Multiple flags in -fIlMpqru may be given except for -r -l -u which are mutuallyexclusive See Section 211 [Revision options] page 7

-ksubst See Section 214 [Substitution mode option] page 8

-ddate

-zzone See Section 212 [Date option] page 8 Select latest before or on date

-jjoins Merge using joins a list of revrev pairs NB This option is obsolete (seeSection 29 [rcsmerge] page 17)

-sstate See Section 216 [Misc common options] page 9 Select matching state

-S Enable self-same mode In this mode the owner of a lock is unimportantjust that it exists Effectively this prevents you from checking out the samerevision twice

$ whoami

ttn

$ co -l -f z

RCSzv --gt z

revision 11 (locked)

done

$ co -S -l -f z

RCSzv --gt z

co RCSzv Revision 11 is already locked by ttn

-T Preserve the modification time on the RCS file even if it changes because a lockis added or removed

-wwho Select matching login who

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

24 Invoking ident

ident [options] [file ]

If no file is specified scan standard input The ident command scans its input for keywords(see Section 12 [Concepts] page 1) displaying to standard output what it finds

-q Normally if no patterns are found for a file ident emits a warning This optionsuppresses the warning

Chapter 2 Usage 14

-V Note that -Vn is not a valid option for ident in contrast to most other RCScommands (see Section 216 [Misc common options] page 9)

In addition to the normal keyword pattern for Subversion 12 (and later) compatibility1ident also recognizes patterns having one of the forms

$keyword text $

two colons and space after keyword

space before ending $

$keyword text$

two colons and space after keyword

hash before ending $

25 Invoking merge

merge [options] receiving-sibling parent other-sibling

The merge command combines the differences between a the parent and the other siblingand the differences between the parent and the receiving sibling It writes the result to thereceiving sibling

-A

-E

-e Use diff3 -A -E (default) or -e respectively

-p Write to stdout instead of overwriting receiving-sibling

-q See Section 216 [Misc common options] page 9 Suppress conflict warnings

-Llabel (up to three times) Specify the conflict labels for receiving-sibling parent andother-sibling respectively

-V Note that -Vn is not a valid option for merge in contrast to most other RCScommands (see Section 216 [Misc common options] page 9)

26 Invoking rcs

The rcs command is unique in the set of RCS programs in that it has two usages themodern (for RCS 590 and later) and the legacy

261 modern

rcs [options] command [command-arg ]

This rcs usage dispatches to command passing along command-arg without interpreta-tion

--commands

Display a list of available commands including a one-line description and exitsuccessfully

1 The fixed-length keyword syntax is described in detail in Version Control with Subversion chapterldquoAdvanced Topicsrdquo section ldquoKeyword Substitutionrdquo

Chapter 2 Usage 15

--aliases

Display a list of command aliases and exit successfully

--help command

Display help for a particular command and exit successfully For example todisplay help for the legacy interface use

--help frob

262 legacy

rcs frob [options] file

(or ldquorcsrdquo instead of ldquorcs frobrdquo)

This rcs usage performs various administrative operations on the RCS file depending onthe options given

-i Create and initialize a new RCS file

-L Set strict locking

-U Set non-strict locking

-M Donrsquot send mail when breaking someone elsersquos lock

-T Preserve the modification time on the RCS file unless a revision is removed

-I

-q See Section 216 [Misc common options] page 9

-alogins Append logins (comma-separated list of usernames) to access-list

-e[logins]

Erase logins (comma-separated list of usernames) from access-list If logins isomitted clear the access-list

-Afile-name

Append access-list of file-name to current access-list

-b[rev] Set default branch to that of rev or highest branch on trunk if rev is omitted

-l[rev] Lock a revision

-u[rev] Unlock a revision

-cstring Set comment leader to string NB Donrsquot use obsolete

-ksubst See Section 214 [Substitution mode option] page 8

-mrev[msg]

Replace log message with msg See Section 215 [Log message option] page 9

-nname[[rev]]

If rev is omitted delete symbolic name Otherwise associate name with rev name must be new

-Nname[[rev]]

Like -n but overwrite any previous assignment

-orange Delete (also known as ldquooutdaterdquo) revisions in range

Chapter 2 Usage 16

rev single revision

br latest revision on branch br

rev1rev2

rev1 to rev2 on same branch inclusive

rev beginning of branch to rev

rev rev to end of branch

-sstate[rev]

See Section 216 [Misc common options] page 9 Set state

-t-text

-tfile-name

See Section 213 [Description option] page 8 Replace description

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

These options have no effect and are included solely for consistency with other comamnds(see Section 217 [Environment] page 10) -zzone

27 Invoking rcsclean

rcs clean [options] [file ]

(or ldquorcscleanrdquo instead of ldquorcs cleanrdquo)

The rcsclean command removes working files that are not being worked on If given -u italso unlocks and removes working files that are being worked on but have not changed Ifno file is specified operate on all the working files in the current directory

-r[rev] Specify revision

-u[rev] Unlock if is locked and no differences found

-n[rev] Dry run (no act donrsquot operate)

-q[rev] See Section 216 [Misc common options] page 9

-ksubst See Section 214 [Substitution mode option] page 8

-T Preserve the modification time on the RCS file even it changes because a lockis removed

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

-zzone See Section 212 [Date option] page 8

Chapter 2 Usage 17

28 Invoking rcsdiff

rcs diff [options] file

(or ldquorcsdiffrdquo instead of ldquorcs diffrdquo)

The rcsdiff command runs diff to compare two revisions in an RCS file See Section ldquoIn-voking diffrdquo in The GNU Diffutils Manaual

-rrev (zero one or two times) Name a revision If given two revisions (lsquo-rrev1-rrev2rsquo) compare those revisions If given only one revision (lsquo-rrevrsquo) comparethe working file with it If given no revisions compare the working file with thelatest revision on the default branch

-ksubst See Section 214 [Substitution mode option] page 8

-q See Section 216 [Misc common options] page 9

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

-zzone See Section 212 [Date option] page 8

These options have no effect and are included solely for consistency with other comamnds(see Section 217 [Environment] page 10) -T

Additionally the following options (and their argument if any) are passed to the underlyingdiff command

-0 -1 -2 -3 -4 -5 -6 -7 -8 -9 -B -C -D -F -H -I

-L -U -W -a -b -c -d -e -f -h -i -n -p -t -u -w -y

long options (that start with --)

(Not all of these options are meaningful)

29 Invoking rcsmerge

rcs merge [options] file

(or ldquorcsmergerdquo instead of ldquorcs mergerdquo)

The rcsmerge command incorporates the changes between two revisions of an RCS file intothe corresponding working file

-A

-E

-e Passed to the diff3 command The default if none are specified is -E With -esuppress warnings on conflict The -A style generates the most verbose outputSee Section ldquoInvoking diff3rdquo in The GNU Diffutils Manual

-p[rev] Write to stdout instead of overwriting the working file

-q[rev] See Section 216 [Misc common options] page 9

-rrev (one or two times) specify a revision

One or two revisions must be specified (using -p -q -r) If only one is specified the secondrevision defaults to the latest revision on the default branch

Chapter 2 Usage 18

-ksubst See Section 214 [Substitution mode option] page 8

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

-zzone See Section 212 [Date option] page 8

These options have no effect and are included solely for consistency with other comamnds(see Section 217 [Environment] page 10) -T

210 Invoking rlog

rcs log [options] file

(or ldquorlogrdquo instead of ldquorcs logrdquo)

The rlog command displays information about RCS files

-L Ignore RCS files with no locks set

-R Print only the name of the RCS file

-h Print only the ldquoheaderrdquo information

-t Like -h but also include the description

-N Omit symbolic names

-b Select the default branch

-ddates See Section 212 [Date option] page 8 Select revisions based on timestampin the range dates with spec

d single revision d or earlier

d1ltd2

d2gtd1 between d1 and d2 exclusive

ltd

dgt before d

gtd

dlt after d

Instead of lsquoltrsquo or lsquogtrsquo you can use lsquolt=rsquo or lsquogt=rsquo respectively to specify inclusiveranges dates may also be a list of semicolon-separated specs

-l[who] Select revisions locked by who (comma-separated list of usernames) only or byanyone if who is omitted

-r[revs] Select revisions in revs a comma-separated list of range specs one of revrev rev rev1rev2

-sstates See Section 216 [Misc common options] page 9 states can also be a comma-separated list of states Select revisions with specified state(s)

-w[who] Select revisions checked in by who (comma-separated list of usernames) or bythe user if who is omitted

Chapter 2 Usage 19

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

-zzone See Section 212 [Date option] page 8

These options have no effect and are included solely for consistency with other comamnds(see Section 217 [Environment] page 10) lsquo-qrsquo lsquo-Trsquo

Chapter 3 Hacking 20

3 Hacking

This chapter in contrast to the previous (see Chapter 2 [Usage] page 7) is introspective Itdescribes an important aspect of RCS interop with other programs and development ideasand methods

31 File format

An RCS filersquos contents are described by the grammar below1 Overall the format is freendashformat text In most environments RCS uses the ISO 88591 encoding visible graphiccharacters are (octal) codes 041ndash176 and 240ndash377 and whitespace characters are codes010ndash015 and 040TODO Discuss or point to encoding compatibility issues

311 File format grammar

The meta syntax in this section uses the following conventions lsquo|rsquo (U+7C) separates al-ternatives lsquorsquo (U+7B) and lsquorsquo (U+7D) enclose optional phrases lsquorsquo and lsquorsquo (trailing U+2A)enclose phrases that can be repeated zero or more times lsquorsquo and lsquo+rsquo (trailing U+2B) enclosephrases that must appear at least once and can be repeated terminal symbols are in lsquorsquo(two U+22)

rcstext = admin delta desc deltatext

admin = head num

branch num

access id

symbols sym num

locks id num

strict

integrity intstring

comment string

expand string

delta = num

date num

author id

state id

branches num

next num

commitid sym

desc = desc string

deltatext = num

log string

text string

1 This section is adapted from the lsquorcsfile(5)rsquo manpage written by Walter F Tichy

Chapter 3 Hacking 21

num = digit | +

digit = 0 through 9

id = idchar | +

sym = idchar+

idchar = any visible graphic character except special

special = $ | | | | |

string = any character with doubled

word = id | num | string |

intchar = any character except

thirdp = ^L intchar

intstring = intchar thirdp

312 Additional particulars of the file format

bull In releases prior to 58 (2011-08-30) the grammar included the production

newphrase = id word

and used it in the admin delta and deltatext productions This allowed third-partyprograms to interoperate with RCS by storing opaque (to RCS) data in the file

As of 58 in the name of progress (towards more systematic file integrity support) theonly area reserved for third-party interop is in the (string) value of the integrity fieldspecifically after the first formfeed (U+0C) A further restriction (for all programs) isthat the integrity value must not contain lsquorsquo

bull Whitespace has no significance except in strings However whitespace cannot appearwithin an id num or sym and an RCS file must end with newline (U+0A) Strings areenclosed by lsquorsquo (U+40) If a string contains a lsquorsquo it must be doubled otherwise stringscan contain arbitrary binary data

bull Identifiers are case sensitive Keywords are in lower case only The sets of keywordsand identifiers can overlap

bull Dates which appear after the date keyword are of the form Ymmddhhmmss whereY is the year mm the month (01ndash12) dd the day (01ndash31) hh the hour (00ndash23) mm theminute (00ndash59) and ss the second (00ndash60) Y contains just the last two digits of theyear for years from 1900 through 1999 and all the digits of years thereafter Dates usethe Gregorian calendar times use UTC

bull The delta nodes form a tree All nodes whose numbers consist of a single pair (eg 2321 13) are on the trunk and are linked through the next field in order of decreasing

Chapter 3 Hacking 22

numbers The head field in the admin node points to the head of that sequence (iecontains the highest pair) The branch node in the admin node indicates the defaultbranch (or revision) for most RCS operations If empty the default branch is thehighest branch on the trunk

All delta nodes whose numbers consist of 2n fields (n ge 2) (eg 3111 2122) arelinked as follows All nodes whose first 2nminus1 number fields are identical are linkedthrough the next field in order of increasing numbers For each such sequence thedelta node whose number is identical to the first 2nminus2 number fields of the delta

nodes on that sequence is called the branchpoint The branches field of a node containsa list of the numbers of the first nodes of all sequences for which it is a branchpointThis list is ordered in increasing numbers See Figure 31

Chapter 3 Hacking 23

Head

|

|

v

---------

| |

| 21 |

| |

1213 1311 | | 1222 122111

--------- --------- --------- --------- -------------

^ ^ | ^ ^

| | | | |

| | v | |

| --------- |

| 13 |

--------- -----------

1211 131 1221 12211

--------- ---------

^ | ^

| | |

| v |

| --------- |

| 12 |

---------------------- ---------

121 122

|

|

v

---------

11

Figure 31 The organization of an example RCS file

32 Still missing

RCS is still missing some features The following is an unordered list of ldquoto-do musingsrdquo keptby the RCS maintainers If you would like to hack on an item See Section 33 [Reportingbugs] page 25

bull Add an option to rcsmerge so that it can use an arbitrary program to do the 3-waymerge instead of the default merge Likewise for rcsdiff and diff It should be possibleto pass arbitrary options to these programs and to the subsidiary co invocations

bull Add format options for finer control over the output of ident and rlog Eg thereshould be an easy way for rlog to output lines like lsquosrcmainc 24 wftrsquo one for

Chapter 3 Hacking 24

each locked revision rlog options should have three orthogonal types selecting filesselecting revisions and selecting rlog format

bull Add format options for finer control over the output of keyword strings Eg thereshould be some way to prepend lsquo()rsquo and there should be some way to change lsquo$rsquo tosome other character to disable further substitution These options should make theresulting files uneditable like lsquo-kvrsquo

bull Add long options eg --keyword-substitution Unfortunately RCSrsquos option syntaxis incompatible with getopt Perhaps the best way is to overload rcs eg lsquorcs diff

--keyword-substitution=old filersquo instead of lsquorcsdiff -ko filersquo

bull rlog -rMN should work even if M and N have different numbers of fields so long asM is an ancestor of N or vice versa

bull rcs should evaluate options in order this allows rcs -oS -nS

bull Be able to redo your most recent checkin with minor changes

bull co -u shouldnrsquot complain about a lsquo+wrsquo working file if contents donrsquot change

bull Add a lsquo-rsquo option to take the list of file names from standard input Perhaps the filenames should be null-terminated not newline-terminated so that those that containnewlines are handled properly

bull Permit multiple optionndashfilename pairs eg co -r14 a -r15 b

bull Add an option to break a symbolic link to an RCS file instead of breaking the hardlink that it points to

bull Add ways to specify the earliest revision the most recent revision the earliest or latestrevision on a particular branch and the parent or child of some other revision

bull If a user has multiple locks perhaps ci should fall back on the method of ci -k to figureout which revision to use

bull Add an option to rcsclean to clean directories recursively

bull Write an rcsck program that repairs corrupted RCS files much as fsck repairs corruptedfile systems For example it should remove stale lock files

bull Update the date parser to use the more modern getdatey by Bellovin Salz andBerets or the even more modern getdate by Moraes None of these getdate imple-mentations are as robust as RCSrsquos old warhorse in avoiding problems like arithmeticoverflow so theyrsquoll have to be fixed first (Perhaps we can use gnulib module getdate)

bull Break up the code into a library so that itrsquos easier to write new programs that manip-ulate RCS files and so that useless code is removed from the existing programs Forexample the rcs command contains unnecessary keyword substitution baggage andthe merge command can be greatly pruned

bull Make it easier to use your favorite text editor to edit log messages etc instead ofhaving to type them in irretrievably at the terminal

bull Let the user specify a search path for default branches eg to use L as the defaultbranch if it works and M otherwise Let the user require that at least one entry inthe search path works Let the user say that later entries in the search path are readonly ie one cannot check in changes to them This should be an option settable bylsquoRCSINITrsquo

bull Add a way for a user to see which revisions affected which lines

Chapter 3 Hacking 25

bull Have rlog -nN F print just the revision number that N translates to Eg rlog -nB

F would print the highest revision on the branch B Use this to add an option -bB torcsbranch to freeze the named branch This should interact well with default branches

bull Add a co option that prints the revision number before each line as SCCSrsquos get -m

does [I implemented this for Emacs 22 as a subroutine of vc-annotate qv mdashttn]

33 Reporting bugs

To report bugs or suggest enhancements for GNU RCS please visit its homepage (httpwwwgnuorgsoftwarercs) to find directions on how to ldquofile a bug reportrdquo online orsend electronic mail to help-rcsgnuorg (If you use the web interface you donrsquot needto also send email since that is done automatically)

For bug reports please include enough information for the maintainers to reproduce theproblem Generally speaking that means

bull The RCS version command(s) and manual section(s) involved

bull Hardware and operating system names and versions

bull The contents of any input files necessary to reproduce the bug

bull The expected behavior andor output

bull A description of the problem and samples of any erroneous output

bull Options you gave to configure other than specifying installation directories

bull Anything else that you think would be helpful

When in doubt whether something is needed or not include it Itrsquos better to include toomuch than to leave out something important

Patches are welcome if possible please make them with lsquogit format-patchrsquo and includeChangeLog entries (see Section ldquoChange Logrdquo in The GNU Emacs Manual) Please followthe existing coding style

Appendix A GNU Free Documentation License 26

Appendix A GNU Free Documentation License

Version 13 3 November 2008

Copyright ccopy 2000 2001 2002 2007 2008 Free Software Foundation Inchttpfsforg

Everyone is permitted to copy and distribute verbatim copiesof this license document but changing it is not allowed

0 PREAMBLE

The purpose of this License is to make a manual textbook or other functional anduseful document free in the sense of freedom to assure everyone the effective freedomto copy and redistribute it with or without modifying it either commercially or non-commercially Secondarily this License preserves for the author and publisher a wayto get credit for their work while not being considered responsible for modificationsmade by others

This License is a kind of ldquocopyleftrdquo which means that derivative works of the documentmust themselves be free in the same sense It complements the GNU General PublicLicense which is a copyleft license designed for free software

We have designed this License in order to use it for manuals for free software becausefree software needs free documentation a free program should come with manualsproviding the same freedoms that the software does But this License is not limited tosoftware manuals it can be used for any textual work regardless of subject matter orwhether it is published as a printed book We recommend this License principally forworks whose purpose is instruction or reference

1 APPLICABILITY AND DEFINITIONS

This License applies to any manual or other work in any medium that contains anotice placed by the copyright holder saying it can be distributed under the termsof this License Such a notice grants a world-wide royalty-free license unlimited induration to use that work under the conditions stated herein The ldquoDocumentrdquobelow refers to any such manual or work Any member of the public is a licensee andis addressed as ldquoyourdquo You accept the license if you copy modify or distribute the workin a way requiring permission under copyright law

A ldquoModified Versionrdquo of the Document means any work containing the Document ora portion of it either copied verbatim or with modifications andor translated intoanother language

A ldquoSecondary Sectionrdquo is a named appendix or a front-matter section of the Documentthat deals exclusively with the relationship of the publishers or authors of the Documentto the Documentrsquos overall subject (or to related matters) and contains nothing thatcould fall directly within that overall subject (Thus if the Document is in part atextbook of mathematics a Secondary Section may not explain any mathematics) Therelationship could be a matter of historical connection with the subject or with relatedmatters or of legal commercial philosophical ethical or political position regardingthem

The ldquoInvariant Sectionsrdquo are certain Secondary Sections whose titles are designated asbeing those of Invariant Sections in the notice that says that the Document is released

Appendix A GNU Free Documentation License 27

under this License If a section does not fit the above definition of Secondary then it isnot allowed to be designated as Invariant The Document may contain zero InvariantSections If the Document does not identify any Invariant Sections then there are none

The ldquoCover Textsrdquo are certain short passages of text that are listed as Front-CoverTexts or Back-Cover Texts in the notice that says that the Document is released underthis License A Front-Cover Text may be at most 5 words and a Back-Cover Text maybe at most 25 words

A ldquoTransparentrdquo copy of the Document means a machine-readable copy representedin a format whose specification is available to the general public that is suitable forrevising the document straightforwardly with generic text editors or (for images com-posed of pixels) generic paint programs or (for drawings) some widely available drawingeditor and that is suitable for input to text formatters or for automatic translation toa variety of formats suitable for input to text formatters A copy made in an otherwiseTransparent file format whose markup or absence of markup has been arranged tothwart or discourage subsequent modification by readers is not Transparent An imageformat is not Transparent if used for any substantial amount of text A copy that isnot ldquoTransparentrdquo is called ldquoOpaquerdquo

Examples of suitable formats for Transparent copies include plain ASCII withoutmarkup Texinfo input format LaTEX input format SGML or XML using a publiclyavailable DTD and standard-conforming simple HTML PostScript or PDF designedfor human modification Examples of transparent image formats include PNG XCFand JPG Opaque formats include proprietary formats that can be read and editedonly by proprietary word processors SGML or XML for which the DTD andor pro-cessing tools are not generally available and the machine-generated HTML PostScriptor PDF produced by some word processors for output purposes only

The ldquoTitle Pagerdquo means for a printed book the title page itself plus such followingpages as are needed to hold legibly the material this License requires to appear in thetitle page For works in formats which do not have any title page as such ldquoTitle Pagerdquomeans the text near the most prominent appearance of the workrsquos title preceding thebeginning of the body of the text

The ldquopublisherrdquo means any person or entity that distributes copies of the Documentto the public

A section ldquoEntitled XYZrdquo means a named subunit of the Document whose title eitheris precisely XYZ or contains XYZ in parentheses following text that translates XYZ inanother language (Here XYZ stands for a specific section name mentioned below suchas ldquoAcknowledgementsrdquo ldquoDedicationsrdquo ldquoEndorsementsrdquo or ldquoHistoryrdquo) To ldquoPreservethe Titlerdquo of such a section when you modify the Document means that it remains asection ldquoEntitled XYZrdquo according to this definition

The Document may include Warranty Disclaimers next to the notice which states thatthis License applies to the Document These Warranty Disclaimers are considered tobe included by reference in this License but only as regards disclaiming warrantiesany other implication that these Warranty Disclaimers may have is void and has noeffect on the meaning of this License

2 VERBATIM COPYING

Appendix A GNU Free Documentation License 28

You may copy and distribute the Document in any medium either commercially ornoncommercially provided that this License the copyright notices and the licensenotice saying this License applies to the Document are reproduced in all copies andthat you add no other conditions whatsoever to those of this License You may not usetechnical measures to obstruct or control the reading or further copying of the copiesyou make or distribute However you may accept compensation in exchange for copiesIf you distribute a large enough number of copies you must also follow the conditionsin section 3

You may also lend copies under the same conditions stated above and you may publiclydisplay copies

3 COPYING IN QUANTITY

If you publish printed copies (or copies in media that commonly have printed covers) ofthe Document numbering more than 100 and the Documentrsquos license notice requiresCover Texts you must enclose the copies in covers that carry clearly and legibly allthese Cover Texts Front-Cover Texts on the front cover and Back-Cover Texts onthe back cover Both covers must also clearly and legibly identify you as the publisherof these copies The front cover must present the full title with all words of the titleequally prominent and visible You may add other material on the covers in additionCopying with changes limited to the covers as long as they preserve the title of theDocument and satisfy these conditions can be treated as verbatim copying in otherrespects

If the required texts for either cover are too voluminous to fit legibly you should putthe first ones listed (as many as fit reasonably) on the actual cover and continue therest onto adjacent pages

If you publish or distribute Opaque copies of the Document numbering more than 100you must either include a machine-readable Transparent copy along with each Opaquecopy or state in or with each Opaque copy a computer-network location from whichthe general network-using public has access to download using public-standard networkprotocols a complete Transparent copy of the Document free of added material Ifyou use the latter option you must take reasonably prudent steps when you begindistribution of Opaque copies in quantity to ensure that this Transparent copy willremain thus accessible at the stated location until at least one year after the last timeyou distribute an Opaque copy (directly or through your agents or retailers) of thatedition to the public

It is requested but not required that you contact the authors of the Document wellbefore redistributing any large number of copies to give them a chance to provide youwith an updated version of the Document

4 MODIFICATIONS

You may copy and distribute a Modified Version of the Document under the conditionsof sections 2 and 3 above provided that you release the Modified Version under preciselythis License with the Modified Version filling the role of the Document thus licensingdistribution and modification of the Modified Version to whoever possesses a copy ofit In addition you must do these things in the Modified Version

A Use in the Title Page (and on the covers if any) a title distinct from that of theDocument and from those of previous versions (which should if there were any

Appendix A GNU Free Documentation License 29

be listed in the History section of the Document) You may use the same title asa previous version if the original publisher of that version gives permission

B List on the Title Page as authors one or more persons or entities responsible forauthorship of the modifications in the Modified Version together with at least fiveof the principal authors of the Document (all of its principal authors if it has fewerthan five) unless they release you from this requirement

C State on the Title page the name of the publisher of the Modified Version as thepublisher

D Preserve all the copyright notices of the Document

E Add an appropriate copyright notice for your modifications adjacent to the othercopyright notices

F Include immediately after the copyright notices a license notice giving the publicpermission to use the Modified Version under the terms of this License in the formshown in the Addendum below

G Preserve in that license notice the full lists of Invariant Sections and required CoverTexts given in the Documentrsquos license notice

H Include an unaltered copy of this License

I Preserve the section Entitled ldquoHistoryrdquo Preserve its Title and add to it an itemstating at least the title year new authors and publisher of the Modified Versionas given on the Title Page If there is no section Entitled ldquoHistoryrdquo in the Docu-ment create one stating the title year authors and publisher of the Documentas given on its Title Page then add an item describing the Modified Version asstated in the previous sentence

J Preserve the network location if any given in the Document for public access toa Transparent copy of the Document and likewise the network locations given inthe Document for previous versions it was based on These may be placed in theldquoHistoryrdquo section You may omit a network location for a work that was publishedat least four years before the Document itself or if the original publisher of theversion it refers to gives permission

K For any section Entitled ldquoAcknowledgementsrdquo or ldquoDedicationsrdquo Preserve the Titleof the section and preserve in the section all the substance and tone of each of thecontributor acknowledgements andor dedications given therein

L Preserve all the Invariant Sections of the Document unaltered in their text andin their titles Section numbers or the equivalent are not considered part of thesection titles

M Delete any section Entitled ldquoEndorsementsrdquo Such a section may not be includedin the Modified Version

N Do not retitle any existing section to be Entitled ldquoEndorsementsrdquo or to conflict intitle with any Invariant Section

O Preserve any Warranty Disclaimers

If the Modified Version includes new front-matter sections or appendices that qualifyas Secondary Sections and contain no material copied from the Document you may atyour option designate some or all of these sections as invariant To do this add their

Appendix A GNU Free Documentation License 30

titles to the list of Invariant Sections in the Modified Versionrsquos license notice Thesetitles must be distinct from any other section titles

You may add a section Entitled ldquoEndorsementsrdquo provided it contains nothing butendorsements of your Modified Version by various partiesmdashfor example statements ofpeer review or that the text has been approved by an organization as the authoritativedefinition of a standard

You may add a passage of up to five words as a Front-Cover Text and a passage of upto 25 words as a Back-Cover Text to the end of the list of Cover Texts in the ModifiedVersion Only one passage of Front-Cover Text and one of Back-Cover Text may beadded by (or through arrangements made by) any one entity If the Document alreadyincludes a cover text for the same cover previously added by you or by arrangementmade by the same entity you are acting on behalf of you may not add another butyou may replace the old one on explicit permission from the previous publisher thatadded the old one

The author(s) and publisher(s) of the Document do not by this License give permissionto use their names for publicity for or to assert or imply endorsement of any ModifiedVersion

5 COMBINING DOCUMENTS

You may combine the Document with other documents released under this Licenseunder the terms defined in section 4 above for modified versions provided that youinclude in the combination all of the Invariant Sections of all of the original documentsunmodified and list them all as Invariant Sections of your combined work in its licensenotice and that you preserve all their Warranty Disclaimers

The combined work need only contain one copy of this License and multiple identicalInvariant Sections may be replaced with a single copy If there are multiple InvariantSections with the same name but different contents make the title of each such sectionunique by adding at the end of it in parentheses the name of the original author orpublisher of that section if known or else a unique number Make the same adjustmentto the section titles in the list of Invariant Sections in the license notice of the combinedwork

In the combination you must combine any sections Entitled ldquoHistoryrdquo in the vari-ous original documents forming one section Entitled ldquoHistoryrdquo likewise combine anysections Entitled ldquoAcknowledgementsrdquo and any sections Entitled ldquoDedicationsrdquo Youmust delete all sections Entitled ldquoEndorsementsrdquo

6 COLLECTIONS OF DOCUMENTS

You may make a collection consisting of the Document and other documents releasedunder this License and replace the individual copies of this License in the variousdocuments with a single copy that is included in the collection provided that youfollow the rules of this License for verbatim copying of each of the documents in allother respects

You may extract a single document from such a collection and distribute it individu-ally under this License provided you insert a copy of this License into the extracteddocument and follow this License in all other respects regarding verbatim copying ofthat document

Appendix A GNU Free Documentation License 31

7 AGGREGATION WITH INDEPENDENT WORKS

A compilation of the Document or its derivatives with other separate and independentdocuments or works in or on a volume of a storage or distribution medium is calledan ldquoaggregaterdquo if the copyright resulting from the compilation is not used to limit thelegal rights of the compilationrsquos users beyond what the individual works permit Whenthe Document is included in an aggregate this License does not apply to the otherworks in the aggregate which are not themselves derivative works of the Document

If the Cover Text requirement of section 3 is applicable to these copies of the Documentthen if the Document is less than one half of the entire aggregate the Documentrsquos CoverTexts may be placed on covers that bracket the Document within the aggregate or theelectronic equivalent of covers if the Document is in electronic form Otherwise theymust appear on printed covers that bracket the whole aggregate

8 TRANSLATION

Translation is considered a kind of modification so you may distribute translationsof the Document under the terms of section 4 Replacing Invariant Sections withtranslations requires special permission from their copyright holders but you mayinclude translations of some or all Invariant Sections in addition to the original versionsof these Invariant Sections You may include a translation of this License and all thelicense notices in the Document and any Warranty Disclaimers provided that youalso include the original English version of this License and the original versions ofthose notices and disclaimers In case of a disagreement between the translation andthe original version of this License or a notice or disclaimer the original version willprevail

If a section in the Document is Entitled ldquoAcknowledgementsrdquo ldquoDedicationsrdquo or ldquoHis-toryrdquo the requirement (section 4) to Preserve its Title (section 1) will typically requirechanging the actual title

9 TERMINATION

You may not copy modify sublicense or distribute the Document except as expresslyprovided under this License Any attempt otherwise to copy modify sublicense ordistribute it is void and will automatically terminate your rights under this License

However if you cease all violation of this License then your license from a particularcopyright holder is reinstated (a) provisionally unless and until the copyright holderexplicitly and finally terminates your license and (b) permanently if the copyrightholder fails to notify you of the violation by some reasonable means prior to 60 daysafter the cessation

Moreover your license from a particular copyright holder is reinstated permanently ifthe copyright holder notifies you of the violation by some reasonable means this is thefirst time you have received notice of violation of this License (for any work) from thatcopyright holder and you cure the violation prior to 30 days after your receipt of thenotice

Termination of your rights under this section does not terminate the licenses of partieswho have received copies or rights from you under this License If your rights havebeen terminated and not permanently reinstated receipt of a copy of some or all of thesame material does not give you any rights to use it

Appendix A GNU Free Documentation License 32

10 FUTURE REVISIONS OF THIS LICENSE

The Free Software Foundation may publish new revised versions of the GNU FreeDocumentation License from time to time Such new versions will be similar in spiritto the present version but may differ in detail to address new problems or concernsSee httpwwwgnuorgcopyleft

Each version of the License is given a distinguishing version number If the Documentspecifies that a particular numbered version of this License ldquoor any later versionrdquoapplies to it you have the option of following the terms and conditions either of thatspecified version or of any later version that has been published (not as a draft) bythe Free Software Foundation If the Document does not specify a version number ofthis License you may choose any version ever published (not as a draft) by the FreeSoftware Foundation If the Document specifies that a proxy can decide which futureversions of this License can be used that proxyrsquos public statement of acceptance of aversion permanently authorizes you to choose that version for the Document

11 RELICENSING

ldquoMassive Multiauthor Collaboration Siterdquo (or ldquoMMC Siterdquo) means any World WideWeb server that publishes copyrightable works and also provides prominent facilitiesfor anybody to edit those works A public wiki that anybody can edit is an example ofsuch a server A ldquoMassive Multiauthor Collaborationrdquo (or ldquoMMCrdquo) contained in thesite means any set of copyrightable works thus published on the MMC site

ldquoCC-BY-SArdquo means the Creative Commons Attribution-Share Alike 30 license pub-lished by Creative Commons Corporation a not-for-profit corporation with a principalplace of business in San Francisco California as well as future copyleft versions of thatlicense published by that same organization

ldquoIncorporaterdquo means to publish or republish a Document in whole or in part as partof another Document

An MMC is ldquoeligible for relicensingrdquo if it is licensed under this License and if all worksthat were first published under this License somewhere other than this MMC andsubsequently incorporated in whole or in part into the MMC (1) had no cover textsor invariant sections and (2) were thus incorporated prior to November 1 2008

The operator of an MMC Site may republish an MMC contained in the site underCC-BY-SA on the same site at any time before August 1 2009 provided the MMC iseligible for relicensing

Appendix A GNU Free Documentation License 33

ADDENDUM How to use this License for your documents

To use this License in a document you have written include a copy of the License in thedocument and put the following copyright and license notices just after the title page

Copyright (C) year your name

Permission is granted to copy distribute andor modify this document

under the terms of the GNU Free Documentation License Version 13

or any later version published by the Free Software Foundation

with no Invariant Sections no Front-Cover Texts and no Back-Cover

Texts A copy of the license is included in the section entitled lsquolsquoGNU

Free Documentation Licensersquorsquo

If you have Invariant Sections Front-Cover Texts and Back-Cover Texts replace theldquowith Textsrdquo line with this

with the Invariant Sections being list their titles with

the Front-Cover Texts being list and with the Back-Cover Texts

being list

If you have Invariant Sections without Cover Texts or some other combination of thethree merge those two alternatives to suit the situation

If your document contains nontrivial examples of program code we recommend releasingthese examples in parallel under your choice of free software license such as the GNUGeneral Public License to permit their use in free software

Index 34

Index

Aaccess control policy 3Author 3author specifying 10

Bbehavior prior to version 5 10behavior version 3 10behavior version 4 10binary-old-keyword-value substitution mode 9branch growth 7branch number 2branch tip 2branch default 3bug reporting 25

Ccase sensitivity file format 21checkin 3checklist for bug reports 25checkout 3checkout implicit 5ci invocation 11co invocation 12comma-v file format 1command help 7command version 7command-line option to specify a revision 7credits 1

DDate 3date formats 8date specifying 8dates file format 21default branch 3default branch setting 15deleting revisions 15description of working file 2description text specifying 8

Eempty log message 9emulation previous RCS versions 10encoding file format 20environment variables 10

Ffeatures still missing 23

file names on the command-line 7format RCSfile 20

Ggrammar file format 20

HHeader 3history 1

IId 3ident invocation 13implicit checkout circumstance 5implicit checkout locked 12implicit checkout unlocked 12instantiating a working file 2interaction model 1interactive mode 9invocation ci 11invocation co 12invocation ident 13invocation merge 14invocation rcs 14 15invocation rcsclean 16invocation rcsdiff 17invocation rcsmerge 17invocation rlog 18

Kkeyword-only substitution mode 9keyword-value substitution mode 8keyword-value-locker substitution mode 9keywords table of 3

Llayout of nodes file format 21license 1Locker 3locking a revision 15locking on implicit checkout 12locking non-strict 5locking set non-strict 15locking set strict 15locking strict 5locks in RCS file 3Log 3log message empty 9LOGNAME 11

Index 35

Mmemory limit 11merge invocation 14model interaction 1

NName 4names symbolic 3node layout file format 21non-strict locking 5number branch 2number revision 2

Oold-keyword-value substitution mode 9order of options and file names 7outdating revisions 15overview 1

Ppairing RCS and working files 7patches contributing 25problems 25projects related 1

Qquiet mode 9

Rrange of revisions specifying 7RCS file 2rcs invocation 14 15RCS version emulation 10RCS_MEM_LIMIT 11rcsclean invocation 16rcsdiff invocation 17RCSfile 4RCSfile format 20RCSINIT 10rcsmerge invocation 17removing revisions 15reporting bugs 25Revision 4revision number 2revision range specifying 7

revision specifying 7revisions tree of 3rlog invocation 18

SSource 4specifying a date 8specifying a range of revisions 7specifying a revision 7specifying a state 9specifying a suffix list 10specifying a timedate 8specifying author 10specifying description text 8specifying substitution mode 8State 4state specifying 9strict locking 5substitution mode default 8substitution mode specifying 8suffix list specifying 10symbolic names 3

TTEMP 11third-party interop file format 21Tichy Walter F 1time zone 8timedate specifying 8tip 2tip increment 7TMP 11TMPDIR 11tree of revisions 3

Uunlocking a revision 15USER 11

Vvalue-only substitution mode 9

Wwhitespace file format 21working file description 2working file instantiation 2

  • Overview
    • Credits
    • Concepts
      • Interaction model
      • Working file
      • RCS file
      • Fundamental operations
      • Keywords
        • Quick tour
          • Usage
            • Common elements
              • Revision options
              • Date option
              • Description option
              • Substitution mode option
              • Log message option
              • Misc common options
              • Environment
                • Invoking ci
                • Invoking co
                • Invoking ident
                • Invoking merge
                • Invoking rcs
                  • modern
                  • legacy
                    • Invoking rcsclean
                    • Invoking rcsdiff
                    • Invoking rcsmerge
                    • Invoking rlog
                      • Hacking
                        • File format
                          • File format grammar
                          • Additional particulars of the file format
                            • Still missing
                            • Reporting bugs
                              • GNU Free Documentation License
                              • Index
Page 3: GNU RCS · The RCS file is also known (colloquially) as the “comma-v file”, due to its name often ending in ,v (e.g., a.c,v). A revision number is a branch number followed by

i

Table of Contents

1 Overview 111 Credits 112 Concepts 1

121 Interaction model 1122 Working file 2123 RCS file 2124 Fundamental operations 3125 Keywords 3

13 Quick tour 4

2 Usage 721 Common elements 7

211 Revision options 7212 Date option 8213 Description option 8214 Substitution mode option 8215 Log message option 9216 Misc common options 9217 Environment 10

22 Invoking ci 1123 Invoking co 1224 Invoking ident 1325 Invoking merge 1426 Invoking rcs 14

261 modern 14262 legacy 15

27 Invoking rcsclean 1628 Invoking rcsdiff 1729 Invoking rcsmerge 17210 Invoking rlog 18

3 Hacking 2031 File format 20

311 File format grammar 20312 Additional particulars of the file format 21

32 Still missing 2333 Reporting bugs 25

Appendix A GNU Free Documentation License 26

Index 34

Chapter 1 Overview 1

1 Overview

GNU RCS (Revision Control System) manages multiple revisions of files RCS can storeretrieve log identify and merge revisions It is useful for files that are revised frequentlyeg programs documentation graphics and papers It can handle text as well as binaryfiles although functionality is reduced for the latter

A normal installation includes the commands ci co ident merge rcs rcsclean rcsdiffrcsmerge and rlog (see Chapter 2 [Usage] page 7) These are small and fast programs(amenable to scripting) and indeed the distribution also includes the script rcsfreeze showingsome of the possibilities

RCS works with versions stored on a single filesystem or machine edited by one person ata time Other version control systems such as Bazaar (httpwwwgnuorgsoftwarebazaar) CVS Subversion and Git support distributed access in various ways Which ismore appropriate depends on the task at hand

11 Credits

RCS was designed and built by Walter F Tichy of Purdue University RCS version 3 wasreleased in 1983

Adam Hammer Thomas Narten and Daniel Trinkle of Purdue supported RCS throughversion 43 released in 1990 Guy Harris of Sun contributed many porting fixes PaulEggert of System Development Corporation contributed bug fixes and tuneups Jay Lepreaucontributed 43BSD support

Paul Eggert of Twin Sun wrote the changes for RCS versions 55 and 56 (1991) RichBraun of Kronos and Andy Glew of Intel contributed ideas for new options Bill Hahn ofStratus contributed ideas for setuid support Ideas for piece tables came from Joe Berkovitzof Stratus and Walter F Tichy Matt Cross of Stratus contributed test case ideas AdamHammer of Purdue QAed

Paul Eggert wrote most of the changes for RCS 57 K Richard Pixley of Cygnus Supportcontributed several bug fixes Robert Lupton of Princeton and Daniel Trinkle contributedideas for lsquo$Namersquo expansion Brendan Kehoe of Cygnus Support suggested rlogrsquos -N optionPaul D Smith of Data General suggested improvements in option and error processingAdam Hammer of Purdue QAed

Thien-Thi Nguyen is responsibile for RCS 58 He modernized the code base build sys-tem and manual pages fixing some bugs on the way He added standard --help --versionprocessing and wrote the documentation you are reading (gladly taking inspiration fromthe paper1 and manpages originally written by Walter F Tichy)

12 Concepts

121 Interaction model

The interaction model is straightforward For each working file you initialize its RCS fileonce then enter a cycle of checkout modification and checkin operations Along the way

1 Source (troff) and several output formats are available from the RCS homepage (httpwwwgnuorgsoftwarercs)

Chapter 1 Overview 2

you can tweak some of the RCS filersquos metadata as well All of this is done through RCScommands you need not modify the RCS file directly (and in fact you should probablyavoid doing so lest RCS become confused) This model is somewhat analogous to using alibrary (of books) With a library you sign up for a library card (initialize) then enter acycle of taking a book home (checkout) enjoying it (NB without modification one hopes)and returning it to the library (checkin)

Furthermore you can compare revisions in the RCS file against each other examine theuser- (hopefully high) quality descriptions of the changes each revision embodies mergeselected revisions and so forth

122 Working file

RCS commands operate on one pair of files at a time The working file is what you normallyview and edit (eg a file of C programming language source code named ac) Because theworking filersquos contents can be extracted from the RCS file (called instantiating a workingfile) it can be safely deleted to regain some disk space

123 RCS file

The RCS file is a separate file conventionally placed in the subdirectory RCS wherein RCScommands organize the initial and subsequent revisions of the working file associatingwith each revision a unique revision number along with the remembered particulars of thecheckin that produced it It also contains a description of the working file and various othermetadata described below

The RCS file is also known (colloquially) as the ldquocomma-v filerdquo due to its name oftenending in v (eg acv)

A revision number is a branch number followed by a dot followed by an integer and abranch number is an odd number of integers separated by dot A revision number with onedot (implying a branch number without any dots) is said to be on the trunk All integersare positive For example

11 -- revision number for initial checkin (typically)

branch number 1

94142 -- more complicated (perhaps after much gnarly hacking)

branch number 941

333333333 -- not a valid revision number

however a perfectly valid branch number

The branch point of a non-trunk branch is the revision number formed by removing thebranchrsquos trailing integer To compute the next higher branch or revision number add oneto the trailing integer The highest-numbered revision on a branch is called the tip of thebranch (or branch tip) Continuing the example

11 -- on trunk no branch point

next higher branch number 2

next higher revision number 12

94142 -- not on trunk branch point 94

Chapter 1 Overview 3

next higher branch number 942

next higher revision number 94143

333333333 -- not on trunk branch point 333333

next higher branch number 333333334

next higher revision number 3333333331

In addition to this ldquotreerdquo of thus-linked revisions the RCS file keeps track of the defaultbranch ie the branch whose tip corresponds to the most recent checkin as well as thesymbolic names a list of associations between a user-supplied (and presumably meaningful)symbol and an underlying branch or revision number

The RCS file contains two pieces of information used to implement its access controlpolicy The first is a list of usernames If non-empty only those users listed can modifythe RCS file (via RCS commands) The second is a list of locks ie association betweena username and a revision number If a lock usernamerevno exists that means onlyusername may modify revno (that is do a checkin operation to deposit the next higherrevision or a higher revision number on the same branch as revno)

124 Fundamental operations

The checkin operation records the contents of the working file in the RCS file assigning ita new (normally the next higher) revision number and recording the username timestampstate (a short symbol) and user-supplied log message (a textual description of the changesleading to that revision) It uses diff to find the differences between the tip of the defaultbranch and the working file thereby writing the minimal amount of information needed tobe able to recreate the contents of the previous tip

The checkout operation identifies a specific revision from the RCS file and either dis-plays the content to standard output or instantiates a working file overwriting any currentinstantiation with the selected revision In either case the content may undergo keywordexpansion which replaces text of the form lsquo$Keyword$rsquo with (possibly) different text com-prising the keyword and its value depending on the current keyword expansion mode (seeSection 214 [Substitution mode option] page 8)

125 Keywords

The keywords and their values are

Author The login name of the user who checked in the revision

Date The date and time the revision was checked in May include an appendedtimezone offset

Header A standard header containing the absolute RCS filename the revision numberthe date and time the author the state and the locker (if locked) May includean appended timezone offset

Id Same as lsquoHeaderrsquo except that only the basename appears (no directory com-ponents)

Locker The login name of the user who locked the revision (empty if not locked)

Chapter 1 Overview 4

Log The log message supplied during checkin preceded by a header containing theRCS filename the revision number the author and the date and time Mayinclude an appended timezone offset

Existing log messages are not replaced Instead the new log message is insertedafter lsquo$Log$rsquo This is useful for accumulating a complete change log in asource file

Each inserted line is prefixed by the string that prefixes the lsquo$Log$rsquo line Forexample if the lsquo$Log$rsquo line is

$Log tancc $

then RCS prefixes each line of the log with lsquo rsquo (slash slash space) This isuseful for languages with comments that go to the end of the line

The convention for other languages is to use a lsquo rsquo (space asterisk space)prefix inside a multiline comment For example the initial log comment of a Cprogram conventionally is of the following form

$Log$

For backwards compatibility with older versions of RCS if the log prefix is lsquorsquoor lsquo(rsquo surrounded by optional white space inserted log lines contain a spaceinstead of lsquorsquo or lsquo(rsquo however this usage is obsolescent and should not be reliedon

Name The symbolic name used to check out the revision if any For example lsquoco-rJoersquo generates lsquo$Name Joe $rsquo Plain co generates just lsquo$Name $rsquo

RCSfile The basename of the RCS file

Revision The revision number assigned to the revision

Source The absolute RCS filename

State The state assigned to the revision with the -s option of rcs or ci

13 Quick tour

This section complements the preceding section (see Section 12 [Concepts] page 1) pre-senting a handful of RCS commands in quick succession For details on individual RCScommands See Chapter 2 [Usage] page 7

Suppose you have a file fc that you wish to put under control of RCS If you have notalready done so make an RCS directory with the command

mkdir RCS

Then invoke the checkin command

ci fc

This command creates an RCS file in directory RCS stores fc into it as revision 11 anddeletes fc It also asks you for a description The description should be a synopsis of thecontents of the file All later checkin commands will ask you for a log entry which shouldsummarize the changes that you made

To get back the working file fc in the previous example use the checkout command

Chapter 1 Overview 5

co fc

This command extracts the latest revision from the RCS file and writes it into fc If youwant to edit fc you must lock it as you check it out with the command

co -l fc

You can now edit fc Suppose after some editing you want to know what changes thatyou have made The command

rcsdiff fc

tells you the difference between the most recently checked-in version and the working fileYou can check the file back in by invoking

ci fc

This increments the revision number properly If ci complains with the message

ci error no lock set by your name

then you have tried to check in a file even though you did not lock it when you checked itout Of course it is too late now to do the checkout with locking because another checkoutwould overwrite your modifications Instead invoke

rcs -l fc

This command will lock the latest revision for you unless somebody else got ahead of youalready In this case yoursquoll have to negotiate with that person

Locking assures that you and only you can check in the next update and avoids nastyproblems if several people work on the same file Even if a revision is locked it can still bechecked out for reading compiling etc All that locking prevents is a checkin by anybodybut the locker

If your RCS file is private ie if you are the only person who is going to deposit revisionsinto it strict locking is not needed and you can turn it off If strict locking is turned offthe owner of the RCS file need not have a lock for checkin all others still do Turning strictlocking off and on is done with the commands

rcs -U fc disable strict lockingrcs -L fc enable strict locking

If you donrsquot want to clutter your working directory with RCS files create a subdirectorycalled RCS in your working directory and move all your RCS files there RCS commandswill look first into that directory to find needed files All the commands discussed abovewill still work without any modification See Section 21 [Common elements] page 7

To avoid the deletion of the working file during checkin (in case you want to continueediting or compiling) invoke one of

ci -l fc checkin + locked checkoutci -u fc checkin + unlocked checkout

These commands check in fc as usual then perform an implicit checkout The first formalso locks the checked in revision the second one doesnrsquot Thus these options save you onecheckout operation The first form is useful if you want to continue editing the second oneif you just want to read the file Both update the keyword substitutions in your workingfile see Section 12 [Concepts] page 1

You can give ci the number you want assigned to a checked-in revision Assume all yourrevisions were numbered 11 12 13 etc and you would like to start release 2 Either ofthe commands

Chapter 1 Overview 6

ci -r2 fc

ci -r21 fc

assigns the number 21 to the new revision From then on ci will number the subsequentrevisions with 22 23 etc The corresponding co commands

co -r2 fc

co -r21 fc

retrieve the latest revision numbered 2x and the revision 21 respectively co withouta revision number selects the latest revision on the trunk ie the highest revision with anumber consisting of two fields Numbers with more than two fields are needed for branchesFor example to start a branch at revision 13 invoke

ci -r131 fc

This command starts a branch numbered 1 at revision 13 and assigns the number 1311to the new revision Here is a diagram showing the new revision in relation to its branchand the trunk

11 -- 12 -- 13 -- 14 -- 15

|

[131] -- 1311

For more information about branches See Section 12 [Concepts] page 1

Chapter 2 Usage 7

2 Usage

This chapter describes how to invoke RCS commands including common command-lineelements as well options specific to each command

21 Common elements

All RCS commands accept --help and --version See Section ldquoCommand-Line Interfacesrdquoin The GNU Coding Standards

Aside from --help and --version RCS commands take the form lsquo-letter[arg]rsquo iea hyphen followed by a single letter optionally followed by extra information The squarebraces mean that the extra information is optional (No square braces means that the extrainformation is required) In any case when specified the extra information must abut theletter there can be no intervening whitespace

co -u 14 foo wrong space between -u and 14

co -u14 foo ok

Furthermore options must appear before file names (if any) on the command line

ident foo -q wrong option after file nameident -q foo ok

Lastly pairs of RCS and working files can be specified in three ways (a) both are given (b)only the working file is given (c) only the RCS file is given For (a) both RCS and workingfiles may have arbitrary directory components RCS commands pair them up intelligentlyFor (b) RCS commands will look first into the directory RCS if it exists to find theassociated RCS file

211 Revision options

As to be expected in a revision control system many options are of the form lsquo-flag[rev]rsquowhere flag is a single letter (eg lsquorrsquo) If ommitted rev defaults to the latest revision onthe default branch A revision can be specified in many ways

brn Straightforward dot-notation where br specifies the branch

n Like brn using the default branch

br Like brn using the a command-specific computation of n given the currenttip i For ci (see Section 22 [ci] page 11) n would be i + 1 while for othercommands n would be simply i

name This is the symbolic name of a revision as assigned previously by a ci -n orci -N command

$ The command computes the effective revision by examining the values of key-word expansions in the working file

For commands that accept a range of revisions the syntax is generally rev1rev2 ie tworevisions (specified as described above) separated by a colon

Chapter 2 Usage 8

212 Date option

Some commands accept an option of the form lsquo-ddatersquo to specify a date an absolute pointin time (to second resolution) expressed in a date format These also accept lsquo-zzonersquo tospecify the timezone The special value lsquoLTrsquo stands for the local time zone RCS recognizesmany date formats and time zones For example the following dates are equivalent if localtime is January 11 1990 8pm Pacific Standard Time eight hours west of CoordinatedUniversal Time (UTC)

800 pm lt

400 AM Jan 12 1990 default is UTC

1990-01-12 040000+00 ISO 8601 (UTC)

1990-01-11 200000-08 ISO 8601 (local time)

19900112 040000 traditional RCS format

Thu Jan 11 200000 1990 LT output of ctime(3) + LT

Thu Jan 11 200000 PST 1990 output of date(1)

Fri Jan 12 040000 GMT 1990

Thu 11 Jan 1990 200000 -0800 Internet RFC 822

12-January-1990 0400 WET

Most fields in the date and time can be defaulted The default time zone is normally UTCbut this can be overridden by the -z option The other defaults are determined in the orderyear month day hour minute and second (most to least significant) At least one of thesefields must be provided For omitted fields that are of higher significance than the highestprovided field the time zonersquos current values are assumed For all other omitted fields thelowest possible values are assumed For example without -z the date lsquo20 1030rsquo defaultsto lsquo103000 UTCrsquo of the 20th of the UTC time zonersquos current month and year Note thatfor the shell the datetime must be quoted if it contains spaces

RCS also accepts some other formats which specify only the date portion (omitting thetime portion)

YYYY-DDD DDD is the day of year 1-366

YYYY-wWW-D

WW is the ISO week number 0-53 (actually ISO week numbers are 1-53 week0 is a GNU RCS extension) and D is the ISO day number 1-7 (Monday throughSunday)

213 Description option

Some commands accept an option of the form lsquo-t-textrsquo or lsquo-tfile-namersquo This optionis to set or update the RCS file description text In the first form text is used directlyexcluding the leading hyphen (lsquo-rsquo) that distinguishes the two forms In the second formthe description text is taken from the contents of file-name

214 Substitution mode option

Some commands accept an option of the form -ksubst used to control how keywords (seeSection 12 [Concepts] page 1) are expanded in the working file In the following table ofsubst values the example keyword is lsquoRevisionrsquo and its value is lsquo513rsquo

kv Generate lsquo$Revision 513 $rsquo (dollar-sign keyword colon space value spacedollar-sign) A lockerrsquos name is inserted in the value of the Header Id and

Chapter 2 Usage 9

Locker keyword strings only as a file is being locked ie by ci -l and co -lThis is the default substitution mode

kvl Like -kkv except that a lockerrsquos name is always inserted if the given revisionis currently locked

k Generate lsquo$Revision$rsquo (dollar-sign keyword dollar-sign) This is useful whencomparing different revisions of a file Log messages are inserted after Log key-words even if -kk is specified since this tends to be more useful when mergingchanges

o Like -kkv but use the old value present in the working file just before it waschecked in This can be useful for file formats that cannot tolerate any changesto substrings that happen to take the form of keyword strings

b Like -ko but do all file io in binary mode This makes little difference onPOSIX and Unix hosts but on DOS-like hosts one should use rcs -i -kb toinitialize an RCS file intended to be used for binary files Also on all hostsrcsmerge normally refuses to merge files when -kb is in effect

v Generate lsquo513rsquo (value only) Further keyword substitution cannot be per-formed once the keyword names are removed so this should be used with careBecause of this danger of losing keywords -kv cannot be combined with -land the owner write permission of the working file is turned off to edit the filelater check it out again without -kv

215 Log message option

Both ci and rcs allow a log message to be specified with the -m option If themsg argumentto this option is empty RCS uses the default lsquo empty log message rsquo This particularmessage is handled specially (ie filtered out) by rlog

216 Misc common options

Other common options are -I -q -s -T -V -w -x

-I This option enables interactive mode More precisely it forces interactive modewhereby RCS commands believe that their standard input is a terminal nor-mally a precondition for displaying a prompt to receive input (such as a log mes-sage on checkin) The intention of -I is for scripting situations where standardinput is actually not a terminal but you know beforehand (without prompting)that input is needed and you are ready to provide it on standard input anyway

-q This option enables quiet mode Commands work silently (unless there is anerror condition) and suppress warnings and prompts

-sstate Specify the state to be state

-T This option controls how commands timestamp the RCS file Normally RCScommands set the RCS filersquos timestamp when modifying it in the ldquonaturalrdquo way(without taking any particular care) With -T on the other hand the com-mands either preserve the timestamp (for standalone lockunlock operations)or use the timestamp of the working file (for ci)

Chapter 2 Usage 10

This can be useful if the RCS file is found in a makefile targetrsquos list of pre-requisites (see Section ldquoRule Syntaxrdquo in The GNU Make Manual) that is ifsome target should be rebuilt if the RCS file is newer than it In that case youcan do lsquorcs -u -Trsquo for example to unlock a revision in the RCS file withouttriggering a recompilation

-V Behave like --version ie display command version information and exitsuccessfully NB This option is obsolete and its support will be removed insome future release

-Vn n specifies the RCS (major) version to emulate Valid values for n are 3 4 5Version 5 is the current version so -V5 does nothing special

In versions prior to 5 RCS outputs lsquotrsquo (tab U+09) between the lsquorsquo (colon) andthe value (for keyword substitution) instead of space uses the RCS file commentstring to prefix each line in the Log expansion instead of computing it on thefly from the input text writesreads localtime instead of UTC and displaysslightly different output for rlog

For version 4 the Header expansion unconditionally includes Locker lockeras if the kvl substitution mode were specified (see Section 214 [Substitutionmode option] page 8)

For version 3 the Header expansion omits the directories from the filename andsays only Locked instead of the state

-wlogin Some commands accept an option of the form lsquo-wloginrsquo to specify the loginname of the author of a revision ie ldquowhordquo is responsible

-xsuff Specify suff as the slash-separated list of file name suffixes used to recognizean RCS file The default value is lsquovrsquo that is first try with lsquovrsquo then try withan empty suffix

This basename search occurs within (ie starting from the beginning) the largerdirectory search loop which comprises two candidates dRCS and d where dis the directory component of the working file name For example given theworking file ac in the current directory RCS tries in order these candidates

RCSacv

RCSac

acv

ac

Note that the last candidate is impossible (and is in fact discarded) becausethe working and RCS files cannot have the same name

217 Environment

Various environment variables influence how RCS works

[Environment Variable]RCSINITAnother way to set common options is with the lsquoRCSINITrsquo environment variable Thisis a space-separated list of options Use lsquorsquo (backslash) to escape significant spaceFor example

Chapter 2 Usage 11

Set the value make it available to subsequent commandsRCSINIT=-q -xv -zLT

export RCSINIT

Use it (implicitly)rlog -L foo

This example in Bourne shell syntax arranges for RCS commands to operate as ifeach command-line had prepended lsquo-q -xv -zLTrsquo to the rest of the command-lineThe effective command-line that rlog sees is thus lsquo-q -xv -zLT -L foorsquo

[Environment Variable]RCS_MEM_LIMITNormally for speed commands either memory map or copy into memory the RCS fileif its size is less than thememory limit currently defaulting to ldquounlimitedrdquo Otherwise(or if the initially-tried speedy ways fail) the commands fall back to using standardio routines

You can adjust the memory limit by setting the lsquoRCS_MEM_LIMITrsquo environment variableto a numeric value (measured in kilobytes) An empty value is silently ignored

As a side effect specifying the memory limit inhibits fall-back to slower routines(This env var is mostly intended for testing RCS normally you can leave it unsetProbably it will be removed in a future release)

[Environment Variable]TMPDIR[Environment Variable]TMP[Environment Variable]TEMP

Commands sometimes create temporary files normally in a system-dependent direc-tory such as tmp You can override this directory by specifying another one asthe value of one of the environment variables TMPDIR TMP or TEMP (checked in thatorder)

[Environment Variable]LOGNAME[Environment Variable]USER

Absent -wlogin or when login is omitted (see Section 216 [Misc common options]page 9) commands check environment variables LOGNAME and USER (in that order)If neither of these are set RCS queries the host for and uses your login

22 Invoking ci

rcs ci [options] file

(or ldquocirdquo instead of ldquorcs cirdquo)

The ci command adds a revision to the RCS file reflecting the current state of the workingfile This operation is also known as ldquocheckinrdquo

-f[rev] Force new entry even if no content changed

-I[rev]

-q[rev] See Section 216 [Misc common options] page 9

-i[rev] Initial checkin error if the RCS file already exists

-j[rev] Just checkin donrsquot initialize error if the RCS file does not exist

Chapter 2 Usage 12

-k[rev] Compute revision from working file keywords

-r Release lock and delete working file

-rrev Do normal checkin

-l[rev] Like -r but immediately checkout locked (co -l) afterwards

-u[rev] Like -l but checkout unlocked (co -u)

-M[rev] Reset working file mtime (relevant for -l -u)

Multiple flags in -fiIjklMqru may be given except for -r -l -u which are mutuallyexclusive For a fully specified revision of the form brn nmust be greater than any existingon br or br must be new If rev is omitted compute it from the last lock (co -l) perhapsstarting a new branch If there is no lock use defbr(L+1) See Section 211 [Revisionoptions] page 7

-d[date]

-zzone See Section 212 [Date option] page 8 If no date specified use the workingfile modification time

-m[msg] Use msg as the log message See Section 215 [Log message option] page 9

-nname

-Nname Assign symbolic name to the entry For -n name must be new (no previousassignment) For -N overwrite any previous assignment

-sstate See Section 216 [Misc common options] page 9 Set the state

-t-text

-tfile-name

See Section 213 [Description option] page 8

-T Set the RCS filersquos modification time to the new revisionrsquos time if the former pre-cedes the latter and there is a new revision preserve the RCS filersquos modificationtime otherwise

-wwho Use who as the author

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

23 Invoking co

rcs co [options] file

(or ldquocordquo instead of ldquorcs cordquo)

The co command retrieves a revision from the RCS file writing a new working file Thisoperation is also known as ldquocheckoutrdquo

-f[rev] Force overwrite of working file

-I[rev]

-q[rev] See Section 216 [Misc common options] page 9

-p[rev] Write to stdout instead of the working file

Chapter 2 Usage 13

-r[rev] Normal checkout

-l[rev] Like -r but also lock

-u[rev] Like -l but unlock

-M[rev] Reset working file mtime (relevant for -l -u)

Multiple flags in -fIlMpqru may be given except for -r -l -u which are mutuallyexclusive See Section 211 [Revision options] page 7

-ksubst See Section 214 [Substitution mode option] page 8

-ddate

-zzone See Section 212 [Date option] page 8 Select latest before or on date

-jjoins Merge using joins a list of revrev pairs NB This option is obsolete (seeSection 29 [rcsmerge] page 17)

-sstate See Section 216 [Misc common options] page 9 Select matching state

-S Enable self-same mode In this mode the owner of a lock is unimportantjust that it exists Effectively this prevents you from checking out the samerevision twice

$ whoami

ttn

$ co -l -f z

RCSzv --gt z

revision 11 (locked)

done

$ co -S -l -f z

RCSzv --gt z

co RCSzv Revision 11 is already locked by ttn

-T Preserve the modification time on the RCS file even if it changes because a lockis added or removed

-wwho Select matching login who

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

24 Invoking ident

ident [options] [file ]

If no file is specified scan standard input The ident command scans its input for keywords(see Section 12 [Concepts] page 1) displaying to standard output what it finds

-q Normally if no patterns are found for a file ident emits a warning This optionsuppresses the warning

Chapter 2 Usage 14

-V Note that -Vn is not a valid option for ident in contrast to most other RCScommands (see Section 216 [Misc common options] page 9)

In addition to the normal keyword pattern for Subversion 12 (and later) compatibility1ident also recognizes patterns having one of the forms

$keyword text $

two colons and space after keyword

space before ending $

$keyword text$

two colons and space after keyword

hash before ending $

25 Invoking merge

merge [options] receiving-sibling parent other-sibling

The merge command combines the differences between a the parent and the other siblingand the differences between the parent and the receiving sibling It writes the result to thereceiving sibling

-A

-E

-e Use diff3 -A -E (default) or -e respectively

-p Write to stdout instead of overwriting receiving-sibling

-q See Section 216 [Misc common options] page 9 Suppress conflict warnings

-Llabel (up to three times) Specify the conflict labels for receiving-sibling parent andother-sibling respectively

-V Note that -Vn is not a valid option for merge in contrast to most other RCScommands (see Section 216 [Misc common options] page 9)

26 Invoking rcs

The rcs command is unique in the set of RCS programs in that it has two usages themodern (for RCS 590 and later) and the legacy

261 modern

rcs [options] command [command-arg ]

This rcs usage dispatches to command passing along command-arg without interpreta-tion

--commands

Display a list of available commands including a one-line description and exitsuccessfully

1 The fixed-length keyword syntax is described in detail in Version Control with Subversion chapterldquoAdvanced Topicsrdquo section ldquoKeyword Substitutionrdquo

Chapter 2 Usage 15

--aliases

Display a list of command aliases and exit successfully

--help command

Display help for a particular command and exit successfully For example todisplay help for the legacy interface use

--help frob

262 legacy

rcs frob [options] file

(or ldquorcsrdquo instead of ldquorcs frobrdquo)

This rcs usage performs various administrative operations on the RCS file depending onthe options given

-i Create and initialize a new RCS file

-L Set strict locking

-U Set non-strict locking

-M Donrsquot send mail when breaking someone elsersquos lock

-T Preserve the modification time on the RCS file unless a revision is removed

-I

-q See Section 216 [Misc common options] page 9

-alogins Append logins (comma-separated list of usernames) to access-list

-e[logins]

Erase logins (comma-separated list of usernames) from access-list If logins isomitted clear the access-list

-Afile-name

Append access-list of file-name to current access-list

-b[rev] Set default branch to that of rev or highest branch on trunk if rev is omitted

-l[rev] Lock a revision

-u[rev] Unlock a revision

-cstring Set comment leader to string NB Donrsquot use obsolete

-ksubst See Section 214 [Substitution mode option] page 8

-mrev[msg]

Replace log message with msg See Section 215 [Log message option] page 9

-nname[[rev]]

If rev is omitted delete symbolic name Otherwise associate name with rev name must be new

-Nname[[rev]]

Like -n but overwrite any previous assignment

-orange Delete (also known as ldquooutdaterdquo) revisions in range

Chapter 2 Usage 16

rev single revision

br latest revision on branch br

rev1rev2

rev1 to rev2 on same branch inclusive

rev beginning of branch to rev

rev rev to end of branch

-sstate[rev]

See Section 216 [Misc common options] page 9 Set state

-t-text

-tfile-name

See Section 213 [Description option] page 8 Replace description

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

These options have no effect and are included solely for consistency with other comamnds(see Section 217 [Environment] page 10) -zzone

27 Invoking rcsclean

rcs clean [options] [file ]

(or ldquorcscleanrdquo instead of ldquorcs cleanrdquo)

The rcsclean command removes working files that are not being worked on If given -u italso unlocks and removes working files that are being worked on but have not changed Ifno file is specified operate on all the working files in the current directory

-r[rev] Specify revision

-u[rev] Unlock if is locked and no differences found

-n[rev] Dry run (no act donrsquot operate)

-q[rev] See Section 216 [Misc common options] page 9

-ksubst See Section 214 [Substitution mode option] page 8

-T Preserve the modification time on the RCS file even it changes because a lockis removed

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

-zzone See Section 212 [Date option] page 8

Chapter 2 Usage 17

28 Invoking rcsdiff

rcs diff [options] file

(or ldquorcsdiffrdquo instead of ldquorcs diffrdquo)

The rcsdiff command runs diff to compare two revisions in an RCS file See Section ldquoIn-voking diffrdquo in The GNU Diffutils Manaual

-rrev (zero one or two times) Name a revision If given two revisions (lsquo-rrev1-rrev2rsquo) compare those revisions If given only one revision (lsquo-rrevrsquo) comparethe working file with it If given no revisions compare the working file with thelatest revision on the default branch

-ksubst See Section 214 [Substitution mode option] page 8

-q See Section 216 [Misc common options] page 9

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

-zzone See Section 212 [Date option] page 8

These options have no effect and are included solely for consistency with other comamnds(see Section 217 [Environment] page 10) -T

Additionally the following options (and their argument if any) are passed to the underlyingdiff command

-0 -1 -2 -3 -4 -5 -6 -7 -8 -9 -B -C -D -F -H -I

-L -U -W -a -b -c -d -e -f -h -i -n -p -t -u -w -y

long options (that start with --)

(Not all of these options are meaningful)

29 Invoking rcsmerge

rcs merge [options] file

(or ldquorcsmergerdquo instead of ldquorcs mergerdquo)

The rcsmerge command incorporates the changes between two revisions of an RCS file intothe corresponding working file

-A

-E

-e Passed to the diff3 command The default if none are specified is -E With -esuppress warnings on conflict The -A style generates the most verbose outputSee Section ldquoInvoking diff3rdquo in The GNU Diffutils Manual

-p[rev] Write to stdout instead of overwriting the working file

-q[rev] See Section 216 [Misc common options] page 9

-rrev (one or two times) specify a revision

One or two revisions must be specified (using -p -q -r) If only one is specified the secondrevision defaults to the latest revision on the default branch

Chapter 2 Usage 18

-ksubst See Section 214 [Substitution mode option] page 8

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

-zzone See Section 212 [Date option] page 8

These options have no effect and are included solely for consistency with other comamnds(see Section 217 [Environment] page 10) -T

210 Invoking rlog

rcs log [options] file

(or ldquorlogrdquo instead of ldquorcs logrdquo)

The rlog command displays information about RCS files

-L Ignore RCS files with no locks set

-R Print only the name of the RCS file

-h Print only the ldquoheaderrdquo information

-t Like -h but also include the description

-N Omit symbolic names

-b Select the default branch

-ddates See Section 212 [Date option] page 8 Select revisions based on timestampin the range dates with spec

d single revision d or earlier

d1ltd2

d2gtd1 between d1 and d2 exclusive

ltd

dgt before d

gtd

dlt after d

Instead of lsquoltrsquo or lsquogtrsquo you can use lsquolt=rsquo or lsquogt=rsquo respectively to specify inclusiveranges dates may also be a list of semicolon-separated specs

-l[who] Select revisions locked by who (comma-separated list of usernames) only or byanyone if who is omitted

-r[revs] Select revisions in revs a comma-separated list of range specs one of revrev rev rev1rev2

-sstates See Section 216 [Misc common options] page 9 states can also be a comma-separated list of states Select revisions with specified state(s)

-w[who] Select revisions checked in by who (comma-separated list of usernames) or bythe user if who is omitted

Chapter 2 Usage 19

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

-zzone See Section 212 [Date option] page 8

These options have no effect and are included solely for consistency with other comamnds(see Section 217 [Environment] page 10) lsquo-qrsquo lsquo-Trsquo

Chapter 3 Hacking 20

3 Hacking

This chapter in contrast to the previous (see Chapter 2 [Usage] page 7) is introspective Itdescribes an important aspect of RCS interop with other programs and development ideasand methods

31 File format

An RCS filersquos contents are described by the grammar below1 Overall the format is freendashformat text In most environments RCS uses the ISO 88591 encoding visible graphiccharacters are (octal) codes 041ndash176 and 240ndash377 and whitespace characters are codes010ndash015 and 040TODO Discuss or point to encoding compatibility issues

311 File format grammar

The meta syntax in this section uses the following conventions lsquo|rsquo (U+7C) separates al-ternatives lsquorsquo (U+7B) and lsquorsquo (U+7D) enclose optional phrases lsquorsquo and lsquorsquo (trailing U+2A)enclose phrases that can be repeated zero or more times lsquorsquo and lsquo+rsquo (trailing U+2B) enclosephrases that must appear at least once and can be repeated terminal symbols are in lsquorsquo(two U+22)

rcstext = admin delta desc deltatext

admin = head num

branch num

access id

symbols sym num

locks id num

strict

integrity intstring

comment string

expand string

delta = num

date num

author id

state id

branches num

next num

commitid sym

desc = desc string

deltatext = num

log string

text string

1 This section is adapted from the lsquorcsfile(5)rsquo manpage written by Walter F Tichy

Chapter 3 Hacking 21

num = digit | +

digit = 0 through 9

id = idchar | +

sym = idchar+

idchar = any visible graphic character except special

special = $ | | | | |

string = any character with doubled

word = id | num | string |

intchar = any character except

thirdp = ^L intchar

intstring = intchar thirdp

312 Additional particulars of the file format

bull In releases prior to 58 (2011-08-30) the grammar included the production

newphrase = id word

and used it in the admin delta and deltatext productions This allowed third-partyprograms to interoperate with RCS by storing opaque (to RCS) data in the file

As of 58 in the name of progress (towards more systematic file integrity support) theonly area reserved for third-party interop is in the (string) value of the integrity fieldspecifically after the first formfeed (U+0C) A further restriction (for all programs) isthat the integrity value must not contain lsquorsquo

bull Whitespace has no significance except in strings However whitespace cannot appearwithin an id num or sym and an RCS file must end with newline (U+0A) Strings areenclosed by lsquorsquo (U+40) If a string contains a lsquorsquo it must be doubled otherwise stringscan contain arbitrary binary data

bull Identifiers are case sensitive Keywords are in lower case only The sets of keywordsand identifiers can overlap

bull Dates which appear after the date keyword are of the form Ymmddhhmmss whereY is the year mm the month (01ndash12) dd the day (01ndash31) hh the hour (00ndash23) mm theminute (00ndash59) and ss the second (00ndash60) Y contains just the last two digits of theyear for years from 1900 through 1999 and all the digits of years thereafter Dates usethe Gregorian calendar times use UTC

bull The delta nodes form a tree All nodes whose numbers consist of a single pair (eg 2321 13) are on the trunk and are linked through the next field in order of decreasing

Chapter 3 Hacking 22

numbers The head field in the admin node points to the head of that sequence (iecontains the highest pair) The branch node in the admin node indicates the defaultbranch (or revision) for most RCS operations If empty the default branch is thehighest branch on the trunk

All delta nodes whose numbers consist of 2n fields (n ge 2) (eg 3111 2122) arelinked as follows All nodes whose first 2nminus1 number fields are identical are linkedthrough the next field in order of increasing numbers For each such sequence thedelta node whose number is identical to the first 2nminus2 number fields of the delta

nodes on that sequence is called the branchpoint The branches field of a node containsa list of the numbers of the first nodes of all sequences for which it is a branchpointThis list is ordered in increasing numbers See Figure 31

Chapter 3 Hacking 23

Head

|

|

v

---------

| |

| 21 |

| |

1213 1311 | | 1222 122111

--------- --------- --------- --------- -------------

^ ^ | ^ ^

| | | | |

| | v | |

| --------- |

| 13 |

--------- -----------

1211 131 1221 12211

--------- ---------

^ | ^

| | |

| v |

| --------- |

| 12 |

---------------------- ---------

121 122

|

|

v

---------

11

Figure 31 The organization of an example RCS file

32 Still missing

RCS is still missing some features The following is an unordered list of ldquoto-do musingsrdquo keptby the RCS maintainers If you would like to hack on an item See Section 33 [Reportingbugs] page 25

bull Add an option to rcsmerge so that it can use an arbitrary program to do the 3-waymerge instead of the default merge Likewise for rcsdiff and diff It should be possibleto pass arbitrary options to these programs and to the subsidiary co invocations

bull Add format options for finer control over the output of ident and rlog Eg thereshould be an easy way for rlog to output lines like lsquosrcmainc 24 wftrsquo one for

Chapter 3 Hacking 24

each locked revision rlog options should have three orthogonal types selecting filesselecting revisions and selecting rlog format

bull Add format options for finer control over the output of keyword strings Eg thereshould be some way to prepend lsquo()rsquo and there should be some way to change lsquo$rsquo tosome other character to disable further substitution These options should make theresulting files uneditable like lsquo-kvrsquo

bull Add long options eg --keyword-substitution Unfortunately RCSrsquos option syntaxis incompatible with getopt Perhaps the best way is to overload rcs eg lsquorcs diff

--keyword-substitution=old filersquo instead of lsquorcsdiff -ko filersquo

bull rlog -rMN should work even if M and N have different numbers of fields so long asM is an ancestor of N or vice versa

bull rcs should evaluate options in order this allows rcs -oS -nS

bull Be able to redo your most recent checkin with minor changes

bull co -u shouldnrsquot complain about a lsquo+wrsquo working file if contents donrsquot change

bull Add a lsquo-rsquo option to take the list of file names from standard input Perhaps the filenames should be null-terminated not newline-terminated so that those that containnewlines are handled properly

bull Permit multiple optionndashfilename pairs eg co -r14 a -r15 b

bull Add an option to break a symbolic link to an RCS file instead of breaking the hardlink that it points to

bull Add ways to specify the earliest revision the most recent revision the earliest or latestrevision on a particular branch and the parent or child of some other revision

bull If a user has multiple locks perhaps ci should fall back on the method of ci -k to figureout which revision to use

bull Add an option to rcsclean to clean directories recursively

bull Write an rcsck program that repairs corrupted RCS files much as fsck repairs corruptedfile systems For example it should remove stale lock files

bull Update the date parser to use the more modern getdatey by Bellovin Salz andBerets or the even more modern getdate by Moraes None of these getdate imple-mentations are as robust as RCSrsquos old warhorse in avoiding problems like arithmeticoverflow so theyrsquoll have to be fixed first (Perhaps we can use gnulib module getdate)

bull Break up the code into a library so that itrsquos easier to write new programs that manip-ulate RCS files and so that useless code is removed from the existing programs Forexample the rcs command contains unnecessary keyword substitution baggage andthe merge command can be greatly pruned

bull Make it easier to use your favorite text editor to edit log messages etc instead ofhaving to type them in irretrievably at the terminal

bull Let the user specify a search path for default branches eg to use L as the defaultbranch if it works and M otherwise Let the user require that at least one entry inthe search path works Let the user say that later entries in the search path are readonly ie one cannot check in changes to them This should be an option settable bylsquoRCSINITrsquo

bull Add a way for a user to see which revisions affected which lines

Chapter 3 Hacking 25

bull Have rlog -nN F print just the revision number that N translates to Eg rlog -nB

F would print the highest revision on the branch B Use this to add an option -bB torcsbranch to freeze the named branch This should interact well with default branches

bull Add a co option that prints the revision number before each line as SCCSrsquos get -m

does [I implemented this for Emacs 22 as a subroutine of vc-annotate qv mdashttn]

33 Reporting bugs

To report bugs or suggest enhancements for GNU RCS please visit its homepage (httpwwwgnuorgsoftwarercs) to find directions on how to ldquofile a bug reportrdquo online orsend electronic mail to help-rcsgnuorg (If you use the web interface you donrsquot needto also send email since that is done automatically)

For bug reports please include enough information for the maintainers to reproduce theproblem Generally speaking that means

bull The RCS version command(s) and manual section(s) involved

bull Hardware and operating system names and versions

bull The contents of any input files necessary to reproduce the bug

bull The expected behavior andor output

bull A description of the problem and samples of any erroneous output

bull Options you gave to configure other than specifying installation directories

bull Anything else that you think would be helpful

When in doubt whether something is needed or not include it Itrsquos better to include toomuch than to leave out something important

Patches are welcome if possible please make them with lsquogit format-patchrsquo and includeChangeLog entries (see Section ldquoChange Logrdquo in The GNU Emacs Manual) Please followthe existing coding style

Appendix A GNU Free Documentation License 26

Appendix A GNU Free Documentation License

Version 13 3 November 2008

Copyright ccopy 2000 2001 2002 2007 2008 Free Software Foundation Inchttpfsforg

Everyone is permitted to copy and distribute verbatim copiesof this license document but changing it is not allowed

0 PREAMBLE

The purpose of this License is to make a manual textbook or other functional anduseful document free in the sense of freedom to assure everyone the effective freedomto copy and redistribute it with or without modifying it either commercially or non-commercially Secondarily this License preserves for the author and publisher a wayto get credit for their work while not being considered responsible for modificationsmade by others

This License is a kind of ldquocopyleftrdquo which means that derivative works of the documentmust themselves be free in the same sense It complements the GNU General PublicLicense which is a copyleft license designed for free software

We have designed this License in order to use it for manuals for free software becausefree software needs free documentation a free program should come with manualsproviding the same freedoms that the software does But this License is not limited tosoftware manuals it can be used for any textual work regardless of subject matter orwhether it is published as a printed book We recommend this License principally forworks whose purpose is instruction or reference

1 APPLICABILITY AND DEFINITIONS

This License applies to any manual or other work in any medium that contains anotice placed by the copyright holder saying it can be distributed under the termsof this License Such a notice grants a world-wide royalty-free license unlimited induration to use that work under the conditions stated herein The ldquoDocumentrdquobelow refers to any such manual or work Any member of the public is a licensee andis addressed as ldquoyourdquo You accept the license if you copy modify or distribute the workin a way requiring permission under copyright law

A ldquoModified Versionrdquo of the Document means any work containing the Document ora portion of it either copied verbatim or with modifications andor translated intoanother language

A ldquoSecondary Sectionrdquo is a named appendix or a front-matter section of the Documentthat deals exclusively with the relationship of the publishers or authors of the Documentto the Documentrsquos overall subject (or to related matters) and contains nothing thatcould fall directly within that overall subject (Thus if the Document is in part atextbook of mathematics a Secondary Section may not explain any mathematics) Therelationship could be a matter of historical connection with the subject or with relatedmatters or of legal commercial philosophical ethical or political position regardingthem

The ldquoInvariant Sectionsrdquo are certain Secondary Sections whose titles are designated asbeing those of Invariant Sections in the notice that says that the Document is released

Appendix A GNU Free Documentation License 27

under this License If a section does not fit the above definition of Secondary then it isnot allowed to be designated as Invariant The Document may contain zero InvariantSections If the Document does not identify any Invariant Sections then there are none

The ldquoCover Textsrdquo are certain short passages of text that are listed as Front-CoverTexts or Back-Cover Texts in the notice that says that the Document is released underthis License A Front-Cover Text may be at most 5 words and a Back-Cover Text maybe at most 25 words

A ldquoTransparentrdquo copy of the Document means a machine-readable copy representedin a format whose specification is available to the general public that is suitable forrevising the document straightforwardly with generic text editors or (for images com-posed of pixels) generic paint programs or (for drawings) some widely available drawingeditor and that is suitable for input to text formatters or for automatic translation toa variety of formats suitable for input to text formatters A copy made in an otherwiseTransparent file format whose markup or absence of markup has been arranged tothwart or discourage subsequent modification by readers is not Transparent An imageformat is not Transparent if used for any substantial amount of text A copy that isnot ldquoTransparentrdquo is called ldquoOpaquerdquo

Examples of suitable formats for Transparent copies include plain ASCII withoutmarkup Texinfo input format LaTEX input format SGML or XML using a publiclyavailable DTD and standard-conforming simple HTML PostScript or PDF designedfor human modification Examples of transparent image formats include PNG XCFand JPG Opaque formats include proprietary formats that can be read and editedonly by proprietary word processors SGML or XML for which the DTD andor pro-cessing tools are not generally available and the machine-generated HTML PostScriptor PDF produced by some word processors for output purposes only

The ldquoTitle Pagerdquo means for a printed book the title page itself plus such followingpages as are needed to hold legibly the material this License requires to appear in thetitle page For works in formats which do not have any title page as such ldquoTitle Pagerdquomeans the text near the most prominent appearance of the workrsquos title preceding thebeginning of the body of the text

The ldquopublisherrdquo means any person or entity that distributes copies of the Documentto the public

A section ldquoEntitled XYZrdquo means a named subunit of the Document whose title eitheris precisely XYZ or contains XYZ in parentheses following text that translates XYZ inanother language (Here XYZ stands for a specific section name mentioned below suchas ldquoAcknowledgementsrdquo ldquoDedicationsrdquo ldquoEndorsementsrdquo or ldquoHistoryrdquo) To ldquoPreservethe Titlerdquo of such a section when you modify the Document means that it remains asection ldquoEntitled XYZrdquo according to this definition

The Document may include Warranty Disclaimers next to the notice which states thatthis License applies to the Document These Warranty Disclaimers are considered tobe included by reference in this License but only as regards disclaiming warrantiesany other implication that these Warranty Disclaimers may have is void and has noeffect on the meaning of this License

2 VERBATIM COPYING

Appendix A GNU Free Documentation License 28

You may copy and distribute the Document in any medium either commercially ornoncommercially provided that this License the copyright notices and the licensenotice saying this License applies to the Document are reproduced in all copies andthat you add no other conditions whatsoever to those of this License You may not usetechnical measures to obstruct or control the reading or further copying of the copiesyou make or distribute However you may accept compensation in exchange for copiesIf you distribute a large enough number of copies you must also follow the conditionsin section 3

You may also lend copies under the same conditions stated above and you may publiclydisplay copies

3 COPYING IN QUANTITY

If you publish printed copies (or copies in media that commonly have printed covers) ofthe Document numbering more than 100 and the Documentrsquos license notice requiresCover Texts you must enclose the copies in covers that carry clearly and legibly allthese Cover Texts Front-Cover Texts on the front cover and Back-Cover Texts onthe back cover Both covers must also clearly and legibly identify you as the publisherof these copies The front cover must present the full title with all words of the titleequally prominent and visible You may add other material on the covers in additionCopying with changes limited to the covers as long as they preserve the title of theDocument and satisfy these conditions can be treated as verbatim copying in otherrespects

If the required texts for either cover are too voluminous to fit legibly you should putthe first ones listed (as many as fit reasonably) on the actual cover and continue therest onto adjacent pages

If you publish or distribute Opaque copies of the Document numbering more than 100you must either include a machine-readable Transparent copy along with each Opaquecopy or state in or with each Opaque copy a computer-network location from whichthe general network-using public has access to download using public-standard networkprotocols a complete Transparent copy of the Document free of added material Ifyou use the latter option you must take reasonably prudent steps when you begindistribution of Opaque copies in quantity to ensure that this Transparent copy willremain thus accessible at the stated location until at least one year after the last timeyou distribute an Opaque copy (directly or through your agents or retailers) of thatedition to the public

It is requested but not required that you contact the authors of the Document wellbefore redistributing any large number of copies to give them a chance to provide youwith an updated version of the Document

4 MODIFICATIONS

You may copy and distribute a Modified Version of the Document under the conditionsof sections 2 and 3 above provided that you release the Modified Version under preciselythis License with the Modified Version filling the role of the Document thus licensingdistribution and modification of the Modified Version to whoever possesses a copy ofit In addition you must do these things in the Modified Version

A Use in the Title Page (and on the covers if any) a title distinct from that of theDocument and from those of previous versions (which should if there were any

Appendix A GNU Free Documentation License 29

be listed in the History section of the Document) You may use the same title asa previous version if the original publisher of that version gives permission

B List on the Title Page as authors one or more persons or entities responsible forauthorship of the modifications in the Modified Version together with at least fiveof the principal authors of the Document (all of its principal authors if it has fewerthan five) unless they release you from this requirement

C State on the Title page the name of the publisher of the Modified Version as thepublisher

D Preserve all the copyright notices of the Document

E Add an appropriate copyright notice for your modifications adjacent to the othercopyright notices

F Include immediately after the copyright notices a license notice giving the publicpermission to use the Modified Version under the terms of this License in the formshown in the Addendum below

G Preserve in that license notice the full lists of Invariant Sections and required CoverTexts given in the Documentrsquos license notice

H Include an unaltered copy of this License

I Preserve the section Entitled ldquoHistoryrdquo Preserve its Title and add to it an itemstating at least the title year new authors and publisher of the Modified Versionas given on the Title Page If there is no section Entitled ldquoHistoryrdquo in the Docu-ment create one stating the title year authors and publisher of the Documentas given on its Title Page then add an item describing the Modified Version asstated in the previous sentence

J Preserve the network location if any given in the Document for public access toa Transparent copy of the Document and likewise the network locations given inthe Document for previous versions it was based on These may be placed in theldquoHistoryrdquo section You may omit a network location for a work that was publishedat least four years before the Document itself or if the original publisher of theversion it refers to gives permission

K For any section Entitled ldquoAcknowledgementsrdquo or ldquoDedicationsrdquo Preserve the Titleof the section and preserve in the section all the substance and tone of each of thecontributor acknowledgements andor dedications given therein

L Preserve all the Invariant Sections of the Document unaltered in their text andin their titles Section numbers or the equivalent are not considered part of thesection titles

M Delete any section Entitled ldquoEndorsementsrdquo Such a section may not be includedin the Modified Version

N Do not retitle any existing section to be Entitled ldquoEndorsementsrdquo or to conflict intitle with any Invariant Section

O Preserve any Warranty Disclaimers

If the Modified Version includes new front-matter sections or appendices that qualifyas Secondary Sections and contain no material copied from the Document you may atyour option designate some or all of these sections as invariant To do this add their

Appendix A GNU Free Documentation License 30

titles to the list of Invariant Sections in the Modified Versionrsquos license notice Thesetitles must be distinct from any other section titles

You may add a section Entitled ldquoEndorsementsrdquo provided it contains nothing butendorsements of your Modified Version by various partiesmdashfor example statements ofpeer review or that the text has been approved by an organization as the authoritativedefinition of a standard

You may add a passage of up to five words as a Front-Cover Text and a passage of upto 25 words as a Back-Cover Text to the end of the list of Cover Texts in the ModifiedVersion Only one passage of Front-Cover Text and one of Back-Cover Text may beadded by (or through arrangements made by) any one entity If the Document alreadyincludes a cover text for the same cover previously added by you or by arrangementmade by the same entity you are acting on behalf of you may not add another butyou may replace the old one on explicit permission from the previous publisher thatadded the old one

The author(s) and publisher(s) of the Document do not by this License give permissionto use their names for publicity for or to assert or imply endorsement of any ModifiedVersion

5 COMBINING DOCUMENTS

You may combine the Document with other documents released under this Licenseunder the terms defined in section 4 above for modified versions provided that youinclude in the combination all of the Invariant Sections of all of the original documentsunmodified and list them all as Invariant Sections of your combined work in its licensenotice and that you preserve all their Warranty Disclaimers

The combined work need only contain one copy of this License and multiple identicalInvariant Sections may be replaced with a single copy If there are multiple InvariantSections with the same name but different contents make the title of each such sectionunique by adding at the end of it in parentheses the name of the original author orpublisher of that section if known or else a unique number Make the same adjustmentto the section titles in the list of Invariant Sections in the license notice of the combinedwork

In the combination you must combine any sections Entitled ldquoHistoryrdquo in the vari-ous original documents forming one section Entitled ldquoHistoryrdquo likewise combine anysections Entitled ldquoAcknowledgementsrdquo and any sections Entitled ldquoDedicationsrdquo Youmust delete all sections Entitled ldquoEndorsementsrdquo

6 COLLECTIONS OF DOCUMENTS

You may make a collection consisting of the Document and other documents releasedunder this License and replace the individual copies of this License in the variousdocuments with a single copy that is included in the collection provided that youfollow the rules of this License for verbatim copying of each of the documents in allother respects

You may extract a single document from such a collection and distribute it individu-ally under this License provided you insert a copy of this License into the extracteddocument and follow this License in all other respects regarding verbatim copying ofthat document

Appendix A GNU Free Documentation License 31

7 AGGREGATION WITH INDEPENDENT WORKS

A compilation of the Document or its derivatives with other separate and independentdocuments or works in or on a volume of a storage or distribution medium is calledan ldquoaggregaterdquo if the copyright resulting from the compilation is not used to limit thelegal rights of the compilationrsquos users beyond what the individual works permit Whenthe Document is included in an aggregate this License does not apply to the otherworks in the aggregate which are not themselves derivative works of the Document

If the Cover Text requirement of section 3 is applicable to these copies of the Documentthen if the Document is less than one half of the entire aggregate the Documentrsquos CoverTexts may be placed on covers that bracket the Document within the aggregate or theelectronic equivalent of covers if the Document is in electronic form Otherwise theymust appear on printed covers that bracket the whole aggregate

8 TRANSLATION

Translation is considered a kind of modification so you may distribute translationsof the Document under the terms of section 4 Replacing Invariant Sections withtranslations requires special permission from their copyright holders but you mayinclude translations of some or all Invariant Sections in addition to the original versionsof these Invariant Sections You may include a translation of this License and all thelicense notices in the Document and any Warranty Disclaimers provided that youalso include the original English version of this License and the original versions ofthose notices and disclaimers In case of a disagreement between the translation andthe original version of this License or a notice or disclaimer the original version willprevail

If a section in the Document is Entitled ldquoAcknowledgementsrdquo ldquoDedicationsrdquo or ldquoHis-toryrdquo the requirement (section 4) to Preserve its Title (section 1) will typically requirechanging the actual title

9 TERMINATION

You may not copy modify sublicense or distribute the Document except as expresslyprovided under this License Any attempt otherwise to copy modify sublicense ordistribute it is void and will automatically terminate your rights under this License

However if you cease all violation of this License then your license from a particularcopyright holder is reinstated (a) provisionally unless and until the copyright holderexplicitly and finally terminates your license and (b) permanently if the copyrightholder fails to notify you of the violation by some reasonable means prior to 60 daysafter the cessation

Moreover your license from a particular copyright holder is reinstated permanently ifthe copyright holder notifies you of the violation by some reasonable means this is thefirst time you have received notice of violation of this License (for any work) from thatcopyright holder and you cure the violation prior to 30 days after your receipt of thenotice

Termination of your rights under this section does not terminate the licenses of partieswho have received copies or rights from you under this License If your rights havebeen terminated and not permanently reinstated receipt of a copy of some or all of thesame material does not give you any rights to use it

Appendix A GNU Free Documentation License 32

10 FUTURE REVISIONS OF THIS LICENSE

The Free Software Foundation may publish new revised versions of the GNU FreeDocumentation License from time to time Such new versions will be similar in spiritto the present version but may differ in detail to address new problems or concernsSee httpwwwgnuorgcopyleft

Each version of the License is given a distinguishing version number If the Documentspecifies that a particular numbered version of this License ldquoor any later versionrdquoapplies to it you have the option of following the terms and conditions either of thatspecified version or of any later version that has been published (not as a draft) bythe Free Software Foundation If the Document does not specify a version number ofthis License you may choose any version ever published (not as a draft) by the FreeSoftware Foundation If the Document specifies that a proxy can decide which futureversions of this License can be used that proxyrsquos public statement of acceptance of aversion permanently authorizes you to choose that version for the Document

11 RELICENSING

ldquoMassive Multiauthor Collaboration Siterdquo (or ldquoMMC Siterdquo) means any World WideWeb server that publishes copyrightable works and also provides prominent facilitiesfor anybody to edit those works A public wiki that anybody can edit is an example ofsuch a server A ldquoMassive Multiauthor Collaborationrdquo (or ldquoMMCrdquo) contained in thesite means any set of copyrightable works thus published on the MMC site

ldquoCC-BY-SArdquo means the Creative Commons Attribution-Share Alike 30 license pub-lished by Creative Commons Corporation a not-for-profit corporation with a principalplace of business in San Francisco California as well as future copyleft versions of thatlicense published by that same organization

ldquoIncorporaterdquo means to publish or republish a Document in whole or in part as partof another Document

An MMC is ldquoeligible for relicensingrdquo if it is licensed under this License and if all worksthat were first published under this License somewhere other than this MMC andsubsequently incorporated in whole or in part into the MMC (1) had no cover textsor invariant sections and (2) were thus incorporated prior to November 1 2008

The operator of an MMC Site may republish an MMC contained in the site underCC-BY-SA on the same site at any time before August 1 2009 provided the MMC iseligible for relicensing

Appendix A GNU Free Documentation License 33

ADDENDUM How to use this License for your documents

To use this License in a document you have written include a copy of the License in thedocument and put the following copyright and license notices just after the title page

Copyright (C) year your name

Permission is granted to copy distribute andor modify this document

under the terms of the GNU Free Documentation License Version 13

or any later version published by the Free Software Foundation

with no Invariant Sections no Front-Cover Texts and no Back-Cover

Texts A copy of the license is included in the section entitled lsquolsquoGNU

Free Documentation Licensersquorsquo

If you have Invariant Sections Front-Cover Texts and Back-Cover Texts replace theldquowith Textsrdquo line with this

with the Invariant Sections being list their titles with

the Front-Cover Texts being list and with the Back-Cover Texts

being list

If you have Invariant Sections without Cover Texts or some other combination of thethree merge those two alternatives to suit the situation

If your document contains nontrivial examples of program code we recommend releasingthese examples in parallel under your choice of free software license such as the GNUGeneral Public License to permit their use in free software

Index 34

Index

Aaccess control policy 3Author 3author specifying 10

Bbehavior prior to version 5 10behavior version 3 10behavior version 4 10binary-old-keyword-value substitution mode 9branch growth 7branch number 2branch tip 2branch default 3bug reporting 25

Ccase sensitivity file format 21checkin 3checklist for bug reports 25checkout 3checkout implicit 5ci invocation 11co invocation 12comma-v file format 1command help 7command version 7command-line option to specify a revision 7credits 1

DDate 3date formats 8date specifying 8dates file format 21default branch 3default branch setting 15deleting revisions 15description of working file 2description text specifying 8

Eempty log message 9emulation previous RCS versions 10encoding file format 20environment variables 10

Ffeatures still missing 23

file names on the command-line 7format RCSfile 20

Ggrammar file format 20

HHeader 3history 1

IId 3ident invocation 13implicit checkout circumstance 5implicit checkout locked 12implicit checkout unlocked 12instantiating a working file 2interaction model 1interactive mode 9invocation ci 11invocation co 12invocation ident 13invocation merge 14invocation rcs 14 15invocation rcsclean 16invocation rcsdiff 17invocation rcsmerge 17invocation rlog 18

Kkeyword-only substitution mode 9keyword-value substitution mode 8keyword-value-locker substitution mode 9keywords table of 3

Llayout of nodes file format 21license 1Locker 3locking a revision 15locking on implicit checkout 12locking non-strict 5locking set non-strict 15locking set strict 15locking strict 5locks in RCS file 3Log 3log message empty 9LOGNAME 11

Index 35

Mmemory limit 11merge invocation 14model interaction 1

NName 4names symbolic 3node layout file format 21non-strict locking 5number branch 2number revision 2

Oold-keyword-value substitution mode 9order of options and file names 7outdating revisions 15overview 1

Ppairing RCS and working files 7patches contributing 25problems 25projects related 1

Qquiet mode 9

Rrange of revisions specifying 7RCS file 2rcs invocation 14 15RCS version emulation 10RCS_MEM_LIMIT 11rcsclean invocation 16rcsdiff invocation 17RCSfile 4RCSfile format 20RCSINIT 10rcsmerge invocation 17removing revisions 15reporting bugs 25Revision 4revision number 2revision range specifying 7

revision specifying 7revisions tree of 3rlog invocation 18

SSource 4specifying a date 8specifying a range of revisions 7specifying a revision 7specifying a state 9specifying a suffix list 10specifying a timedate 8specifying author 10specifying description text 8specifying substitution mode 8State 4state specifying 9strict locking 5substitution mode default 8substitution mode specifying 8suffix list specifying 10symbolic names 3

TTEMP 11third-party interop file format 21Tichy Walter F 1time zone 8timedate specifying 8tip 2tip increment 7TMP 11TMPDIR 11tree of revisions 3

Uunlocking a revision 15USER 11

Vvalue-only substitution mode 9

Wwhitespace file format 21working file description 2working file instantiation 2

  • Overview
    • Credits
    • Concepts
      • Interaction model
      • Working file
      • RCS file
      • Fundamental operations
      • Keywords
        • Quick tour
          • Usage
            • Common elements
              • Revision options
              • Date option
              • Description option
              • Substitution mode option
              • Log message option
              • Misc common options
              • Environment
                • Invoking ci
                • Invoking co
                • Invoking ident
                • Invoking merge
                • Invoking rcs
                  • modern
                  • legacy
                    • Invoking rcsclean
                    • Invoking rcsdiff
                    • Invoking rcsmerge
                    • Invoking rlog
                      • Hacking
                        • File format
                          • File format grammar
                          • Additional particulars of the file format
                            • Still missing
                            • Reporting bugs
                              • GNU Free Documentation License
                              • Index
Page 4: GNU RCS · The RCS file is also known (colloquially) as the “comma-v file”, due to its name often ending in ,v (e.g., a.c,v). A revision number is a branch number followed by

Chapter 1 Overview 1

1 Overview

GNU RCS (Revision Control System) manages multiple revisions of files RCS can storeretrieve log identify and merge revisions It is useful for files that are revised frequentlyeg programs documentation graphics and papers It can handle text as well as binaryfiles although functionality is reduced for the latter

A normal installation includes the commands ci co ident merge rcs rcsclean rcsdiffrcsmerge and rlog (see Chapter 2 [Usage] page 7) These are small and fast programs(amenable to scripting) and indeed the distribution also includes the script rcsfreeze showingsome of the possibilities

RCS works with versions stored on a single filesystem or machine edited by one person ata time Other version control systems such as Bazaar (httpwwwgnuorgsoftwarebazaar) CVS Subversion and Git support distributed access in various ways Which ismore appropriate depends on the task at hand

11 Credits

RCS was designed and built by Walter F Tichy of Purdue University RCS version 3 wasreleased in 1983

Adam Hammer Thomas Narten and Daniel Trinkle of Purdue supported RCS throughversion 43 released in 1990 Guy Harris of Sun contributed many porting fixes PaulEggert of System Development Corporation contributed bug fixes and tuneups Jay Lepreaucontributed 43BSD support

Paul Eggert of Twin Sun wrote the changes for RCS versions 55 and 56 (1991) RichBraun of Kronos and Andy Glew of Intel contributed ideas for new options Bill Hahn ofStratus contributed ideas for setuid support Ideas for piece tables came from Joe Berkovitzof Stratus and Walter F Tichy Matt Cross of Stratus contributed test case ideas AdamHammer of Purdue QAed

Paul Eggert wrote most of the changes for RCS 57 K Richard Pixley of Cygnus Supportcontributed several bug fixes Robert Lupton of Princeton and Daniel Trinkle contributedideas for lsquo$Namersquo expansion Brendan Kehoe of Cygnus Support suggested rlogrsquos -N optionPaul D Smith of Data General suggested improvements in option and error processingAdam Hammer of Purdue QAed

Thien-Thi Nguyen is responsibile for RCS 58 He modernized the code base build sys-tem and manual pages fixing some bugs on the way He added standard --help --versionprocessing and wrote the documentation you are reading (gladly taking inspiration fromthe paper1 and manpages originally written by Walter F Tichy)

12 Concepts

121 Interaction model

The interaction model is straightforward For each working file you initialize its RCS fileonce then enter a cycle of checkout modification and checkin operations Along the way

1 Source (troff) and several output formats are available from the RCS homepage (httpwwwgnuorgsoftwarercs)

Chapter 1 Overview 2

you can tweak some of the RCS filersquos metadata as well All of this is done through RCScommands you need not modify the RCS file directly (and in fact you should probablyavoid doing so lest RCS become confused) This model is somewhat analogous to using alibrary (of books) With a library you sign up for a library card (initialize) then enter acycle of taking a book home (checkout) enjoying it (NB without modification one hopes)and returning it to the library (checkin)

Furthermore you can compare revisions in the RCS file against each other examine theuser- (hopefully high) quality descriptions of the changes each revision embodies mergeselected revisions and so forth

122 Working file

RCS commands operate on one pair of files at a time The working file is what you normallyview and edit (eg a file of C programming language source code named ac) Because theworking filersquos contents can be extracted from the RCS file (called instantiating a workingfile) it can be safely deleted to regain some disk space

123 RCS file

The RCS file is a separate file conventionally placed in the subdirectory RCS wherein RCScommands organize the initial and subsequent revisions of the working file associatingwith each revision a unique revision number along with the remembered particulars of thecheckin that produced it It also contains a description of the working file and various othermetadata described below

The RCS file is also known (colloquially) as the ldquocomma-v filerdquo due to its name oftenending in v (eg acv)

A revision number is a branch number followed by a dot followed by an integer and abranch number is an odd number of integers separated by dot A revision number with onedot (implying a branch number without any dots) is said to be on the trunk All integersare positive For example

11 -- revision number for initial checkin (typically)

branch number 1

94142 -- more complicated (perhaps after much gnarly hacking)

branch number 941

333333333 -- not a valid revision number

however a perfectly valid branch number

The branch point of a non-trunk branch is the revision number formed by removing thebranchrsquos trailing integer To compute the next higher branch or revision number add oneto the trailing integer The highest-numbered revision on a branch is called the tip of thebranch (or branch tip) Continuing the example

11 -- on trunk no branch point

next higher branch number 2

next higher revision number 12

94142 -- not on trunk branch point 94

Chapter 1 Overview 3

next higher branch number 942

next higher revision number 94143

333333333 -- not on trunk branch point 333333

next higher branch number 333333334

next higher revision number 3333333331

In addition to this ldquotreerdquo of thus-linked revisions the RCS file keeps track of the defaultbranch ie the branch whose tip corresponds to the most recent checkin as well as thesymbolic names a list of associations between a user-supplied (and presumably meaningful)symbol and an underlying branch or revision number

The RCS file contains two pieces of information used to implement its access controlpolicy The first is a list of usernames If non-empty only those users listed can modifythe RCS file (via RCS commands) The second is a list of locks ie association betweena username and a revision number If a lock usernamerevno exists that means onlyusername may modify revno (that is do a checkin operation to deposit the next higherrevision or a higher revision number on the same branch as revno)

124 Fundamental operations

The checkin operation records the contents of the working file in the RCS file assigning ita new (normally the next higher) revision number and recording the username timestampstate (a short symbol) and user-supplied log message (a textual description of the changesleading to that revision) It uses diff to find the differences between the tip of the defaultbranch and the working file thereby writing the minimal amount of information needed tobe able to recreate the contents of the previous tip

The checkout operation identifies a specific revision from the RCS file and either dis-plays the content to standard output or instantiates a working file overwriting any currentinstantiation with the selected revision In either case the content may undergo keywordexpansion which replaces text of the form lsquo$Keyword$rsquo with (possibly) different text com-prising the keyword and its value depending on the current keyword expansion mode (seeSection 214 [Substitution mode option] page 8)

125 Keywords

The keywords and their values are

Author The login name of the user who checked in the revision

Date The date and time the revision was checked in May include an appendedtimezone offset

Header A standard header containing the absolute RCS filename the revision numberthe date and time the author the state and the locker (if locked) May includean appended timezone offset

Id Same as lsquoHeaderrsquo except that only the basename appears (no directory com-ponents)

Locker The login name of the user who locked the revision (empty if not locked)

Chapter 1 Overview 4

Log The log message supplied during checkin preceded by a header containing theRCS filename the revision number the author and the date and time Mayinclude an appended timezone offset

Existing log messages are not replaced Instead the new log message is insertedafter lsquo$Log$rsquo This is useful for accumulating a complete change log in asource file

Each inserted line is prefixed by the string that prefixes the lsquo$Log$rsquo line Forexample if the lsquo$Log$rsquo line is

$Log tancc $

then RCS prefixes each line of the log with lsquo rsquo (slash slash space) This isuseful for languages with comments that go to the end of the line

The convention for other languages is to use a lsquo rsquo (space asterisk space)prefix inside a multiline comment For example the initial log comment of a Cprogram conventionally is of the following form

$Log$

For backwards compatibility with older versions of RCS if the log prefix is lsquorsquoor lsquo(rsquo surrounded by optional white space inserted log lines contain a spaceinstead of lsquorsquo or lsquo(rsquo however this usage is obsolescent and should not be reliedon

Name The symbolic name used to check out the revision if any For example lsquoco-rJoersquo generates lsquo$Name Joe $rsquo Plain co generates just lsquo$Name $rsquo

RCSfile The basename of the RCS file

Revision The revision number assigned to the revision

Source The absolute RCS filename

State The state assigned to the revision with the -s option of rcs or ci

13 Quick tour

This section complements the preceding section (see Section 12 [Concepts] page 1) pre-senting a handful of RCS commands in quick succession For details on individual RCScommands See Chapter 2 [Usage] page 7

Suppose you have a file fc that you wish to put under control of RCS If you have notalready done so make an RCS directory with the command

mkdir RCS

Then invoke the checkin command

ci fc

This command creates an RCS file in directory RCS stores fc into it as revision 11 anddeletes fc It also asks you for a description The description should be a synopsis of thecontents of the file All later checkin commands will ask you for a log entry which shouldsummarize the changes that you made

To get back the working file fc in the previous example use the checkout command

Chapter 1 Overview 5

co fc

This command extracts the latest revision from the RCS file and writes it into fc If youwant to edit fc you must lock it as you check it out with the command

co -l fc

You can now edit fc Suppose after some editing you want to know what changes thatyou have made The command

rcsdiff fc

tells you the difference between the most recently checked-in version and the working fileYou can check the file back in by invoking

ci fc

This increments the revision number properly If ci complains with the message

ci error no lock set by your name

then you have tried to check in a file even though you did not lock it when you checked itout Of course it is too late now to do the checkout with locking because another checkoutwould overwrite your modifications Instead invoke

rcs -l fc

This command will lock the latest revision for you unless somebody else got ahead of youalready In this case yoursquoll have to negotiate with that person

Locking assures that you and only you can check in the next update and avoids nastyproblems if several people work on the same file Even if a revision is locked it can still bechecked out for reading compiling etc All that locking prevents is a checkin by anybodybut the locker

If your RCS file is private ie if you are the only person who is going to deposit revisionsinto it strict locking is not needed and you can turn it off If strict locking is turned offthe owner of the RCS file need not have a lock for checkin all others still do Turning strictlocking off and on is done with the commands

rcs -U fc disable strict lockingrcs -L fc enable strict locking

If you donrsquot want to clutter your working directory with RCS files create a subdirectorycalled RCS in your working directory and move all your RCS files there RCS commandswill look first into that directory to find needed files All the commands discussed abovewill still work without any modification See Section 21 [Common elements] page 7

To avoid the deletion of the working file during checkin (in case you want to continueediting or compiling) invoke one of

ci -l fc checkin + locked checkoutci -u fc checkin + unlocked checkout

These commands check in fc as usual then perform an implicit checkout The first formalso locks the checked in revision the second one doesnrsquot Thus these options save you onecheckout operation The first form is useful if you want to continue editing the second oneif you just want to read the file Both update the keyword substitutions in your workingfile see Section 12 [Concepts] page 1

You can give ci the number you want assigned to a checked-in revision Assume all yourrevisions were numbered 11 12 13 etc and you would like to start release 2 Either ofthe commands

Chapter 1 Overview 6

ci -r2 fc

ci -r21 fc

assigns the number 21 to the new revision From then on ci will number the subsequentrevisions with 22 23 etc The corresponding co commands

co -r2 fc

co -r21 fc

retrieve the latest revision numbered 2x and the revision 21 respectively co withouta revision number selects the latest revision on the trunk ie the highest revision with anumber consisting of two fields Numbers with more than two fields are needed for branchesFor example to start a branch at revision 13 invoke

ci -r131 fc

This command starts a branch numbered 1 at revision 13 and assigns the number 1311to the new revision Here is a diagram showing the new revision in relation to its branchand the trunk

11 -- 12 -- 13 -- 14 -- 15

|

[131] -- 1311

For more information about branches See Section 12 [Concepts] page 1

Chapter 2 Usage 7

2 Usage

This chapter describes how to invoke RCS commands including common command-lineelements as well options specific to each command

21 Common elements

All RCS commands accept --help and --version See Section ldquoCommand-Line Interfacesrdquoin The GNU Coding Standards

Aside from --help and --version RCS commands take the form lsquo-letter[arg]rsquo iea hyphen followed by a single letter optionally followed by extra information The squarebraces mean that the extra information is optional (No square braces means that the extrainformation is required) In any case when specified the extra information must abut theletter there can be no intervening whitespace

co -u 14 foo wrong space between -u and 14

co -u14 foo ok

Furthermore options must appear before file names (if any) on the command line

ident foo -q wrong option after file nameident -q foo ok

Lastly pairs of RCS and working files can be specified in three ways (a) both are given (b)only the working file is given (c) only the RCS file is given For (a) both RCS and workingfiles may have arbitrary directory components RCS commands pair them up intelligentlyFor (b) RCS commands will look first into the directory RCS if it exists to find theassociated RCS file

211 Revision options

As to be expected in a revision control system many options are of the form lsquo-flag[rev]rsquowhere flag is a single letter (eg lsquorrsquo) If ommitted rev defaults to the latest revision onthe default branch A revision can be specified in many ways

brn Straightforward dot-notation where br specifies the branch

n Like brn using the default branch

br Like brn using the a command-specific computation of n given the currenttip i For ci (see Section 22 [ci] page 11) n would be i + 1 while for othercommands n would be simply i

name This is the symbolic name of a revision as assigned previously by a ci -n orci -N command

$ The command computes the effective revision by examining the values of key-word expansions in the working file

For commands that accept a range of revisions the syntax is generally rev1rev2 ie tworevisions (specified as described above) separated by a colon

Chapter 2 Usage 8

212 Date option

Some commands accept an option of the form lsquo-ddatersquo to specify a date an absolute pointin time (to second resolution) expressed in a date format These also accept lsquo-zzonersquo tospecify the timezone The special value lsquoLTrsquo stands for the local time zone RCS recognizesmany date formats and time zones For example the following dates are equivalent if localtime is January 11 1990 8pm Pacific Standard Time eight hours west of CoordinatedUniversal Time (UTC)

800 pm lt

400 AM Jan 12 1990 default is UTC

1990-01-12 040000+00 ISO 8601 (UTC)

1990-01-11 200000-08 ISO 8601 (local time)

19900112 040000 traditional RCS format

Thu Jan 11 200000 1990 LT output of ctime(3) + LT

Thu Jan 11 200000 PST 1990 output of date(1)

Fri Jan 12 040000 GMT 1990

Thu 11 Jan 1990 200000 -0800 Internet RFC 822

12-January-1990 0400 WET

Most fields in the date and time can be defaulted The default time zone is normally UTCbut this can be overridden by the -z option The other defaults are determined in the orderyear month day hour minute and second (most to least significant) At least one of thesefields must be provided For omitted fields that are of higher significance than the highestprovided field the time zonersquos current values are assumed For all other omitted fields thelowest possible values are assumed For example without -z the date lsquo20 1030rsquo defaultsto lsquo103000 UTCrsquo of the 20th of the UTC time zonersquos current month and year Note thatfor the shell the datetime must be quoted if it contains spaces

RCS also accepts some other formats which specify only the date portion (omitting thetime portion)

YYYY-DDD DDD is the day of year 1-366

YYYY-wWW-D

WW is the ISO week number 0-53 (actually ISO week numbers are 1-53 week0 is a GNU RCS extension) and D is the ISO day number 1-7 (Monday throughSunday)

213 Description option

Some commands accept an option of the form lsquo-t-textrsquo or lsquo-tfile-namersquo This optionis to set or update the RCS file description text In the first form text is used directlyexcluding the leading hyphen (lsquo-rsquo) that distinguishes the two forms In the second formthe description text is taken from the contents of file-name

214 Substitution mode option

Some commands accept an option of the form -ksubst used to control how keywords (seeSection 12 [Concepts] page 1) are expanded in the working file In the following table ofsubst values the example keyword is lsquoRevisionrsquo and its value is lsquo513rsquo

kv Generate lsquo$Revision 513 $rsquo (dollar-sign keyword colon space value spacedollar-sign) A lockerrsquos name is inserted in the value of the Header Id and

Chapter 2 Usage 9

Locker keyword strings only as a file is being locked ie by ci -l and co -lThis is the default substitution mode

kvl Like -kkv except that a lockerrsquos name is always inserted if the given revisionis currently locked

k Generate lsquo$Revision$rsquo (dollar-sign keyword dollar-sign) This is useful whencomparing different revisions of a file Log messages are inserted after Log key-words even if -kk is specified since this tends to be more useful when mergingchanges

o Like -kkv but use the old value present in the working file just before it waschecked in This can be useful for file formats that cannot tolerate any changesto substrings that happen to take the form of keyword strings

b Like -ko but do all file io in binary mode This makes little difference onPOSIX and Unix hosts but on DOS-like hosts one should use rcs -i -kb toinitialize an RCS file intended to be used for binary files Also on all hostsrcsmerge normally refuses to merge files when -kb is in effect

v Generate lsquo513rsquo (value only) Further keyword substitution cannot be per-formed once the keyword names are removed so this should be used with careBecause of this danger of losing keywords -kv cannot be combined with -land the owner write permission of the working file is turned off to edit the filelater check it out again without -kv

215 Log message option

Both ci and rcs allow a log message to be specified with the -m option If themsg argumentto this option is empty RCS uses the default lsquo empty log message rsquo This particularmessage is handled specially (ie filtered out) by rlog

216 Misc common options

Other common options are -I -q -s -T -V -w -x

-I This option enables interactive mode More precisely it forces interactive modewhereby RCS commands believe that their standard input is a terminal nor-mally a precondition for displaying a prompt to receive input (such as a log mes-sage on checkin) The intention of -I is for scripting situations where standardinput is actually not a terminal but you know beforehand (without prompting)that input is needed and you are ready to provide it on standard input anyway

-q This option enables quiet mode Commands work silently (unless there is anerror condition) and suppress warnings and prompts

-sstate Specify the state to be state

-T This option controls how commands timestamp the RCS file Normally RCScommands set the RCS filersquos timestamp when modifying it in the ldquonaturalrdquo way(without taking any particular care) With -T on the other hand the com-mands either preserve the timestamp (for standalone lockunlock operations)or use the timestamp of the working file (for ci)

Chapter 2 Usage 10

This can be useful if the RCS file is found in a makefile targetrsquos list of pre-requisites (see Section ldquoRule Syntaxrdquo in The GNU Make Manual) that is ifsome target should be rebuilt if the RCS file is newer than it In that case youcan do lsquorcs -u -Trsquo for example to unlock a revision in the RCS file withouttriggering a recompilation

-V Behave like --version ie display command version information and exitsuccessfully NB This option is obsolete and its support will be removed insome future release

-Vn n specifies the RCS (major) version to emulate Valid values for n are 3 4 5Version 5 is the current version so -V5 does nothing special

In versions prior to 5 RCS outputs lsquotrsquo (tab U+09) between the lsquorsquo (colon) andthe value (for keyword substitution) instead of space uses the RCS file commentstring to prefix each line in the Log expansion instead of computing it on thefly from the input text writesreads localtime instead of UTC and displaysslightly different output for rlog

For version 4 the Header expansion unconditionally includes Locker lockeras if the kvl substitution mode were specified (see Section 214 [Substitutionmode option] page 8)

For version 3 the Header expansion omits the directories from the filename andsays only Locked instead of the state

-wlogin Some commands accept an option of the form lsquo-wloginrsquo to specify the loginname of the author of a revision ie ldquowhordquo is responsible

-xsuff Specify suff as the slash-separated list of file name suffixes used to recognizean RCS file The default value is lsquovrsquo that is first try with lsquovrsquo then try withan empty suffix

This basename search occurs within (ie starting from the beginning) the largerdirectory search loop which comprises two candidates dRCS and d where dis the directory component of the working file name For example given theworking file ac in the current directory RCS tries in order these candidates

RCSacv

RCSac

acv

ac

Note that the last candidate is impossible (and is in fact discarded) becausethe working and RCS files cannot have the same name

217 Environment

Various environment variables influence how RCS works

[Environment Variable]RCSINITAnother way to set common options is with the lsquoRCSINITrsquo environment variable Thisis a space-separated list of options Use lsquorsquo (backslash) to escape significant spaceFor example

Chapter 2 Usage 11

Set the value make it available to subsequent commandsRCSINIT=-q -xv -zLT

export RCSINIT

Use it (implicitly)rlog -L foo

This example in Bourne shell syntax arranges for RCS commands to operate as ifeach command-line had prepended lsquo-q -xv -zLTrsquo to the rest of the command-lineThe effective command-line that rlog sees is thus lsquo-q -xv -zLT -L foorsquo

[Environment Variable]RCS_MEM_LIMITNormally for speed commands either memory map or copy into memory the RCS fileif its size is less than thememory limit currently defaulting to ldquounlimitedrdquo Otherwise(or if the initially-tried speedy ways fail) the commands fall back to using standardio routines

You can adjust the memory limit by setting the lsquoRCS_MEM_LIMITrsquo environment variableto a numeric value (measured in kilobytes) An empty value is silently ignored

As a side effect specifying the memory limit inhibits fall-back to slower routines(This env var is mostly intended for testing RCS normally you can leave it unsetProbably it will be removed in a future release)

[Environment Variable]TMPDIR[Environment Variable]TMP[Environment Variable]TEMP

Commands sometimes create temporary files normally in a system-dependent direc-tory such as tmp You can override this directory by specifying another one asthe value of one of the environment variables TMPDIR TMP or TEMP (checked in thatorder)

[Environment Variable]LOGNAME[Environment Variable]USER

Absent -wlogin or when login is omitted (see Section 216 [Misc common options]page 9) commands check environment variables LOGNAME and USER (in that order)If neither of these are set RCS queries the host for and uses your login

22 Invoking ci

rcs ci [options] file

(or ldquocirdquo instead of ldquorcs cirdquo)

The ci command adds a revision to the RCS file reflecting the current state of the workingfile This operation is also known as ldquocheckinrdquo

-f[rev] Force new entry even if no content changed

-I[rev]

-q[rev] See Section 216 [Misc common options] page 9

-i[rev] Initial checkin error if the RCS file already exists

-j[rev] Just checkin donrsquot initialize error if the RCS file does not exist

Chapter 2 Usage 12

-k[rev] Compute revision from working file keywords

-r Release lock and delete working file

-rrev Do normal checkin

-l[rev] Like -r but immediately checkout locked (co -l) afterwards

-u[rev] Like -l but checkout unlocked (co -u)

-M[rev] Reset working file mtime (relevant for -l -u)

Multiple flags in -fiIjklMqru may be given except for -r -l -u which are mutuallyexclusive For a fully specified revision of the form brn nmust be greater than any existingon br or br must be new If rev is omitted compute it from the last lock (co -l) perhapsstarting a new branch If there is no lock use defbr(L+1) See Section 211 [Revisionoptions] page 7

-d[date]

-zzone See Section 212 [Date option] page 8 If no date specified use the workingfile modification time

-m[msg] Use msg as the log message See Section 215 [Log message option] page 9

-nname

-Nname Assign symbolic name to the entry For -n name must be new (no previousassignment) For -N overwrite any previous assignment

-sstate See Section 216 [Misc common options] page 9 Set the state

-t-text

-tfile-name

See Section 213 [Description option] page 8

-T Set the RCS filersquos modification time to the new revisionrsquos time if the former pre-cedes the latter and there is a new revision preserve the RCS filersquos modificationtime otherwise

-wwho Use who as the author

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

23 Invoking co

rcs co [options] file

(or ldquocordquo instead of ldquorcs cordquo)

The co command retrieves a revision from the RCS file writing a new working file Thisoperation is also known as ldquocheckoutrdquo

-f[rev] Force overwrite of working file

-I[rev]

-q[rev] See Section 216 [Misc common options] page 9

-p[rev] Write to stdout instead of the working file

Chapter 2 Usage 13

-r[rev] Normal checkout

-l[rev] Like -r but also lock

-u[rev] Like -l but unlock

-M[rev] Reset working file mtime (relevant for -l -u)

Multiple flags in -fIlMpqru may be given except for -r -l -u which are mutuallyexclusive See Section 211 [Revision options] page 7

-ksubst See Section 214 [Substitution mode option] page 8

-ddate

-zzone See Section 212 [Date option] page 8 Select latest before or on date

-jjoins Merge using joins a list of revrev pairs NB This option is obsolete (seeSection 29 [rcsmerge] page 17)

-sstate See Section 216 [Misc common options] page 9 Select matching state

-S Enable self-same mode In this mode the owner of a lock is unimportantjust that it exists Effectively this prevents you from checking out the samerevision twice

$ whoami

ttn

$ co -l -f z

RCSzv --gt z

revision 11 (locked)

done

$ co -S -l -f z

RCSzv --gt z

co RCSzv Revision 11 is already locked by ttn

-T Preserve the modification time on the RCS file even if it changes because a lockis added or removed

-wwho Select matching login who

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

24 Invoking ident

ident [options] [file ]

If no file is specified scan standard input The ident command scans its input for keywords(see Section 12 [Concepts] page 1) displaying to standard output what it finds

-q Normally if no patterns are found for a file ident emits a warning This optionsuppresses the warning

Chapter 2 Usage 14

-V Note that -Vn is not a valid option for ident in contrast to most other RCScommands (see Section 216 [Misc common options] page 9)

In addition to the normal keyword pattern for Subversion 12 (and later) compatibility1ident also recognizes patterns having one of the forms

$keyword text $

two colons and space after keyword

space before ending $

$keyword text$

two colons and space after keyword

hash before ending $

25 Invoking merge

merge [options] receiving-sibling parent other-sibling

The merge command combines the differences between a the parent and the other siblingand the differences between the parent and the receiving sibling It writes the result to thereceiving sibling

-A

-E

-e Use diff3 -A -E (default) or -e respectively

-p Write to stdout instead of overwriting receiving-sibling

-q See Section 216 [Misc common options] page 9 Suppress conflict warnings

-Llabel (up to three times) Specify the conflict labels for receiving-sibling parent andother-sibling respectively

-V Note that -Vn is not a valid option for merge in contrast to most other RCScommands (see Section 216 [Misc common options] page 9)

26 Invoking rcs

The rcs command is unique in the set of RCS programs in that it has two usages themodern (for RCS 590 and later) and the legacy

261 modern

rcs [options] command [command-arg ]

This rcs usage dispatches to command passing along command-arg without interpreta-tion

--commands

Display a list of available commands including a one-line description and exitsuccessfully

1 The fixed-length keyword syntax is described in detail in Version Control with Subversion chapterldquoAdvanced Topicsrdquo section ldquoKeyword Substitutionrdquo

Chapter 2 Usage 15

--aliases

Display a list of command aliases and exit successfully

--help command

Display help for a particular command and exit successfully For example todisplay help for the legacy interface use

--help frob

262 legacy

rcs frob [options] file

(or ldquorcsrdquo instead of ldquorcs frobrdquo)

This rcs usage performs various administrative operations on the RCS file depending onthe options given

-i Create and initialize a new RCS file

-L Set strict locking

-U Set non-strict locking

-M Donrsquot send mail when breaking someone elsersquos lock

-T Preserve the modification time on the RCS file unless a revision is removed

-I

-q See Section 216 [Misc common options] page 9

-alogins Append logins (comma-separated list of usernames) to access-list

-e[logins]

Erase logins (comma-separated list of usernames) from access-list If logins isomitted clear the access-list

-Afile-name

Append access-list of file-name to current access-list

-b[rev] Set default branch to that of rev or highest branch on trunk if rev is omitted

-l[rev] Lock a revision

-u[rev] Unlock a revision

-cstring Set comment leader to string NB Donrsquot use obsolete

-ksubst See Section 214 [Substitution mode option] page 8

-mrev[msg]

Replace log message with msg See Section 215 [Log message option] page 9

-nname[[rev]]

If rev is omitted delete symbolic name Otherwise associate name with rev name must be new

-Nname[[rev]]

Like -n but overwrite any previous assignment

-orange Delete (also known as ldquooutdaterdquo) revisions in range

Chapter 2 Usage 16

rev single revision

br latest revision on branch br

rev1rev2

rev1 to rev2 on same branch inclusive

rev beginning of branch to rev

rev rev to end of branch

-sstate[rev]

See Section 216 [Misc common options] page 9 Set state

-t-text

-tfile-name

See Section 213 [Description option] page 8 Replace description

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

These options have no effect and are included solely for consistency with other comamnds(see Section 217 [Environment] page 10) -zzone

27 Invoking rcsclean

rcs clean [options] [file ]

(or ldquorcscleanrdquo instead of ldquorcs cleanrdquo)

The rcsclean command removes working files that are not being worked on If given -u italso unlocks and removes working files that are being worked on but have not changed Ifno file is specified operate on all the working files in the current directory

-r[rev] Specify revision

-u[rev] Unlock if is locked and no differences found

-n[rev] Dry run (no act donrsquot operate)

-q[rev] See Section 216 [Misc common options] page 9

-ksubst See Section 214 [Substitution mode option] page 8

-T Preserve the modification time on the RCS file even it changes because a lockis removed

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

-zzone See Section 212 [Date option] page 8

Chapter 2 Usage 17

28 Invoking rcsdiff

rcs diff [options] file

(or ldquorcsdiffrdquo instead of ldquorcs diffrdquo)

The rcsdiff command runs diff to compare two revisions in an RCS file See Section ldquoIn-voking diffrdquo in The GNU Diffutils Manaual

-rrev (zero one or two times) Name a revision If given two revisions (lsquo-rrev1-rrev2rsquo) compare those revisions If given only one revision (lsquo-rrevrsquo) comparethe working file with it If given no revisions compare the working file with thelatest revision on the default branch

-ksubst See Section 214 [Substitution mode option] page 8

-q See Section 216 [Misc common options] page 9

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

-zzone See Section 212 [Date option] page 8

These options have no effect and are included solely for consistency with other comamnds(see Section 217 [Environment] page 10) -T

Additionally the following options (and their argument if any) are passed to the underlyingdiff command

-0 -1 -2 -3 -4 -5 -6 -7 -8 -9 -B -C -D -F -H -I

-L -U -W -a -b -c -d -e -f -h -i -n -p -t -u -w -y

long options (that start with --)

(Not all of these options are meaningful)

29 Invoking rcsmerge

rcs merge [options] file

(or ldquorcsmergerdquo instead of ldquorcs mergerdquo)

The rcsmerge command incorporates the changes between two revisions of an RCS file intothe corresponding working file

-A

-E

-e Passed to the diff3 command The default if none are specified is -E With -esuppress warnings on conflict The -A style generates the most verbose outputSee Section ldquoInvoking diff3rdquo in The GNU Diffutils Manual

-p[rev] Write to stdout instead of overwriting the working file

-q[rev] See Section 216 [Misc common options] page 9

-rrev (one or two times) specify a revision

One or two revisions must be specified (using -p -q -r) If only one is specified the secondrevision defaults to the latest revision on the default branch

Chapter 2 Usage 18

-ksubst See Section 214 [Substitution mode option] page 8

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

-zzone See Section 212 [Date option] page 8

These options have no effect and are included solely for consistency with other comamnds(see Section 217 [Environment] page 10) -T

210 Invoking rlog

rcs log [options] file

(or ldquorlogrdquo instead of ldquorcs logrdquo)

The rlog command displays information about RCS files

-L Ignore RCS files with no locks set

-R Print only the name of the RCS file

-h Print only the ldquoheaderrdquo information

-t Like -h but also include the description

-N Omit symbolic names

-b Select the default branch

-ddates See Section 212 [Date option] page 8 Select revisions based on timestampin the range dates with spec

d single revision d or earlier

d1ltd2

d2gtd1 between d1 and d2 exclusive

ltd

dgt before d

gtd

dlt after d

Instead of lsquoltrsquo or lsquogtrsquo you can use lsquolt=rsquo or lsquogt=rsquo respectively to specify inclusiveranges dates may also be a list of semicolon-separated specs

-l[who] Select revisions locked by who (comma-separated list of usernames) only or byanyone if who is omitted

-r[revs] Select revisions in revs a comma-separated list of range specs one of revrev rev rev1rev2

-sstates See Section 216 [Misc common options] page 9 states can also be a comma-separated list of states Select revisions with specified state(s)

-w[who] Select revisions checked in by who (comma-separated list of usernames) or bythe user if who is omitted

Chapter 2 Usage 19

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

-zzone See Section 212 [Date option] page 8

These options have no effect and are included solely for consistency with other comamnds(see Section 217 [Environment] page 10) lsquo-qrsquo lsquo-Trsquo

Chapter 3 Hacking 20

3 Hacking

This chapter in contrast to the previous (see Chapter 2 [Usage] page 7) is introspective Itdescribes an important aspect of RCS interop with other programs and development ideasand methods

31 File format

An RCS filersquos contents are described by the grammar below1 Overall the format is freendashformat text In most environments RCS uses the ISO 88591 encoding visible graphiccharacters are (octal) codes 041ndash176 and 240ndash377 and whitespace characters are codes010ndash015 and 040TODO Discuss or point to encoding compatibility issues

311 File format grammar

The meta syntax in this section uses the following conventions lsquo|rsquo (U+7C) separates al-ternatives lsquorsquo (U+7B) and lsquorsquo (U+7D) enclose optional phrases lsquorsquo and lsquorsquo (trailing U+2A)enclose phrases that can be repeated zero or more times lsquorsquo and lsquo+rsquo (trailing U+2B) enclosephrases that must appear at least once and can be repeated terminal symbols are in lsquorsquo(two U+22)

rcstext = admin delta desc deltatext

admin = head num

branch num

access id

symbols sym num

locks id num

strict

integrity intstring

comment string

expand string

delta = num

date num

author id

state id

branches num

next num

commitid sym

desc = desc string

deltatext = num

log string

text string

1 This section is adapted from the lsquorcsfile(5)rsquo manpage written by Walter F Tichy

Chapter 3 Hacking 21

num = digit | +

digit = 0 through 9

id = idchar | +

sym = idchar+

idchar = any visible graphic character except special

special = $ | | | | |

string = any character with doubled

word = id | num | string |

intchar = any character except

thirdp = ^L intchar

intstring = intchar thirdp

312 Additional particulars of the file format

bull In releases prior to 58 (2011-08-30) the grammar included the production

newphrase = id word

and used it in the admin delta and deltatext productions This allowed third-partyprograms to interoperate with RCS by storing opaque (to RCS) data in the file

As of 58 in the name of progress (towards more systematic file integrity support) theonly area reserved for third-party interop is in the (string) value of the integrity fieldspecifically after the first formfeed (U+0C) A further restriction (for all programs) isthat the integrity value must not contain lsquorsquo

bull Whitespace has no significance except in strings However whitespace cannot appearwithin an id num or sym and an RCS file must end with newline (U+0A) Strings areenclosed by lsquorsquo (U+40) If a string contains a lsquorsquo it must be doubled otherwise stringscan contain arbitrary binary data

bull Identifiers are case sensitive Keywords are in lower case only The sets of keywordsand identifiers can overlap

bull Dates which appear after the date keyword are of the form Ymmddhhmmss whereY is the year mm the month (01ndash12) dd the day (01ndash31) hh the hour (00ndash23) mm theminute (00ndash59) and ss the second (00ndash60) Y contains just the last two digits of theyear for years from 1900 through 1999 and all the digits of years thereafter Dates usethe Gregorian calendar times use UTC

bull The delta nodes form a tree All nodes whose numbers consist of a single pair (eg 2321 13) are on the trunk and are linked through the next field in order of decreasing

Chapter 3 Hacking 22

numbers The head field in the admin node points to the head of that sequence (iecontains the highest pair) The branch node in the admin node indicates the defaultbranch (or revision) for most RCS operations If empty the default branch is thehighest branch on the trunk

All delta nodes whose numbers consist of 2n fields (n ge 2) (eg 3111 2122) arelinked as follows All nodes whose first 2nminus1 number fields are identical are linkedthrough the next field in order of increasing numbers For each such sequence thedelta node whose number is identical to the first 2nminus2 number fields of the delta

nodes on that sequence is called the branchpoint The branches field of a node containsa list of the numbers of the first nodes of all sequences for which it is a branchpointThis list is ordered in increasing numbers See Figure 31

Chapter 3 Hacking 23

Head

|

|

v

---------

| |

| 21 |

| |

1213 1311 | | 1222 122111

--------- --------- --------- --------- -------------

^ ^ | ^ ^

| | | | |

| | v | |

| --------- |

| 13 |

--------- -----------

1211 131 1221 12211

--------- ---------

^ | ^

| | |

| v |

| --------- |

| 12 |

---------------------- ---------

121 122

|

|

v

---------

11

Figure 31 The organization of an example RCS file

32 Still missing

RCS is still missing some features The following is an unordered list of ldquoto-do musingsrdquo keptby the RCS maintainers If you would like to hack on an item See Section 33 [Reportingbugs] page 25

bull Add an option to rcsmerge so that it can use an arbitrary program to do the 3-waymerge instead of the default merge Likewise for rcsdiff and diff It should be possibleto pass arbitrary options to these programs and to the subsidiary co invocations

bull Add format options for finer control over the output of ident and rlog Eg thereshould be an easy way for rlog to output lines like lsquosrcmainc 24 wftrsquo one for

Chapter 3 Hacking 24

each locked revision rlog options should have three orthogonal types selecting filesselecting revisions and selecting rlog format

bull Add format options for finer control over the output of keyword strings Eg thereshould be some way to prepend lsquo()rsquo and there should be some way to change lsquo$rsquo tosome other character to disable further substitution These options should make theresulting files uneditable like lsquo-kvrsquo

bull Add long options eg --keyword-substitution Unfortunately RCSrsquos option syntaxis incompatible with getopt Perhaps the best way is to overload rcs eg lsquorcs diff

--keyword-substitution=old filersquo instead of lsquorcsdiff -ko filersquo

bull rlog -rMN should work even if M and N have different numbers of fields so long asM is an ancestor of N or vice versa

bull rcs should evaluate options in order this allows rcs -oS -nS

bull Be able to redo your most recent checkin with minor changes

bull co -u shouldnrsquot complain about a lsquo+wrsquo working file if contents donrsquot change

bull Add a lsquo-rsquo option to take the list of file names from standard input Perhaps the filenames should be null-terminated not newline-terminated so that those that containnewlines are handled properly

bull Permit multiple optionndashfilename pairs eg co -r14 a -r15 b

bull Add an option to break a symbolic link to an RCS file instead of breaking the hardlink that it points to

bull Add ways to specify the earliest revision the most recent revision the earliest or latestrevision on a particular branch and the parent or child of some other revision

bull If a user has multiple locks perhaps ci should fall back on the method of ci -k to figureout which revision to use

bull Add an option to rcsclean to clean directories recursively

bull Write an rcsck program that repairs corrupted RCS files much as fsck repairs corruptedfile systems For example it should remove stale lock files

bull Update the date parser to use the more modern getdatey by Bellovin Salz andBerets or the even more modern getdate by Moraes None of these getdate imple-mentations are as robust as RCSrsquos old warhorse in avoiding problems like arithmeticoverflow so theyrsquoll have to be fixed first (Perhaps we can use gnulib module getdate)

bull Break up the code into a library so that itrsquos easier to write new programs that manip-ulate RCS files and so that useless code is removed from the existing programs Forexample the rcs command contains unnecessary keyword substitution baggage andthe merge command can be greatly pruned

bull Make it easier to use your favorite text editor to edit log messages etc instead ofhaving to type them in irretrievably at the terminal

bull Let the user specify a search path for default branches eg to use L as the defaultbranch if it works and M otherwise Let the user require that at least one entry inthe search path works Let the user say that later entries in the search path are readonly ie one cannot check in changes to them This should be an option settable bylsquoRCSINITrsquo

bull Add a way for a user to see which revisions affected which lines

Chapter 3 Hacking 25

bull Have rlog -nN F print just the revision number that N translates to Eg rlog -nB

F would print the highest revision on the branch B Use this to add an option -bB torcsbranch to freeze the named branch This should interact well with default branches

bull Add a co option that prints the revision number before each line as SCCSrsquos get -m

does [I implemented this for Emacs 22 as a subroutine of vc-annotate qv mdashttn]

33 Reporting bugs

To report bugs or suggest enhancements for GNU RCS please visit its homepage (httpwwwgnuorgsoftwarercs) to find directions on how to ldquofile a bug reportrdquo online orsend electronic mail to help-rcsgnuorg (If you use the web interface you donrsquot needto also send email since that is done automatically)

For bug reports please include enough information for the maintainers to reproduce theproblem Generally speaking that means

bull The RCS version command(s) and manual section(s) involved

bull Hardware and operating system names and versions

bull The contents of any input files necessary to reproduce the bug

bull The expected behavior andor output

bull A description of the problem and samples of any erroneous output

bull Options you gave to configure other than specifying installation directories

bull Anything else that you think would be helpful

When in doubt whether something is needed or not include it Itrsquos better to include toomuch than to leave out something important

Patches are welcome if possible please make them with lsquogit format-patchrsquo and includeChangeLog entries (see Section ldquoChange Logrdquo in The GNU Emacs Manual) Please followthe existing coding style

Appendix A GNU Free Documentation License 26

Appendix A GNU Free Documentation License

Version 13 3 November 2008

Copyright ccopy 2000 2001 2002 2007 2008 Free Software Foundation Inchttpfsforg

Everyone is permitted to copy and distribute verbatim copiesof this license document but changing it is not allowed

0 PREAMBLE

The purpose of this License is to make a manual textbook or other functional anduseful document free in the sense of freedom to assure everyone the effective freedomto copy and redistribute it with or without modifying it either commercially or non-commercially Secondarily this License preserves for the author and publisher a wayto get credit for their work while not being considered responsible for modificationsmade by others

This License is a kind of ldquocopyleftrdquo which means that derivative works of the documentmust themselves be free in the same sense It complements the GNU General PublicLicense which is a copyleft license designed for free software

We have designed this License in order to use it for manuals for free software becausefree software needs free documentation a free program should come with manualsproviding the same freedoms that the software does But this License is not limited tosoftware manuals it can be used for any textual work regardless of subject matter orwhether it is published as a printed book We recommend this License principally forworks whose purpose is instruction or reference

1 APPLICABILITY AND DEFINITIONS

This License applies to any manual or other work in any medium that contains anotice placed by the copyright holder saying it can be distributed under the termsof this License Such a notice grants a world-wide royalty-free license unlimited induration to use that work under the conditions stated herein The ldquoDocumentrdquobelow refers to any such manual or work Any member of the public is a licensee andis addressed as ldquoyourdquo You accept the license if you copy modify or distribute the workin a way requiring permission under copyright law

A ldquoModified Versionrdquo of the Document means any work containing the Document ora portion of it either copied verbatim or with modifications andor translated intoanother language

A ldquoSecondary Sectionrdquo is a named appendix or a front-matter section of the Documentthat deals exclusively with the relationship of the publishers or authors of the Documentto the Documentrsquos overall subject (or to related matters) and contains nothing thatcould fall directly within that overall subject (Thus if the Document is in part atextbook of mathematics a Secondary Section may not explain any mathematics) Therelationship could be a matter of historical connection with the subject or with relatedmatters or of legal commercial philosophical ethical or political position regardingthem

The ldquoInvariant Sectionsrdquo are certain Secondary Sections whose titles are designated asbeing those of Invariant Sections in the notice that says that the Document is released

Appendix A GNU Free Documentation License 27

under this License If a section does not fit the above definition of Secondary then it isnot allowed to be designated as Invariant The Document may contain zero InvariantSections If the Document does not identify any Invariant Sections then there are none

The ldquoCover Textsrdquo are certain short passages of text that are listed as Front-CoverTexts or Back-Cover Texts in the notice that says that the Document is released underthis License A Front-Cover Text may be at most 5 words and a Back-Cover Text maybe at most 25 words

A ldquoTransparentrdquo copy of the Document means a machine-readable copy representedin a format whose specification is available to the general public that is suitable forrevising the document straightforwardly with generic text editors or (for images com-posed of pixels) generic paint programs or (for drawings) some widely available drawingeditor and that is suitable for input to text formatters or for automatic translation toa variety of formats suitable for input to text formatters A copy made in an otherwiseTransparent file format whose markup or absence of markup has been arranged tothwart or discourage subsequent modification by readers is not Transparent An imageformat is not Transparent if used for any substantial amount of text A copy that isnot ldquoTransparentrdquo is called ldquoOpaquerdquo

Examples of suitable formats for Transparent copies include plain ASCII withoutmarkup Texinfo input format LaTEX input format SGML or XML using a publiclyavailable DTD and standard-conforming simple HTML PostScript or PDF designedfor human modification Examples of transparent image formats include PNG XCFand JPG Opaque formats include proprietary formats that can be read and editedonly by proprietary word processors SGML or XML for which the DTD andor pro-cessing tools are not generally available and the machine-generated HTML PostScriptor PDF produced by some word processors for output purposes only

The ldquoTitle Pagerdquo means for a printed book the title page itself plus such followingpages as are needed to hold legibly the material this License requires to appear in thetitle page For works in formats which do not have any title page as such ldquoTitle Pagerdquomeans the text near the most prominent appearance of the workrsquos title preceding thebeginning of the body of the text

The ldquopublisherrdquo means any person or entity that distributes copies of the Documentto the public

A section ldquoEntitled XYZrdquo means a named subunit of the Document whose title eitheris precisely XYZ or contains XYZ in parentheses following text that translates XYZ inanother language (Here XYZ stands for a specific section name mentioned below suchas ldquoAcknowledgementsrdquo ldquoDedicationsrdquo ldquoEndorsementsrdquo or ldquoHistoryrdquo) To ldquoPreservethe Titlerdquo of such a section when you modify the Document means that it remains asection ldquoEntitled XYZrdquo according to this definition

The Document may include Warranty Disclaimers next to the notice which states thatthis License applies to the Document These Warranty Disclaimers are considered tobe included by reference in this License but only as regards disclaiming warrantiesany other implication that these Warranty Disclaimers may have is void and has noeffect on the meaning of this License

2 VERBATIM COPYING

Appendix A GNU Free Documentation License 28

You may copy and distribute the Document in any medium either commercially ornoncommercially provided that this License the copyright notices and the licensenotice saying this License applies to the Document are reproduced in all copies andthat you add no other conditions whatsoever to those of this License You may not usetechnical measures to obstruct or control the reading or further copying of the copiesyou make or distribute However you may accept compensation in exchange for copiesIf you distribute a large enough number of copies you must also follow the conditionsin section 3

You may also lend copies under the same conditions stated above and you may publiclydisplay copies

3 COPYING IN QUANTITY

If you publish printed copies (or copies in media that commonly have printed covers) ofthe Document numbering more than 100 and the Documentrsquos license notice requiresCover Texts you must enclose the copies in covers that carry clearly and legibly allthese Cover Texts Front-Cover Texts on the front cover and Back-Cover Texts onthe back cover Both covers must also clearly and legibly identify you as the publisherof these copies The front cover must present the full title with all words of the titleequally prominent and visible You may add other material on the covers in additionCopying with changes limited to the covers as long as they preserve the title of theDocument and satisfy these conditions can be treated as verbatim copying in otherrespects

If the required texts for either cover are too voluminous to fit legibly you should putthe first ones listed (as many as fit reasonably) on the actual cover and continue therest onto adjacent pages

If you publish or distribute Opaque copies of the Document numbering more than 100you must either include a machine-readable Transparent copy along with each Opaquecopy or state in or with each Opaque copy a computer-network location from whichthe general network-using public has access to download using public-standard networkprotocols a complete Transparent copy of the Document free of added material Ifyou use the latter option you must take reasonably prudent steps when you begindistribution of Opaque copies in quantity to ensure that this Transparent copy willremain thus accessible at the stated location until at least one year after the last timeyou distribute an Opaque copy (directly or through your agents or retailers) of thatedition to the public

It is requested but not required that you contact the authors of the Document wellbefore redistributing any large number of copies to give them a chance to provide youwith an updated version of the Document

4 MODIFICATIONS

You may copy and distribute a Modified Version of the Document under the conditionsof sections 2 and 3 above provided that you release the Modified Version under preciselythis License with the Modified Version filling the role of the Document thus licensingdistribution and modification of the Modified Version to whoever possesses a copy ofit In addition you must do these things in the Modified Version

A Use in the Title Page (and on the covers if any) a title distinct from that of theDocument and from those of previous versions (which should if there were any

Appendix A GNU Free Documentation License 29

be listed in the History section of the Document) You may use the same title asa previous version if the original publisher of that version gives permission

B List on the Title Page as authors one or more persons or entities responsible forauthorship of the modifications in the Modified Version together with at least fiveof the principal authors of the Document (all of its principal authors if it has fewerthan five) unless they release you from this requirement

C State on the Title page the name of the publisher of the Modified Version as thepublisher

D Preserve all the copyright notices of the Document

E Add an appropriate copyright notice for your modifications adjacent to the othercopyright notices

F Include immediately after the copyright notices a license notice giving the publicpermission to use the Modified Version under the terms of this License in the formshown in the Addendum below

G Preserve in that license notice the full lists of Invariant Sections and required CoverTexts given in the Documentrsquos license notice

H Include an unaltered copy of this License

I Preserve the section Entitled ldquoHistoryrdquo Preserve its Title and add to it an itemstating at least the title year new authors and publisher of the Modified Versionas given on the Title Page If there is no section Entitled ldquoHistoryrdquo in the Docu-ment create one stating the title year authors and publisher of the Documentas given on its Title Page then add an item describing the Modified Version asstated in the previous sentence

J Preserve the network location if any given in the Document for public access toa Transparent copy of the Document and likewise the network locations given inthe Document for previous versions it was based on These may be placed in theldquoHistoryrdquo section You may omit a network location for a work that was publishedat least four years before the Document itself or if the original publisher of theversion it refers to gives permission

K For any section Entitled ldquoAcknowledgementsrdquo or ldquoDedicationsrdquo Preserve the Titleof the section and preserve in the section all the substance and tone of each of thecontributor acknowledgements andor dedications given therein

L Preserve all the Invariant Sections of the Document unaltered in their text andin their titles Section numbers or the equivalent are not considered part of thesection titles

M Delete any section Entitled ldquoEndorsementsrdquo Such a section may not be includedin the Modified Version

N Do not retitle any existing section to be Entitled ldquoEndorsementsrdquo or to conflict intitle with any Invariant Section

O Preserve any Warranty Disclaimers

If the Modified Version includes new front-matter sections or appendices that qualifyas Secondary Sections and contain no material copied from the Document you may atyour option designate some or all of these sections as invariant To do this add their

Appendix A GNU Free Documentation License 30

titles to the list of Invariant Sections in the Modified Versionrsquos license notice Thesetitles must be distinct from any other section titles

You may add a section Entitled ldquoEndorsementsrdquo provided it contains nothing butendorsements of your Modified Version by various partiesmdashfor example statements ofpeer review or that the text has been approved by an organization as the authoritativedefinition of a standard

You may add a passage of up to five words as a Front-Cover Text and a passage of upto 25 words as a Back-Cover Text to the end of the list of Cover Texts in the ModifiedVersion Only one passage of Front-Cover Text and one of Back-Cover Text may beadded by (or through arrangements made by) any one entity If the Document alreadyincludes a cover text for the same cover previously added by you or by arrangementmade by the same entity you are acting on behalf of you may not add another butyou may replace the old one on explicit permission from the previous publisher thatadded the old one

The author(s) and publisher(s) of the Document do not by this License give permissionto use their names for publicity for or to assert or imply endorsement of any ModifiedVersion

5 COMBINING DOCUMENTS

You may combine the Document with other documents released under this Licenseunder the terms defined in section 4 above for modified versions provided that youinclude in the combination all of the Invariant Sections of all of the original documentsunmodified and list them all as Invariant Sections of your combined work in its licensenotice and that you preserve all their Warranty Disclaimers

The combined work need only contain one copy of this License and multiple identicalInvariant Sections may be replaced with a single copy If there are multiple InvariantSections with the same name but different contents make the title of each such sectionunique by adding at the end of it in parentheses the name of the original author orpublisher of that section if known or else a unique number Make the same adjustmentto the section titles in the list of Invariant Sections in the license notice of the combinedwork

In the combination you must combine any sections Entitled ldquoHistoryrdquo in the vari-ous original documents forming one section Entitled ldquoHistoryrdquo likewise combine anysections Entitled ldquoAcknowledgementsrdquo and any sections Entitled ldquoDedicationsrdquo Youmust delete all sections Entitled ldquoEndorsementsrdquo

6 COLLECTIONS OF DOCUMENTS

You may make a collection consisting of the Document and other documents releasedunder this License and replace the individual copies of this License in the variousdocuments with a single copy that is included in the collection provided that youfollow the rules of this License for verbatim copying of each of the documents in allother respects

You may extract a single document from such a collection and distribute it individu-ally under this License provided you insert a copy of this License into the extracteddocument and follow this License in all other respects regarding verbatim copying ofthat document

Appendix A GNU Free Documentation License 31

7 AGGREGATION WITH INDEPENDENT WORKS

A compilation of the Document or its derivatives with other separate and independentdocuments or works in or on a volume of a storage or distribution medium is calledan ldquoaggregaterdquo if the copyright resulting from the compilation is not used to limit thelegal rights of the compilationrsquos users beyond what the individual works permit Whenthe Document is included in an aggregate this License does not apply to the otherworks in the aggregate which are not themselves derivative works of the Document

If the Cover Text requirement of section 3 is applicable to these copies of the Documentthen if the Document is less than one half of the entire aggregate the Documentrsquos CoverTexts may be placed on covers that bracket the Document within the aggregate or theelectronic equivalent of covers if the Document is in electronic form Otherwise theymust appear on printed covers that bracket the whole aggregate

8 TRANSLATION

Translation is considered a kind of modification so you may distribute translationsof the Document under the terms of section 4 Replacing Invariant Sections withtranslations requires special permission from their copyright holders but you mayinclude translations of some or all Invariant Sections in addition to the original versionsof these Invariant Sections You may include a translation of this License and all thelicense notices in the Document and any Warranty Disclaimers provided that youalso include the original English version of this License and the original versions ofthose notices and disclaimers In case of a disagreement between the translation andthe original version of this License or a notice or disclaimer the original version willprevail

If a section in the Document is Entitled ldquoAcknowledgementsrdquo ldquoDedicationsrdquo or ldquoHis-toryrdquo the requirement (section 4) to Preserve its Title (section 1) will typically requirechanging the actual title

9 TERMINATION

You may not copy modify sublicense or distribute the Document except as expresslyprovided under this License Any attempt otherwise to copy modify sublicense ordistribute it is void and will automatically terminate your rights under this License

However if you cease all violation of this License then your license from a particularcopyright holder is reinstated (a) provisionally unless and until the copyright holderexplicitly and finally terminates your license and (b) permanently if the copyrightholder fails to notify you of the violation by some reasonable means prior to 60 daysafter the cessation

Moreover your license from a particular copyright holder is reinstated permanently ifthe copyright holder notifies you of the violation by some reasonable means this is thefirst time you have received notice of violation of this License (for any work) from thatcopyright holder and you cure the violation prior to 30 days after your receipt of thenotice

Termination of your rights under this section does not terminate the licenses of partieswho have received copies or rights from you under this License If your rights havebeen terminated and not permanently reinstated receipt of a copy of some or all of thesame material does not give you any rights to use it

Appendix A GNU Free Documentation License 32

10 FUTURE REVISIONS OF THIS LICENSE

The Free Software Foundation may publish new revised versions of the GNU FreeDocumentation License from time to time Such new versions will be similar in spiritto the present version but may differ in detail to address new problems or concernsSee httpwwwgnuorgcopyleft

Each version of the License is given a distinguishing version number If the Documentspecifies that a particular numbered version of this License ldquoor any later versionrdquoapplies to it you have the option of following the terms and conditions either of thatspecified version or of any later version that has been published (not as a draft) bythe Free Software Foundation If the Document does not specify a version number ofthis License you may choose any version ever published (not as a draft) by the FreeSoftware Foundation If the Document specifies that a proxy can decide which futureversions of this License can be used that proxyrsquos public statement of acceptance of aversion permanently authorizes you to choose that version for the Document

11 RELICENSING

ldquoMassive Multiauthor Collaboration Siterdquo (or ldquoMMC Siterdquo) means any World WideWeb server that publishes copyrightable works and also provides prominent facilitiesfor anybody to edit those works A public wiki that anybody can edit is an example ofsuch a server A ldquoMassive Multiauthor Collaborationrdquo (or ldquoMMCrdquo) contained in thesite means any set of copyrightable works thus published on the MMC site

ldquoCC-BY-SArdquo means the Creative Commons Attribution-Share Alike 30 license pub-lished by Creative Commons Corporation a not-for-profit corporation with a principalplace of business in San Francisco California as well as future copyleft versions of thatlicense published by that same organization

ldquoIncorporaterdquo means to publish or republish a Document in whole or in part as partof another Document

An MMC is ldquoeligible for relicensingrdquo if it is licensed under this License and if all worksthat were first published under this License somewhere other than this MMC andsubsequently incorporated in whole or in part into the MMC (1) had no cover textsor invariant sections and (2) were thus incorporated prior to November 1 2008

The operator of an MMC Site may republish an MMC contained in the site underCC-BY-SA on the same site at any time before August 1 2009 provided the MMC iseligible for relicensing

Appendix A GNU Free Documentation License 33

ADDENDUM How to use this License for your documents

To use this License in a document you have written include a copy of the License in thedocument and put the following copyright and license notices just after the title page

Copyright (C) year your name

Permission is granted to copy distribute andor modify this document

under the terms of the GNU Free Documentation License Version 13

or any later version published by the Free Software Foundation

with no Invariant Sections no Front-Cover Texts and no Back-Cover

Texts A copy of the license is included in the section entitled lsquolsquoGNU

Free Documentation Licensersquorsquo

If you have Invariant Sections Front-Cover Texts and Back-Cover Texts replace theldquowith Textsrdquo line with this

with the Invariant Sections being list their titles with

the Front-Cover Texts being list and with the Back-Cover Texts

being list

If you have Invariant Sections without Cover Texts or some other combination of thethree merge those two alternatives to suit the situation

If your document contains nontrivial examples of program code we recommend releasingthese examples in parallel under your choice of free software license such as the GNUGeneral Public License to permit their use in free software

Index 34

Index

Aaccess control policy 3Author 3author specifying 10

Bbehavior prior to version 5 10behavior version 3 10behavior version 4 10binary-old-keyword-value substitution mode 9branch growth 7branch number 2branch tip 2branch default 3bug reporting 25

Ccase sensitivity file format 21checkin 3checklist for bug reports 25checkout 3checkout implicit 5ci invocation 11co invocation 12comma-v file format 1command help 7command version 7command-line option to specify a revision 7credits 1

DDate 3date formats 8date specifying 8dates file format 21default branch 3default branch setting 15deleting revisions 15description of working file 2description text specifying 8

Eempty log message 9emulation previous RCS versions 10encoding file format 20environment variables 10

Ffeatures still missing 23

file names on the command-line 7format RCSfile 20

Ggrammar file format 20

HHeader 3history 1

IId 3ident invocation 13implicit checkout circumstance 5implicit checkout locked 12implicit checkout unlocked 12instantiating a working file 2interaction model 1interactive mode 9invocation ci 11invocation co 12invocation ident 13invocation merge 14invocation rcs 14 15invocation rcsclean 16invocation rcsdiff 17invocation rcsmerge 17invocation rlog 18

Kkeyword-only substitution mode 9keyword-value substitution mode 8keyword-value-locker substitution mode 9keywords table of 3

Llayout of nodes file format 21license 1Locker 3locking a revision 15locking on implicit checkout 12locking non-strict 5locking set non-strict 15locking set strict 15locking strict 5locks in RCS file 3Log 3log message empty 9LOGNAME 11

Index 35

Mmemory limit 11merge invocation 14model interaction 1

NName 4names symbolic 3node layout file format 21non-strict locking 5number branch 2number revision 2

Oold-keyword-value substitution mode 9order of options and file names 7outdating revisions 15overview 1

Ppairing RCS and working files 7patches contributing 25problems 25projects related 1

Qquiet mode 9

Rrange of revisions specifying 7RCS file 2rcs invocation 14 15RCS version emulation 10RCS_MEM_LIMIT 11rcsclean invocation 16rcsdiff invocation 17RCSfile 4RCSfile format 20RCSINIT 10rcsmerge invocation 17removing revisions 15reporting bugs 25Revision 4revision number 2revision range specifying 7

revision specifying 7revisions tree of 3rlog invocation 18

SSource 4specifying a date 8specifying a range of revisions 7specifying a revision 7specifying a state 9specifying a suffix list 10specifying a timedate 8specifying author 10specifying description text 8specifying substitution mode 8State 4state specifying 9strict locking 5substitution mode default 8substitution mode specifying 8suffix list specifying 10symbolic names 3

TTEMP 11third-party interop file format 21Tichy Walter F 1time zone 8timedate specifying 8tip 2tip increment 7TMP 11TMPDIR 11tree of revisions 3

Uunlocking a revision 15USER 11

Vvalue-only substitution mode 9

Wwhitespace file format 21working file description 2working file instantiation 2

  • Overview
    • Credits
    • Concepts
      • Interaction model
      • Working file
      • RCS file
      • Fundamental operations
      • Keywords
        • Quick tour
          • Usage
            • Common elements
              • Revision options
              • Date option
              • Description option
              • Substitution mode option
              • Log message option
              • Misc common options
              • Environment
                • Invoking ci
                • Invoking co
                • Invoking ident
                • Invoking merge
                • Invoking rcs
                  • modern
                  • legacy
                    • Invoking rcsclean
                    • Invoking rcsdiff
                    • Invoking rcsmerge
                    • Invoking rlog
                      • Hacking
                        • File format
                          • File format grammar
                          • Additional particulars of the file format
                            • Still missing
                            • Reporting bugs
                              • GNU Free Documentation License
                              • Index
Page 5: GNU RCS · The RCS file is also known (colloquially) as the “comma-v file”, due to its name often ending in ,v (e.g., a.c,v). A revision number is a branch number followed by

Chapter 1 Overview 2

you can tweak some of the RCS filersquos metadata as well All of this is done through RCScommands you need not modify the RCS file directly (and in fact you should probablyavoid doing so lest RCS become confused) This model is somewhat analogous to using alibrary (of books) With a library you sign up for a library card (initialize) then enter acycle of taking a book home (checkout) enjoying it (NB without modification one hopes)and returning it to the library (checkin)

Furthermore you can compare revisions in the RCS file against each other examine theuser- (hopefully high) quality descriptions of the changes each revision embodies mergeselected revisions and so forth

122 Working file

RCS commands operate on one pair of files at a time The working file is what you normallyview and edit (eg a file of C programming language source code named ac) Because theworking filersquos contents can be extracted from the RCS file (called instantiating a workingfile) it can be safely deleted to regain some disk space

123 RCS file

The RCS file is a separate file conventionally placed in the subdirectory RCS wherein RCScommands organize the initial and subsequent revisions of the working file associatingwith each revision a unique revision number along with the remembered particulars of thecheckin that produced it It also contains a description of the working file and various othermetadata described below

The RCS file is also known (colloquially) as the ldquocomma-v filerdquo due to its name oftenending in v (eg acv)

A revision number is a branch number followed by a dot followed by an integer and abranch number is an odd number of integers separated by dot A revision number with onedot (implying a branch number without any dots) is said to be on the trunk All integersare positive For example

11 -- revision number for initial checkin (typically)

branch number 1

94142 -- more complicated (perhaps after much gnarly hacking)

branch number 941

333333333 -- not a valid revision number

however a perfectly valid branch number

The branch point of a non-trunk branch is the revision number formed by removing thebranchrsquos trailing integer To compute the next higher branch or revision number add oneto the trailing integer The highest-numbered revision on a branch is called the tip of thebranch (or branch tip) Continuing the example

11 -- on trunk no branch point

next higher branch number 2

next higher revision number 12

94142 -- not on trunk branch point 94

Chapter 1 Overview 3

next higher branch number 942

next higher revision number 94143

333333333 -- not on trunk branch point 333333

next higher branch number 333333334

next higher revision number 3333333331

In addition to this ldquotreerdquo of thus-linked revisions the RCS file keeps track of the defaultbranch ie the branch whose tip corresponds to the most recent checkin as well as thesymbolic names a list of associations between a user-supplied (and presumably meaningful)symbol and an underlying branch or revision number

The RCS file contains two pieces of information used to implement its access controlpolicy The first is a list of usernames If non-empty only those users listed can modifythe RCS file (via RCS commands) The second is a list of locks ie association betweena username and a revision number If a lock usernamerevno exists that means onlyusername may modify revno (that is do a checkin operation to deposit the next higherrevision or a higher revision number on the same branch as revno)

124 Fundamental operations

The checkin operation records the contents of the working file in the RCS file assigning ita new (normally the next higher) revision number and recording the username timestampstate (a short symbol) and user-supplied log message (a textual description of the changesleading to that revision) It uses diff to find the differences between the tip of the defaultbranch and the working file thereby writing the minimal amount of information needed tobe able to recreate the contents of the previous tip

The checkout operation identifies a specific revision from the RCS file and either dis-plays the content to standard output or instantiates a working file overwriting any currentinstantiation with the selected revision In either case the content may undergo keywordexpansion which replaces text of the form lsquo$Keyword$rsquo with (possibly) different text com-prising the keyword and its value depending on the current keyword expansion mode (seeSection 214 [Substitution mode option] page 8)

125 Keywords

The keywords and their values are

Author The login name of the user who checked in the revision

Date The date and time the revision was checked in May include an appendedtimezone offset

Header A standard header containing the absolute RCS filename the revision numberthe date and time the author the state and the locker (if locked) May includean appended timezone offset

Id Same as lsquoHeaderrsquo except that only the basename appears (no directory com-ponents)

Locker The login name of the user who locked the revision (empty if not locked)

Chapter 1 Overview 4

Log The log message supplied during checkin preceded by a header containing theRCS filename the revision number the author and the date and time Mayinclude an appended timezone offset

Existing log messages are not replaced Instead the new log message is insertedafter lsquo$Log$rsquo This is useful for accumulating a complete change log in asource file

Each inserted line is prefixed by the string that prefixes the lsquo$Log$rsquo line Forexample if the lsquo$Log$rsquo line is

$Log tancc $

then RCS prefixes each line of the log with lsquo rsquo (slash slash space) This isuseful for languages with comments that go to the end of the line

The convention for other languages is to use a lsquo rsquo (space asterisk space)prefix inside a multiline comment For example the initial log comment of a Cprogram conventionally is of the following form

$Log$

For backwards compatibility with older versions of RCS if the log prefix is lsquorsquoor lsquo(rsquo surrounded by optional white space inserted log lines contain a spaceinstead of lsquorsquo or lsquo(rsquo however this usage is obsolescent and should not be reliedon

Name The symbolic name used to check out the revision if any For example lsquoco-rJoersquo generates lsquo$Name Joe $rsquo Plain co generates just lsquo$Name $rsquo

RCSfile The basename of the RCS file

Revision The revision number assigned to the revision

Source The absolute RCS filename

State The state assigned to the revision with the -s option of rcs or ci

13 Quick tour

This section complements the preceding section (see Section 12 [Concepts] page 1) pre-senting a handful of RCS commands in quick succession For details on individual RCScommands See Chapter 2 [Usage] page 7

Suppose you have a file fc that you wish to put under control of RCS If you have notalready done so make an RCS directory with the command

mkdir RCS

Then invoke the checkin command

ci fc

This command creates an RCS file in directory RCS stores fc into it as revision 11 anddeletes fc It also asks you for a description The description should be a synopsis of thecontents of the file All later checkin commands will ask you for a log entry which shouldsummarize the changes that you made

To get back the working file fc in the previous example use the checkout command

Chapter 1 Overview 5

co fc

This command extracts the latest revision from the RCS file and writes it into fc If youwant to edit fc you must lock it as you check it out with the command

co -l fc

You can now edit fc Suppose after some editing you want to know what changes thatyou have made The command

rcsdiff fc

tells you the difference between the most recently checked-in version and the working fileYou can check the file back in by invoking

ci fc

This increments the revision number properly If ci complains with the message

ci error no lock set by your name

then you have tried to check in a file even though you did not lock it when you checked itout Of course it is too late now to do the checkout with locking because another checkoutwould overwrite your modifications Instead invoke

rcs -l fc

This command will lock the latest revision for you unless somebody else got ahead of youalready In this case yoursquoll have to negotiate with that person

Locking assures that you and only you can check in the next update and avoids nastyproblems if several people work on the same file Even if a revision is locked it can still bechecked out for reading compiling etc All that locking prevents is a checkin by anybodybut the locker

If your RCS file is private ie if you are the only person who is going to deposit revisionsinto it strict locking is not needed and you can turn it off If strict locking is turned offthe owner of the RCS file need not have a lock for checkin all others still do Turning strictlocking off and on is done with the commands

rcs -U fc disable strict lockingrcs -L fc enable strict locking

If you donrsquot want to clutter your working directory with RCS files create a subdirectorycalled RCS in your working directory and move all your RCS files there RCS commandswill look first into that directory to find needed files All the commands discussed abovewill still work without any modification See Section 21 [Common elements] page 7

To avoid the deletion of the working file during checkin (in case you want to continueediting or compiling) invoke one of

ci -l fc checkin + locked checkoutci -u fc checkin + unlocked checkout

These commands check in fc as usual then perform an implicit checkout The first formalso locks the checked in revision the second one doesnrsquot Thus these options save you onecheckout operation The first form is useful if you want to continue editing the second oneif you just want to read the file Both update the keyword substitutions in your workingfile see Section 12 [Concepts] page 1

You can give ci the number you want assigned to a checked-in revision Assume all yourrevisions were numbered 11 12 13 etc and you would like to start release 2 Either ofthe commands

Chapter 1 Overview 6

ci -r2 fc

ci -r21 fc

assigns the number 21 to the new revision From then on ci will number the subsequentrevisions with 22 23 etc The corresponding co commands

co -r2 fc

co -r21 fc

retrieve the latest revision numbered 2x and the revision 21 respectively co withouta revision number selects the latest revision on the trunk ie the highest revision with anumber consisting of two fields Numbers with more than two fields are needed for branchesFor example to start a branch at revision 13 invoke

ci -r131 fc

This command starts a branch numbered 1 at revision 13 and assigns the number 1311to the new revision Here is a diagram showing the new revision in relation to its branchand the trunk

11 -- 12 -- 13 -- 14 -- 15

|

[131] -- 1311

For more information about branches See Section 12 [Concepts] page 1

Chapter 2 Usage 7

2 Usage

This chapter describes how to invoke RCS commands including common command-lineelements as well options specific to each command

21 Common elements

All RCS commands accept --help and --version See Section ldquoCommand-Line Interfacesrdquoin The GNU Coding Standards

Aside from --help and --version RCS commands take the form lsquo-letter[arg]rsquo iea hyphen followed by a single letter optionally followed by extra information The squarebraces mean that the extra information is optional (No square braces means that the extrainformation is required) In any case when specified the extra information must abut theletter there can be no intervening whitespace

co -u 14 foo wrong space between -u and 14

co -u14 foo ok

Furthermore options must appear before file names (if any) on the command line

ident foo -q wrong option after file nameident -q foo ok

Lastly pairs of RCS and working files can be specified in three ways (a) both are given (b)only the working file is given (c) only the RCS file is given For (a) both RCS and workingfiles may have arbitrary directory components RCS commands pair them up intelligentlyFor (b) RCS commands will look first into the directory RCS if it exists to find theassociated RCS file

211 Revision options

As to be expected in a revision control system many options are of the form lsquo-flag[rev]rsquowhere flag is a single letter (eg lsquorrsquo) If ommitted rev defaults to the latest revision onthe default branch A revision can be specified in many ways

brn Straightforward dot-notation where br specifies the branch

n Like brn using the default branch

br Like brn using the a command-specific computation of n given the currenttip i For ci (see Section 22 [ci] page 11) n would be i + 1 while for othercommands n would be simply i

name This is the symbolic name of a revision as assigned previously by a ci -n orci -N command

$ The command computes the effective revision by examining the values of key-word expansions in the working file

For commands that accept a range of revisions the syntax is generally rev1rev2 ie tworevisions (specified as described above) separated by a colon

Chapter 2 Usage 8

212 Date option

Some commands accept an option of the form lsquo-ddatersquo to specify a date an absolute pointin time (to second resolution) expressed in a date format These also accept lsquo-zzonersquo tospecify the timezone The special value lsquoLTrsquo stands for the local time zone RCS recognizesmany date formats and time zones For example the following dates are equivalent if localtime is January 11 1990 8pm Pacific Standard Time eight hours west of CoordinatedUniversal Time (UTC)

800 pm lt

400 AM Jan 12 1990 default is UTC

1990-01-12 040000+00 ISO 8601 (UTC)

1990-01-11 200000-08 ISO 8601 (local time)

19900112 040000 traditional RCS format

Thu Jan 11 200000 1990 LT output of ctime(3) + LT

Thu Jan 11 200000 PST 1990 output of date(1)

Fri Jan 12 040000 GMT 1990

Thu 11 Jan 1990 200000 -0800 Internet RFC 822

12-January-1990 0400 WET

Most fields in the date and time can be defaulted The default time zone is normally UTCbut this can be overridden by the -z option The other defaults are determined in the orderyear month day hour minute and second (most to least significant) At least one of thesefields must be provided For omitted fields that are of higher significance than the highestprovided field the time zonersquos current values are assumed For all other omitted fields thelowest possible values are assumed For example without -z the date lsquo20 1030rsquo defaultsto lsquo103000 UTCrsquo of the 20th of the UTC time zonersquos current month and year Note thatfor the shell the datetime must be quoted if it contains spaces

RCS also accepts some other formats which specify only the date portion (omitting thetime portion)

YYYY-DDD DDD is the day of year 1-366

YYYY-wWW-D

WW is the ISO week number 0-53 (actually ISO week numbers are 1-53 week0 is a GNU RCS extension) and D is the ISO day number 1-7 (Monday throughSunday)

213 Description option

Some commands accept an option of the form lsquo-t-textrsquo or lsquo-tfile-namersquo This optionis to set or update the RCS file description text In the first form text is used directlyexcluding the leading hyphen (lsquo-rsquo) that distinguishes the two forms In the second formthe description text is taken from the contents of file-name

214 Substitution mode option

Some commands accept an option of the form -ksubst used to control how keywords (seeSection 12 [Concepts] page 1) are expanded in the working file In the following table ofsubst values the example keyword is lsquoRevisionrsquo and its value is lsquo513rsquo

kv Generate lsquo$Revision 513 $rsquo (dollar-sign keyword colon space value spacedollar-sign) A lockerrsquos name is inserted in the value of the Header Id and

Chapter 2 Usage 9

Locker keyword strings only as a file is being locked ie by ci -l and co -lThis is the default substitution mode

kvl Like -kkv except that a lockerrsquos name is always inserted if the given revisionis currently locked

k Generate lsquo$Revision$rsquo (dollar-sign keyword dollar-sign) This is useful whencomparing different revisions of a file Log messages are inserted after Log key-words even if -kk is specified since this tends to be more useful when mergingchanges

o Like -kkv but use the old value present in the working file just before it waschecked in This can be useful for file formats that cannot tolerate any changesto substrings that happen to take the form of keyword strings

b Like -ko but do all file io in binary mode This makes little difference onPOSIX and Unix hosts but on DOS-like hosts one should use rcs -i -kb toinitialize an RCS file intended to be used for binary files Also on all hostsrcsmerge normally refuses to merge files when -kb is in effect

v Generate lsquo513rsquo (value only) Further keyword substitution cannot be per-formed once the keyword names are removed so this should be used with careBecause of this danger of losing keywords -kv cannot be combined with -land the owner write permission of the working file is turned off to edit the filelater check it out again without -kv

215 Log message option

Both ci and rcs allow a log message to be specified with the -m option If themsg argumentto this option is empty RCS uses the default lsquo empty log message rsquo This particularmessage is handled specially (ie filtered out) by rlog

216 Misc common options

Other common options are -I -q -s -T -V -w -x

-I This option enables interactive mode More precisely it forces interactive modewhereby RCS commands believe that their standard input is a terminal nor-mally a precondition for displaying a prompt to receive input (such as a log mes-sage on checkin) The intention of -I is for scripting situations where standardinput is actually not a terminal but you know beforehand (without prompting)that input is needed and you are ready to provide it on standard input anyway

-q This option enables quiet mode Commands work silently (unless there is anerror condition) and suppress warnings and prompts

-sstate Specify the state to be state

-T This option controls how commands timestamp the RCS file Normally RCScommands set the RCS filersquos timestamp when modifying it in the ldquonaturalrdquo way(without taking any particular care) With -T on the other hand the com-mands either preserve the timestamp (for standalone lockunlock operations)or use the timestamp of the working file (for ci)

Chapter 2 Usage 10

This can be useful if the RCS file is found in a makefile targetrsquos list of pre-requisites (see Section ldquoRule Syntaxrdquo in The GNU Make Manual) that is ifsome target should be rebuilt if the RCS file is newer than it In that case youcan do lsquorcs -u -Trsquo for example to unlock a revision in the RCS file withouttriggering a recompilation

-V Behave like --version ie display command version information and exitsuccessfully NB This option is obsolete and its support will be removed insome future release

-Vn n specifies the RCS (major) version to emulate Valid values for n are 3 4 5Version 5 is the current version so -V5 does nothing special

In versions prior to 5 RCS outputs lsquotrsquo (tab U+09) between the lsquorsquo (colon) andthe value (for keyword substitution) instead of space uses the RCS file commentstring to prefix each line in the Log expansion instead of computing it on thefly from the input text writesreads localtime instead of UTC and displaysslightly different output for rlog

For version 4 the Header expansion unconditionally includes Locker lockeras if the kvl substitution mode were specified (see Section 214 [Substitutionmode option] page 8)

For version 3 the Header expansion omits the directories from the filename andsays only Locked instead of the state

-wlogin Some commands accept an option of the form lsquo-wloginrsquo to specify the loginname of the author of a revision ie ldquowhordquo is responsible

-xsuff Specify suff as the slash-separated list of file name suffixes used to recognizean RCS file The default value is lsquovrsquo that is first try with lsquovrsquo then try withan empty suffix

This basename search occurs within (ie starting from the beginning) the largerdirectory search loop which comprises two candidates dRCS and d where dis the directory component of the working file name For example given theworking file ac in the current directory RCS tries in order these candidates

RCSacv

RCSac

acv

ac

Note that the last candidate is impossible (and is in fact discarded) becausethe working and RCS files cannot have the same name

217 Environment

Various environment variables influence how RCS works

[Environment Variable]RCSINITAnother way to set common options is with the lsquoRCSINITrsquo environment variable Thisis a space-separated list of options Use lsquorsquo (backslash) to escape significant spaceFor example

Chapter 2 Usage 11

Set the value make it available to subsequent commandsRCSINIT=-q -xv -zLT

export RCSINIT

Use it (implicitly)rlog -L foo

This example in Bourne shell syntax arranges for RCS commands to operate as ifeach command-line had prepended lsquo-q -xv -zLTrsquo to the rest of the command-lineThe effective command-line that rlog sees is thus lsquo-q -xv -zLT -L foorsquo

[Environment Variable]RCS_MEM_LIMITNormally for speed commands either memory map or copy into memory the RCS fileif its size is less than thememory limit currently defaulting to ldquounlimitedrdquo Otherwise(or if the initially-tried speedy ways fail) the commands fall back to using standardio routines

You can adjust the memory limit by setting the lsquoRCS_MEM_LIMITrsquo environment variableto a numeric value (measured in kilobytes) An empty value is silently ignored

As a side effect specifying the memory limit inhibits fall-back to slower routines(This env var is mostly intended for testing RCS normally you can leave it unsetProbably it will be removed in a future release)

[Environment Variable]TMPDIR[Environment Variable]TMP[Environment Variable]TEMP

Commands sometimes create temporary files normally in a system-dependent direc-tory such as tmp You can override this directory by specifying another one asthe value of one of the environment variables TMPDIR TMP or TEMP (checked in thatorder)

[Environment Variable]LOGNAME[Environment Variable]USER

Absent -wlogin or when login is omitted (see Section 216 [Misc common options]page 9) commands check environment variables LOGNAME and USER (in that order)If neither of these are set RCS queries the host for and uses your login

22 Invoking ci

rcs ci [options] file

(or ldquocirdquo instead of ldquorcs cirdquo)

The ci command adds a revision to the RCS file reflecting the current state of the workingfile This operation is also known as ldquocheckinrdquo

-f[rev] Force new entry even if no content changed

-I[rev]

-q[rev] See Section 216 [Misc common options] page 9

-i[rev] Initial checkin error if the RCS file already exists

-j[rev] Just checkin donrsquot initialize error if the RCS file does not exist

Chapter 2 Usage 12

-k[rev] Compute revision from working file keywords

-r Release lock and delete working file

-rrev Do normal checkin

-l[rev] Like -r but immediately checkout locked (co -l) afterwards

-u[rev] Like -l but checkout unlocked (co -u)

-M[rev] Reset working file mtime (relevant for -l -u)

Multiple flags in -fiIjklMqru may be given except for -r -l -u which are mutuallyexclusive For a fully specified revision of the form brn nmust be greater than any existingon br or br must be new If rev is omitted compute it from the last lock (co -l) perhapsstarting a new branch If there is no lock use defbr(L+1) See Section 211 [Revisionoptions] page 7

-d[date]

-zzone See Section 212 [Date option] page 8 If no date specified use the workingfile modification time

-m[msg] Use msg as the log message See Section 215 [Log message option] page 9

-nname

-Nname Assign symbolic name to the entry For -n name must be new (no previousassignment) For -N overwrite any previous assignment

-sstate See Section 216 [Misc common options] page 9 Set the state

-t-text

-tfile-name

See Section 213 [Description option] page 8

-T Set the RCS filersquos modification time to the new revisionrsquos time if the former pre-cedes the latter and there is a new revision preserve the RCS filersquos modificationtime otherwise

-wwho Use who as the author

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

23 Invoking co

rcs co [options] file

(or ldquocordquo instead of ldquorcs cordquo)

The co command retrieves a revision from the RCS file writing a new working file Thisoperation is also known as ldquocheckoutrdquo

-f[rev] Force overwrite of working file

-I[rev]

-q[rev] See Section 216 [Misc common options] page 9

-p[rev] Write to stdout instead of the working file

Chapter 2 Usage 13

-r[rev] Normal checkout

-l[rev] Like -r but also lock

-u[rev] Like -l but unlock

-M[rev] Reset working file mtime (relevant for -l -u)

Multiple flags in -fIlMpqru may be given except for -r -l -u which are mutuallyexclusive See Section 211 [Revision options] page 7

-ksubst See Section 214 [Substitution mode option] page 8

-ddate

-zzone See Section 212 [Date option] page 8 Select latest before or on date

-jjoins Merge using joins a list of revrev pairs NB This option is obsolete (seeSection 29 [rcsmerge] page 17)

-sstate See Section 216 [Misc common options] page 9 Select matching state

-S Enable self-same mode In this mode the owner of a lock is unimportantjust that it exists Effectively this prevents you from checking out the samerevision twice

$ whoami

ttn

$ co -l -f z

RCSzv --gt z

revision 11 (locked)

done

$ co -S -l -f z

RCSzv --gt z

co RCSzv Revision 11 is already locked by ttn

-T Preserve the modification time on the RCS file even if it changes because a lockis added or removed

-wwho Select matching login who

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

24 Invoking ident

ident [options] [file ]

If no file is specified scan standard input The ident command scans its input for keywords(see Section 12 [Concepts] page 1) displaying to standard output what it finds

-q Normally if no patterns are found for a file ident emits a warning This optionsuppresses the warning

Chapter 2 Usage 14

-V Note that -Vn is not a valid option for ident in contrast to most other RCScommands (see Section 216 [Misc common options] page 9)

In addition to the normal keyword pattern for Subversion 12 (and later) compatibility1ident also recognizes patterns having one of the forms

$keyword text $

two colons and space after keyword

space before ending $

$keyword text$

two colons and space after keyword

hash before ending $

25 Invoking merge

merge [options] receiving-sibling parent other-sibling

The merge command combines the differences between a the parent and the other siblingand the differences between the parent and the receiving sibling It writes the result to thereceiving sibling

-A

-E

-e Use diff3 -A -E (default) or -e respectively

-p Write to stdout instead of overwriting receiving-sibling

-q See Section 216 [Misc common options] page 9 Suppress conflict warnings

-Llabel (up to three times) Specify the conflict labels for receiving-sibling parent andother-sibling respectively

-V Note that -Vn is not a valid option for merge in contrast to most other RCScommands (see Section 216 [Misc common options] page 9)

26 Invoking rcs

The rcs command is unique in the set of RCS programs in that it has two usages themodern (for RCS 590 and later) and the legacy

261 modern

rcs [options] command [command-arg ]

This rcs usage dispatches to command passing along command-arg without interpreta-tion

--commands

Display a list of available commands including a one-line description and exitsuccessfully

1 The fixed-length keyword syntax is described in detail in Version Control with Subversion chapterldquoAdvanced Topicsrdquo section ldquoKeyword Substitutionrdquo

Chapter 2 Usage 15

--aliases

Display a list of command aliases and exit successfully

--help command

Display help for a particular command and exit successfully For example todisplay help for the legacy interface use

--help frob

262 legacy

rcs frob [options] file

(or ldquorcsrdquo instead of ldquorcs frobrdquo)

This rcs usage performs various administrative operations on the RCS file depending onthe options given

-i Create and initialize a new RCS file

-L Set strict locking

-U Set non-strict locking

-M Donrsquot send mail when breaking someone elsersquos lock

-T Preserve the modification time on the RCS file unless a revision is removed

-I

-q See Section 216 [Misc common options] page 9

-alogins Append logins (comma-separated list of usernames) to access-list

-e[logins]

Erase logins (comma-separated list of usernames) from access-list If logins isomitted clear the access-list

-Afile-name

Append access-list of file-name to current access-list

-b[rev] Set default branch to that of rev or highest branch on trunk if rev is omitted

-l[rev] Lock a revision

-u[rev] Unlock a revision

-cstring Set comment leader to string NB Donrsquot use obsolete

-ksubst See Section 214 [Substitution mode option] page 8

-mrev[msg]

Replace log message with msg See Section 215 [Log message option] page 9

-nname[[rev]]

If rev is omitted delete symbolic name Otherwise associate name with rev name must be new

-Nname[[rev]]

Like -n but overwrite any previous assignment

-orange Delete (also known as ldquooutdaterdquo) revisions in range

Chapter 2 Usage 16

rev single revision

br latest revision on branch br

rev1rev2

rev1 to rev2 on same branch inclusive

rev beginning of branch to rev

rev rev to end of branch

-sstate[rev]

See Section 216 [Misc common options] page 9 Set state

-t-text

-tfile-name

See Section 213 [Description option] page 8 Replace description

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

These options have no effect and are included solely for consistency with other comamnds(see Section 217 [Environment] page 10) -zzone

27 Invoking rcsclean

rcs clean [options] [file ]

(or ldquorcscleanrdquo instead of ldquorcs cleanrdquo)

The rcsclean command removes working files that are not being worked on If given -u italso unlocks and removes working files that are being worked on but have not changed Ifno file is specified operate on all the working files in the current directory

-r[rev] Specify revision

-u[rev] Unlock if is locked and no differences found

-n[rev] Dry run (no act donrsquot operate)

-q[rev] See Section 216 [Misc common options] page 9

-ksubst See Section 214 [Substitution mode option] page 8

-T Preserve the modification time on the RCS file even it changes because a lockis removed

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

-zzone See Section 212 [Date option] page 8

Chapter 2 Usage 17

28 Invoking rcsdiff

rcs diff [options] file

(or ldquorcsdiffrdquo instead of ldquorcs diffrdquo)

The rcsdiff command runs diff to compare two revisions in an RCS file See Section ldquoIn-voking diffrdquo in The GNU Diffutils Manaual

-rrev (zero one or two times) Name a revision If given two revisions (lsquo-rrev1-rrev2rsquo) compare those revisions If given only one revision (lsquo-rrevrsquo) comparethe working file with it If given no revisions compare the working file with thelatest revision on the default branch

-ksubst See Section 214 [Substitution mode option] page 8

-q See Section 216 [Misc common options] page 9

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

-zzone See Section 212 [Date option] page 8

These options have no effect and are included solely for consistency with other comamnds(see Section 217 [Environment] page 10) -T

Additionally the following options (and their argument if any) are passed to the underlyingdiff command

-0 -1 -2 -3 -4 -5 -6 -7 -8 -9 -B -C -D -F -H -I

-L -U -W -a -b -c -d -e -f -h -i -n -p -t -u -w -y

long options (that start with --)

(Not all of these options are meaningful)

29 Invoking rcsmerge

rcs merge [options] file

(or ldquorcsmergerdquo instead of ldquorcs mergerdquo)

The rcsmerge command incorporates the changes between two revisions of an RCS file intothe corresponding working file

-A

-E

-e Passed to the diff3 command The default if none are specified is -E With -esuppress warnings on conflict The -A style generates the most verbose outputSee Section ldquoInvoking diff3rdquo in The GNU Diffutils Manual

-p[rev] Write to stdout instead of overwriting the working file

-q[rev] See Section 216 [Misc common options] page 9

-rrev (one or two times) specify a revision

One or two revisions must be specified (using -p -q -r) If only one is specified the secondrevision defaults to the latest revision on the default branch

Chapter 2 Usage 18

-ksubst See Section 214 [Substitution mode option] page 8

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

-zzone See Section 212 [Date option] page 8

These options have no effect and are included solely for consistency with other comamnds(see Section 217 [Environment] page 10) -T

210 Invoking rlog

rcs log [options] file

(or ldquorlogrdquo instead of ldquorcs logrdquo)

The rlog command displays information about RCS files

-L Ignore RCS files with no locks set

-R Print only the name of the RCS file

-h Print only the ldquoheaderrdquo information

-t Like -h but also include the description

-N Omit symbolic names

-b Select the default branch

-ddates See Section 212 [Date option] page 8 Select revisions based on timestampin the range dates with spec

d single revision d or earlier

d1ltd2

d2gtd1 between d1 and d2 exclusive

ltd

dgt before d

gtd

dlt after d

Instead of lsquoltrsquo or lsquogtrsquo you can use lsquolt=rsquo or lsquogt=rsquo respectively to specify inclusiveranges dates may also be a list of semicolon-separated specs

-l[who] Select revisions locked by who (comma-separated list of usernames) only or byanyone if who is omitted

-r[revs] Select revisions in revs a comma-separated list of range specs one of revrev rev rev1rev2

-sstates See Section 216 [Misc common options] page 9 states can also be a comma-separated list of states Select revisions with specified state(s)

-w[who] Select revisions checked in by who (comma-separated list of usernames) or bythe user if who is omitted

Chapter 2 Usage 19

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

-zzone See Section 212 [Date option] page 8

These options have no effect and are included solely for consistency with other comamnds(see Section 217 [Environment] page 10) lsquo-qrsquo lsquo-Trsquo

Chapter 3 Hacking 20

3 Hacking

This chapter in contrast to the previous (see Chapter 2 [Usage] page 7) is introspective Itdescribes an important aspect of RCS interop with other programs and development ideasand methods

31 File format

An RCS filersquos contents are described by the grammar below1 Overall the format is freendashformat text In most environments RCS uses the ISO 88591 encoding visible graphiccharacters are (octal) codes 041ndash176 and 240ndash377 and whitespace characters are codes010ndash015 and 040TODO Discuss or point to encoding compatibility issues

311 File format grammar

The meta syntax in this section uses the following conventions lsquo|rsquo (U+7C) separates al-ternatives lsquorsquo (U+7B) and lsquorsquo (U+7D) enclose optional phrases lsquorsquo and lsquorsquo (trailing U+2A)enclose phrases that can be repeated zero or more times lsquorsquo and lsquo+rsquo (trailing U+2B) enclosephrases that must appear at least once and can be repeated terminal symbols are in lsquorsquo(two U+22)

rcstext = admin delta desc deltatext

admin = head num

branch num

access id

symbols sym num

locks id num

strict

integrity intstring

comment string

expand string

delta = num

date num

author id

state id

branches num

next num

commitid sym

desc = desc string

deltatext = num

log string

text string

1 This section is adapted from the lsquorcsfile(5)rsquo manpage written by Walter F Tichy

Chapter 3 Hacking 21

num = digit | +

digit = 0 through 9

id = idchar | +

sym = idchar+

idchar = any visible graphic character except special

special = $ | | | | |

string = any character with doubled

word = id | num | string |

intchar = any character except

thirdp = ^L intchar

intstring = intchar thirdp

312 Additional particulars of the file format

bull In releases prior to 58 (2011-08-30) the grammar included the production

newphrase = id word

and used it in the admin delta and deltatext productions This allowed third-partyprograms to interoperate with RCS by storing opaque (to RCS) data in the file

As of 58 in the name of progress (towards more systematic file integrity support) theonly area reserved for third-party interop is in the (string) value of the integrity fieldspecifically after the first formfeed (U+0C) A further restriction (for all programs) isthat the integrity value must not contain lsquorsquo

bull Whitespace has no significance except in strings However whitespace cannot appearwithin an id num or sym and an RCS file must end with newline (U+0A) Strings areenclosed by lsquorsquo (U+40) If a string contains a lsquorsquo it must be doubled otherwise stringscan contain arbitrary binary data

bull Identifiers are case sensitive Keywords are in lower case only The sets of keywordsand identifiers can overlap

bull Dates which appear after the date keyword are of the form Ymmddhhmmss whereY is the year mm the month (01ndash12) dd the day (01ndash31) hh the hour (00ndash23) mm theminute (00ndash59) and ss the second (00ndash60) Y contains just the last two digits of theyear for years from 1900 through 1999 and all the digits of years thereafter Dates usethe Gregorian calendar times use UTC

bull The delta nodes form a tree All nodes whose numbers consist of a single pair (eg 2321 13) are on the trunk and are linked through the next field in order of decreasing

Chapter 3 Hacking 22

numbers The head field in the admin node points to the head of that sequence (iecontains the highest pair) The branch node in the admin node indicates the defaultbranch (or revision) for most RCS operations If empty the default branch is thehighest branch on the trunk

All delta nodes whose numbers consist of 2n fields (n ge 2) (eg 3111 2122) arelinked as follows All nodes whose first 2nminus1 number fields are identical are linkedthrough the next field in order of increasing numbers For each such sequence thedelta node whose number is identical to the first 2nminus2 number fields of the delta

nodes on that sequence is called the branchpoint The branches field of a node containsa list of the numbers of the first nodes of all sequences for which it is a branchpointThis list is ordered in increasing numbers See Figure 31

Chapter 3 Hacking 23

Head

|

|

v

---------

| |

| 21 |

| |

1213 1311 | | 1222 122111

--------- --------- --------- --------- -------------

^ ^ | ^ ^

| | | | |

| | v | |

| --------- |

| 13 |

--------- -----------

1211 131 1221 12211

--------- ---------

^ | ^

| | |

| v |

| --------- |

| 12 |

---------------------- ---------

121 122

|

|

v

---------

11

Figure 31 The organization of an example RCS file

32 Still missing

RCS is still missing some features The following is an unordered list of ldquoto-do musingsrdquo keptby the RCS maintainers If you would like to hack on an item See Section 33 [Reportingbugs] page 25

bull Add an option to rcsmerge so that it can use an arbitrary program to do the 3-waymerge instead of the default merge Likewise for rcsdiff and diff It should be possibleto pass arbitrary options to these programs and to the subsidiary co invocations

bull Add format options for finer control over the output of ident and rlog Eg thereshould be an easy way for rlog to output lines like lsquosrcmainc 24 wftrsquo one for

Chapter 3 Hacking 24

each locked revision rlog options should have three orthogonal types selecting filesselecting revisions and selecting rlog format

bull Add format options for finer control over the output of keyword strings Eg thereshould be some way to prepend lsquo()rsquo and there should be some way to change lsquo$rsquo tosome other character to disable further substitution These options should make theresulting files uneditable like lsquo-kvrsquo

bull Add long options eg --keyword-substitution Unfortunately RCSrsquos option syntaxis incompatible with getopt Perhaps the best way is to overload rcs eg lsquorcs diff

--keyword-substitution=old filersquo instead of lsquorcsdiff -ko filersquo

bull rlog -rMN should work even if M and N have different numbers of fields so long asM is an ancestor of N or vice versa

bull rcs should evaluate options in order this allows rcs -oS -nS

bull Be able to redo your most recent checkin with minor changes

bull co -u shouldnrsquot complain about a lsquo+wrsquo working file if contents donrsquot change

bull Add a lsquo-rsquo option to take the list of file names from standard input Perhaps the filenames should be null-terminated not newline-terminated so that those that containnewlines are handled properly

bull Permit multiple optionndashfilename pairs eg co -r14 a -r15 b

bull Add an option to break a symbolic link to an RCS file instead of breaking the hardlink that it points to

bull Add ways to specify the earliest revision the most recent revision the earliest or latestrevision on a particular branch and the parent or child of some other revision

bull If a user has multiple locks perhaps ci should fall back on the method of ci -k to figureout which revision to use

bull Add an option to rcsclean to clean directories recursively

bull Write an rcsck program that repairs corrupted RCS files much as fsck repairs corruptedfile systems For example it should remove stale lock files

bull Update the date parser to use the more modern getdatey by Bellovin Salz andBerets or the even more modern getdate by Moraes None of these getdate imple-mentations are as robust as RCSrsquos old warhorse in avoiding problems like arithmeticoverflow so theyrsquoll have to be fixed first (Perhaps we can use gnulib module getdate)

bull Break up the code into a library so that itrsquos easier to write new programs that manip-ulate RCS files and so that useless code is removed from the existing programs Forexample the rcs command contains unnecessary keyword substitution baggage andthe merge command can be greatly pruned

bull Make it easier to use your favorite text editor to edit log messages etc instead ofhaving to type them in irretrievably at the terminal

bull Let the user specify a search path for default branches eg to use L as the defaultbranch if it works and M otherwise Let the user require that at least one entry inthe search path works Let the user say that later entries in the search path are readonly ie one cannot check in changes to them This should be an option settable bylsquoRCSINITrsquo

bull Add a way for a user to see which revisions affected which lines

Chapter 3 Hacking 25

bull Have rlog -nN F print just the revision number that N translates to Eg rlog -nB

F would print the highest revision on the branch B Use this to add an option -bB torcsbranch to freeze the named branch This should interact well with default branches

bull Add a co option that prints the revision number before each line as SCCSrsquos get -m

does [I implemented this for Emacs 22 as a subroutine of vc-annotate qv mdashttn]

33 Reporting bugs

To report bugs or suggest enhancements for GNU RCS please visit its homepage (httpwwwgnuorgsoftwarercs) to find directions on how to ldquofile a bug reportrdquo online orsend electronic mail to help-rcsgnuorg (If you use the web interface you donrsquot needto also send email since that is done automatically)

For bug reports please include enough information for the maintainers to reproduce theproblem Generally speaking that means

bull The RCS version command(s) and manual section(s) involved

bull Hardware and operating system names and versions

bull The contents of any input files necessary to reproduce the bug

bull The expected behavior andor output

bull A description of the problem and samples of any erroneous output

bull Options you gave to configure other than specifying installation directories

bull Anything else that you think would be helpful

When in doubt whether something is needed or not include it Itrsquos better to include toomuch than to leave out something important

Patches are welcome if possible please make them with lsquogit format-patchrsquo and includeChangeLog entries (see Section ldquoChange Logrdquo in The GNU Emacs Manual) Please followthe existing coding style

Appendix A GNU Free Documentation License 26

Appendix A GNU Free Documentation License

Version 13 3 November 2008

Copyright ccopy 2000 2001 2002 2007 2008 Free Software Foundation Inchttpfsforg

Everyone is permitted to copy and distribute verbatim copiesof this license document but changing it is not allowed

0 PREAMBLE

The purpose of this License is to make a manual textbook or other functional anduseful document free in the sense of freedom to assure everyone the effective freedomto copy and redistribute it with or without modifying it either commercially or non-commercially Secondarily this License preserves for the author and publisher a wayto get credit for their work while not being considered responsible for modificationsmade by others

This License is a kind of ldquocopyleftrdquo which means that derivative works of the documentmust themselves be free in the same sense It complements the GNU General PublicLicense which is a copyleft license designed for free software

We have designed this License in order to use it for manuals for free software becausefree software needs free documentation a free program should come with manualsproviding the same freedoms that the software does But this License is not limited tosoftware manuals it can be used for any textual work regardless of subject matter orwhether it is published as a printed book We recommend this License principally forworks whose purpose is instruction or reference

1 APPLICABILITY AND DEFINITIONS

This License applies to any manual or other work in any medium that contains anotice placed by the copyright holder saying it can be distributed under the termsof this License Such a notice grants a world-wide royalty-free license unlimited induration to use that work under the conditions stated herein The ldquoDocumentrdquobelow refers to any such manual or work Any member of the public is a licensee andis addressed as ldquoyourdquo You accept the license if you copy modify or distribute the workin a way requiring permission under copyright law

A ldquoModified Versionrdquo of the Document means any work containing the Document ora portion of it either copied verbatim or with modifications andor translated intoanother language

A ldquoSecondary Sectionrdquo is a named appendix or a front-matter section of the Documentthat deals exclusively with the relationship of the publishers or authors of the Documentto the Documentrsquos overall subject (or to related matters) and contains nothing thatcould fall directly within that overall subject (Thus if the Document is in part atextbook of mathematics a Secondary Section may not explain any mathematics) Therelationship could be a matter of historical connection with the subject or with relatedmatters or of legal commercial philosophical ethical or political position regardingthem

The ldquoInvariant Sectionsrdquo are certain Secondary Sections whose titles are designated asbeing those of Invariant Sections in the notice that says that the Document is released

Appendix A GNU Free Documentation License 27

under this License If a section does not fit the above definition of Secondary then it isnot allowed to be designated as Invariant The Document may contain zero InvariantSections If the Document does not identify any Invariant Sections then there are none

The ldquoCover Textsrdquo are certain short passages of text that are listed as Front-CoverTexts or Back-Cover Texts in the notice that says that the Document is released underthis License A Front-Cover Text may be at most 5 words and a Back-Cover Text maybe at most 25 words

A ldquoTransparentrdquo copy of the Document means a machine-readable copy representedin a format whose specification is available to the general public that is suitable forrevising the document straightforwardly with generic text editors or (for images com-posed of pixels) generic paint programs or (for drawings) some widely available drawingeditor and that is suitable for input to text formatters or for automatic translation toa variety of formats suitable for input to text formatters A copy made in an otherwiseTransparent file format whose markup or absence of markup has been arranged tothwart or discourage subsequent modification by readers is not Transparent An imageformat is not Transparent if used for any substantial amount of text A copy that isnot ldquoTransparentrdquo is called ldquoOpaquerdquo

Examples of suitable formats for Transparent copies include plain ASCII withoutmarkup Texinfo input format LaTEX input format SGML or XML using a publiclyavailable DTD and standard-conforming simple HTML PostScript or PDF designedfor human modification Examples of transparent image formats include PNG XCFand JPG Opaque formats include proprietary formats that can be read and editedonly by proprietary word processors SGML or XML for which the DTD andor pro-cessing tools are not generally available and the machine-generated HTML PostScriptor PDF produced by some word processors for output purposes only

The ldquoTitle Pagerdquo means for a printed book the title page itself plus such followingpages as are needed to hold legibly the material this License requires to appear in thetitle page For works in formats which do not have any title page as such ldquoTitle Pagerdquomeans the text near the most prominent appearance of the workrsquos title preceding thebeginning of the body of the text

The ldquopublisherrdquo means any person or entity that distributes copies of the Documentto the public

A section ldquoEntitled XYZrdquo means a named subunit of the Document whose title eitheris precisely XYZ or contains XYZ in parentheses following text that translates XYZ inanother language (Here XYZ stands for a specific section name mentioned below suchas ldquoAcknowledgementsrdquo ldquoDedicationsrdquo ldquoEndorsementsrdquo or ldquoHistoryrdquo) To ldquoPreservethe Titlerdquo of such a section when you modify the Document means that it remains asection ldquoEntitled XYZrdquo according to this definition

The Document may include Warranty Disclaimers next to the notice which states thatthis License applies to the Document These Warranty Disclaimers are considered tobe included by reference in this License but only as regards disclaiming warrantiesany other implication that these Warranty Disclaimers may have is void and has noeffect on the meaning of this License

2 VERBATIM COPYING

Appendix A GNU Free Documentation License 28

You may copy and distribute the Document in any medium either commercially ornoncommercially provided that this License the copyright notices and the licensenotice saying this License applies to the Document are reproduced in all copies andthat you add no other conditions whatsoever to those of this License You may not usetechnical measures to obstruct or control the reading or further copying of the copiesyou make or distribute However you may accept compensation in exchange for copiesIf you distribute a large enough number of copies you must also follow the conditionsin section 3

You may also lend copies under the same conditions stated above and you may publiclydisplay copies

3 COPYING IN QUANTITY

If you publish printed copies (or copies in media that commonly have printed covers) ofthe Document numbering more than 100 and the Documentrsquos license notice requiresCover Texts you must enclose the copies in covers that carry clearly and legibly allthese Cover Texts Front-Cover Texts on the front cover and Back-Cover Texts onthe back cover Both covers must also clearly and legibly identify you as the publisherof these copies The front cover must present the full title with all words of the titleequally prominent and visible You may add other material on the covers in additionCopying with changes limited to the covers as long as they preserve the title of theDocument and satisfy these conditions can be treated as verbatim copying in otherrespects

If the required texts for either cover are too voluminous to fit legibly you should putthe first ones listed (as many as fit reasonably) on the actual cover and continue therest onto adjacent pages

If you publish or distribute Opaque copies of the Document numbering more than 100you must either include a machine-readable Transparent copy along with each Opaquecopy or state in or with each Opaque copy a computer-network location from whichthe general network-using public has access to download using public-standard networkprotocols a complete Transparent copy of the Document free of added material Ifyou use the latter option you must take reasonably prudent steps when you begindistribution of Opaque copies in quantity to ensure that this Transparent copy willremain thus accessible at the stated location until at least one year after the last timeyou distribute an Opaque copy (directly or through your agents or retailers) of thatedition to the public

It is requested but not required that you contact the authors of the Document wellbefore redistributing any large number of copies to give them a chance to provide youwith an updated version of the Document

4 MODIFICATIONS

You may copy and distribute a Modified Version of the Document under the conditionsof sections 2 and 3 above provided that you release the Modified Version under preciselythis License with the Modified Version filling the role of the Document thus licensingdistribution and modification of the Modified Version to whoever possesses a copy ofit In addition you must do these things in the Modified Version

A Use in the Title Page (and on the covers if any) a title distinct from that of theDocument and from those of previous versions (which should if there were any

Appendix A GNU Free Documentation License 29

be listed in the History section of the Document) You may use the same title asa previous version if the original publisher of that version gives permission

B List on the Title Page as authors one or more persons or entities responsible forauthorship of the modifications in the Modified Version together with at least fiveof the principal authors of the Document (all of its principal authors if it has fewerthan five) unless they release you from this requirement

C State on the Title page the name of the publisher of the Modified Version as thepublisher

D Preserve all the copyright notices of the Document

E Add an appropriate copyright notice for your modifications adjacent to the othercopyright notices

F Include immediately after the copyright notices a license notice giving the publicpermission to use the Modified Version under the terms of this License in the formshown in the Addendum below

G Preserve in that license notice the full lists of Invariant Sections and required CoverTexts given in the Documentrsquos license notice

H Include an unaltered copy of this License

I Preserve the section Entitled ldquoHistoryrdquo Preserve its Title and add to it an itemstating at least the title year new authors and publisher of the Modified Versionas given on the Title Page If there is no section Entitled ldquoHistoryrdquo in the Docu-ment create one stating the title year authors and publisher of the Documentas given on its Title Page then add an item describing the Modified Version asstated in the previous sentence

J Preserve the network location if any given in the Document for public access toa Transparent copy of the Document and likewise the network locations given inthe Document for previous versions it was based on These may be placed in theldquoHistoryrdquo section You may omit a network location for a work that was publishedat least four years before the Document itself or if the original publisher of theversion it refers to gives permission

K For any section Entitled ldquoAcknowledgementsrdquo or ldquoDedicationsrdquo Preserve the Titleof the section and preserve in the section all the substance and tone of each of thecontributor acknowledgements andor dedications given therein

L Preserve all the Invariant Sections of the Document unaltered in their text andin their titles Section numbers or the equivalent are not considered part of thesection titles

M Delete any section Entitled ldquoEndorsementsrdquo Such a section may not be includedin the Modified Version

N Do not retitle any existing section to be Entitled ldquoEndorsementsrdquo or to conflict intitle with any Invariant Section

O Preserve any Warranty Disclaimers

If the Modified Version includes new front-matter sections or appendices that qualifyas Secondary Sections and contain no material copied from the Document you may atyour option designate some or all of these sections as invariant To do this add their

Appendix A GNU Free Documentation License 30

titles to the list of Invariant Sections in the Modified Versionrsquos license notice Thesetitles must be distinct from any other section titles

You may add a section Entitled ldquoEndorsementsrdquo provided it contains nothing butendorsements of your Modified Version by various partiesmdashfor example statements ofpeer review or that the text has been approved by an organization as the authoritativedefinition of a standard

You may add a passage of up to five words as a Front-Cover Text and a passage of upto 25 words as a Back-Cover Text to the end of the list of Cover Texts in the ModifiedVersion Only one passage of Front-Cover Text and one of Back-Cover Text may beadded by (or through arrangements made by) any one entity If the Document alreadyincludes a cover text for the same cover previously added by you or by arrangementmade by the same entity you are acting on behalf of you may not add another butyou may replace the old one on explicit permission from the previous publisher thatadded the old one

The author(s) and publisher(s) of the Document do not by this License give permissionto use their names for publicity for or to assert or imply endorsement of any ModifiedVersion

5 COMBINING DOCUMENTS

You may combine the Document with other documents released under this Licenseunder the terms defined in section 4 above for modified versions provided that youinclude in the combination all of the Invariant Sections of all of the original documentsunmodified and list them all as Invariant Sections of your combined work in its licensenotice and that you preserve all their Warranty Disclaimers

The combined work need only contain one copy of this License and multiple identicalInvariant Sections may be replaced with a single copy If there are multiple InvariantSections with the same name but different contents make the title of each such sectionunique by adding at the end of it in parentheses the name of the original author orpublisher of that section if known or else a unique number Make the same adjustmentto the section titles in the list of Invariant Sections in the license notice of the combinedwork

In the combination you must combine any sections Entitled ldquoHistoryrdquo in the vari-ous original documents forming one section Entitled ldquoHistoryrdquo likewise combine anysections Entitled ldquoAcknowledgementsrdquo and any sections Entitled ldquoDedicationsrdquo Youmust delete all sections Entitled ldquoEndorsementsrdquo

6 COLLECTIONS OF DOCUMENTS

You may make a collection consisting of the Document and other documents releasedunder this License and replace the individual copies of this License in the variousdocuments with a single copy that is included in the collection provided that youfollow the rules of this License for verbatim copying of each of the documents in allother respects

You may extract a single document from such a collection and distribute it individu-ally under this License provided you insert a copy of this License into the extracteddocument and follow this License in all other respects regarding verbatim copying ofthat document

Appendix A GNU Free Documentation License 31

7 AGGREGATION WITH INDEPENDENT WORKS

A compilation of the Document or its derivatives with other separate and independentdocuments or works in or on a volume of a storage or distribution medium is calledan ldquoaggregaterdquo if the copyright resulting from the compilation is not used to limit thelegal rights of the compilationrsquos users beyond what the individual works permit Whenthe Document is included in an aggregate this License does not apply to the otherworks in the aggregate which are not themselves derivative works of the Document

If the Cover Text requirement of section 3 is applicable to these copies of the Documentthen if the Document is less than one half of the entire aggregate the Documentrsquos CoverTexts may be placed on covers that bracket the Document within the aggregate or theelectronic equivalent of covers if the Document is in electronic form Otherwise theymust appear on printed covers that bracket the whole aggregate

8 TRANSLATION

Translation is considered a kind of modification so you may distribute translationsof the Document under the terms of section 4 Replacing Invariant Sections withtranslations requires special permission from their copyright holders but you mayinclude translations of some or all Invariant Sections in addition to the original versionsof these Invariant Sections You may include a translation of this License and all thelicense notices in the Document and any Warranty Disclaimers provided that youalso include the original English version of this License and the original versions ofthose notices and disclaimers In case of a disagreement between the translation andthe original version of this License or a notice or disclaimer the original version willprevail

If a section in the Document is Entitled ldquoAcknowledgementsrdquo ldquoDedicationsrdquo or ldquoHis-toryrdquo the requirement (section 4) to Preserve its Title (section 1) will typically requirechanging the actual title

9 TERMINATION

You may not copy modify sublicense or distribute the Document except as expresslyprovided under this License Any attempt otherwise to copy modify sublicense ordistribute it is void and will automatically terminate your rights under this License

However if you cease all violation of this License then your license from a particularcopyright holder is reinstated (a) provisionally unless and until the copyright holderexplicitly and finally terminates your license and (b) permanently if the copyrightholder fails to notify you of the violation by some reasonable means prior to 60 daysafter the cessation

Moreover your license from a particular copyright holder is reinstated permanently ifthe copyright holder notifies you of the violation by some reasonable means this is thefirst time you have received notice of violation of this License (for any work) from thatcopyright holder and you cure the violation prior to 30 days after your receipt of thenotice

Termination of your rights under this section does not terminate the licenses of partieswho have received copies or rights from you under this License If your rights havebeen terminated and not permanently reinstated receipt of a copy of some or all of thesame material does not give you any rights to use it

Appendix A GNU Free Documentation License 32

10 FUTURE REVISIONS OF THIS LICENSE

The Free Software Foundation may publish new revised versions of the GNU FreeDocumentation License from time to time Such new versions will be similar in spiritto the present version but may differ in detail to address new problems or concernsSee httpwwwgnuorgcopyleft

Each version of the License is given a distinguishing version number If the Documentspecifies that a particular numbered version of this License ldquoor any later versionrdquoapplies to it you have the option of following the terms and conditions either of thatspecified version or of any later version that has been published (not as a draft) bythe Free Software Foundation If the Document does not specify a version number ofthis License you may choose any version ever published (not as a draft) by the FreeSoftware Foundation If the Document specifies that a proxy can decide which futureversions of this License can be used that proxyrsquos public statement of acceptance of aversion permanently authorizes you to choose that version for the Document

11 RELICENSING

ldquoMassive Multiauthor Collaboration Siterdquo (or ldquoMMC Siterdquo) means any World WideWeb server that publishes copyrightable works and also provides prominent facilitiesfor anybody to edit those works A public wiki that anybody can edit is an example ofsuch a server A ldquoMassive Multiauthor Collaborationrdquo (or ldquoMMCrdquo) contained in thesite means any set of copyrightable works thus published on the MMC site

ldquoCC-BY-SArdquo means the Creative Commons Attribution-Share Alike 30 license pub-lished by Creative Commons Corporation a not-for-profit corporation with a principalplace of business in San Francisco California as well as future copyleft versions of thatlicense published by that same organization

ldquoIncorporaterdquo means to publish or republish a Document in whole or in part as partof another Document

An MMC is ldquoeligible for relicensingrdquo if it is licensed under this License and if all worksthat were first published under this License somewhere other than this MMC andsubsequently incorporated in whole or in part into the MMC (1) had no cover textsor invariant sections and (2) were thus incorporated prior to November 1 2008

The operator of an MMC Site may republish an MMC contained in the site underCC-BY-SA on the same site at any time before August 1 2009 provided the MMC iseligible for relicensing

Appendix A GNU Free Documentation License 33

ADDENDUM How to use this License for your documents

To use this License in a document you have written include a copy of the License in thedocument and put the following copyright and license notices just after the title page

Copyright (C) year your name

Permission is granted to copy distribute andor modify this document

under the terms of the GNU Free Documentation License Version 13

or any later version published by the Free Software Foundation

with no Invariant Sections no Front-Cover Texts and no Back-Cover

Texts A copy of the license is included in the section entitled lsquolsquoGNU

Free Documentation Licensersquorsquo

If you have Invariant Sections Front-Cover Texts and Back-Cover Texts replace theldquowith Textsrdquo line with this

with the Invariant Sections being list their titles with

the Front-Cover Texts being list and with the Back-Cover Texts

being list

If you have Invariant Sections without Cover Texts or some other combination of thethree merge those two alternatives to suit the situation

If your document contains nontrivial examples of program code we recommend releasingthese examples in parallel under your choice of free software license such as the GNUGeneral Public License to permit their use in free software

Index 34

Index

Aaccess control policy 3Author 3author specifying 10

Bbehavior prior to version 5 10behavior version 3 10behavior version 4 10binary-old-keyword-value substitution mode 9branch growth 7branch number 2branch tip 2branch default 3bug reporting 25

Ccase sensitivity file format 21checkin 3checklist for bug reports 25checkout 3checkout implicit 5ci invocation 11co invocation 12comma-v file format 1command help 7command version 7command-line option to specify a revision 7credits 1

DDate 3date formats 8date specifying 8dates file format 21default branch 3default branch setting 15deleting revisions 15description of working file 2description text specifying 8

Eempty log message 9emulation previous RCS versions 10encoding file format 20environment variables 10

Ffeatures still missing 23

file names on the command-line 7format RCSfile 20

Ggrammar file format 20

HHeader 3history 1

IId 3ident invocation 13implicit checkout circumstance 5implicit checkout locked 12implicit checkout unlocked 12instantiating a working file 2interaction model 1interactive mode 9invocation ci 11invocation co 12invocation ident 13invocation merge 14invocation rcs 14 15invocation rcsclean 16invocation rcsdiff 17invocation rcsmerge 17invocation rlog 18

Kkeyword-only substitution mode 9keyword-value substitution mode 8keyword-value-locker substitution mode 9keywords table of 3

Llayout of nodes file format 21license 1Locker 3locking a revision 15locking on implicit checkout 12locking non-strict 5locking set non-strict 15locking set strict 15locking strict 5locks in RCS file 3Log 3log message empty 9LOGNAME 11

Index 35

Mmemory limit 11merge invocation 14model interaction 1

NName 4names symbolic 3node layout file format 21non-strict locking 5number branch 2number revision 2

Oold-keyword-value substitution mode 9order of options and file names 7outdating revisions 15overview 1

Ppairing RCS and working files 7patches contributing 25problems 25projects related 1

Qquiet mode 9

Rrange of revisions specifying 7RCS file 2rcs invocation 14 15RCS version emulation 10RCS_MEM_LIMIT 11rcsclean invocation 16rcsdiff invocation 17RCSfile 4RCSfile format 20RCSINIT 10rcsmerge invocation 17removing revisions 15reporting bugs 25Revision 4revision number 2revision range specifying 7

revision specifying 7revisions tree of 3rlog invocation 18

SSource 4specifying a date 8specifying a range of revisions 7specifying a revision 7specifying a state 9specifying a suffix list 10specifying a timedate 8specifying author 10specifying description text 8specifying substitution mode 8State 4state specifying 9strict locking 5substitution mode default 8substitution mode specifying 8suffix list specifying 10symbolic names 3

TTEMP 11third-party interop file format 21Tichy Walter F 1time zone 8timedate specifying 8tip 2tip increment 7TMP 11TMPDIR 11tree of revisions 3

Uunlocking a revision 15USER 11

Vvalue-only substitution mode 9

Wwhitespace file format 21working file description 2working file instantiation 2

  • Overview
    • Credits
    • Concepts
      • Interaction model
      • Working file
      • RCS file
      • Fundamental operations
      • Keywords
        • Quick tour
          • Usage
            • Common elements
              • Revision options
              • Date option
              • Description option
              • Substitution mode option
              • Log message option
              • Misc common options
              • Environment
                • Invoking ci
                • Invoking co
                • Invoking ident
                • Invoking merge
                • Invoking rcs
                  • modern
                  • legacy
                    • Invoking rcsclean
                    • Invoking rcsdiff
                    • Invoking rcsmerge
                    • Invoking rlog
                      • Hacking
                        • File format
                          • File format grammar
                          • Additional particulars of the file format
                            • Still missing
                            • Reporting bugs
                              • GNU Free Documentation License
                              • Index
Page 6: GNU RCS · The RCS file is also known (colloquially) as the “comma-v file”, due to its name often ending in ,v (e.g., a.c,v). A revision number is a branch number followed by

Chapter 1 Overview 3

next higher branch number 942

next higher revision number 94143

333333333 -- not on trunk branch point 333333

next higher branch number 333333334

next higher revision number 3333333331

In addition to this ldquotreerdquo of thus-linked revisions the RCS file keeps track of the defaultbranch ie the branch whose tip corresponds to the most recent checkin as well as thesymbolic names a list of associations between a user-supplied (and presumably meaningful)symbol and an underlying branch or revision number

The RCS file contains two pieces of information used to implement its access controlpolicy The first is a list of usernames If non-empty only those users listed can modifythe RCS file (via RCS commands) The second is a list of locks ie association betweena username and a revision number If a lock usernamerevno exists that means onlyusername may modify revno (that is do a checkin operation to deposit the next higherrevision or a higher revision number on the same branch as revno)

124 Fundamental operations

The checkin operation records the contents of the working file in the RCS file assigning ita new (normally the next higher) revision number and recording the username timestampstate (a short symbol) and user-supplied log message (a textual description of the changesleading to that revision) It uses diff to find the differences between the tip of the defaultbranch and the working file thereby writing the minimal amount of information needed tobe able to recreate the contents of the previous tip

The checkout operation identifies a specific revision from the RCS file and either dis-plays the content to standard output or instantiates a working file overwriting any currentinstantiation with the selected revision In either case the content may undergo keywordexpansion which replaces text of the form lsquo$Keyword$rsquo with (possibly) different text com-prising the keyword and its value depending on the current keyword expansion mode (seeSection 214 [Substitution mode option] page 8)

125 Keywords

The keywords and their values are

Author The login name of the user who checked in the revision

Date The date and time the revision was checked in May include an appendedtimezone offset

Header A standard header containing the absolute RCS filename the revision numberthe date and time the author the state and the locker (if locked) May includean appended timezone offset

Id Same as lsquoHeaderrsquo except that only the basename appears (no directory com-ponents)

Locker The login name of the user who locked the revision (empty if not locked)

Chapter 1 Overview 4

Log The log message supplied during checkin preceded by a header containing theRCS filename the revision number the author and the date and time Mayinclude an appended timezone offset

Existing log messages are not replaced Instead the new log message is insertedafter lsquo$Log$rsquo This is useful for accumulating a complete change log in asource file

Each inserted line is prefixed by the string that prefixes the lsquo$Log$rsquo line Forexample if the lsquo$Log$rsquo line is

$Log tancc $

then RCS prefixes each line of the log with lsquo rsquo (slash slash space) This isuseful for languages with comments that go to the end of the line

The convention for other languages is to use a lsquo rsquo (space asterisk space)prefix inside a multiline comment For example the initial log comment of a Cprogram conventionally is of the following form

$Log$

For backwards compatibility with older versions of RCS if the log prefix is lsquorsquoor lsquo(rsquo surrounded by optional white space inserted log lines contain a spaceinstead of lsquorsquo or lsquo(rsquo however this usage is obsolescent and should not be reliedon

Name The symbolic name used to check out the revision if any For example lsquoco-rJoersquo generates lsquo$Name Joe $rsquo Plain co generates just lsquo$Name $rsquo

RCSfile The basename of the RCS file

Revision The revision number assigned to the revision

Source The absolute RCS filename

State The state assigned to the revision with the -s option of rcs or ci

13 Quick tour

This section complements the preceding section (see Section 12 [Concepts] page 1) pre-senting a handful of RCS commands in quick succession For details on individual RCScommands See Chapter 2 [Usage] page 7

Suppose you have a file fc that you wish to put under control of RCS If you have notalready done so make an RCS directory with the command

mkdir RCS

Then invoke the checkin command

ci fc

This command creates an RCS file in directory RCS stores fc into it as revision 11 anddeletes fc It also asks you for a description The description should be a synopsis of thecontents of the file All later checkin commands will ask you for a log entry which shouldsummarize the changes that you made

To get back the working file fc in the previous example use the checkout command

Chapter 1 Overview 5

co fc

This command extracts the latest revision from the RCS file and writes it into fc If youwant to edit fc you must lock it as you check it out with the command

co -l fc

You can now edit fc Suppose after some editing you want to know what changes thatyou have made The command

rcsdiff fc

tells you the difference between the most recently checked-in version and the working fileYou can check the file back in by invoking

ci fc

This increments the revision number properly If ci complains with the message

ci error no lock set by your name

then you have tried to check in a file even though you did not lock it when you checked itout Of course it is too late now to do the checkout with locking because another checkoutwould overwrite your modifications Instead invoke

rcs -l fc

This command will lock the latest revision for you unless somebody else got ahead of youalready In this case yoursquoll have to negotiate with that person

Locking assures that you and only you can check in the next update and avoids nastyproblems if several people work on the same file Even if a revision is locked it can still bechecked out for reading compiling etc All that locking prevents is a checkin by anybodybut the locker

If your RCS file is private ie if you are the only person who is going to deposit revisionsinto it strict locking is not needed and you can turn it off If strict locking is turned offthe owner of the RCS file need not have a lock for checkin all others still do Turning strictlocking off and on is done with the commands

rcs -U fc disable strict lockingrcs -L fc enable strict locking

If you donrsquot want to clutter your working directory with RCS files create a subdirectorycalled RCS in your working directory and move all your RCS files there RCS commandswill look first into that directory to find needed files All the commands discussed abovewill still work without any modification See Section 21 [Common elements] page 7

To avoid the deletion of the working file during checkin (in case you want to continueediting or compiling) invoke one of

ci -l fc checkin + locked checkoutci -u fc checkin + unlocked checkout

These commands check in fc as usual then perform an implicit checkout The first formalso locks the checked in revision the second one doesnrsquot Thus these options save you onecheckout operation The first form is useful if you want to continue editing the second oneif you just want to read the file Both update the keyword substitutions in your workingfile see Section 12 [Concepts] page 1

You can give ci the number you want assigned to a checked-in revision Assume all yourrevisions were numbered 11 12 13 etc and you would like to start release 2 Either ofthe commands

Chapter 1 Overview 6

ci -r2 fc

ci -r21 fc

assigns the number 21 to the new revision From then on ci will number the subsequentrevisions with 22 23 etc The corresponding co commands

co -r2 fc

co -r21 fc

retrieve the latest revision numbered 2x and the revision 21 respectively co withouta revision number selects the latest revision on the trunk ie the highest revision with anumber consisting of two fields Numbers with more than two fields are needed for branchesFor example to start a branch at revision 13 invoke

ci -r131 fc

This command starts a branch numbered 1 at revision 13 and assigns the number 1311to the new revision Here is a diagram showing the new revision in relation to its branchand the trunk

11 -- 12 -- 13 -- 14 -- 15

|

[131] -- 1311

For more information about branches See Section 12 [Concepts] page 1

Chapter 2 Usage 7

2 Usage

This chapter describes how to invoke RCS commands including common command-lineelements as well options specific to each command

21 Common elements

All RCS commands accept --help and --version See Section ldquoCommand-Line Interfacesrdquoin The GNU Coding Standards

Aside from --help and --version RCS commands take the form lsquo-letter[arg]rsquo iea hyphen followed by a single letter optionally followed by extra information The squarebraces mean that the extra information is optional (No square braces means that the extrainformation is required) In any case when specified the extra information must abut theletter there can be no intervening whitespace

co -u 14 foo wrong space between -u and 14

co -u14 foo ok

Furthermore options must appear before file names (if any) on the command line

ident foo -q wrong option after file nameident -q foo ok

Lastly pairs of RCS and working files can be specified in three ways (a) both are given (b)only the working file is given (c) only the RCS file is given For (a) both RCS and workingfiles may have arbitrary directory components RCS commands pair them up intelligentlyFor (b) RCS commands will look first into the directory RCS if it exists to find theassociated RCS file

211 Revision options

As to be expected in a revision control system many options are of the form lsquo-flag[rev]rsquowhere flag is a single letter (eg lsquorrsquo) If ommitted rev defaults to the latest revision onthe default branch A revision can be specified in many ways

brn Straightforward dot-notation where br specifies the branch

n Like brn using the default branch

br Like brn using the a command-specific computation of n given the currenttip i For ci (see Section 22 [ci] page 11) n would be i + 1 while for othercommands n would be simply i

name This is the symbolic name of a revision as assigned previously by a ci -n orci -N command

$ The command computes the effective revision by examining the values of key-word expansions in the working file

For commands that accept a range of revisions the syntax is generally rev1rev2 ie tworevisions (specified as described above) separated by a colon

Chapter 2 Usage 8

212 Date option

Some commands accept an option of the form lsquo-ddatersquo to specify a date an absolute pointin time (to second resolution) expressed in a date format These also accept lsquo-zzonersquo tospecify the timezone The special value lsquoLTrsquo stands for the local time zone RCS recognizesmany date formats and time zones For example the following dates are equivalent if localtime is January 11 1990 8pm Pacific Standard Time eight hours west of CoordinatedUniversal Time (UTC)

800 pm lt

400 AM Jan 12 1990 default is UTC

1990-01-12 040000+00 ISO 8601 (UTC)

1990-01-11 200000-08 ISO 8601 (local time)

19900112 040000 traditional RCS format

Thu Jan 11 200000 1990 LT output of ctime(3) + LT

Thu Jan 11 200000 PST 1990 output of date(1)

Fri Jan 12 040000 GMT 1990

Thu 11 Jan 1990 200000 -0800 Internet RFC 822

12-January-1990 0400 WET

Most fields in the date and time can be defaulted The default time zone is normally UTCbut this can be overridden by the -z option The other defaults are determined in the orderyear month day hour minute and second (most to least significant) At least one of thesefields must be provided For omitted fields that are of higher significance than the highestprovided field the time zonersquos current values are assumed For all other omitted fields thelowest possible values are assumed For example without -z the date lsquo20 1030rsquo defaultsto lsquo103000 UTCrsquo of the 20th of the UTC time zonersquos current month and year Note thatfor the shell the datetime must be quoted if it contains spaces

RCS also accepts some other formats which specify only the date portion (omitting thetime portion)

YYYY-DDD DDD is the day of year 1-366

YYYY-wWW-D

WW is the ISO week number 0-53 (actually ISO week numbers are 1-53 week0 is a GNU RCS extension) and D is the ISO day number 1-7 (Monday throughSunday)

213 Description option

Some commands accept an option of the form lsquo-t-textrsquo or lsquo-tfile-namersquo This optionis to set or update the RCS file description text In the first form text is used directlyexcluding the leading hyphen (lsquo-rsquo) that distinguishes the two forms In the second formthe description text is taken from the contents of file-name

214 Substitution mode option

Some commands accept an option of the form -ksubst used to control how keywords (seeSection 12 [Concepts] page 1) are expanded in the working file In the following table ofsubst values the example keyword is lsquoRevisionrsquo and its value is lsquo513rsquo

kv Generate lsquo$Revision 513 $rsquo (dollar-sign keyword colon space value spacedollar-sign) A lockerrsquos name is inserted in the value of the Header Id and

Chapter 2 Usage 9

Locker keyword strings only as a file is being locked ie by ci -l and co -lThis is the default substitution mode

kvl Like -kkv except that a lockerrsquos name is always inserted if the given revisionis currently locked

k Generate lsquo$Revision$rsquo (dollar-sign keyword dollar-sign) This is useful whencomparing different revisions of a file Log messages are inserted after Log key-words even if -kk is specified since this tends to be more useful when mergingchanges

o Like -kkv but use the old value present in the working file just before it waschecked in This can be useful for file formats that cannot tolerate any changesto substrings that happen to take the form of keyword strings

b Like -ko but do all file io in binary mode This makes little difference onPOSIX and Unix hosts but on DOS-like hosts one should use rcs -i -kb toinitialize an RCS file intended to be used for binary files Also on all hostsrcsmerge normally refuses to merge files when -kb is in effect

v Generate lsquo513rsquo (value only) Further keyword substitution cannot be per-formed once the keyword names are removed so this should be used with careBecause of this danger of losing keywords -kv cannot be combined with -land the owner write permission of the working file is turned off to edit the filelater check it out again without -kv

215 Log message option

Both ci and rcs allow a log message to be specified with the -m option If themsg argumentto this option is empty RCS uses the default lsquo empty log message rsquo This particularmessage is handled specially (ie filtered out) by rlog

216 Misc common options

Other common options are -I -q -s -T -V -w -x

-I This option enables interactive mode More precisely it forces interactive modewhereby RCS commands believe that their standard input is a terminal nor-mally a precondition for displaying a prompt to receive input (such as a log mes-sage on checkin) The intention of -I is for scripting situations where standardinput is actually not a terminal but you know beforehand (without prompting)that input is needed and you are ready to provide it on standard input anyway

-q This option enables quiet mode Commands work silently (unless there is anerror condition) and suppress warnings and prompts

-sstate Specify the state to be state

-T This option controls how commands timestamp the RCS file Normally RCScommands set the RCS filersquos timestamp when modifying it in the ldquonaturalrdquo way(without taking any particular care) With -T on the other hand the com-mands either preserve the timestamp (for standalone lockunlock operations)or use the timestamp of the working file (for ci)

Chapter 2 Usage 10

This can be useful if the RCS file is found in a makefile targetrsquos list of pre-requisites (see Section ldquoRule Syntaxrdquo in The GNU Make Manual) that is ifsome target should be rebuilt if the RCS file is newer than it In that case youcan do lsquorcs -u -Trsquo for example to unlock a revision in the RCS file withouttriggering a recompilation

-V Behave like --version ie display command version information and exitsuccessfully NB This option is obsolete and its support will be removed insome future release

-Vn n specifies the RCS (major) version to emulate Valid values for n are 3 4 5Version 5 is the current version so -V5 does nothing special

In versions prior to 5 RCS outputs lsquotrsquo (tab U+09) between the lsquorsquo (colon) andthe value (for keyword substitution) instead of space uses the RCS file commentstring to prefix each line in the Log expansion instead of computing it on thefly from the input text writesreads localtime instead of UTC and displaysslightly different output for rlog

For version 4 the Header expansion unconditionally includes Locker lockeras if the kvl substitution mode were specified (see Section 214 [Substitutionmode option] page 8)

For version 3 the Header expansion omits the directories from the filename andsays only Locked instead of the state

-wlogin Some commands accept an option of the form lsquo-wloginrsquo to specify the loginname of the author of a revision ie ldquowhordquo is responsible

-xsuff Specify suff as the slash-separated list of file name suffixes used to recognizean RCS file The default value is lsquovrsquo that is first try with lsquovrsquo then try withan empty suffix

This basename search occurs within (ie starting from the beginning) the largerdirectory search loop which comprises two candidates dRCS and d where dis the directory component of the working file name For example given theworking file ac in the current directory RCS tries in order these candidates

RCSacv

RCSac

acv

ac

Note that the last candidate is impossible (and is in fact discarded) becausethe working and RCS files cannot have the same name

217 Environment

Various environment variables influence how RCS works

[Environment Variable]RCSINITAnother way to set common options is with the lsquoRCSINITrsquo environment variable Thisis a space-separated list of options Use lsquorsquo (backslash) to escape significant spaceFor example

Chapter 2 Usage 11

Set the value make it available to subsequent commandsRCSINIT=-q -xv -zLT

export RCSINIT

Use it (implicitly)rlog -L foo

This example in Bourne shell syntax arranges for RCS commands to operate as ifeach command-line had prepended lsquo-q -xv -zLTrsquo to the rest of the command-lineThe effective command-line that rlog sees is thus lsquo-q -xv -zLT -L foorsquo

[Environment Variable]RCS_MEM_LIMITNormally for speed commands either memory map or copy into memory the RCS fileif its size is less than thememory limit currently defaulting to ldquounlimitedrdquo Otherwise(or if the initially-tried speedy ways fail) the commands fall back to using standardio routines

You can adjust the memory limit by setting the lsquoRCS_MEM_LIMITrsquo environment variableto a numeric value (measured in kilobytes) An empty value is silently ignored

As a side effect specifying the memory limit inhibits fall-back to slower routines(This env var is mostly intended for testing RCS normally you can leave it unsetProbably it will be removed in a future release)

[Environment Variable]TMPDIR[Environment Variable]TMP[Environment Variable]TEMP

Commands sometimes create temporary files normally in a system-dependent direc-tory such as tmp You can override this directory by specifying another one asthe value of one of the environment variables TMPDIR TMP or TEMP (checked in thatorder)

[Environment Variable]LOGNAME[Environment Variable]USER

Absent -wlogin or when login is omitted (see Section 216 [Misc common options]page 9) commands check environment variables LOGNAME and USER (in that order)If neither of these are set RCS queries the host for and uses your login

22 Invoking ci

rcs ci [options] file

(or ldquocirdquo instead of ldquorcs cirdquo)

The ci command adds a revision to the RCS file reflecting the current state of the workingfile This operation is also known as ldquocheckinrdquo

-f[rev] Force new entry even if no content changed

-I[rev]

-q[rev] See Section 216 [Misc common options] page 9

-i[rev] Initial checkin error if the RCS file already exists

-j[rev] Just checkin donrsquot initialize error if the RCS file does not exist

Chapter 2 Usage 12

-k[rev] Compute revision from working file keywords

-r Release lock and delete working file

-rrev Do normal checkin

-l[rev] Like -r but immediately checkout locked (co -l) afterwards

-u[rev] Like -l but checkout unlocked (co -u)

-M[rev] Reset working file mtime (relevant for -l -u)

Multiple flags in -fiIjklMqru may be given except for -r -l -u which are mutuallyexclusive For a fully specified revision of the form brn nmust be greater than any existingon br or br must be new If rev is omitted compute it from the last lock (co -l) perhapsstarting a new branch If there is no lock use defbr(L+1) See Section 211 [Revisionoptions] page 7

-d[date]

-zzone See Section 212 [Date option] page 8 If no date specified use the workingfile modification time

-m[msg] Use msg as the log message See Section 215 [Log message option] page 9

-nname

-Nname Assign symbolic name to the entry For -n name must be new (no previousassignment) For -N overwrite any previous assignment

-sstate See Section 216 [Misc common options] page 9 Set the state

-t-text

-tfile-name

See Section 213 [Description option] page 8

-T Set the RCS filersquos modification time to the new revisionrsquos time if the former pre-cedes the latter and there is a new revision preserve the RCS filersquos modificationtime otherwise

-wwho Use who as the author

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

23 Invoking co

rcs co [options] file

(or ldquocordquo instead of ldquorcs cordquo)

The co command retrieves a revision from the RCS file writing a new working file Thisoperation is also known as ldquocheckoutrdquo

-f[rev] Force overwrite of working file

-I[rev]

-q[rev] See Section 216 [Misc common options] page 9

-p[rev] Write to stdout instead of the working file

Chapter 2 Usage 13

-r[rev] Normal checkout

-l[rev] Like -r but also lock

-u[rev] Like -l but unlock

-M[rev] Reset working file mtime (relevant for -l -u)

Multiple flags in -fIlMpqru may be given except for -r -l -u which are mutuallyexclusive See Section 211 [Revision options] page 7

-ksubst See Section 214 [Substitution mode option] page 8

-ddate

-zzone See Section 212 [Date option] page 8 Select latest before or on date

-jjoins Merge using joins a list of revrev pairs NB This option is obsolete (seeSection 29 [rcsmerge] page 17)

-sstate See Section 216 [Misc common options] page 9 Select matching state

-S Enable self-same mode In this mode the owner of a lock is unimportantjust that it exists Effectively this prevents you from checking out the samerevision twice

$ whoami

ttn

$ co -l -f z

RCSzv --gt z

revision 11 (locked)

done

$ co -S -l -f z

RCSzv --gt z

co RCSzv Revision 11 is already locked by ttn

-T Preserve the modification time on the RCS file even if it changes because a lockis added or removed

-wwho Select matching login who

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

24 Invoking ident

ident [options] [file ]

If no file is specified scan standard input The ident command scans its input for keywords(see Section 12 [Concepts] page 1) displaying to standard output what it finds

-q Normally if no patterns are found for a file ident emits a warning This optionsuppresses the warning

Chapter 2 Usage 14

-V Note that -Vn is not a valid option for ident in contrast to most other RCScommands (see Section 216 [Misc common options] page 9)

In addition to the normal keyword pattern for Subversion 12 (and later) compatibility1ident also recognizes patterns having one of the forms

$keyword text $

two colons and space after keyword

space before ending $

$keyword text$

two colons and space after keyword

hash before ending $

25 Invoking merge

merge [options] receiving-sibling parent other-sibling

The merge command combines the differences between a the parent and the other siblingand the differences between the parent and the receiving sibling It writes the result to thereceiving sibling

-A

-E

-e Use diff3 -A -E (default) or -e respectively

-p Write to stdout instead of overwriting receiving-sibling

-q See Section 216 [Misc common options] page 9 Suppress conflict warnings

-Llabel (up to three times) Specify the conflict labels for receiving-sibling parent andother-sibling respectively

-V Note that -Vn is not a valid option for merge in contrast to most other RCScommands (see Section 216 [Misc common options] page 9)

26 Invoking rcs

The rcs command is unique in the set of RCS programs in that it has two usages themodern (for RCS 590 and later) and the legacy

261 modern

rcs [options] command [command-arg ]

This rcs usage dispatches to command passing along command-arg without interpreta-tion

--commands

Display a list of available commands including a one-line description and exitsuccessfully

1 The fixed-length keyword syntax is described in detail in Version Control with Subversion chapterldquoAdvanced Topicsrdquo section ldquoKeyword Substitutionrdquo

Chapter 2 Usage 15

--aliases

Display a list of command aliases and exit successfully

--help command

Display help for a particular command and exit successfully For example todisplay help for the legacy interface use

--help frob

262 legacy

rcs frob [options] file

(or ldquorcsrdquo instead of ldquorcs frobrdquo)

This rcs usage performs various administrative operations on the RCS file depending onthe options given

-i Create and initialize a new RCS file

-L Set strict locking

-U Set non-strict locking

-M Donrsquot send mail when breaking someone elsersquos lock

-T Preserve the modification time on the RCS file unless a revision is removed

-I

-q See Section 216 [Misc common options] page 9

-alogins Append logins (comma-separated list of usernames) to access-list

-e[logins]

Erase logins (comma-separated list of usernames) from access-list If logins isomitted clear the access-list

-Afile-name

Append access-list of file-name to current access-list

-b[rev] Set default branch to that of rev or highest branch on trunk if rev is omitted

-l[rev] Lock a revision

-u[rev] Unlock a revision

-cstring Set comment leader to string NB Donrsquot use obsolete

-ksubst See Section 214 [Substitution mode option] page 8

-mrev[msg]

Replace log message with msg See Section 215 [Log message option] page 9

-nname[[rev]]

If rev is omitted delete symbolic name Otherwise associate name with rev name must be new

-Nname[[rev]]

Like -n but overwrite any previous assignment

-orange Delete (also known as ldquooutdaterdquo) revisions in range

Chapter 2 Usage 16

rev single revision

br latest revision on branch br

rev1rev2

rev1 to rev2 on same branch inclusive

rev beginning of branch to rev

rev rev to end of branch

-sstate[rev]

See Section 216 [Misc common options] page 9 Set state

-t-text

-tfile-name

See Section 213 [Description option] page 8 Replace description

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

These options have no effect and are included solely for consistency with other comamnds(see Section 217 [Environment] page 10) -zzone

27 Invoking rcsclean

rcs clean [options] [file ]

(or ldquorcscleanrdquo instead of ldquorcs cleanrdquo)

The rcsclean command removes working files that are not being worked on If given -u italso unlocks and removes working files that are being worked on but have not changed Ifno file is specified operate on all the working files in the current directory

-r[rev] Specify revision

-u[rev] Unlock if is locked and no differences found

-n[rev] Dry run (no act donrsquot operate)

-q[rev] See Section 216 [Misc common options] page 9

-ksubst See Section 214 [Substitution mode option] page 8

-T Preserve the modification time on the RCS file even it changes because a lockis removed

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

-zzone See Section 212 [Date option] page 8

Chapter 2 Usage 17

28 Invoking rcsdiff

rcs diff [options] file

(or ldquorcsdiffrdquo instead of ldquorcs diffrdquo)

The rcsdiff command runs diff to compare two revisions in an RCS file See Section ldquoIn-voking diffrdquo in The GNU Diffutils Manaual

-rrev (zero one or two times) Name a revision If given two revisions (lsquo-rrev1-rrev2rsquo) compare those revisions If given only one revision (lsquo-rrevrsquo) comparethe working file with it If given no revisions compare the working file with thelatest revision on the default branch

-ksubst See Section 214 [Substitution mode option] page 8

-q See Section 216 [Misc common options] page 9

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

-zzone See Section 212 [Date option] page 8

These options have no effect and are included solely for consistency with other comamnds(see Section 217 [Environment] page 10) -T

Additionally the following options (and their argument if any) are passed to the underlyingdiff command

-0 -1 -2 -3 -4 -5 -6 -7 -8 -9 -B -C -D -F -H -I

-L -U -W -a -b -c -d -e -f -h -i -n -p -t -u -w -y

long options (that start with --)

(Not all of these options are meaningful)

29 Invoking rcsmerge

rcs merge [options] file

(or ldquorcsmergerdquo instead of ldquorcs mergerdquo)

The rcsmerge command incorporates the changes between two revisions of an RCS file intothe corresponding working file

-A

-E

-e Passed to the diff3 command The default if none are specified is -E With -esuppress warnings on conflict The -A style generates the most verbose outputSee Section ldquoInvoking diff3rdquo in The GNU Diffutils Manual

-p[rev] Write to stdout instead of overwriting the working file

-q[rev] See Section 216 [Misc common options] page 9

-rrev (one or two times) specify a revision

One or two revisions must be specified (using -p -q -r) If only one is specified the secondrevision defaults to the latest revision on the default branch

Chapter 2 Usage 18

-ksubst See Section 214 [Substitution mode option] page 8

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

-zzone See Section 212 [Date option] page 8

These options have no effect and are included solely for consistency with other comamnds(see Section 217 [Environment] page 10) -T

210 Invoking rlog

rcs log [options] file

(or ldquorlogrdquo instead of ldquorcs logrdquo)

The rlog command displays information about RCS files

-L Ignore RCS files with no locks set

-R Print only the name of the RCS file

-h Print only the ldquoheaderrdquo information

-t Like -h but also include the description

-N Omit symbolic names

-b Select the default branch

-ddates See Section 212 [Date option] page 8 Select revisions based on timestampin the range dates with spec

d single revision d or earlier

d1ltd2

d2gtd1 between d1 and d2 exclusive

ltd

dgt before d

gtd

dlt after d

Instead of lsquoltrsquo or lsquogtrsquo you can use lsquolt=rsquo or lsquogt=rsquo respectively to specify inclusiveranges dates may also be a list of semicolon-separated specs

-l[who] Select revisions locked by who (comma-separated list of usernames) only or byanyone if who is omitted

-r[revs] Select revisions in revs a comma-separated list of range specs one of revrev rev rev1rev2

-sstates See Section 216 [Misc common options] page 9 states can also be a comma-separated list of states Select revisions with specified state(s)

-w[who] Select revisions checked in by who (comma-separated list of usernames) or bythe user if who is omitted

Chapter 2 Usage 19

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

-zzone See Section 212 [Date option] page 8

These options have no effect and are included solely for consistency with other comamnds(see Section 217 [Environment] page 10) lsquo-qrsquo lsquo-Trsquo

Chapter 3 Hacking 20

3 Hacking

This chapter in contrast to the previous (see Chapter 2 [Usage] page 7) is introspective Itdescribes an important aspect of RCS interop with other programs and development ideasand methods

31 File format

An RCS filersquos contents are described by the grammar below1 Overall the format is freendashformat text In most environments RCS uses the ISO 88591 encoding visible graphiccharacters are (octal) codes 041ndash176 and 240ndash377 and whitespace characters are codes010ndash015 and 040TODO Discuss or point to encoding compatibility issues

311 File format grammar

The meta syntax in this section uses the following conventions lsquo|rsquo (U+7C) separates al-ternatives lsquorsquo (U+7B) and lsquorsquo (U+7D) enclose optional phrases lsquorsquo and lsquorsquo (trailing U+2A)enclose phrases that can be repeated zero or more times lsquorsquo and lsquo+rsquo (trailing U+2B) enclosephrases that must appear at least once and can be repeated terminal symbols are in lsquorsquo(two U+22)

rcstext = admin delta desc deltatext

admin = head num

branch num

access id

symbols sym num

locks id num

strict

integrity intstring

comment string

expand string

delta = num

date num

author id

state id

branches num

next num

commitid sym

desc = desc string

deltatext = num

log string

text string

1 This section is adapted from the lsquorcsfile(5)rsquo manpage written by Walter F Tichy

Chapter 3 Hacking 21

num = digit | +

digit = 0 through 9

id = idchar | +

sym = idchar+

idchar = any visible graphic character except special

special = $ | | | | |

string = any character with doubled

word = id | num | string |

intchar = any character except

thirdp = ^L intchar

intstring = intchar thirdp

312 Additional particulars of the file format

bull In releases prior to 58 (2011-08-30) the grammar included the production

newphrase = id word

and used it in the admin delta and deltatext productions This allowed third-partyprograms to interoperate with RCS by storing opaque (to RCS) data in the file

As of 58 in the name of progress (towards more systematic file integrity support) theonly area reserved for third-party interop is in the (string) value of the integrity fieldspecifically after the first formfeed (U+0C) A further restriction (for all programs) isthat the integrity value must not contain lsquorsquo

bull Whitespace has no significance except in strings However whitespace cannot appearwithin an id num or sym and an RCS file must end with newline (U+0A) Strings areenclosed by lsquorsquo (U+40) If a string contains a lsquorsquo it must be doubled otherwise stringscan contain arbitrary binary data

bull Identifiers are case sensitive Keywords are in lower case only The sets of keywordsand identifiers can overlap

bull Dates which appear after the date keyword are of the form Ymmddhhmmss whereY is the year mm the month (01ndash12) dd the day (01ndash31) hh the hour (00ndash23) mm theminute (00ndash59) and ss the second (00ndash60) Y contains just the last two digits of theyear for years from 1900 through 1999 and all the digits of years thereafter Dates usethe Gregorian calendar times use UTC

bull The delta nodes form a tree All nodes whose numbers consist of a single pair (eg 2321 13) are on the trunk and are linked through the next field in order of decreasing

Chapter 3 Hacking 22

numbers The head field in the admin node points to the head of that sequence (iecontains the highest pair) The branch node in the admin node indicates the defaultbranch (or revision) for most RCS operations If empty the default branch is thehighest branch on the trunk

All delta nodes whose numbers consist of 2n fields (n ge 2) (eg 3111 2122) arelinked as follows All nodes whose first 2nminus1 number fields are identical are linkedthrough the next field in order of increasing numbers For each such sequence thedelta node whose number is identical to the first 2nminus2 number fields of the delta

nodes on that sequence is called the branchpoint The branches field of a node containsa list of the numbers of the first nodes of all sequences for which it is a branchpointThis list is ordered in increasing numbers See Figure 31

Chapter 3 Hacking 23

Head

|

|

v

---------

| |

| 21 |

| |

1213 1311 | | 1222 122111

--------- --------- --------- --------- -------------

^ ^ | ^ ^

| | | | |

| | v | |

| --------- |

| 13 |

--------- -----------

1211 131 1221 12211

--------- ---------

^ | ^

| | |

| v |

| --------- |

| 12 |

---------------------- ---------

121 122

|

|

v

---------

11

Figure 31 The organization of an example RCS file

32 Still missing

RCS is still missing some features The following is an unordered list of ldquoto-do musingsrdquo keptby the RCS maintainers If you would like to hack on an item See Section 33 [Reportingbugs] page 25

bull Add an option to rcsmerge so that it can use an arbitrary program to do the 3-waymerge instead of the default merge Likewise for rcsdiff and diff It should be possibleto pass arbitrary options to these programs and to the subsidiary co invocations

bull Add format options for finer control over the output of ident and rlog Eg thereshould be an easy way for rlog to output lines like lsquosrcmainc 24 wftrsquo one for

Chapter 3 Hacking 24

each locked revision rlog options should have three orthogonal types selecting filesselecting revisions and selecting rlog format

bull Add format options for finer control over the output of keyword strings Eg thereshould be some way to prepend lsquo()rsquo and there should be some way to change lsquo$rsquo tosome other character to disable further substitution These options should make theresulting files uneditable like lsquo-kvrsquo

bull Add long options eg --keyword-substitution Unfortunately RCSrsquos option syntaxis incompatible with getopt Perhaps the best way is to overload rcs eg lsquorcs diff

--keyword-substitution=old filersquo instead of lsquorcsdiff -ko filersquo

bull rlog -rMN should work even if M and N have different numbers of fields so long asM is an ancestor of N or vice versa

bull rcs should evaluate options in order this allows rcs -oS -nS

bull Be able to redo your most recent checkin with minor changes

bull co -u shouldnrsquot complain about a lsquo+wrsquo working file if contents donrsquot change

bull Add a lsquo-rsquo option to take the list of file names from standard input Perhaps the filenames should be null-terminated not newline-terminated so that those that containnewlines are handled properly

bull Permit multiple optionndashfilename pairs eg co -r14 a -r15 b

bull Add an option to break a symbolic link to an RCS file instead of breaking the hardlink that it points to

bull Add ways to specify the earliest revision the most recent revision the earliest or latestrevision on a particular branch and the parent or child of some other revision

bull If a user has multiple locks perhaps ci should fall back on the method of ci -k to figureout which revision to use

bull Add an option to rcsclean to clean directories recursively

bull Write an rcsck program that repairs corrupted RCS files much as fsck repairs corruptedfile systems For example it should remove stale lock files

bull Update the date parser to use the more modern getdatey by Bellovin Salz andBerets or the even more modern getdate by Moraes None of these getdate imple-mentations are as robust as RCSrsquos old warhorse in avoiding problems like arithmeticoverflow so theyrsquoll have to be fixed first (Perhaps we can use gnulib module getdate)

bull Break up the code into a library so that itrsquos easier to write new programs that manip-ulate RCS files and so that useless code is removed from the existing programs Forexample the rcs command contains unnecessary keyword substitution baggage andthe merge command can be greatly pruned

bull Make it easier to use your favorite text editor to edit log messages etc instead ofhaving to type them in irretrievably at the terminal

bull Let the user specify a search path for default branches eg to use L as the defaultbranch if it works and M otherwise Let the user require that at least one entry inthe search path works Let the user say that later entries in the search path are readonly ie one cannot check in changes to them This should be an option settable bylsquoRCSINITrsquo

bull Add a way for a user to see which revisions affected which lines

Chapter 3 Hacking 25

bull Have rlog -nN F print just the revision number that N translates to Eg rlog -nB

F would print the highest revision on the branch B Use this to add an option -bB torcsbranch to freeze the named branch This should interact well with default branches

bull Add a co option that prints the revision number before each line as SCCSrsquos get -m

does [I implemented this for Emacs 22 as a subroutine of vc-annotate qv mdashttn]

33 Reporting bugs

To report bugs or suggest enhancements for GNU RCS please visit its homepage (httpwwwgnuorgsoftwarercs) to find directions on how to ldquofile a bug reportrdquo online orsend electronic mail to help-rcsgnuorg (If you use the web interface you donrsquot needto also send email since that is done automatically)

For bug reports please include enough information for the maintainers to reproduce theproblem Generally speaking that means

bull The RCS version command(s) and manual section(s) involved

bull Hardware and operating system names and versions

bull The contents of any input files necessary to reproduce the bug

bull The expected behavior andor output

bull A description of the problem and samples of any erroneous output

bull Options you gave to configure other than specifying installation directories

bull Anything else that you think would be helpful

When in doubt whether something is needed or not include it Itrsquos better to include toomuch than to leave out something important

Patches are welcome if possible please make them with lsquogit format-patchrsquo and includeChangeLog entries (see Section ldquoChange Logrdquo in The GNU Emacs Manual) Please followthe existing coding style

Appendix A GNU Free Documentation License 26

Appendix A GNU Free Documentation License

Version 13 3 November 2008

Copyright ccopy 2000 2001 2002 2007 2008 Free Software Foundation Inchttpfsforg

Everyone is permitted to copy and distribute verbatim copiesof this license document but changing it is not allowed

0 PREAMBLE

The purpose of this License is to make a manual textbook or other functional anduseful document free in the sense of freedom to assure everyone the effective freedomto copy and redistribute it with or without modifying it either commercially or non-commercially Secondarily this License preserves for the author and publisher a wayto get credit for their work while not being considered responsible for modificationsmade by others

This License is a kind of ldquocopyleftrdquo which means that derivative works of the documentmust themselves be free in the same sense It complements the GNU General PublicLicense which is a copyleft license designed for free software

We have designed this License in order to use it for manuals for free software becausefree software needs free documentation a free program should come with manualsproviding the same freedoms that the software does But this License is not limited tosoftware manuals it can be used for any textual work regardless of subject matter orwhether it is published as a printed book We recommend this License principally forworks whose purpose is instruction or reference

1 APPLICABILITY AND DEFINITIONS

This License applies to any manual or other work in any medium that contains anotice placed by the copyright holder saying it can be distributed under the termsof this License Such a notice grants a world-wide royalty-free license unlimited induration to use that work under the conditions stated herein The ldquoDocumentrdquobelow refers to any such manual or work Any member of the public is a licensee andis addressed as ldquoyourdquo You accept the license if you copy modify or distribute the workin a way requiring permission under copyright law

A ldquoModified Versionrdquo of the Document means any work containing the Document ora portion of it either copied verbatim or with modifications andor translated intoanother language

A ldquoSecondary Sectionrdquo is a named appendix or a front-matter section of the Documentthat deals exclusively with the relationship of the publishers or authors of the Documentto the Documentrsquos overall subject (or to related matters) and contains nothing thatcould fall directly within that overall subject (Thus if the Document is in part atextbook of mathematics a Secondary Section may not explain any mathematics) Therelationship could be a matter of historical connection with the subject or with relatedmatters or of legal commercial philosophical ethical or political position regardingthem

The ldquoInvariant Sectionsrdquo are certain Secondary Sections whose titles are designated asbeing those of Invariant Sections in the notice that says that the Document is released

Appendix A GNU Free Documentation License 27

under this License If a section does not fit the above definition of Secondary then it isnot allowed to be designated as Invariant The Document may contain zero InvariantSections If the Document does not identify any Invariant Sections then there are none

The ldquoCover Textsrdquo are certain short passages of text that are listed as Front-CoverTexts or Back-Cover Texts in the notice that says that the Document is released underthis License A Front-Cover Text may be at most 5 words and a Back-Cover Text maybe at most 25 words

A ldquoTransparentrdquo copy of the Document means a machine-readable copy representedin a format whose specification is available to the general public that is suitable forrevising the document straightforwardly with generic text editors or (for images com-posed of pixels) generic paint programs or (for drawings) some widely available drawingeditor and that is suitable for input to text formatters or for automatic translation toa variety of formats suitable for input to text formatters A copy made in an otherwiseTransparent file format whose markup or absence of markup has been arranged tothwart or discourage subsequent modification by readers is not Transparent An imageformat is not Transparent if used for any substantial amount of text A copy that isnot ldquoTransparentrdquo is called ldquoOpaquerdquo

Examples of suitable formats for Transparent copies include plain ASCII withoutmarkup Texinfo input format LaTEX input format SGML or XML using a publiclyavailable DTD and standard-conforming simple HTML PostScript or PDF designedfor human modification Examples of transparent image formats include PNG XCFand JPG Opaque formats include proprietary formats that can be read and editedonly by proprietary word processors SGML or XML for which the DTD andor pro-cessing tools are not generally available and the machine-generated HTML PostScriptor PDF produced by some word processors for output purposes only

The ldquoTitle Pagerdquo means for a printed book the title page itself plus such followingpages as are needed to hold legibly the material this License requires to appear in thetitle page For works in formats which do not have any title page as such ldquoTitle Pagerdquomeans the text near the most prominent appearance of the workrsquos title preceding thebeginning of the body of the text

The ldquopublisherrdquo means any person or entity that distributes copies of the Documentto the public

A section ldquoEntitled XYZrdquo means a named subunit of the Document whose title eitheris precisely XYZ or contains XYZ in parentheses following text that translates XYZ inanother language (Here XYZ stands for a specific section name mentioned below suchas ldquoAcknowledgementsrdquo ldquoDedicationsrdquo ldquoEndorsementsrdquo or ldquoHistoryrdquo) To ldquoPreservethe Titlerdquo of such a section when you modify the Document means that it remains asection ldquoEntitled XYZrdquo according to this definition

The Document may include Warranty Disclaimers next to the notice which states thatthis License applies to the Document These Warranty Disclaimers are considered tobe included by reference in this License but only as regards disclaiming warrantiesany other implication that these Warranty Disclaimers may have is void and has noeffect on the meaning of this License

2 VERBATIM COPYING

Appendix A GNU Free Documentation License 28

You may copy and distribute the Document in any medium either commercially ornoncommercially provided that this License the copyright notices and the licensenotice saying this License applies to the Document are reproduced in all copies andthat you add no other conditions whatsoever to those of this License You may not usetechnical measures to obstruct or control the reading or further copying of the copiesyou make or distribute However you may accept compensation in exchange for copiesIf you distribute a large enough number of copies you must also follow the conditionsin section 3

You may also lend copies under the same conditions stated above and you may publiclydisplay copies

3 COPYING IN QUANTITY

If you publish printed copies (or copies in media that commonly have printed covers) ofthe Document numbering more than 100 and the Documentrsquos license notice requiresCover Texts you must enclose the copies in covers that carry clearly and legibly allthese Cover Texts Front-Cover Texts on the front cover and Back-Cover Texts onthe back cover Both covers must also clearly and legibly identify you as the publisherof these copies The front cover must present the full title with all words of the titleequally prominent and visible You may add other material on the covers in additionCopying with changes limited to the covers as long as they preserve the title of theDocument and satisfy these conditions can be treated as verbatim copying in otherrespects

If the required texts for either cover are too voluminous to fit legibly you should putthe first ones listed (as many as fit reasonably) on the actual cover and continue therest onto adjacent pages

If you publish or distribute Opaque copies of the Document numbering more than 100you must either include a machine-readable Transparent copy along with each Opaquecopy or state in or with each Opaque copy a computer-network location from whichthe general network-using public has access to download using public-standard networkprotocols a complete Transparent copy of the Document free of added material Ifyou use the latter option you must take reasonably prudent steps when you begindistribution of Opaque copies in quantity to ensure that this Transparent copy willremain thus accessible at the stated location until at least one year after the last timeyou distribute an Opaque copy (directly or through your agents or retailers) of thatedition to the public

It is requested but not required that you contact the authors of the Document wellbefore redistributing any large number of copies to give them a chance to provide youwith an updated version of the Document

4 MODIFICATIONS

You may copy and distribute a Modified Version of the Document under the conditionsof sections 2 and 3 above provided that you release the Modified Version under preciselythis License with the Modified Version filling the role of the Document thus licensingdistribution and modification of the Modified Version to whoever possesses a copy ofit In addition you must do these things in the Modified Version

A Use in the Title Page (and on the covers if any) a title distinct from that of theDocument and from those of previous versions (which should if there were any

Appendix A GNU Free Documentation License 29

be listed in the History section of the Document) You may use the same title asa previous version if the original publisher of that version gives permission

B List on the Title Page as authors one or more persons or entities responsible forauthorship of the modifications in the Modified Version together with at least fiveof the principal authors of the Document (all of its principal authors if it has fewerthan five) unless they release you from this requirement

C State on the Title page the name of the publisher of the Modified Version as thepublisher

D Preserve all the copyright notices of the Document

E Add an appropriate copyright notice for your modifications adjacent to the othercopyright notices

F Include immediately after the copyright notices a license notice giving the publicpermission to use the Modified Version under the terms of this License in the formshown in the Addendum below

G Preserve in that license notice the full lists of Invariant Sections and required CoverTexts given in the Documentrsquos license notice

H Include an unaltered copy of this License

I Preserve the section Entitled ldquoHistoryrdquo Preserve its Title and add to it an itemstating at least the title year new authors and publisher of the Modified Versionas given on the Title Page If there is no section Entitled ldquoHistoryrdquo in the Docu-ment create one stating the title year authors and publisher of the Documentas given on its Title Page then add an item describing the Modified Version asstated in the previous sentence

J Preserve the network location if any given in the Document for public access toa Transparent copy of the Document and likewise the network locations given inthe Document for previous versions it was based on These may be placed in theldquoHistoryrdquo section You may omit a network location for a work that was publishedat least four years before the Document itself or if the original publisher of theversion it refers to gives permission

K For any section Entitled ldquoAcknowledgementsrdquo or ldquoDedicationsrdquo Preserve the Titleof the section and preserve in the section all the substance and tone of each of thecontributor acknowledgements andor dedications given therein

L Preserve all the Invariant Sections of the Document unaltered in their text andin their titles Section numbers or the equivalent are not considered part of thesection titles

M Delete any section Entitled ldquoEndorsementsrdquo Such a section may not be includedin the Modified Version

N Do not retitle any existing section to be Entitled ldquoEndorsementsrdquo or to conflict intitle with any Invariant Section

O Preserve any Warranty Disclaimers

If the Modified Version includes new front-matter sections or appendices that qualifyas Secondary Sections and contain no material copied from the Document you may atyour option designate some or all of these sections as invariant To do this add their

Appendix A GNU Free Documentation License 30

titles to the list of Invariant Sections in the Modified Versionrsquos license notice Thesetitles must be distinct from any other section titles

You may add a section Entitled ldquoEndorsementsrdquo provided it contains nothing butendorsements of your Modified Version by various partiesmdashfor example statements ofpeer review or that the text has been approved by an organization as the authoritativedefinition of a standard

You may add a passage of up to five words as a Front-Cover Text and a passage of upto 25 words as a Back-Cover Text to the end of the list of Cover Texts in the ModifiedVersion Only one passage of Front-Cover Text and one of Back-Cover Text may beadded by (or through arrangements made by) any one entity If the Document alreadyincludes a cover text for the same cover previously added by you or by arrangementmade by the same entity you are acting on behalf of you may not add another butyou may replace the old one on explicit permission from the previous publisher thatadded the old one

The author(s) and publisher(s) of the Document do not by this License give permissionto use their names for publicity for or to assert or imply endorsement of any ModifiedVersion

5 COMBINING DOCUMENTS

You may combine the Document with other documents released under this Licenseunder the terms defined in section 4 above for modified versions provided that youinclude in the combination all of the Invariant Sections of all of the original documentsunmodified and list them all as Invariant Sections of your combined work in its licensenotice and that you preserve all their Warranty Disclaimers

The combined work need only contain one copy of this License and multiple identicalInvariant Sections may be replaced with a single copy If there are multiple InvariantSections with the same name but different contents make the title of each such sectionunique by adding at the end of it in parentheses the name of the original author orpublisher of that section if known or else a unique number Make the same adjustmentto the section titles in the list of Invariant Sections in the license notice of the combinedwork

In the combination you must combine any sections Entitled ldquoHistoryrdquo in the vari-ous original documents forming one section Entitled ldquoHistoryrdquo likewise combine anysections Entitled ldquoAcknowledgementsrdquo and any sections Entitled ldquoDedicationsrdquo Youmust delete all sections Entitled ldquoEndorsementsrdquo

6 COLLECTIONS OF DOCUMENTS

You may make a collection consisting of the Document and other documents releasedunder this License and replace the individual copies of this License in the variousdocuments with a single copy that is included in the collection provided that youfollow the rules of this License for verbatim copying of each of the documents in allother respects

You may extract a single document from such a collection and distribute it individu-ally under this License provided you insert a copy of this License into the extracteddocument and follow this License in all other respects regarding verbatim copying ofthat document

Appendix A GNU Free Documentation License 31

7 AGGREGATION WITH INDEPENDENT WORKS

A compilation of the Document or its derivatives with other separate and independentdocuments or works in or on a volume of a storage or distribution medium is calledan ldquoaggregaterdquo if the copyright resulting from the compilation is not used to limit thelegal rights of the compilationrsquos users beyond what the individual works permit Whenthe Document is included in an aggregate this License does not apply to the otherworks in the aggregate which are not themselves derivative works of the Document

If the Cover Text requirement of section 3 is applicable to these copies of the Documentthen if the Document is less than one half of the entire aggregate the Documentrsquos CoverTexts may be placed on covers that bracket the Document within the aggregate or theelectronic equivalent of covers if the Document is in electronic form Otherwise theymust appear on printed covers that bracket the whole aggregate

8 TRANSLATION

Translation is considered a kind of modification so you may distribute translationsof the Document under the terms of section 4 Replacing Invariant Sections withtranslations requires special permission from their copyright holders but you mayinclude translations of some or all Invariant Sections in addition to the original versionsof these Invariant Sections You may include a translation of this License and all thelicense notices in the Document and any Warranty Disclaimers provided that youalso include the original English version of this License and the original versions ofthose notices and disclaimers In case of a disagreement between the translation andthe original version of this License or a notice or disclaimer the original version willprevail

If a section in the Document is Entitled ldquoAcknowledgementsrdquo ldquoDedicationsrdquo or ldquoHis-toryrdquo the requirement (section 4) to Preserve its Title (section 1) will typically requirechanging the actual title

9 TERMINATION

You may not copy modify sublicense or distribute the Document except as expresslyprovided under this License Any attempt otherwise to copy modify sublicense ordistribute it is void and will automatically terminate your rights under this License

However if you cease all violation of this License then your license from a particularcopyright holder is reinstated (a) provisionally unless and until the copyright holderexplicitly and finally terminates your license and (b) permanently if the copyrightholder fails to notify you of the violation by some reasonable means prior to 60 daysafter the cessation

Moreover your license from a particular copyright holder is reinstated permanently ifthe copyright holder notifies you of the violation by some reasonable means this is thefirst time you have received notice of violation of this License (for any work) from thatcopyright holder and you cure the violation prior to 30 days after your receipt of thenotice

Termination of your rights under this section does not terminate the licenses of partieswho have received copies or rights from you under this License If your rights havebeen terminated and not permanently reinstated receipt of a copy of some or all of thesame material does not give you any rights to use it

Appendix A GNU Free Documentation License 32

10 FUTURE REVISIONS OF THIS LICENSE

The Free Software Foundation may publish new revised versions of the GNU FreeDocumentation License from time to time Such new versions will be similar in spiritto the present version but may differ in detail to address new problems or concernsSee httpwwwgnuorgcopyleft

Each version of the License is given a distinguishing version number If the Documentspecifies that a particular numbered version of this License ldquoor any later versionrdquoapplies to it you have the option of following the terms and conditions either of thatspecified version or of any later version that has been published (not as a draft) bythe Free Software Foundation If the Document does not specify a version number ofthis License you may choose any version ever published (not as a draft) by the FreeSoftware Foundation If the Document specifies that a proxy can decide which futureversions of this License can be used that proxyrsquos public statement of acceptance of aversion permanently authorizes you to choose that version for the Document

11 RELICENSING

ldquoMassive Multiauthor Collaboration Siterdquo (or ldquoMMC Siterdquo) means any World WideWeb server that publishes copyrightable works and also provides prominent facilitiesfor anybody to edit those works A public wiki that anybody can edit is an example ofsuch a server A ldquoMassive Multiauthor Collaborationrdquo (or ldquoMMCrdquo) contained in thesite means any set of copyrightable works thus published on the MMC site

ldquoCC-BY-SArdquo means the Creative Commons Attribution-Share Alike 30 license pub-lished by Creative Commons Corporation a not-for-profit corporation with a principalplace of business in San Francisco California as well as future copyleft versions of thatlicense published by that same organization

ldquoIncorporaterdquo means to publish or republish a Document in whole or in part as partof another Document

An MMC is ldquoeligible for relicensingrdquo if it is licensed under this License and if all worksthat were first published under this License somewhere other than this MMC andsubsequently incorporated in whole or in part into the MMC (1) had no cover textsor invariant sections and (2) were thus incorporated prior to November 1 2008

The operator of an MMC Site may republish an MMC contained in the site underCC-BY-SA on the same site at any time before August 1 2009 provided the MMC iseligible for relicensing

Appendix A GNU Free Documentation License 33

ADDENDUM How to use this License for your documents

To use this License in a document you have written include a copy of the License in thedocument and put the following copyright and license notices just after the title page

Copyright (C) year your name

Permission is granted to copy distribute andor modify this document

under the terms of the GNU Free Documentation License Version 13

or any later version published by the Free Software Foundation

with no Invariant Sections no Front-Cover Texts and no Back-Cover

Texts A copy of the license is included in the section entitled lsquolsquoGNU

Free Documentation Licensersquorsquo

If you have Invariant Sections Front-Cover Texts and Back-Cover Texts replace theldquowith Textsrdquo line with this

with the Invariant Sections being list their titles with

the Front-Cover Texts being list and with the Back-Cover Texts

being list

If you have Invariant Sections without Cover Texts or some other combination of thethree merge those two alternatives to suit the situation

If your document contains nontrivial examples of program code we recommend releasingthese examples in parallel under your choice of free software license such as the GNUGeneral Public License to permit their use in free software

Index 34

Index

Aaccess control policy 3Author 3author specifying 10

Bbehavior prior to version 5 10behavior version 3 10behavior version 4 10binary-old-keyword-value substitution mode 9branch growth 7branch number 2branch tip 2branch default 3bug reporting 25

Ccase sensitivity file format 21checkin 3checklist for bug reports 25checkout 3checkout implicit 5ci invocation 11co invocation 12comma-v file format 1command help 7command version 7command-line option to specify a revision 7credits 1

DDate 3date formats 8date specifying 8dates file format 21default branch 3default branch setting 15deleting revisions 15description of working file 2description text specifying 8

Eempty log message 9emulation previous RCS versions 10encoding file format 20environment variables 10

Ffeatures still missing 23

file names on the command-line 7format RCSfile 20

Ggrammar file format 20

HHeader 3history 1

IId 3ident invocation 13implicit checkout circumstance 5implicit checkout locked 12implicit checkout unlocked 12instantiating a working file 2interaction model 1interactive mode 9invocation ci 11invocation co 12invocation ident 13invocation merge 14invocation rcs 14 15invocation rcsclean 16invocation rcsdiff 17invocation rcsmerge 17invocation rlog 18

Kkeyword-only substitution mode 9keyword-value substitution mode 8keyword-value-locker substitution mode 9keywords table of 3

Llayout of nodes file format 21license 1Locker 3locking a revision 15locking on implicit checkout 12locking non-strict 5locking set non-strict 15locking set strict 15locking strict 5locks in RCS file 3Log 3log message empty 9LOGNAME 11

Index 35

Mmemory limit 11merge invocation 14model interaction 1

NName 4names symbolic 3node layout file format 21non-strict locking 5number branch 2number revision 2

Oold-keyword-value substitution mode 9order of options and file names 7outdating revisions 15overview 1

Ppairing RCS and working files 7patches contributing 25problems 25projects related 1

Qquiet mode 9

Rrange of revisions specifying 7RCS file 2rcs invocation 14 15RCS version emulation 10RCS_MEM_LIMIT 11rcsclean invocation 16rcsdiff invocation 17RCSfile 4RCSfile format 20RCSINIT 10rcsmerge invocation 17removing revisions 15reporting bugs 25Revision 4revision number 2revision range specifying 7

revision specifying 7revisions tree of 3rlog invocation 18

SSource 4specifying a date 8specifying a range of revisions 7specifying a revision 7specifying a state 9specifying a suffix list 10specifying a timedate 8specifying author 10specifying description text 8specifying substitution mode 8State 4state specifying 9strict locking 5substitution mode default 8substitution mode specifying 8suffix list specifying 10symbolic names 3

TTEMP 11third-party interop file format 21Tichy Walter F 1time zone 8timedate specifying 8tip 2tip increment 7TMP 11TMPDIR 11tree of revisions 3

Uunlocking a revision 15USER 11

Vvalue-only substitution mode 9

Wwhitespace file format 21working file description 2working file instantiation 2

  • Overview
    • Credits
    • Concepts
      • Interaction model
      • Working file
      • RCS file
      • Fundamental operations
      • Keywords
        • Quick tour
          • Usage
            • Common elements
              • Revision options
              • Date option
              • Description option
              • Substitution mode option
              • Log message option
              • Misc common options
              • Environment
                • Invoking ci
                • Invoking co
                • Invoking ident
                • Invoking merge
                • Invoking rcs
                  • modern
                  • legacy
                    • Invoking rcsclean
                    • Invoking rcsdiff
                    • Invoking rcsmerge
                    • Invoking rlog
                      • Hacking
                        • File format
                          • File format grammar
                          • Additional particulars of the file format
                            • Still missing
                            • Reporting bugs
                              • GNU Free Documentation License
                              • Index
Page 7: GNU RCS · The RCS file is also known (colloquially) as the “comma-v file”, due to its name often ending in ,v (e.g., a.c,v). A revision number is a branch number followed by

Chapter 1 Overview 4

Log The log message supplied during checkin preceded by a header containing theRCS filename the revision number the author and the date and time Mayinclude an appended timezone offset

Existing log messages are not replaced Instead the new log message is insertedafter lsquo$Log$rsquo This is useful for accumulating a complete change log in asource file

Each inserted line is prefixed by the string that prefixes the lsquo$Log$rsquo line Forexample if the lsquo$Log$rsquo line is

$Log tancc $

then RCS prefixes each line of the log with lsquo rsquo (slash slash space) This isuseful for languages with comments that go to the end of the line

The convention for other languages is to use a lsquo rsquo (space asterisk space)prefix inside a multiline comment For example the initial log comment of a Cprogram conventionally is of the following form

$Log$

For backwards compatibility with older versions of RCS if the log prefix is lsquorsquoor lsquo(rsquo surrounded by optional white space inserted log lines contain a spaceinstead of lsquorsquo or lsquo(rsquo however this usage is obsolescent and should not be reliedon

Name The symbolic name used to check out the revision if any For example lsquoco-rJoersquo generates lsquo$Name Joe $rsquo Plain co generates just lsquo$Name $rsquo

RCSfile The basename of the RCS file

Revision The revision number assigned to the revision

Source The absolute RCS filename

State The state assigned to the revision with the -s option of rcs or ci

13 Quick tour

This section complements the preceding section (see Section 12 [Concepts] page 1) pre-senting a handful of RCS commands in quick succession For details on individual RCScommands See Chapter 2 [Usage] page 7

Suppose you have a file fc that you wish to put under control of RCS If you have notalready done so make an RCS directory with the command

mkdir RCS

Then invoke the checkin command

ci fc

This command creates an RCS file in directory RCS stores fc into it as revision 11 anddeletes fc It also asks you for a description The description should be a synopsis of thecontents of the file All later checkin commands will ask you for a log entry which shouldsummarize the changes that you made

To get back the working file fc in the previous example use the checkout command

Chapter 1 Overview 5

co fc

This command extracts the latest revision from the RCS file and writes it into fc If youwant to edit fc you must lock it as you check it out with the command

co -l fc

You can now edit fc Suppose after some editing you want to know what changes thatyou have made The command

rcsdiff fc

tells you the difference between the most recently checked-in version and the working fileYou can check the file back in by invoking

ci fc

This increments the revision number properly If ci complains with the message

ci error no lock set by your name

then you have tried to check in a file even though you did not lock it when you checked itout Of course it is too late now to do the checkout with locking because another checkoutwould overwrite your modifications Instead invoke

rcs -l fc

This command will lock the latest revision for you unless somebody else got ahead of youalready In this case yoursquoll have to negotiate with that person

Locking assures that you and only you can check in the next update and avoids nastyproblems if several people work on the same file Even if a revision is locked it can still bechecked out for reading compiling etc All that locking prevents is a checkin by anybodybut the locker

If your RCS file is private ie if you are the only person who is going to deposit revisionsinto it strict locking is not needed and you can turn it off If strict locking is turned offthe owner of the RCS file need not have a lock for checkin all others still do Turning strictlocking off and on is done with the commands

rcs -U fc disable strict lockingrcs -L fc enable strict locking

If you donrsquot want to clutter your working directory with RCS files create a subdirectorycalled RCS in your working directory and move all your RCS files there RCS commandswill look first into that directory to find needed files All the commands discussed abovewill still work without any modification See Section 21 [Common elements] page 7

To avoid the deletion of the working file during checkin (in case you want to continueediting or compiling) invoke one of

ci -l fc checkin + locked checkoutci -u fc checkin + unlocked checkout

These commands check in fc as usual then perform an implicit checkout The first formalso locks the checked in revision the second one doesnrsquot Thus these options save you onecheckout operation The first form is useful if you want to continue editing the second oneif you just want to read the file Both update the keyword substitutions in your workingfile see Section 12 [Concepts] page 1

You can give ci the number you want assigned to a checked-in revision Assume all yourrevisions were numbered 11 12 13 etc and you would like to start release 2 Either ofthe commands

Chapter 1 Overview 6

ci -r2 fc

ci -r21 fc

assigns the number 21 to the new revision From then on ci will number the subsequentrevisions with 22 23 etc The corresponding co commands

co -r2 fc

co -r21 fc

retrieve the latest revision numbered 2x and the revision 21 respectively co withouta revision number selects the latest revision on the trunk ie the highest revision with anumber consisting of two fields Numbers with more than two fields are needed for branchesFor example to start a branch at revision 13 invoke

ci -r131 fc

This command starts a branch numbered 1 at revision 13 and assigns the number 1311to the new revision Here is a diagram showing the new revision in relation to its branchand the trunk

11 -- 12 -- 13 -- 14 -- 15

|

[131] -- 1311

For more information about branches See Section 12 [Concepts] page 1

Chapter 2 Usage 7

2 Usage

This chapter describes how to invoke RCS commands including common command-lineelements as well options specific to each command

21 Common elements

All RCS commands accept --help and --version See Section ldquoCommand-Line Interfacesrdquoin The GNU Coding Standards

Aside from --help and --version RCS commands take the form lsquo-letter[arg]rsquo iea hyphen followed by a single letter optionally followed by extra information The squarebraces mean that the extra information is optional (No square braces means that the extrainformation is required) In any case when specified the extra information must abut theletter there can be no intervening whitespace

co -u 14 foo wrong space between -u and 14

co -u14 foo ok

Furthermore options must appear before file names (if any) on the command line

ident foo -q wrong option after file nameident -q foo ok

Lastly pairs of RCS and working files can be specified in three ways (a) both are given (b)only the working file is given (c) only the RCS file is given For (a) both RCS and workingfiles may have arbitrary directory components RCS commands pair them up intelligentlyFor (b) RCS commands will look first into the directory RCS if it exists to find theassociated RCS file

211 Revision options

As to be expected in a revision control system many options are of the form lsquo-flag[rev]rsquowhere flag is a single letter (eg lsquorrsquo) If ommitted rev defaults to the latest revision onthe default branch A revision can be specified in many ways

brn Straightforward dot-notation where br specifies the branch

n Like brn using the default branch

br Like brn using the a command-specific computation of n given the currenttip i For ci (see Section 22 [ci] page 11) n would be i + 1 while for othercommands n would be simply i

name This is the symbolic name of a revision as assigned previously by a ci -n orci -N command

$ The command computes the effective revision by examining the values of key-word expansions in the working file

For commands that accept a range of revisions the syntax is generally rev1rev2 ie tworevisions (specified as described above) separated by a colon

Chapter 2 Usage 8

212 Date option

Some commands accept an option of the form lsquo-ddatersquo to specify a date an absolute pointin time (to second resolution) expressed in a date format These also accept lsquo-zzonersquo tospecify the timezone The special value lsquoLTrsquo stands for the local time zone RCS recognizesmany date formats and time zones For example the following dates are equivalent if localtime is January 11 1990 8pm Pacific Standard Time eight hours west of CoordinatedUniversal Time (UTC)

800 pm lt

400 AM Jan 12 1990 default is UTC

1990-01-12 040000+00 ISO 8601 (UTC)

1990-01-11 200000-08 ISO 8601 (local time)

19900112 040000 traditional RCS format

Thu Jan 11 200000 1990 LT output of ctime(3) + LT

Thu Jan 11 200000 PST 1990 output of date(1)

Fri Jan 12 040000 GMT 1990

Thu 11 Jan 1990 200000 -0800 Internet RFC 822

12-January-1990 0400 WET

Most fields in the date and time can be defaulted The default time zone is normally UTCbut this can be overridden by the -z option The other defaults are determined in the orderyear month day hour minute and second (most to least significant) At least one of thesefields must be provided For omitted fields that are of higher significance than the highestprovided field the time zonersquos current values are assumed For all other omitted fields thelowest possible values are assumed For example without -z the date lsquo20 1030rsquo defaultsto lsquo103000 UTCrsquo of the 20th of the UTC time zonersquos current month and year Note thatfor the shell the datetime must be quoted if it contains spaces

RCS also accepts some other formats which specify only the date portion (omitting thetime portion)

YYYY-DDD DDD is the day of year 1-366

YYYY-wWW-D

WW is the ISO week number 0-53 (actually ISO week numbers are 1-53 week0 is a GNU RCS extension) and D is the ISO day number 1-7 (Monday throughSunday)

213 Description option

Some commands accept an option of the form lsquo-t-textrsquo or lsquo-tfile-namersquo This optionis to set or update the RCS file description text In the first form text is used directlyexcluding the leading hyphen (lsquo-rsquo) that distinguishes the two forms In the second formthe description text is taken from the contents of file-name

214 Substitution mode option

Some commands accept an option of the form -ksubst used to control how keywords (seeSection 12 [Concepts] page 1) are expanded in the working file In the following table ofsubst values the example keyword is lsquoRevisionrsquo and its value is lsquo513rsquo

kv Generate lsquo$Revision 513 $rsquo (dollar-sign keyword colon space value spacedollar-sign) A lockerrsquos name is inserted in the value of the Header Id and

Chapter 2 Usage 9

Locker keyword strings only as a file is being locked ie by ci -l and co -lThis is the default substitution mode

kvl Like -kkv except that a lockerrsquos name is always inserted if the given revisionis currently locked

k Generate lsquo$Revision$rsquo (dollar-sign keyword dollar-sign) This is useful whencomparing different revisions of a file Log messages are inserted after Log key-words even if -kk is specified since this tends to be more useful when mergingchanges

o Like -kkv but use the old value present in the working file just before it waschecked in This can be useful for file formats that cannot tolerate any changesto substrings that happen to take the form of keyword strings

b Like -ko but do all file io in binary mode This makes little difference onPOSIX and Unix hosts but on DOS-like hosts one should use rcs -i -kb toinitialize an RCS file intended to be used for binary files Also on all hostsrcsmerge normally refuses to merge files when -kb is in effect

v Generate lsquo513rsquo (value only) Further keyword substitution cannot be per-formed once the keyword names are removed so this should be used with careBecause of this danger of losing keywords -kv cannot be combined with -land the owner write permission of the working file is turned off to edit the filelater check it out again without -kv

215 Log message option

Both ci and rcs allow a log message to be specified with the -m option If themsg argumentto this option is empty RCS uses the default lsquo empty log message rsquo This particularmessage is handled specially (ie filtered out) by rlog

216 Misc common options

Other common options are -I -q -s -T -V -w -x

-I This option enables interactive mode More precisely it forces interactive modewhereby RCS commands believe that their standard input is a terminal nor-mally a precondition for displaying a prompt to receive input (such as a log mes-sage on checkin) The intention of -I is for scripting situations where standardinput is actually not a terminal but you know beforehand (without prompting)that input is needed and you are ready to provide it on standard input anyway

-q This option enables quiet mode Commands work silently (unless there is anerror condition) and suppress warnings and prompts

-sstate Specify the state to be state

-T This option controls how commands timestamp the RCS file Normally RCScommands set the RCS filersquos timestamp when modifying it in the ldquonaturalrdquo way(without taking any particular care) With -T on the other hand the com-mands either preserve the timestamp (for standalone lockunlock operations)or use the timestamp of the working file (for ci)

Chapter 2 Usage 10

This can be useful if the RCS file is found in a makefile targetrsquos list of pre-requisites (see Section ldquoRule Syntaxrdquo in The GNU Make Manual) that is ifsome target should be rebuilt if the RCS file is newer than it In that case youcan do lsquorcs -u -Trsquo for example to unlock a revision in the RCS file withouttriggering a recompilation

-V Behave like --version ie display command version information and exitsuccessfully NB This option is obsolete and its support will be removed insome future release

-Vn n specifies the RCS (major) version to emulate Valid values for n are 3 4 5Version 5 is the current version so -V5 does nothing special

In versions prior to 5 RCS outputs lsquotrsquo (tab U+09) between the lsquorsquo (colon) andthe value (for keyword substitution) instead of space uses the RCS file commentstring to prefix each line in the Log expansion instead of computing it on thefly from the input text writesreads localtime instead of UTC and displaysslightly different output for rlog

For version 4 the Header expansion unconditionally includes Locker lockeras if the kvl substitution mode were specified (see Section 214 [Substitutionmode option] page 8)

For version 3 the Header expansion omits the directories from the filename andsays only Locked instead of the state

-wlogin Some commands accept an option of the form lsquo-wloginrsquo to specify the loginname of the author of a revision ie ldquowhordquo is responsible

-xsuff Specify suff as the slash-separated list of file name suffixes used to recognizean RCS file The default value is lsquovrsquo that is first try with lsquovrsquo then try withan empty suffix

This basename search occurs within (ie starting from the beginning) the largerdirectory search loop which comprises two candidates dRCS and d where dis the directory component of the working file name For example given theworking file ac in the current directory RCS tries in order these candidates

RCSacv

RCSac

acv

ac

Note that the last candidate is impossible (and is in fact discarded) becausethe working and RCS files cannot have the same name

217 Environment

Various environment variables influence how RCS works

[Environment Variable]RCSINITAnother way to set common options is with the lsquoRCSINITrsquo environment variable Thisis a space-separated list of options Use lsquorsquo (backslash) to escape significant spaceFor example

Chapter 2 Usage 11

Set the value make it available to subsequent commandsRCSINIT=-q -xv -zLT

export RCSINIT

Use it (implicitly)rlog -L foo

This example in Bourne shell syntax arranges for RCS commands to operate as ifeach command-line had prepended lsquo-q -xv -zLTrsquo to the rest of the command-lineThe effective command-line that rlog sees is thus lsquo-q -xv -zLT -L foorsquo

[Environment Variable]RCS_MEM_LIMITNormally for speed commands either memory map or copy into memory the RCS fileif its size is less than thememory limit currently defaulting to ldquounlimitedrdquo Otherwise(or if the initially-tried speedy ways fail) the commands fall back to using standardio routines

You can adjust the memory limit by setting the lsquoRCS_MEM_LIMITrsquo environment variableto a numeric value (measured in kilobytes) An empty value is silently ignored

As a side effect specifying the memory limit inhibits fall-back to slower routines(This env var is mostly intended for testing RCS normally you can leave it unsetProbably it will be removed in a future release)

[Environment Variable]TMPDIR[Environment Variable]TMP[Environment Variable]TEMP

Commands sometimes create temporary files normally in a system-dependent direc-tory such as tmp You can override this directory by specifying another one asthe value of one of the environment variables TMPDIR TMP or TEMP (checked in thatorder)

[Environment Variable]LOGNAME[Environment Variable]USER

Absent -wlogin or when login is omitted (see Section 216 [Misc common options]page 9) commands check environment variables LOGNAME and USER (in that order)If neither of these are set RCS queries the host for and uses your login

22 Invoking ci

rcs ci [options] file

(or ldquocirdquo instead of ldquorcs cirdquo)

The ci command adds a revision to the RCS file reflecting the current state of the workingfile This operation is also known as ldquocheckinrdquo

-f[rev] Force new entry even if no content changed

-I[rev]

-q[rev] See Section 216 [Misc common options] page 9

-i[rev] Initial checkin error if the RCS file already exists

-j[rev] Just checkin donrsquot initialize error if the RCS file does not exist

Chapter 2 Usage 12

-k[rev] Compute revision from working file keywords

-r Release lock and delete working file

-rrev Do normal checkin

-l[rev] Like -r but immediately checkout locked (co -l) afterwards

-u[rev] Like -l but checkout unlocked (co -u)

-M[rev] Reset working file mtime (relevant for -l -u)

Multiple flags in -fiIjklMqru may be given except for -r -l -u which are mutuallyexclusive For a fully specified revision of the form brn nmust be greater than any existingon br or br must be new If rev is omitted compute it from the last lock (co -l) perhapsstarting a new branch If there is no lock use defbr(L+1) See Section 211 [Revisionoptions] page 7

-d[date]

-zzone See Section 212 [Date option] page 8 If no date specified use the workingfile modification time

-m[msg] Use msg as the log message See Section 215 [Log message option] page 9

-nname

-Nname Assign symbolic name to the entry For -n name must be new (no previousassignment) For -N overwrite any previous assignment

-sstate See Section 216 [Misc common options] page 9 Set the state

-t-text

-tfile-name

See Section 213 [Description option] page 8

-T Set the RCS filersquos modification time to the new revisionrsquos time if the former pre-cedes the latter and there is a new revision preserve the RCS filersquos modificationtime otherwise

-wwho Use who as the author

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

23 Invoking co

rcs co [options] file

(or ldquocordquo instead of ldquorcs cordquo)

The co command retrieves a revision from the RCS file writing a new working file Thisoperation is also known as ldquocheckoutrdquo

-f[rev] Force overwrite of working file

-I[rev]

-q[rev] See Section 216 [Misc common options] page 9

-p[rev] Write to stdout instead of the working file

Chapter 2 Usage 13

-r[rev] Normal checkout

-l[rev] Like -r but also lock

-u[rev] Like -l but unlock

-M[rev] Reset working file mtime (relevant for -l -u)

Multiple flags in -fIlMpqru may be given except for -r -l -u which are mutuallyexclusive See Section 211 [Revision options] page 7

-ksubst See Section 214 [Substitution mode option] page 8

-ddate

-zzone See Section 212 [Date option] page 8 Select latest before or on date

-jjoins Merge using joins a list of revrev pairs NB This option is obsolete (seeSection 29 [rcsmerge] page 17)

-sstate See Section 216 [Misc common options] page 9 Select matching state

-S Enable self-same mode In this mode the owner of a lock is unimportantjust that it exists Effectively this prevents you from checking out the samerevision twice

$ whoami

ttn

$ co -l -f z

RCSzv --gt z

revision 11 (locked)

done

$ co -S -l -f z

RCSzv --gt z

co RCSzv Revision 11 is already locked by ttn

-T Preserve the modification time on the RCS file even if it changes because a lockis added or removed

-wwho Select matching login who

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

24 Invoking ident

ident [options] [file ]

If no file is specified scan standard input The ident command scans its input for keywords(see Section 12 [Concepts] page 1) displaying to standard output what it finds

-q Normally if no patterns are found for a file ident emits a warning This optionsuppresses the warning

Chapter 2 Usage 14

-V Note that -Vn is not a valid option for ident in contrast to most other RCScommands (see Section 216 [Misc common options] page 9)

In addition to the normal keyword pattern for Subversion 12 (and later) compatibility1ident also recognizes patterns having one of the forms

$keyword text $

two colons and space after keyword

space before ending $

$keyword text$

two colons and space after keyword

hash before ending $

25 Invoking merge

merge [options] receiving-sibling parent other-sibling

The merge command combines the differences between a the parent and the other siblingand the differences between the parent and the receiving sibling It writes the result to thereceiving sibling

-A

-E

-e Use diff3 -A -E (default) or -e respectively

-p Write to stdout instead of overwriting receiving-sibling

-q See Section 216 [Misc common options] page 9 Suppress conflict warnings

-Llabel (up to three times) Specify the conflict labels for receiving-sibling parent andother-sibling respectively

-V Note that -Vn is not a valid option for merge in contrast to most other RCScommands (see Section 216 [Misc common options] page 9)

26 Invoking rcs

The rcs command is unique in the set of RCS programs in that it has two usages themodern (for RCS 590 and later) and the legacy

261 modern

rcs [options] command [command-arg ]

This rcs usage dispatches to command passing along command-arg without interpreta-tion

--commands

Display a list of available commands including a one-line description and exitsuccessfully

1 The fixed-length keyword syntax is described in detail in Version Control with Subversion chapterldquoAdvanced Topicsrdquo section ldquoKeyword Substitutionrdquo

Chapter 2 Usage 15

--aliases

Display a list of command aliases and exit successfully

--help command

Display help for a particular command and exit successfully For example todisplay help for the legacy interface use

--help frob

262 legacy

rcs frob [options] file

(or ldquorcsrdquo instead of ldquorcs frobrdquo)

This rcs usage performs various administrative operations on the RCS file depending onthe options given

-i Create and initialize a new RCS file

-L Set strict locking

-U Set non-strict locking

-M Donrsquot send mail when breaking someone elsersquos lock

-T Preserve the modification time on the RCS file unless a revision is removed

-I

-q See Section 216 [Misc common options] page 9

-alogins Append logins (comma-separated list of usernames) to access-list

-e[logins]

Erase logins (comma-separated list of usernames) from access-list If logins isomitted clear the access-list

-Afile-name

Append access-list of file-name to current access-list

-b[rev] Set default branch to that of rev or highest branch on trunk if rev is omitted

-l[rev] Lock a revision

-u[rev] Unlock a revision

-cstring Set comment leader to string NB Donrsquot use obsolete

-ksubst See Section 214 [Substitution mode option] page 8

-mrev[msg]

Replace log message with msg See Section 215 [Log message option] page 9

-nname[[rev]]

If rev is omitted delete symbolic name Otherwise associate name with rev name must be new

-Nname[[rev]]

Like -n but overwrite any previous assignment

-orange Delete (also known as ldquooutdaterdquo) revisions in range

Chapter 2 Usage 16

rev single revision

br latest revision on branch br

rev1rev2

rev1 to rev2 on same branch inclusive

rev beginning of branch to rev

rev rev to end of branch

-sstate[rev]

See Section 216 [Misc common options] page 9 Set state

-t-text

-tfile-name

See Section 213 [Description option] page 8 Replace description

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

These options have no effect and are included solely for consistency with other comamnds(see Section 217 [Environment] page 10) -zzone

27 Invoking rcsclean

rcs clean [options] [file ]

(or ldquorcscleanrdquo instead of ldquorcs cleanrdquo)

The rcsclean command removes working files that are not being worked on If given -u italso unlocks and removes working files that are being worked on but have not changed Ifno file is specified operate on all the working files in the current directory

-r[rev] Specify revision

-u[rev] Unlock if is locked and no differences found

-n[rev] Dry run (no act donrsquot operate)

-q[rev] See Section 216 [Misc common options] page 9

-ksubst See Section 214 [Substitution mode option] page 8

-T Preserve the modification time on the RCS file even it changes because a lockis removed

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

-zzone See Section 212 [Date option] page 8

Chapter 2 Usage 17

28 Invoking rcsdiff

rcs diff [options] file

(or ldquorcsdiffrdquo instead of ldquorcs diffrdquo)

The rcsdiff command runs diff to compare two revisions in an RCS file See Section ldquoIn-voking diffrdquo in The GNU Diffutils Manaual

-rrev (zero one or two times) Name a revision If given two revisions (lsquo-rrev1-rrev2rsquo) compare those revisions If given only one revision (lsquo-rrevrsquo) comparethe working file with it If given no revisions compare the working file with thelatest revision on the default branch

-ksubst See Section 214 [Substitution mode option] page 8

-q See Section 216 [Misc common options] page 9

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

-zzone See Section 212 [Date option] page 8

These options have no effect and are included solely for consistency with other comamnds(see Section 217 [Environment] page 10) -T

Additionally the following options (and their argument if any) are passed to the underlyingdiff command

-0 -1 -2 -3 -4 -5 -6 -7 -8 -9 -B -C -D -F -H -I

-L -U -W -a -b -c -d -e -f -h -i -n -p -t -u -w -y

long options (that start with --)

(Not all of these options are meaningful)

29 Invoking rcsmerge

rcs merge [options] file

(or ldquorcsmergerdquo instead of ldquorcs mergerdquo)

The rcsmerge command incorporates the changes between two revisions of an RCS file intothe corresponding working file

-A

-E

-e Passed to the diff3 command The default if none are specified is -E With -esuppress warnings on conflict The -A style generates the most verbose outputSee Section ldquoInvoking diff3rdquo in The GNU Diffutils Manual

-p[rev] Write to stdout instead of overwriting the working file

-q[rev] See Section 216 [Misc common options] page 9

-rrev (one or two times) specify a revision

One or two revisions must be specified (using -p -q -r) If only one is specified the secondrevision defaults to the latest revision on the default branch

Chapter 2 Usage 18

-ksubst See Section 214 [Substitution mode option] page 8

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

-zzone See Section 212 [Date option] page 8

These options have no effect and are included solely for consistency with other comamnds(see Section 217 [Environment] page 10) -T

210 Invoking rlog

rcs log [options] file

(or ldquorlogrdquo instead of ldquorcs logrdquo)

The rlog command displays information about RCS files

-L Ignore RCS files with no locks set

-R Print only the name of the RCS file

-h Print only the ldquoheaderrdquo information

-t Like -h but also include the description

-N Omit symbolic names

-b Select the default branch

-ddates See Section 212 [Date option] page 8 Select revisions based on timestampin the range dates with spec

d single revision d or earlier

d1ltd2

d2gtd1 between d1 and d2 exclusive

ltd

dgt before d

gtd

dlt after d

Instead of lsquoltrsquo or lsquogtrsquo you can use lsquolt=rsquo or lsquogt=rsquo respectively to specify inclusiveranges dates may also be a list of semicolon-separated specs

-l[who] Select revisions locked by who (comma-separated list of usernames) only or byanyone if who is omitted

-r[revs] Select revisions in revs a comma-separated list of range specs one of revrev rev rev1rev2

-sstates See Section 216 [Misc common options] page 9 states can also be a comma-separated list of states Select revisions with specified state(s)

-w[who] Select revisions checked in by who (comma-separated list of usernames) or bythe user if who is omitted

Chapter 2 Usage 19

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

-zzone See Section 212 [Date option] page 8

These options have no effect and are included solely for consistency with other comamnds(see Section 217 [Environment] page 10) lsquo-qrsquo lsquo-Trsquo

Chapter 3 Hacking 20

3 Hacking

This chapter in contrast to the previous (see Chapter 2 [Usage] page 7) is introspective Itdescribes an important aspect of RCS interop with other programs and development ideasand methods

31 File format

An RCS filersquos contents are described by the grammar below1 Overall the format is freendashformat text In most environments RCS uses the ISO 88591 encoding visible graphiccharacters are (octal) codes 041ndash176 and 240ndash377 and whitespace characters are codes010ndash015 and 040TODO Discuss or point to encoding compatibility issues

311 File format grammar

The meta syntax in this section uses the following conventions lsquo|rsquo (U+7C) separates al-ternatives lsquorsquo (U+7B) and lsquorsquo (U+7D) enclose optional phrases lsquorsquo and lsquorsquo (trailing U+2A)enclose phrases that can be repeated zero or more times lsquorsquo and lsquo+rsquo (trailing U+2B) enclosephrases that must appear at least once and can be repeated terminal symbols are in lsquorsquo(two U+22)

rcstext = admin delta desc deltatext

admin = head num

branch num

access id

symbols sym num

locks id num

strict

integrity intstring

comment string

expand string

delta = num

date num

author id

state id

branches num

next num

commitid sym

desc = desc string

deltatext = num

log string

text string

1 This section is adapted from the lsquorcsfile(5)rsquo manpage written by Walter F Tichy

Chapter 3 Hacking 21

num = digit | +

digit = 0 through 9

id = idchar | +

sym = idchar+

idchar = any visible graphic character except special

special = $ | | | | |

string = any character with doubled

word = id | num | string |

intchar = any character except

thirdp = ^L intchar

intstring = intchar thirdp

312 Additional particulars of the file format

bull In releases prior to 58 (2011-08-30) the grammar included the production

newphrase = id word

and used it in the admin delta and deltatext productions This allowed third-partyprograms to interoperate with RCS by storing opaque (to RCS) data in the file

As of 58 in the name of progress (towards more systematic file integrity support) theonly area reserved for third-party interop is in the (string) value of the integrity fieldspecifically after the first formfeed (U+0C) A further restriction (for all programs) isthat the integrity value must not contain lsquorsquo

bull Whitespace has no significance except in strings However whitespace cannot appearwithin an id num or sym and an RCS file must end with newline (U+0A) Strings areenclosed by lsquorsquo (U+40) If a string contains a lsquorsquo it must be doubled otherwise stringscan contain arbitrary binary data

bull Identifiers are case sensitive Keywords are in lower case only The sets of keywordsand identifiers can overlap

bull Dates which appear after the date keyword are of the form Ymmddhhmmss whereY is the year mm the month (01ndash12) dd the day (01ndash31) hh the hour (00ndash23) mm theminute (00ndash59) and ss the second (00ndash60) Y contains just the last two digits of theyear for years from 1900 through 1999 and all the digits of years thereafter Dates usethe Gregorian calendar times use UTC

bull The delta nodes form a tree All nodes whose numbers consist of a single pair (eg 2321 13) are on the trunk and are linked through the next field in order of decreasing

Chapter 3 Hacking 22

numbers The head field in the admin node points to the head of that sequence (iecontains the highest pair) The branch node in the admin node indicates the defaultbranch (or revision) for most RCS operations If empty the default branch is thehighest branch on the trunk

All delta nodes whose numbers consist of 2n fields (n ge 2) (eg 3111 2122) arelinked as follows All nodes whose first 2nminus1 number fields are identical are linkedthrough the next field in order of increasing numbers For each such sequence thedelta node whose number is identical to the first 2nminus2 number fields of the delta

nodes on that sequence is called the branchpoint The branches field of a node containsa list of the numbers of the first nodes of all sequences for which it is a branchpointThis list is ordered in increasing numbers See Figure 31

Chapter 3 Hacking 23

Head

|

|

v

---------

| |

| 21 |

| |

1213 1311 | | 1222 122111

--------- --------- --------- --------- -------------

^ ^ | ^ ^

| | | | |

| | v | |

| --------- |

| 13 |

--------- -----------

1211 131 1221 12211

--------- ---------

^ | ^

| | |

| v |

| --------- |

| 12 |

---------------------- ---------

121 122

|

|

v

---------

11

Figure 31 The organization of an example RCS file

32 Still missing

RCS is still missing some features The following is an unordered list of ldquoto-do musingsrdquo keptby the RCS maintainers If you would like to hack on an item See Section 33 [Reportingbugs] page 25

bull Add an option to rcsmerge so that it can use an arbitrary program to do the 3-waymerge instead of the default merge Likewise for rcsdiff and diff It should be possibleto pass arbitrary options to these programs and to the subsidiary co invocations

bull Add format options for finer control over the output of ident and rlog Eg thereshould be an easy way for rlog to output lines like lsquosrcmainc 24 wftrsquo one for

Chapter 3 Hacking 24

each locked revision rlog options should have three orthogonal types selecting filesselecting revisions and selecting rlog format

bull Add format options for finer control over the output of keyword strings Eg thereshould be some way to prepend lsquo()rsquo and there should be some way to change lsquo$rsquo tosome other character to disable further substitution These options should make theresulting files uneditable like lsquo-kvrsquo

bull Add long options eg --keyword-substitution Unfortunately RCSrsquos option syntaxis incompatible with getopt Perhaps the best way is to overload rcs eg lsquorcs diff

--keyword-substitution=old filersquo instead of lsquorcsdiff -ko filersquo

bull rlog -rMN should work even if M and N have different numbers of fields so long asM is an ancestor of N or vice versa

bull rcs should evaluate options in order this allows rcs -oS -nS

bull Be able to redo your most recent checkin with minor changes

bull co -u shouldnrsquot complain about a lsquo+wrsquo working file if contents donrsquot change

bull Add a lsquo-rsquo option to take the list of file names from standard input Perhaps the filenames should be null-terminated not newline-terminated so that those that containnewlines are handled properly

bull Permit multiple optionndashfilename pairs eg co -r14 a -r15 b

bull Add an option to break a symbolic link to an RCS file instead of breaking the hardlink that it points to

bull Add ways to specify the earliest revision the most recent revision the earliest or latestrevision on a particular branch and the parent or child of some other revision

bull If a user has multiple locks perhaps ci should fall back on the method of ci -k to figureout which revision to use

bull Add an option to rcsclean to clean directories recursively

bull Write an rcsck program that repairs corrupted RCS files much as fsck repairs corruptedfile systems For example it should remove stale lock files

bull Update the date parser to use the more modern getdatey by Bellovin Salz andBerets or the even more modern getdate by Moraes None of these getdate imple-mentations are as robust as RCSrsquos old warhorse in avoiding problems like arithmeticoverflow so theyrsquoll have to be fixed first (Perhaps we can use gnulib module getdate)

bull Break up the code into a library so that itrsquos easier to write new programs that manip-ulate RCS files and so that useless code is removed from the existing programs Forexample the rcs command contains unnecessary keyword substitution baggage andthe merge command can be greatly pruned

bull Make it easier to use your favorite text editor to edit log messages etc instead ofhaving to type them in irretrievably at the terminal

bull Let the user specify a search path for default branches eg to use L as the defaultbranch if it works and M otherwise Let the user require that at least one entry inthe search path works Let the user say that later entries in the search path are readonly ie one cannot check in changes to them This should be an option settable bylsquoRCSINITrsquo

bull Add a way for a user to see which revisions affected which lines

Chapter 3 Hacking 25

bull Have rlog -nN F print just the revision number that N translates to Eg rlog -nB

F would print the highest revision on the branch B Use this to add an option -bB torcsbranch to freeze the named branch This should interact well with default branches

bull Add a co option that prints the revision number before each line as SCCSrsquos get -m

does [I implemented this for Emacs 22 as a subroutine of vc-annotate qv mdashttn]

33 Reporting bugs

To report bugs or suggest enhancements for GNU RCS please visit its homepage (httpwwwgnuorgsoftwarercs) to find directions on how to ldquofile a bug reportrdquo online orsend electronic mail to help-rcsgnuorg (If you use the web interface you donrsquot needto also send email since that is done automatically)

For bug reports please include enough information for the maintainers to reproduce theproblem Generally speaking that means

bull The RCS version command(s) and manual section(s) involved

bull Hardware and operating system names and versions

bull The contents of any input files necessary to reproduce the bug

bull The expected behavior andor output

bull A description of the problem and samples of any erroneous output

bull Options you gave to configure other than specifying installation directories

bull Anything else that you think would be helpful

When in doubt whether something is needed or not include it Itrsquos better to include toomuch than to leave out something important

Patches are welcome if possible please make them with lsquogit format-patchrsquo and includeChangeLog entries (see Section ldquoChange Logrdquo in The GNU Emacs Manual) Please followthe existing coding style

Appendix A GNU Free Documentation License 26

Appendix A GNU Free Documentation License

Version 13 3 November 2008

Copyright ccopy 2000 2001 2002 2007 2008 Free Software Foundation Inchttpfsforg

Everyone is permitted to copy and distribute verbatim copiesof this license document but changing it is not allowed

0 PREAMBLE

The purpose of this License is to make a manual textbook or other functional anduseful document free in the sense of freedom to assure everyone the effective freedomto copy and redistribute it with or without modifying it either commercially or non-commercially Secondarily this License preserves for the author and publisher a wayto get credit for their work while not being considered responsible for modificationsmade by others

This License is a kind of ldquocopyleftrdquo which means that derivative works of the documentmust themselves be free in the same sense It complements the GNU General PublicLicense which is a copyleft license designed for free software

We have designed this License in order to use it for manuals for free software becausefree software needs free documentation a free program should come with manualsproviding the same freedoms that the software does But this License is not limited tosoftware manuals it can be used for any textual work regardless of subject matter orwhether it is published as a printed book We recommend this License principally forworks whose purpose is instruction or reference

1 APPLICABILITY AND DEFINITIONS

This License applies to any manual or other work in any medium that contains anotice placed by the copyright holder saying it can be distributed under the termsof this License Such a notice grants a world-wide royalty-free license unlimited induration to use that work under the conditions stated herein The ldquoDocumentrdquobelow refers to any such manual or work Any member of the public is a licensee andis addressed as ldquoyourdquo You accept the license if you copy modify or distribute the workin a way requiring permission under copyright law

A ldquoModified Versionrdquo of the Document means any work containing the Document ora portion of it either copied verbatim or with modifications andor translated intoanother language

A ldquoSecondary Sectionrdquo is a named appendix or a front-matter section of the Documentthat deals exclusively with the relationship of the publishers or authors of the Documentto the Documentrsquos overall subject (or to related matters) and contains nothing thatcould fall directly within that overall subject (Thus if the Document is in part atextbook of mathematics a Secondary Section may not explain any mathematics) Therelationship could be a matter of historical connection with the subject or with relatedmatters or of legal commercial philosophical ethical or political position regardingthem

The ldquoInvariant Sectionsrdquo are certain Secondary Sections whose titles are designated asbeing those of Invariant Sections in the notice that says that the Document is released

Appendix A GNU Free Documentation License 27

under this License If a section does not fit the above definition of Secondary then it isnot allowed to be designated as Invariant The Document may contain zero InvariantSections If the Document does not identify any Invariant Sections then there are none

The ldquoCover Textsrdquo are certain short passages of text that are listed as Front-CoverTexts or Back-Cover Texts in the notice that says that the Document is released underthis License A Front-Cover Text may be at most 5 words and a Back-Cover Text maybe at most 25 words

A ldquoTransparentrdquo copy of the Document means a machine-readable copy representedin a format whose specification is available to the general public that is suitable forrevising the document straightforwardly with generic text editors or (for images com-posed of pixels) generic paint programs or (for drawings) some widely available drawingeditor and that is suitable for input to text formatters or for automatic translation toa variety of formats suitable for input to text formatters A copy made in an otherwiseTransparent file format whose markup or absence of markup has been arranged tothwart or discourage subsequent modification by readers is not Transparent An imageformat is not Transparent if used for any substantial amount of text A copy that isnot ldquoTransparentrdquo is called ldquoOpaquerdquo

Examples of suitable formats for Transparent copies include plain ASCII withoutmarkup Texinfo input format LaTEX input format SGML or XML using a publiclyavailable DTD and standard-conforming simple HTML PostScript or PDF designedfor human modification Examples of transparent image formats include PNG XCFand JPG Opaque formats include proprietary formats that can be read and editedonly by proprietary word processors SGML or XML for which the DTD andor pro-cessing tools are not generally available and the machine-generated HTML PostScriptor PDF produced by some word processors for output purposes only

The ldquoTitle Pagerdquo means for a printed book the title page itself plus such followingpages as are needed to hold legibly the material this License requires to appear in thetitle page For works in formats which do not have any title page as such ldquoTitle Pagerdquomeans the text near the most prominent appearance of the workrsquos title preceding thebeginning of the body of the text

The ldquopublisherrdquo means any person or entity that distributes copies of the Documentto the public

A section ldquoEntitled XYZrdquo means a named subunit of the Document whose title eitheris precisely XYZ or contains XYZ in parentheses following text that translates XYZ inanother language (Here XYZ stands for a specific section name mentioned below suchas ldquoAcknowledgementsrdquo ldquoDedicationsrdquo ldquoEndorsementsrdquo or ldquoHistoryrdquo) To ldquoPreservethe Titlerdquo of such a section when you modify the Document means that it remains asection ldquoEntitled XYZrdquo according to this definition

The Document may include Warranty Disclaimers next to the notice which states thatthis License applies to the Document These Warranty Disclaimers are considered tobe included by reference in this License but only as regards disclaiming warrantiesany other implication that these Warranty Disclaimers may have is void and has noeffect on the meaning of this License

2 VERBATIM COPYING

Appendix A GNU Free Documentation License 28

You may copy and distribute the Document in any medium either commercially ornoncommercially provided that this License the copyright notices and the licensenotice saying this License applies to the Document are reproduced in all copies andthat you add no other conditions whatsoever to those of this License You may not usetechnical measures to obstruct or control the reading or further copying of the copiesyou make or distribute However you may accept compensation in exchange for copiesIf you distribute a large enough number of copies you must also follow the conditionsin section 3

You may also lend copies under the same conditions stated above and you may publiclydisplay copies

3 COPYING IN QUANTITY

If you publish printed copies (or copies in media that commonly have printed covers) ofthe Document numbering more than 100 and the Documentrsquos license notice requiresCover Texts you must enclose the copies in covers that carry clearly and legibly allthese Cover Texts Front-Cover Texts on the front cover and Back-Cover Texts onthe back cover Both covers must also clearly and legibly identify you as the publisherof these copies The front cover must present the full title with all words of the titleequally prominent and visible You may add other material on the covers in additionCopying with changes limited to the covers as long as they preserve the title of theDocument and satisfy these conditions can be treated as verbatim copying in otherrespects

If the required texts for either cover are too voluminous to fit legibly you should putthe first ones listed (as many as fit reasonably) on the actual cover and continue therest onto adjacent pages

If you publish or distribute Opaque copies of the Document numbering more than 100you must either include a machine-readable Transparent copy along with each Opaquecopy or state in or with each Opaque copy a computer-network location from whichthe general network-using public has access to download using public-standard networkprotocols a complete Transparent copy of the Document free of added material Ifyou use the latter option you must take reasonably prudent steps when you begindistribution of Opaque copies in quantity to ensure that this Transparent copy willremain thus accessible at the stated location until at least one year after the last timeyou distribute an Opaque copy (directly or through your agents or retailers) of thatedition to the public

It is requested but not required that you contact the authors of the Document wellbefore redistributing any large number of copies to give them a chance to provide youwith an updated version of the Document

4 MODIFICATIONS

You may copy and distribute a Modified Version of the Document under the conditionsof sections 2 and 3 above provided that you release the Modified Version under preciselythis License with the Modified Version filling the role of the Document thus licensingdistribution and modification of the Modified Version to whoever possesses a copy ofit In addition you must do these things in the Modified Version

A Use in the Title Page (and on the covers if any) a title distinct from that of theDocument and from those of previous versions (which should if there were any

Appendix A GNU Free Documentation License 29

be listed in the History section of the Document) You may use the same title asa previous version if the original publisher of that version gives permission

B List on the Title Page as authors one or more persons or entities responsible forauthorship of the modifications in the Modified Version together with at least fiveof the principal authors of the Document (all of its principal authors if it has fewerthan five) unless they release you from this requirement

C State on the Title page the name of the publisher of the Modified Version as thepublisher

D Preserve all the copyright notices of the Document

E Add an appropriate copyright notice for your modifications adjacent to the othercopyright notices

F Include immediately after the copyright notices a license notice giving the publicpermission to use the Modified Version under the terms of this License in the formshown in the Addendum below

G Preserve in that license notice the full lists of Invariant Sections and required CoverTexts given in the Documentrsquos license notice

H Include an unaltered copy of this License

I Preserve the section Entitled ldquoHistoryrdquo Preserve its Title and add to it an itemstating at least the title year new authors and publisher of the Modified Versionas given on the Title Page If there is no section Entitled ldquoHistoryrdquo in the Docu-ment create one stating the title year authors and publisher of the Documentas given on its Title Page then add an item describing the Modified Version asstated in the previous sentence

J Preserve the network location if any given in the Document for public access toa Transparent copy of the Document and likewise the network locations given inthe Document for previous versions it was based on These may be placed in theldquoHistoryrdquo section You may omit a network location for a work that was publishedat least four years before the Document itself or if the original publisher of theversion it refers to gives permission

K For any section Entitled ldquoAcknowledgementsrdquo or ldquoDedicationsrdquo Preserve the Titleof the section and preserve in the section all the substance and tone of each of thecontributor acknowledgements andor dedications given therein

L Preserve all the Invariant Sections of the Document unaltered in their text andin their titles Section numbers or the equivalent are not considered part of thesection titles

M Delete any section Entitled ldquoEndorsementsrdquo Such a section may not be includedin the Modified Version

N Do not retitle any existing section to be Entitled ldquoEndorsementsrdquo or to conflict intitle with any Invariant Section

O Preserve any Warranty Disclaimers

If the Modified Version includes new front-matter sections or appendices that qualifyas Secondary Sections and contain no material copied from the Document you may atyour option designate some or all of these sections as invariant To do this add their

Appendix A GNU Free Documentation License 30

titles to the list of Invariant Sections in the Modified Versionrsquos license notice Thesetitles must be distinct from any other section titles

You may add a section Entitled ldquoEndorsementsrdquo provided it contains nothing butendorsements of your Modified Version by various partiesmdashfor example statements ofpeer review or that the text has been approved by an organization as the authoritativedefinition of a standard

You may add a passage of up to five words as a Front-Cover Text and a passage of upto 25 words as a Back-Cover Text to the end of the list of Cover Texts in the ModifiedVersion Only one passage of Front-Cover Text and one of Back-Cover Text may beadded by (or through arrangements made by) any one entity If the Document alreadyincludes a cover text for the same cover previously added by you or by arrangementmade by the same entity you are acting on behalf of you may not add another butyou may replace the old one on explicit permission from the previous publisher thatadded the old one

The author(s) and publisher(s) of the Document do not by this License give permissionto use their names for publicity for or to assert or imply endorsement of any ModifiedVersion

5 COMBINING DOCUMENTS

You may combine the Document with other documents released under this Licenseunder the terms defined in section 4 above for modified versions provided that youinclude in the combination all of the Invariant Sections of all of the original documentsunmodified and list them all as Invariant Sections of your combined work in its licensenotice and that you preserve all their Warranty Disclaimers

The combined work need only contain one copy of this License and multiple identicalInvariant Sections may be replaced with a single copy If there are multiple InvariantSections with the same name but different contents make the title of each such sectionunique by adding at the end of it in parentheses the name of the original author orpublisher of that section if known or else a unique number Make the same adjustmentto the section titles in the list of Invariant Sections in the license notice of the combinedwork

In the combination you must combine any sections Entitled ldquoHistoryrdquo in the vari-ous original documents forming one section Entitled ldquoHistoryrdquo likewise combine anysections Entitled ldquoAcknowledgementsrdquo and any sections Entitled ldquoDedicationsrdquo Youmust delete all sections Entitled ldquoEndorsementsrdquo

6 COLLECTIONS OF DOCUMENTS

You may make a collection consisting of the Document and other documents releasedunder this License and replace the individual copies of this License in the variousdocuments with a single copy that is included in the collection provided that youfollow the rules of this License for verbatim copying of each of the documents in allother respects

You may extract a single document from such a collection and distribute it individu-ally under this License provided you insert a copy of this License into the extracteddocument and follow this License in all other respects regarding verbatim copying ofthat document

Appendix A GNU Free Documentation License 31

7 AGGREGATION WITH INDEPENDENT WORKS

A compilation of the Document or its derivatives with other separate and independentdocuments or works in or on a volume of a storage or distribution medium is calledan ldquoaggregaterdquo if the copyright resulting from the compilation is not used to limit thelegal rights of the compilationrsquos users beyond what the individual works permit Whenthe Document is included in an aggregate this License does not apply to the otherworks in the aggregate which are not themselves derivative works of the Document

If the Cover Text requirement of section 3 is applicable to these copies of the Documentthen if the Document is less than one half of the entire aggregate the Documentrsquos CoverTexts may be placed on covers that bracket the Document within the aggregate or theelectronic equivalent of covers if the Document is in electronic form Otherwise theymust appear on printed covers that bracket the whole aggregate

8 TRANSLATION

Translation is considered a kind of modification so you may distribute translationsof the Document under the terms of section 4 Replacing Invariant Sections withtranslations requires special permission from their copyright holders but you mayinclude translations of some or all Invariant Sections in addition to the original versionsof these Invariant Sections You may include a translation of this License and all thelicense notices in the Document and any Warranty Disclaimers provided that youalso include the original English version of this License and the original versions ofthose notices and disclaimers In case of a disagreement between the translation andthe original version of this License or a notice or disclaimer the original version willprevail

If a section in the Document is Entitled ldquoAcknowledgementsrdquo ldquoDedicationsrdquo or ldquoHis-toryrdquo the requirement (section 4) to Preserve its Title (section 1) will typically requirechanging the actual title

9 TERMINATION

You may not copy modify sublicense or distribute the Document except as expresslyprovided under this License Any attempt otherwise to copy modify sublicense ordistribute it is void and will automatically terminate your rights under this License

However if you cease all violation of this License then your license from a particularcopyright holder is reinstated (a) provisionally unless and until the copyright holderexplicitly and finally terminates your license and (b) permanently if the copyrightholder fails to notify you of the violation by some reasonable means prior to 60 daysafter the cessation

Moreover your license from a particular copyright holder is reinstated permanently ifthe copyright holder notifies you of the violation by some reasonable means this is thefirst time you have received notice of violation of this License (for any work) from thatcopyright holder and you cure the violation prior to 30 days after your receipt of thenotice

Termination of your rights under this section does not terminate the licenses of partieswho have received copies or rights from you under this License If your rights havebeen terminated and not permanently reinstated receipt of a copy of some or all of thesame material does not give you any rights to use it

Appendix A GNU Free Documentation License 32

10 FUTURE REVISIONS OF THIS LICENSE

The Free Software Foundation may publish new revised versions of the GNU FreeDocumentation License from time to time Such new versions will be similar in spiritto the present version but may differ in detail to address new problems or concernsSee httpwwwgnuorgcopyleft

Each version of the License is given a distinguishing version number If the Documentspecifies that a particular numbered version of this License ldquoor any later versionrdquoapplies to it you have the option of following the terms and conditions either of thatspecified version or of any later version that has been published (not as a draft) bythe Free Software Foundation If the Document does not specify a version number ofthis License you may choose any version ever published (not as a draft) by the FreeSoftware Foundation If the Document specifies that a proxy can decide which futureversions of this License can be used that proxyrsquos public statement of acceptance of aversion permanently authorizes you to choose that version for the Document

11 RELICENSING

ldquoMassive Multiauthor Collaboration Siterdquo (or ldquoMMC Siterdquo) means any World WideWeb server that publishes copyrightable works and also provides prominent facilitiesfor anybody to edit those works A public wiki that anybody can edit is an example ofsuch a server A ldquoMassive Multiauthor Collaborationrdquo (or ldquoMMCrdquo) contained in thesite means any set of copyrightable works thus published on the MMC site

ldquoCC-BY-SArdquo means the Creative Commons Attribution-Share Alike 30 license pub-lished by Creative Commons Corporation a not-for-profit corporation with a principalplace of business in San Francisco California as well as future copyleft versions of thatlicense published by that same organization

ldquoIncorporaterdquo means to publish or republish a Document in whole or in part as partof another Document

An MMC is ldquoeligible for relicensingrdquo if it is licensed under this License and if all worksthat were first published under this License somewhere other than this MMC andsubsequently incorporated in whole or in part into the MMC (1) had no cover textsor invariant sections and (2) were thus incorporated prior to November 1 2008

The operator of an MMC Site may republish an MMC contained in the site underCC-BY-SA on the same site at any time before August 1 2009 provided the MMC iseligible for relicensing

Appendix A GNU Free Documentation License 33

ADDENDUM How to use this License for your documents

To use this License in a document you have written include a copy of the License in thedocument and put the following copyright and license notices just after the title page

Copyright (C) year your name

Permission is granted to copy distribute andor modify this document

under the terms of the GNU Free Documentation License Version 13

or any later version published by the Free Software Foundation

with no Invariant Sections no Front-Cover Texts and no Back-Cover

Texts A copy of the license is included in the section entitled lsquolsquoGNU

Free Documentation Licensersquorsquo

If you have Invariant Sections Front-Cover Texts and Back-Cover Texts replace theldquowith Textsrdquo line with this

with the Invariant Sections being list their titles with

the Front-Cover Texts being list and with the Back-Cover Texts

being list

If you have Invariant Sections without Cover Texts or some other combination of thethree merge those two alternatives to suit the situation

If your document contains nontrivial examples of program code we recommend releasingthese examples in parallel under your choice of free software license such as the GNUGeneral Public License to permit their use in free software

Index 34

Index

Aaccess control policy 3Author 3author specifying 10

Bbehavior prior to version 5 10behavior version 3 10behavior version 4 10binary-old-keyword-value substitution mode 9branch growth 7branch number 2branch tip 2branch default 3bug reporting 25

Ccase sensitivity file format 21checkin 3checklist for bug reports 25checkout 3checkout implicit 5ci invocation 11co invocation 12comma-v file format 1command help 7command version 7command-line option to specify a revision 7credits 1

DDate 3date formats 8date specifying 8dates file format 21default branch 3default branch setting 15deleting revisions 15description of working file 2description text specifying 8

Eempty log message 9emulation previous RCS versions 10encoding file format 20environment variables 10

Ffeatures still missing 23

file names on the command-line 7format RCSfile 20

Ggrammar file format 20

HHeader 3history 1

IId 3ident invocation 13implicit checkout circumstance 5implicit checkout locked 12implicit checkout unlocked 12instantiating a working file 2interaction model 1interactive mode 9invocation ci 11invocation co 12invocation ident 13invocation merge 14invocation rcs 14 15invocation rcsclean 16invocation rcsdiff 17invocation rcsmerge 17invocation rlog 18

Kkeyword-only substitution mode 9keyword-value substitution mode 8keyword-value-locker substitution mode 9keywords table of 3

Llayout of nodes file format 21license 1Locker 3locking a revision 15locking on implicit checkout 12locking non-strict 5locking set non-strict 15locking set strict 15locking strict 5locks in RCS file 3Log 3log message empty 9LOGNAME 11

Index 35

Mmemory limit 11merge invocation 14model interaction 1

NName 4names symbolic 3node layout file format 21non-strict locking 5number branch 2number revision 2

Oold-keyword-value substitution mode 9order of options and file names 7outdating revisions 15overview 1

Ppairing RCS and working files 7patches contributing 25problems 25projects related 1

Qquiet mode 9

Rrange of revisions specifying 7RCS file 2rcs invocation 14 15RCS version emulation 10RCS_MEM_LIMIT 11rcsclean invocation 16rcsdiff invocation 17RCSfile 4RCSfile format 20RCSINIT 10rcsmerge invocation 17removing revisions 15reporting bugs 25Revision 4revision number 2revision range specifying 7

revision specifying 7revisions tree of 3rlog invocation 18

SSource 4specifying a date 8specifying a range of revisions 7specifying a revision 7specifying a state 9specifying a suffix list 10specifying a timedate 8specifying author 10specifying description text 8specifying substitution mode 8State 4state specifying 9strict locking 5substitution mode default 8substitution mode specifying 8suffix list specifying 10symbolic names 3

TTEMP 11third-party interop file format 21Tichy Walter F 1time zone 8timedate specifying 8tip 2tip increment 7TMP 11TMPDIR 11tree of revisions 3

Uunlocking a revision 15USER 11

Vvalue-only substitution mode 9

Wwhitespace file format 21working file description 2working file instantiation 2

  • Overview
    • Credits
    • Concepts
      • Interaction model
      • Working file
      • RCS file
      • Fundamental operations
      • Keywords
        • Quick tour
          • Usage
            • Common elements
              • Revision options
              • Date option
              • Description option
              • Substitution mode option
              • Log message option
              • Misc common options
              • Environment
                • Invoking ci
                • Invoking co
                • Invoking ident
                • Invoking merge
                • Invoking rcs
                  • modern
                  • legacy
                    • Invoking rcsclean
                    • Invoking rcsdiff
                    • Invoking rcsmerge
                    • Invoking rlog
                      • Hacking
                        • File format
                          • File format grammar
                          • Additional particulars of the file format
                            • Still missing
                            • Reporting bugs
                              • GNU Free Documentation License
                              • Index
Page 8: GNU RCS · The RCS file is also known (colloquially) as the “comma-v file”, due to its name often ending in ,v (e.g., a.c,v). A revision number is a branch number followed by

Chapter 1 Overview 5

co fc

This command extracts the latest revision from the RCS file and writes it into fc If youwant to edit fc you must lock it as you check it out with the command

co -l fc

You can now edit fc Suppose after some editing you want to know what changes thatyou have made The command

rcsdiff fc

tells you the difference between the most recently checked-in version and the working fileYou can check the file back in by invoking

ci fc

This increments the revision number properly If ci complains with the message

ci error no lock set by your name

then you have tried to check in a file even though you did not lock it when you checked itout Of course it is too late now to do the checkout with locking because another checkoutwould overwrite your modifications Instead invoke

rcs -l fc

This command will lock the latest revision for you unless somebody else got ahead of youalready In this case yoursquoll have to negotiate with that person

Locking assures that you and only you can check in the next update and avoids nastyproblems if several people work on the same file Even if a revision is locked it can still bechecked out for reading compiling etc All that locking prevents is a checkin by anybodybut the locker

If your RCS file is private ie if you are the only person who is going to deposit revisionsinto it strict locking is not needed and you can turn it off If strict locking is turned offthe owner of the RCS file need not have a lock for checkin all others still do Turning strictlocking off and on is done with the commands

rcs -U fc disable strict lockingrcs -L fc enable strict locking

If you donrsquot want to clutter your working directory with RCS files create a subdirectorycalled RCS in your working directory and move all your RCS files there RCS commandswill look first into that directory to find needed files All the commands discussed abovewill still work without any modification See Section 21 [Common elements] page 7

To avoid the deletion of the working file during checkin (in case you want to continueediting or compiling) invoke one of

ci -l fc checkin + locked checkoutci -u fc checkin + unlocked checkout

These commands check in fc as usual then perform an implicit checkout The first formalso locks the checked in revision the second one doesnrsquot Thus these options save you onecheckout operation The first form is useful if you want to continue editing the second oneif you just want to read the file Both update the keyword substitutions in your workingfile see Section 12 [Concepts] page 1

You can give ci the number you want assigned to a checked-in revision Assume all yourrevisions were numbered 11 12 13 etc and you would like to start release 2 Either ofthe commands

Chapter 1 Overview 6

ci -r2 fc

ci -r21 fc

assigns the number 21 to the new revision From then on ci will number the subsequentrevisions with 22 23 etc The corresponding co commands

co -r2 fc

co -r21 fc

retrieve the latest revision numbered 2x and the revision 21 respectively co withouta revision number selects the latest revision on the trunk ie the highest revision with anumber consisting of two fields Numbers with more than two fields are needed for branchesFor example to start a branch at revision 13 invoke

ci -r131 fc

This command starts a branch numbered 1 at revision 13 and assigns the number 1311to the new revision Here is a diagram showing the new revision in relation to its branchand the trunk

11 -- 12 -- 13 -- 14 -- 15

|

[131] -- 1311

For more information about branches See Section 12 [Concepts] page 1

Chapter 2 Usage 7

2 Usage

This chapter describes how to invoke RCS commands including common command-lineelements as well options specific to each command

21 Common elements

All RCS commands accept --help and --version See Section ldquoCommand-Line Interfacesrdquoin The GNU Coding Standards

Aside from --help and --version RCS commands take the form lsquo-letter[arg]rsquo iea hyphen followed by a single letter optionally followed by extra information The squarebraces mean that the extra information is optional (No square braces means that the extrainformation is required) In any case when specified the extra information must abut theletter there can be no intervening whitespace

co -u 14 foo wrong space between -u and 14

co -u14 foo ok

Furthermore options must appear before file names (if any) on the command line

ident foo -q wrong option after file nameident -q foo ok

Lastly pairs of RCS and working files can be specified in three ways (a) both are given (b)only the working file is given (c) only the RCS file is given For (a) both RCS and workingfiles may have arbitrary directory components RCS commands pair them up intelligentlyFor (b) RCS commands will look first into the directory RCS if it exists to find theassociated RCS file

211 Revision options

As to be expected in a revision control system many options are of the form lsquo-flag[rev]rsquowhere flag is a single letter (eg lsquorrsquo) If ommitted rev defaults to the latest revision onthe default branch A revision can be specified in many ways

brn Straightforward dot-notation where br specifies the branch

n Like brn using the default branch

br Like brn using the a command-specific computation of n given the currenttip i For ci (see Section 22 [ci] page 11) n would be i + 1 while for othercommands n would be simply i

name This is the symbolic name of a revision as assigned previously by a ci -n orci -N command

$ The command computes the effective revision by examining the values of key-word expansions in the working file

For commands that accept a range of revisions the syntax is generally rev1rev2 ie tworevisions (specified as described above) separated by a colon

Chapter 2 Usage 8

212 Date option

Some commands accept an option of the form lsquo-ddatersquo to specify a date an absolute pointin time (to second resolution) expressed in a date format These also accept lsquo-zzonersquo tospecify the timezone The special value lsquoLTrsquo stands for the local time zone RCS recognizesmany date formats and time zones For example the following dates are equivalent if localtime is January 11 1990 8pm Pacific Standard Time eight hours west of CoordinatedUniversal Time (UTC)

800 pm lt

400 AM Jan 12 1990 default is UTC

1990-01-12 040000+00 ISO 8601 (UTC)

1990-01-11 200000-08 ISO 8601 (local time)

19900112 040000 traditional RCS format

Thu Jan 11 200000 1990 LT output of ctime(3) + LT

Thu Jan 11 200000 PST 1990 output of date(1)

Fri Jan 12 040000 GMT 1990

Thu 11 Jan 1990 200000 -0800 Internet RFC 822

12-January-1990 0400 WET

Most fields in the date and time can be defaulted The default time zone is normally UTCbut this can be overridden by the -z option The other defaults are determined in the orderyear month day hour minute and second (most to least significant) At least one of thesefields must be provided For omitted fields that are of higher significance than the highestprovided field the time zonersquos current values are assumed For all other omitted fields thelowest possible values are assumed For example without -z the date lsquo20 1030rsquo defaultsto lsquo103000 UTCrsquo of the 20th of the UTC time zonersquos current month and year Note thatfor the shell the datetime must be quoted if it contains spaces

RCS also accepts some other formats which specify only the date portion (omitting thetime portion)

YYYY-DDD DDD is the day of year 1-366

YYYY-wWW-D

WW is the ISO week number 0-53 (actually ISO week numbers are 1-53 week0 is a GNU RCS extension) and D is the ISO day number 1-7 (Monday throughSunday)

213 Description option

Some commands accept an option of the form lsquo-t-textrsquo or lsquo-tfile-namersquo This optionis to set or update the RCS file description text In the first form text is used directlyexcluding the leading hyphen (lsquo-rsquo) that distinguishes the two forms In the second formthe description text is taken from the contents of file-name

214 Substitution mode option

Some commands accept an option of the form -ksubst used to control how keywords (seeSection 12 [Concepts] page 1) are expanded in the working file In the following table ofsubst values the example keyword is lsquoRevisionrsquo and its value is lsquo513rsquo

kv Generate lsquo$Revision 513 $rsquo (dollar-sign keyword colon space value spacedollar-sign) A lockerrsquos name is inserted in the value of the Header Id and

Chapter 2 Usage 9

Locker keyword strings only as a file is being locked ie by ci -l and co -lThis is the default substitution mode

kvl Like -kkv except that a lockerrsquos name is always inserted if the given revisionis currently locked

k Generate lsquo$Revision$rsquo (dollar-sign keyword dollar-sign) This is useful whencomparing different revisions of a file Log messages are inserted after Log key-words even if -kk is specified since this tends to be more useful when mergingchanges

o Like -kkv but use the old value present in the working file just before it waschecked in This can be useful for file formats that cannot tolerate any changesto substrings that happen to take the form of keyword strings

b Like -ko but do all file io in binary mode This makes little difference onPOSIX and Unix hosts but on DOS-like hosts one should use rcs -i -kb toinitialize an RCS file intended to be used for binary files Also on all hostsrcsmerge normally refuses to merge files when -kb is in effect

v Generate lsquo513rsquo (value only) Further keyword substitution cannot be per-formed once the keyword names are removed so this should be used with careBecause of this danger of losing keywords -kv cannot be combined with -land the owner write permission of the working file is turned off to edit the filelater check it out again without -kv

215 Log message option

Both ci and rcs allow a log message to be specified with the -m option If themsg argumentto this option is empty RCS uses the default lsquo empty log message rsquo This particularmessage is handled specially (ie filtered out) by rlog

216 Misc common options

Other common options are -I -q -s -T -V -w -x

-I This option enables interactive mode More precisely it forces interactive modewhereby RCS commands believe that their standard input is a terminal nor-mally a precondition for displaying a prompt to receive input (such as a log mes-sage on checkin) The intention of -I is for scripting situations where standardinput is actually not a terminal but you know beforehand (without prompting)that input is needed and you are ready to provide it on standard input anyway

-q This option enables quiet mode Commands work silently (unless there is anerror condition) and suppress warnings and prompts

-sstate Specify the state to be state

-T This option controls how commands timestamp the RCS file Normally RCScommands set the RCS filersquos timestamp when modifying it in the ldquonaturalrdquo way(without taking any particular care) With -T on the other hand the com-mands either preserve the timestamp (for standalone lockunlock operations)or use the timestamp of the working file (for ci)

Chapter 2 Usage 10

This can be useful if the RCS file is found in a makefile targetrsquos list of pre-requisites (see Section ldquoRule Syntaxrdquo in The GNU Make Manual) that is ifsome target should be rebuilt if the RCS file is newer than it In that case youcan do lsquorcs -u -Trsquo for example to unlock a revision in the RCS file withouttriggering a recompilation

-V Behave like --version ie display command version information and exitsuccessfully NB This option is obsolete and its support will be removed insome future release

-Vn n specifies the RCS (major) version to emulate Valid values for n are 3 4 5Version 5 is the current version so -V5 does nothing special

In versions prior to 5 RCS outputs lsquotrsquo (tab U+09) between the lsquorsquo (colon) andthe value (for keyword substitution) instead of space uses the RCS file commentstring to prefix each line in the Log expansion instead of computing it on thefly from the input text writesreads localtime instead of UTC and displaysslightly different output for rlog

For version 4 the Header expansion unconditionally includes Locker lockeras if the kvl substitution mode were specified (see Section 214 [Substitutionmode option] page 8)

For version 3 the Header expansion omits the directories from the filename andsays only Locked instead of the state

-wlogin Some commands accept an option of the form lsquo-wloginrsquo to specify the loginname of the author of a revision ie ldquowhordquo is responsible

-xsuff Specify suff as the slash-separated list of file name suffixes used to recognizean RCS file The default value is lsquovrsquo that is first try with lsquovrsquo then try withan empty suffix

This basename search occurs within (ie starting from the beginning) the largerdirectory search loop which comprises two candidates dRCS and d where dis the directory component of the working file name For example given theworking file ac in the current directory RCS tries in order these candidates

RCSacv

RCSac

acv

ac

Note that the last candidate is impossible (and is in fact discarded) becausethe working and RCS files cannot have the same name

217 Environment

Various environment variables influence how RCS works

[Environment Variable]RCSINITAnother way to set common options is with the lsquoRCSINITrsquo environment variable Thisis a space-separated list of options Use lsquorsquo (backslash) to escape significant spaceFor example

Chapter 2 Usage 11

Set the value make it available to subsequent commandsRCSINIT=-q -xv -zLT

export RCSINIT

Use it (implicitly)rlog -L foo

This example in Bourne shell syntax arranges for RCS commands to operate as ifeach command-line had prepended lsquo-q -xv -zLTrsquo to the rest of the command-lineThe effective command-line that rlog sees is thus lsquo-q -xv -zLT -L foorsquo

[Environment Variable]RCS_MEM_LIMITNormally for speed commands either memory map or copy into memory the RCS fileif its size is less than thememory limit currently defaulting to ldquounlimitedrdquo Otherwise(or if the initially-tried speedy ways fail) the commands fall back to using standardio routines

You can adjust the memory limit by setting the lsquoRCS_MEM_LIMITrsquo environment variableto a numeric value (measured in kilobytes) An empty value is silently ignored

As a side effect specifying the memory limit inhibits fall-back to slower routines(This env var is mostly intended for testing RCS normally you can leave it unsetProbably it will be removed in a future release)

[Environment Variable]TMPDIR[Environment Variable]TMP[Environment Variable]TEMP

Commands sometimes create temporary files normally in a system-dependent direc-tory such as tmp You can override this directory by specifying another one asthe value of one of the environment variables TMPDIR TMP or TEMP (checked in thatorder)

[Environment Variable]LOGNAME[Environment Variable]USER

Absent -wlogin or when login is omitted (see Section 216 [Misc common options]page 9) commands check environment variables LOGNAME and USER (in that order)If neither of these are set RCS queries the host for and uses your login

22 Invoking ci

rcs ci [options] file

(or ldquocirdquo instead of ldquorcs cirdquo)

The ci command adds a revision to the RCS file reflecting the current state of the workingfile This operation is also known as ldquocheckinrdquo

-f[rev] Force new entry even if no content changed

-I[rev]

-q[rev] See Section 216 [Misc common options] page 9

-i[rev] Initial checkin error if the RCS file already exists

-j[rev] Just checkin donrsquot initialize error if the RCS file does not exist

Chapter 2 Usage 12

-k[rev] Compute revision from working file keywords

-r Release lock and delete working file

-rrev Do normal checkin

-l[rev] Like -r but immediately checkout locked (co -l) afterwards

-u[rev] Like -l but checkout unlocked (co -u)

-M[rev] Reset working file mtime (relevant for -l -u)

Multiple flags in -fiIjklMqru may be given except for -r -l -u which are mutuallyexclusive For a fully specified revision of the form brn nmust be greater than any existingon br or br must be new If rev is omitted compute it from the last lock (co -l) perhapsstarting a new branch If there is no lock use defbr(L+1) See Section 211 [Revisionoptions] page 7

-d[date]

-zzone See Section 212 [Date option] page 8 If no date specified use the workingfile modification time

-m[msg] Use msg as the log message See Section 215 [Log message option] page 9

-nname

-Nname Assign symbolic name to the entry For -n name must be new (no previousassignment) For -N overwrite any previous assignment

-sstate See Section 216 [Misc common options] page 9 Set the state

-t-text

-tfile-name

See Section 213 [Description option] page 8

-T Set the RCS filersquos modification time to the new revisionrsquos time if the former pre-cedes the latter and there is a new revision preserve the RCS filersquos modificationtime otherwise

-wwho Use who as the author

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

23 Invoking co

rcs co [options] file

(or ldquocordquo instead of ldquorcs cordquo)

The co command retrieves a revision from the RCS file writing a new working file Thisoperation is also known as ldquocheckoutrdquo

-f[rev] Force overwrite of working file

-I[rev]

-q[rev] See Section 216 [Misc common options] page 9

-p[rev] Write to stdout instead of the working file

Chapter 2 Usage 13

-r[rev] Normal checkout

-l[rev] Like -r but also lock

-u[rev] Like -l but unlock

-M[rev] Reset working file mtime (relevant for -l -u)

Multiple flags in -fIlMpqru may be given except for -r -l -u which are mutuallyexclusive See Section 211 [Revision options] page 7

-ksubst See Section 214 [Substitution mode option] page 8

-ddate

-zzone See Section 212 [Date option] page 8 Select latest before or on date

-jjoins Merge using joins a list of revrev pairs NB This option is obsolete (seeSection 29 [rcsmerge] page 17)

-sstate See Section 216 [Misc common options] page 9 Select matching state

-S Enable self-same mode In this mode the owner of a lock is unimportantjust that it exists Effectively this prevents you from checking out the samerevision twice

$ whoami

ttn

$ co -l -f z

RCSzv --gt z

revision 11 (locked)

done

$ co -S -l -f z

RCSzv --gt z

co RCSzv Revision 11 is already locked by ttn

-T Preserve the modification time on the RCS file even if it changes because a lockis added or removed

-wwho Select matching login who

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

24 Invoking ident

ident [options] [file ]

If no file is specified scan standard input The ident command scans its input for keywords(see Section 12 [Concepts] page 1) displaying to standard output what it finds

-q Normally if no patterns are found for a file ident emits a warning This optionsuppresses the warning

Chapter 2 Usage 14

-V Note that -Vn is not a valid option for ident in contrast to most other RCScommands (see Section 216 [Misc common options] page 9)

In addition to the normal keyword pattern for Subversion 12 (and later) compatibility1ident also recognizes patterns having one of the forms

$keyword text $

two colons and space after keyword

space before ending $

$keyword text$

two colons and space after keyword

hash before ending $

25 Invoking merge

merge [options] receiving-sibling parent other-sibling

The merge command combines the differences between a the parent and the other siblingand the differences between the parent and the receiving sibling It writes the result to thereceiving sibling

-A

-E

-e Use diff3 -A -E (default) or -e respectively

-p Write to stdout instead of overwriting receiving-sibling

-q See Section 216 [Misc common options] page 9 Suppress conflict warnings

-Llabel (up to three times) Specify the conflict labels for receiving-sibling parent andother-sibling respectively

-V Note that -Vn is not a valid option for merge in contrast to most other RCScommands (see Section 216 [Misc common options] page 9)

26 Invoking rcs

The rcs command is unique in the set of RCS programs in that it has two usages themodern (for RCS 590 and later) and the legacy

261 modern

rcs [options] command [command-arg ]

This rcs usage dispatches to command passing along command-arg without interpreta-tion

--commands

Display a list of available commands including a one-line description and exitsuccessfully

1 The fixed-length keyword syntax is described in detail in Version Control with Subversion chapterldquoAdvanced Topicsrdquo section ldquoKeyword Substitutionrdquo

Chapter 2 Usage 15

--aliases

Display a list of command aliases and exit successfully

--help command

Display help for a particular command and exit successfully For example todisplay help for the legacy interface use

--help frob

262 legacy

rcs frob [options] file

(or ldquorcsrdquo instead of ldquorcs frobrdquo)

This rcs usage performs various administrative operations on the RCS file depending onthe options given

-i Create and initialize a new RCS file

-L Set strict locking

-U Set non-strict locking

-M Donrsquot send mail when breaking someone elsersquos lock

-T Preserve the modification time on the RCS file unless a revision is removed

-I

-q See Section 216 [Misc common options] page 9

-alogins Append logins (comma-separated list of usernames) to access-list

-e[logins]

Erase logins (comma-separated list of usernames) from access-list If logins isomitted clear the access-list

-Afile-name

Append access-list of file-name to current access-list

-b[rev] Set default branch to that of rev or highest branch on trunk if rev is omitted

-l[rev] Lock a revision

-u[rev] Unlock a revision

-cstring Set comment leader to string NB Donrsquot use obsolete

-ksubst See Section 214 [Substitution mode option] page 8

-mrev[msg]

Replace log message with msg See Section 215 [Log message option] page 9

-nname[[rev]]

If rev is omitted delete symbolic name Otherwise associate name with rev name must be new

-Nname[[rev]]

Like -n but overwrite any previous assignment

-orange Delete (also known as ldquooutdaterdquo) revisions in range

Chapter 2 Usage 16

rev single revision

br latest revision on branch br

rev1rev2

rev1 to rev2 on same branch inclusive

rev beginning of branch to rev

rev rev to end of branch

-sstate[rev]

See Section 216 [Misc common options] page 9 Set state

-t-text

-tfile-name

See Section 213 [Description option] page 8 Replace description

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

These options have no effect and are included solely for consistency with other comamnds(see Section 217 [Environment] page 10) -zzone

27 Invoking rcsclean

rcs clean [options] [file ]

(or ldquorcscleanrdquo instead of ldquorcs cleanrdquo)

The rcsclean command removes working files that are not being worked on If given -u italso unlocks and removes working files that are being worked on but have not changed Ifno file is specified operate on all the working files in the current directory

-r[rev] Specify revision

-u[rev] Unlock if is locked and no differences found

-n[rev] Dry run (no act donrsquot operate)

-q[rev] See Section 216 [Misc common options] page 9

-ksubst See Section 214 [Substitution mode option] page 8

-T Preserve the modification time on the RCS file even it changes because a lockis removed

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

-zzone See Section 212 [Date option] page 8

Chapter 2 Usage 17

28 Invoking rcsdiff

rcs diff [options] file

(or ldquorcsdiffrdquo instead of ldquorcs diffrdquo)

The rcsdiff command runs diff to compare two revisions in an RCS file See Section ldquoIn-voking diffrdquo in The GNU Diffutils Manaual

-rrev (zero one or two times) Name a revision If given two revisions (lsquo-rrev1-rrev2rsquo) compare those revisions If given only one revision (lsquo-rrevrsquo) comparethe working file with it If given no revisions compare the working file with thelatest revision on the default branch

-ksubst See Section 214 [Substitution mode option] page 8

-q See Section 216 [Misc common options] page 9

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

-zzone See Section 212 [Date option] page 8

These options have no effect and are included solely for consistency with other comamnds(see Section 217 [Environment] page 10) -T

Additionally the following options (and their argument if any) are passed to the underlyingdiff command

-0 -1 -2 -3 -4 -5 -6 -7 -8 -9 -B -C -D -F -H -I

-L -U -W -a -b -c -d -e -f -h -i -n -p -t -u -w -y

long options (that start with --)

(Not all of these options are meaningful)

29 Invoking rcsmerge

rcs merge [options] file

(or ldquorcsmergerdquo instead of ldquorcs mergerdquo)

The rcsmerge command incorporates the changes between two revisions of an RCS file intothe corresponding working file

-A

-E

-e Passed to the diff3 command The default if none are specified is -E With -esuppress warnings on conflict The -A style generates the most verbose outputSee Section ldquoInvoking diff3rdquo in The GNU Diffutils Manual

-p[rev] Write to stdout instead of overwriting the working file

-q[rev] See Section 216 [Misc common options] page 9

-rrev (one or two times) specify a revision

One or two revisions must be specified (using -p -q -r) If only one is specified the secondrevision defaults to the latest revision on the default branch

Chapter 2 Usage 18

-ksubst See Section 214 [Substitution mode option] page 8

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

-zzone See Section 212 [Date option] page 8

These options have no effect and are included solely for consistency with other comamnds(see Section 217 [Environment] page 10) -T

210 Invoking rlog

rcs log [options] file

(or ldquorlogrdquo instead of ldquorcs logrdquo)

The rlog command displays information about RCS files

-L Ignore RCS files with no locks set

-R Print only the name of the RCS file

-h Print only the ldquoheaderrdquo information

-t Like -h but also include the description

-N Omit symbolic names

-b Select the default branch

-ddates See Section 212 [Date option] page 8 Select revisions based on timestampin the range dates with spec

d single revision d or earlier

d1ltd2

d2gtd1 between d1 and d2 exclusive

ltd

dgt before d

gtd

dlt after d

Instead of lsquoltrsquo or lsquogtrsquo you can use lsquolt=rsquo or lsquogt=rsquo respectively to specify inclusiveranges dates may also be a list of semicolon-separated specs

-l[who] Select revisions locked by who (comma-separated list of usernames) only or byanyone if who is omitted

-r[revs] Select revisions in revs a comma-separated list of range specs one of revrev rev rev1rev2

-sstates See Section 216 [Misc common options] page 9 states can also be a comma-separated list of states Select revisions with specified state(s)

-w[who] Select revisions checked in by who (comma-separated list of usernames) or bythe user if who is omitted

Chapter 2 Usage 19

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

-zzone See Section 212 [Date option] page 8

These options have no effect and are included solely for consistency with other comamnds(see Section 217 [Environment] page 10) lsquo-qrsquo lsquo-Trsquo

Chapter 3 Hacking 20

3 Hacking

This chapter in contrast to the previous (see Chapter 2 [Usage] page 7) is introspective Itdescribes an important aspect of RCS interop with other programs and development ideasand methods

31 File format

An RCS filersquos contents are described by the grammar below1 Overall the format is freendashformat text In most environments RCS uses the ISO 88591 encoding visible graphiccharacters are (octal) codes 041ndash176 and 240ndash377 and whitespace characters are codes010ndash015 and 040TODO Discuss or point to encoding compatibility issues

311 File format grammar

The meta syntax in this section uses the following conventions lsquo|rsquo (U+7C) separates al-ternatives lsquorsquo (U+7B) and lsquorsquo (U+7D) enclose optional phrases lsquorsquo and lsquorsquo (trailing U+2A)enclose phrases that can be repeated zero or more times lsquorsquo and lsquo+rsquo (trailing U+2B) enclosephrases that must appear at least once and can be repeated terminal symbols are in lsquorsquo(two U+22)

rcstext = admin delta desc deltatext

admin = head num

branch num

access id

symbols sym num

locks id num

strict

integrity intstring

comment string

expand string

delta = num

date num

author id

state id

branches num

next num

commitid sym

desc = desc string

deltatext = num

log string

text string

1 This section is adapted from the lsquorcsfile(5)rsquo manpage written by Walter F Tichy

Chapter 3 Hacking 21

num = digit | +

digit = 0 through 9

id = idchar | +

sym = idchar+

idchar = any visible graphic character except special

special = $ | | | | |

string = any character with doubled

word = id | num | string |

intchar = any character except

thirdp = ^L intchar

intstring = intchar thirdp

312 Additional particulars of the file format

bull In releases prior to 58 (2011-08-30) the grammar included the production

newphrase = id word

and used it in the admin delta and deltatext productions This allowed third-partyprograms to interoperate with RCS by storing opaque (to RCS) data in the file

As of 58 in the name of progress (towards more systematic file integrity support) theonly area reserved for third-party interop is in the (string) value of the integrity fieldspecifically after the first formfeed (U+0C) A further restriction (for all programs) isthat the integrity value must not contain lsquorsquo

bull Whitespace has no significance except in strings However whitespace cannot appearwithin an id num or sym and an RCS file must end with newline (U+0A) Strings areenclosed by lsquorsquo (U+40) If a string contains a lsquorsquo it must be doubled otherwise stringscan contain arbitrary binary data

bull Identifiers are case sensitive Keywords are in lower case only The sets of keywordsand identifiers can overlap

bull Dates which appear after the date keyword are of the form Ymmddhhmmss whereY is the year mm the month (01ndash12) dd the day (01ndash31) hh the hour (00ndash23) mm theminute (00ndash59) and ss the second (00ndash60) Y contains just the last two digits of theyear for years from 1900 through 1999 and all the digits of years thereafter Dates usethe Gregorian calendar times use UTC

bull The delta nodes form a tree All nodes whose numbers consist of a single pair (eg 2321 13) are on the trunk and are linked through the next field in order of decreasing

Chapter 3 Hacking 22

numbers The head field in the admin node points to the head of that sequence (iecontains the highest pair) The branch node in the admin node indicates the defaultbranch (or revision) for most RCS operations If empty the default branch is thehighest branch on the trunk

All delta nodes whose numbers consist of 2n fields (n ge 2) (eg 3111 2122) arelinked as follows All nodes whose first 2nminus1 number fields are identical are linkedthrough the next field in order of increasing numbers For each such sequence thedelta node whose number is identical to the first 2nminus2 number fields of the delta

nodes on that sequence is called the branchpoint The branches field of a node containsa list of the numbers of the first nodes of all sequences for which it is a branchpointThis list is ordered in increasing numbers See Figure 31

Chapter 3 Hacking 23

Head

|

|

v

---------

| |

| 21 |

| |

1213 1311 | | 1222 122111

--------- --------- --------- --------- -------------

^ ^ | ^ ^

| | | | |

| | v | |

| --------- |

| 13 |

--------- -----------

1211 131 1221 12211

--------- ---------

^ | ^

| | |

| v |

| --------- |

| 12 |

---------------------- ---------

121 122

|

|

v

---------

11

Figure 31 The organization of an example RCS file

32 Still missing

RCS is still missing some features The following is an unordered list of ldquoto-do musingsrdquo keptby the RCS maintainers If you would like to hack on an item See Section 33 [Reportingbugs] page 25

bull Add an option to rcsmerge so that it can use an arbitrary program to do the 3-waymerge instead of the default merge Likewise for rcsdiff and diff It should be possibleto pass arbitrary options to these programs and to the subsidiary co invocations

bull Add format options for finer control over the output of ident and rlog Eg thereshould be an easy way for rlog to output lines like lsquosrcmainc 24 wftrsquo one for

Chapter 3 Hacking 24

each locked revision rlog options should have three orthogonal types selecting filesselecting revisions and selecting rlog format

bull Add format options for finer control over the output of keyword strings Eg thereshould be some way to prepend lsquo()rsquo and there should be some way to change lsquo$rsquo tosome other character to disable further substitution These options should make theresulting files uneditable like lsquo-kvrsquo

bull Add long options eg --keyword-substitution Unfortunately RCSrsquos option syntaxis incompatible with getopt Perhaps the best way is to overload rcs eg lsquorcs diff

--keyword-substitution=old filersquo instead of lsquorcsdiff -ko filersquo

bull rlog -rMN should work even if M and N have different numbers of fields so long asM is an ancestor of N or vice versa

bull rcs should evaluate options in order this allows rcs -oS -nS

bull Be able to redo your most recent checkin with minor changes

bull co -u shouldnrsquot complain about a lsquo+wrsquo working file if contents donrsquot change

bull Add a lsquo-rsquo option to take the list of file names from standard input Perhaps the filenames should be null-terminated not newline-terminated so that those that containnewlines are handled properly

bull Permit multiple optionndashfilename pairs eg co -r14 a -r15 b

bull Add an option to break a symbolic link to an RCS file instead of breaking the hardlink that it points to

bull Add ways to specify the earliest revision the most recent revision the earliest or latestrevision on a particular branch and the parent or child of some other revision

bull If a user has multiple locks perhaps ci should fall back on the method of ci -k to figureout which revision to use

bull Add an option to rcsclean to clean directories recursively

bull Write an rcsck program that repairs corrupted RCS files much as fsck repairs corruptedfile systems For example it should remove stale lock files

bull Update the date parser to use the more modern getdatey by Bellovin Salz andBerets or the even more modern getdate by Moraes None of these getdate imple-mentations are as robust as RCSrsquos old warhorse in avoiding problems like arithmeticoverflow so theyrsquoll have to be fixed first (Perhaps we can use gnulib module getdate)

bull Break up the code into a library so that itrsquos easier to write new programs that manip-ulate RCS files and so that useless code is removed from the existing programs Forexample the rcs command contains unnecessary keyword substitution baggage andthe merge command can be greatly pruned

bull Make it easier to use your favorite text editor to edit log messages etc instead ofhaving to type them in irretrievably at the terminal

bull Let the user specify a search path for default branches eg to use L as the defaultbranch if it works and M otherwise Let the user require that at least one entry inthe search path works Let the user say that later entries in the search path are readonly ie one cannot check in changes to them This should be an option settable bylsquoRCSINITrsquo

bull Add a way for a user to see which revisions affected which lines

Chapter 3 Hacking 25

bull Have rlog -nN F print just the revision number that N translates to Eg rlog -nB

F would print the highest revision on the branch B Use this to add an option -bB torcsbranch to freeze the named branch This should interact well with default branches

bull Add a co option that prints the revision number before each line as SCCSrsquos get -m

does [I implemented this for Emacs 22 as a subroutine of vc-annotate qv mdashttn]

33 Reporting bugs

To report bugs or suggest enhancements for GNU RCS please visit its homepage (httpwwwgnuorgsoftwarercs) to find directions on how to ldquofile a bug reportrdquo online orsend electronic mail to help-rcsgnuorg (If you use the web interface you donrsquot needto also send email since that is done automatically)

For bug reports please include enough information for the maintainers to reproduce theproblem Generally speaking that means

bull The RCS version command(s) and manual section(s) involved

bull Hardware and operating system names and versions

bull The contents of any input files necessary to reproduce the bug

bull The expected behavior andor output

bull A description of the problem and samples of any erroneous output

bull Options you gave to configure other than specifying installation directories

bull Anything else that you think would be helpful

When in doubt whether something is needed or not include it Itrsquos better to include toomuch than to leave out something important

Patches are welcome if possible please make them with lsquogit format-patchrsquo and includeChangeLog entries (see Section ldquoChange Logrdquo in The GNU Emacs Manual) Please followthe existing coding style

Appendix A GNU Free Documentation License 26

Appendix A GNU Free Documentation License

Version 13 3 November 2008

Copyright ccopy 2000 2001 2002 2007 2008 Free Software Foundation Inchttpfsforg

Everyone is permitted to copy and distribute verbatim copiesof this license document but changing it is not allowed

0 PREAMBLE

The purpose of this License is to make a manual textbook or other functional anduseful document free in the sense of freedom to assure everyone the effective freedomto copy and redistribute it with or without modifying it either commercially or non-commercially Secondarily this License preserves for the author and publisher a wayto get credit for their work while not being considered responsible for modificationsmade by others

This License is a kind of ldquocopyleftrdquo which means that derivative works of the documentmust themselves be free in the same sense It complements the GNU General PublicLicense which is a copyleft license designed for free software

We have designed this License in order to use it for manuals for free software becausefree software needs free documentation a free program should come with manualsproviding the same freedoms that the software does But this License is not limited tosoftware manuals it can be used for any textual work regardless of subject matter orwhether it is published as a printed book We recommend this License principally forworks whose purpose is instruction or reference

1 APPLICABILITY AND DEFINITIONS

This License applies to any manual or other work in any medium that contains anotice placed by the copyright holder saying it can be distributed under the termsof this License Such a notice grants a world-wide royalty-free license unlimited induration to use that work under the conditions stated herein The ldquoDocumentrdquobelow refers to any such manual or work Any member of the public is a licensee andis addressed as ldquoyourdquo You accept the license if you copy modify or distribute the workin a way requiring permission under copyright law

A ldquoModified Versionrdquo of the Document means any work containing the Document ora portion of it either copied verbatim or with modifications andor translated intoanother language

A ldquoSecondary Sectionrdquo is a named appendix or a front-matter section of the Documentthat deals exclusively with the relationship of the publishers or authors of the Documentto the Documentrsquos overall subject (or to related matters) and contains nothing thatcould fall directly within that overall subject (Thus if the Document is in part atextbook of mathematics a Secondary Section may not explain any mathematics) Therelationship could be a matter of historical connection with the subject or with relatedmatters or of legal commercial philosophical ethical or political position regardingthem

The ldquoInvariant Sectionsrdquo are certain Secondary Sections whose titles are designated asbeing those of Invariant Sections in the notice that says that the Document is released

Appendix A GNU Free Documentation License 27

under this License If a section does not fit the above definition of Secondary then it isnot allowed to be designated as Invariant The Document may contain zero InvariantSections If the Document does not identify any Invariant Sections then there are none

The ldquoCover Textsrdquo are certain short passages of text that are listed as Front-CoverTexts or Back-Cover Texts in the notice that says that the Document is released underthis License A Front-Cover Text may be at most 5 words and a Back-Cover Text maybe at most 25 words

A ldquoTransparentrdquo copy of the Document means a machine-readable copy representedin a format whose specification is available to the general public that is suitable forrevising the document straightforwardly with generic text editors or (for images com-posed of pixels) generic paint programs or (for drawings) some widely available drawingeditor and that is suitable for input to text formatters or for automatic translation toa variety of formats suitable for input to text formatters A copy made in an otherwiseTransparent file format whose markup or absence of markup has been arranged tothwart or discourage subsequent modification by readers is not Transparent An imageformat is not Transparent if used for any substantial amount of text A copy that isnot ldquoTransparentrdquo is called ldquoOpaquerdquo

Examples of suitable formats for Transparent copies include plain ASCII withoutmarkup Texinfo input format LaTEX input format SGML or XML using a publiclyavailable DTD and standard-conforming simple HTML PostScript or PDF designedfor human modification Examples of transparent image formats include PNG XCFand JPG Opaque formats include proprietary formats that can be read and editedonly by proprietary word processors SGML or XML for which the DTD andor pro-cessing tools are not generally available and the machine-generated HTML PostScriptor PDF produced by some word processors for output purposes only

The ldquoTitle Pagerdquo means for a printed book the title page itself plus such followingpages as are needed to hold legibly the material this License requires to appear in thetitle page For works in formats which do not have any title page as such ldquoTitle Pagerdquomeans the text near the most prominent appearance of the workrsquos title preceding thebeginning of the body of the text

The ldquopublisherrdquo means any person or entity that distributes copies of the Documentto the public

A section ldquoEntitled XYZrdquo means a named subunit of the Document whose title eitheris precisely XYZ or contains XYZ in parentheses following text that translates XYZ inanother language (Here XYZ stands for a specific section name mentioned below suchas ldquoAcknowledgementsrdquo ldquoDedicationsrdquo ldquoEndorsementsrdquo or ldquoHistoryrdquo) To ldquoPreservethe Titlerdquo of such a section when you modify the Document means that it remains asection ldquoEntitled XYZrdquo according to this definition

The Document may include Warranty Disclaimers next to the notice which states thatthis License applies to the Document These Warranty Disclaimers are considered tobe included by reference in this License but only as regards disclaiming warrantiesany other implication that these Warranty Disclaimers may have is void and has noeffect on the meaning of this License

2 VERBATIM COPYING

Appendix A GNU Free Documentation License 28

You may copy and distribute the Document in any medium either commercially ornoncommercially provided that this License the copyright notices and the licensenotice saying this License applies to the Document are reproduced in all copies andthat you add no other conditions whatsoever to those of this License You may not usetechnical measures to obstruct or control the reading or further copying of the copiesyou make or distribute However you may accept compensation in exchange for copiesIf you distribute a large enough number of copies you must also follow the conditionsin section 3

You may also lend copies under the same conditions stated above and you may publiclydisplay copies

3 COPYING IN QUANTITY

If you publish printed copies (or copies in media that commonly have printed covers) ofthe Document numbering more than 100 and the Documentrsquos license notice requiresCover Texts you must enclose the copies in covers that carry clearly and legibly allthese Cover Texts Front-Cover Texts on the front cover and Back-Cover Texts onthe back cover Both covers must also clearly and legibly identify you as the publisherof these copies The front cover must present the full title with all words of the titleequally prominent and visible You may add other material on the covers in additionCopying with changes limited to the covers as long as they preserve the title of theDocument and satisfy these conditions can be treated as verbatim copying in otherrespects

If the required texts for either cover are too voluminous to fit legibly you should putthe first ones listed (as many as fit reasonably) on the actual cover and continue therest onto adjacent pages

If you publish or distribute Opaque copies of the Document numbering more than 100you must either include a machine-readable Transparent copy along with each Opaquecopy or state in or with each Opaque copy a computer-network location from whichthe general network-using public has access to download using public-standard networkprotocols a complete Transparent copy of the Document free of added material Ifyou use the latter option you must take reasonably prudent steps when you begindistribution of Opaque copies in quantity to ensure that this Transparent copy willremain thus accessible at the stated location until at least one year after the last timeyou distribute an Opaque copy (directly or through your agents or retailers) of thatedition to the public

It is requested but not required that you contact the authors of the Document wellbefore redistributing any large number of copies to give them a chance to provide youwith an updated version of the Document

4 MODIFICATIONS

You may copy and distribute a Modified Version of the Document under the conditionsof sections 2 and 3 above provided that you release the Modified Version under preciselythis License with the Modified Version filling the role of the Document thus licensingdistribution and modification of the Modified Version to whoever possesses a copy ofit In addition you must do these things in the Modified Version

A Use in the Title Page (and on the covers if any) a title distinct from that of theDocument and from those of previous versions (which should if there were any

Appendix A GNU Free Documentation License 29

be listed in the History section of the Document) You may use the same title asa previous version if the original publisher of that version gives permission

B List on the Title Page as authors one or more persons or entities responsible forauthorship of the modifications in the Modified Version together with at least fiveof the principal authors of the Document (all of its principal authors if it has fewerthan five) unless they release you from this requirement

C State on the Title page the name of the publisher of the Modified Version as thepublisher

D Preserve all the copyright notices of the Document

E Add an appropriate copyright notice for your modifications adjacent to the othercopyright notices

F Include immediately after the copyright notices a license notice giving the publicpermission to use the Modified Version under the terms of this License in the formshown in the Addendum below

G Preserve in that license notice the full lists of Invariant Sections and required CoverTexts given in the Documentrsquos license notice

H Include an unaltered copy of this License

I Preserve the section Entitled ldquoHistoryrdquo Preserve its Title and add to it an itemstating at least the title year new authors and publisher of the Modified Versionas given on the Title Page If there is no section Entitled ldquoHistoryrdquo in the Docu-ment create one stating the title year authors and publisher of the Documentas given on its Title Page then add an item describing the Modified Version asstated in the previous sentence

J Preserve the network location if any given in the Document for public access toa Transparent copy of the Document and likewise the network locations given inthe Document for previous versions it was based on These may be placed in theldquoHistoryrdquo section You may omit a network location for a work that was publishedat least four years before the Document itself or if the original publisher of theversion it refers to gives permission

K For any section Entitled ldquoAcknowledgementsrdquo or ldquoDedicationsrdquo Preserve the Titleof the section and preserve in the section all the substance and tone of each of thecontributor acknowledgements andor dedications given therein

L Preserve all the Invariant Sections of the Document unaltered in their text andin their titles Section numbers or the equivalent are not considered part of thesection titles

M Delete any section Entitled ldquoEndorsementsrdquo Such a section may not be includedin the Modified Version

N Do not retitle any existing section to be Entitled ldquoEndorsementsrdquo or to conflict intitle with any Invariant Section

O Preserve any Warranty Disclaimers

If the Modified Version includes new front-matter sections or appendices that qualifyas Secondary Sections and contain no material copied from the Document you may atyour option designate some or all of these sections as invariant To do this add their

Appendix A GNU Free Documentation License 30

titles to the list of Invariant Sections in the Modified Versionrsquos license notice Thesetitles must be distinct from any other section titles

You may add a section Entitled ldquoEndorsementsrdquo provided it contains nothing butendorsements of your Modified Version by various partiesmdashfor example statements ofpeer review or that the text has been approved by an organization as the authoritativedefinition of a standard

You may add a passage of up to five words as a Front-Cover Text and a passage of upto 25 words as a Back-Cover Text to the end of the list of Cover Texts in the ModifiedVersion Only one passage of Front-Cover Text and one of Back-Cover Text may beadded by (or through arrangements made by) any one entity If the Document alreadyincludes a cover text for the same cover previously added by you or by arrangementmade by the same entity you are acting on behalf of you may not add another butyou may replace the old one on explicit permission from the previous publisher thatadded the old one

The author(s) and publisher(s) of the Document do not by this License give permissionto use their names for publicity for or to assert or imply endorsement of any ModifiedVersion

5 COMBINING DOCUMENTS

You may combine the Document with other documents released under this Licenseunder the terms defined in section 4 above for modified versions provided that youinclude in the combination all of the Invariant Sections of all of the original documentsunmodified and list them all as Invariant Sections of your combined work in its licensenotice and that you preserve all their Warranty Disclaimers

The combined work need only contain one copy of this License and multiple identicalInvariant Sections may be replaced with a single copy If there are multiple InvariantSections with the same name but different contents make the title of each such sectionunique by adding at the end of it in parentheses the name of the original author orpublisher of that section if known or else a unique number Make the same adjustmentto the section titles in the list of Invariant Sections in the license notice of the combinedwork

In the combination you must combine any sections Entitled ldquoHistoryrdquo in the vari-ous original documents forming one section Entitled ldquoHistoryrdquo likewise combine anysections Entitled ldquoAcknowledgementsrdquo and any sections Entitled ldquoDedicationsrdquo Youmust delete all sections Entitled ldquoEndorsementsrdquo

6 COLLECTIONS OF DOCUMENTS

You may make a collection consisting of the Document and other documents releasedunder this License and replace the individual copies of this License in the variousdocuments with a single copy that is included in the collection provided that youfollow the rules of this License for verbatim copying of each of the documents in allother respects

You may extract a single document from such a collection and distribute it individu-ally under this License provided you insert a copy of this License into the extracteddocument and follow this License in all other respects regarding verbatim copying ofthat document

Appendix A GNU Free Documentation License 31

7 AGGREGATION WITH INDEPENDENT WORKS

A compilation of the Document or its derivatives with other separate and independentdocuments or works in or on a volume of a storage or distribution medium is calledan ldquoaggregaterdquo if the copyright resulting from the compilation is not used to limit thelegal rights of the compilationrsquos users beyond what the individual works permit Whenthe Document is included in an aggregate this License does not apply to the otherworks in the aggregate which are not themselves derivative works of the Document

If the Cover Text requirement of section 3 is applicable to these copies of the Documentthen if the Document is less than one half of the entire aggregate the Documentrsquos CoverTexts may be placed on covers that bracket the Document within the aggregate or theelectronic equivalent of covers if the Document is in electronic form Otherwise theymust appear on printed covers that bracket the whole aggregate

8 TRANSLATION

Translation is considered a kind of modification so you may distribute translationsof the Document under the terms of section 4 Replacing Invariant Sections withtranslations requires special permission from their copyright holders but you mayinclude translations of some or all Invariant Sections in addition to the original versionsof these Invariant Sections You may include a translation of this License and all thelicense notices in the Document and any Warranty Disclaimers provided that youalso include the original English version of this License and the original versions ofthose notices and disclaimers In case of a disagreement between the translation andthe original version of this License or a notice or disclaimer the original version willprevail

If a section in the Document is Entitled ldquoAcknowledgementsrdquo ldquoDedicationsrdquo or ldquoHis-toryrdquo the requirement (section 4) to Preserve its Title (section 1) will typically requirechanging the actual title

9 TERMINATION

You may not copy modify sublicense or distribute the Document except as expresslyprovided under this License Any attempt otherwise to copy modify sublicense ordistribute it is void and will automatically terminate your rights under this License

However if you cease all violation of this License then your license from a particularcopyright holder is reinstated (a) provisionally unless and until the copyright holderexplicitly and finally terminates your license and (b) permanently if the copyrightholder fails to notify you of the violation by some reasonable means prior to 60 daysafter the cessation

Moreover your license from a particular copyright holder is reinstated permanently ifthe copyright holder notifies you of the violation by some reasonable means this is thefirst time you have received notice of violation of this License (for any work) from thatcopyright holder and you cure the violation prior to 30 days after your receipt of thenotice

Termination of your rights under this section does not terminate the licenses of partieswho have received copies or rights from you under this License If your rights havebeen terminated and not permanently reinstated receipt of a copy of some or all of thesame material does not give you any rights to use it

Appendix A GNU Free Documentation License 32

10 FUTURE REVISIONS OF THIS LICENSE

The Free Software Foundation may publish new revised versions of the GNU FreeDocumentation License from time to time Such new versions will be similar in spiritto the present version but may differ in detail to address new problems or concernsSee httpwwwgnuorgcopyleft

Each version of the License is given a distinguishing version number If the Documentspecifies that a particular numbered version of this License ldquoor any later versionrdquoapplies to it you have the option of following the terms and conditions either of thatspecified version or of any later version that has been published (not as a draft) bythe Free Software Foundation If the Document does not specify a version number ofthis License you may choose any version ever published (not as a draft) by the FreeSoftware Foundation If the Document specifies that a proxy can decide which futureversions of this License can be used that proxyrsquos public statement of acceptance of aversion permanently authorizes you to choose that version for the Document

11 RELICENSING

ldquoMassive Multiauthor Collaboration Siterdquo (or ldquoMMC Siterdquo) means any World WideWeb server that publishes copyrightable works and also provides prominent facilitiesfor anybody to edit those works A public wiki that anybody can edit is an example ofsuch a server A ldquoMassive Multiauthor Collaborationrdquo (or ldquoMMCrdquo) contained in thesite means any set of copyrightable works thus published on the MMC site

ldquoCC-BY-SArdquo means the Creative Commons Attribution-Share Alike 30 license pub-lished by Creative Commons Corporation a not-for-profit corporation with a principalplace of business in San Francisco California as well as future copyleft versions of thatlicense published by that same organization

ldquoIncorporaterdquo means to publish or republish a Document in whole or in part as partof another Document

An MMC is ldquoeligible for relicensingrdquo if it is licensed under this License and if all worksthat were first published under this License somewhere other than this MMC andsubsequently incorporated in whole or in part into the MMC (1) had no cover textsor invariant sections and (2) were thus incorporated prior to November 1 2008

The operator of an MMC Site may republish an MMC contained in the site underCC-BY-SA on the same site at any time before August 1 2009 provided the MMC iseligible for relicensing

Appendix A GNU Free Documentation License 33

ADDENDUM How to use this License for your documents

To use this License in a document you have written include a copy of the License in thedocument and put the following copyright and license notices just after the title page

Copyright (C) year your name

Permission is granted to copy distribute andor modify this document

under the terms of the GNU Free Documentation License Version 13

or any later version published by the Free Software Foundation

with no Invariant Sections no Front-Cover Texts and no Back-Cover

Texts A copy of the license is included in the section entitled lsquolsquoGNU

Free Documentation Licensersquorsquo

If you have Invariant Sections Front-Cover Texts and Back-Cover Texts replace theldquowith Textsrdquo line with this

with the Invariant Sections being list their titles with

the Front-Cover Texts being list and with the Back-Cover Texts

being list

If you have Invariant Sections without Cover Texts or some other combination of thethree merge those two alternatives to suit the situation

If your document contains nontrivial examples of program code we recommend releasingthese examples in parallel under your choice of free software license such as the GNUGeneral Public License to permit their use in free software

Index 34

Index

Aaccess control policy 3Author 3author specifying 10

Bbehavior prior to version 5 10behavior version 3 10behavior version 4 10binary-old-keyword-value substitution mode 9branch growth 7branch number 2branch tip 2branch default 3bug reporting 25

Ccase sensitivity file format 21checkin 3checklist for bug reports 25checkout 3checkout implicit 5ci invocation 11co invocation 12comma-v file format 1command help 7command version 7command-line option to specify a revision 7credits 1

DDate 3date formats 8date specifying 8dates file format 21default branch 3default branch setting 15deleting revisions 15description of working file 2description text specifying 8

Eempty log message 9emulation previous RCS versions 10encoding file format 20environment variables 10

Ffeatures still missing 23

file names on the command-line 7format RCSfile 20

Ggrammar file format 20

HHeader 3history 1

IId 3ident invocation 13implicit checkout circumstance 5implicit checkout locked 12implicit checkout unlocked 12instantiating a working file 2interaction model 1interactive mode 9invocation ci 11invocation co 12invocation ident 13invocation merge 14invocation rcs 14 15invocation rcsclean 16invocation rcsdiff 17invocation rcsmerge 17invocation rlog 18

Kkeyword-only substitution mode 9keyword-value substitution mode 8keyword-value-locker substitution mode 9keywords table of 3

Llayout of nodes file format 21license 1Locker 3locking a revision 15locking on implicit checkout 12locking non-strict 5locking set non-strict 15locking set strict 15locking strict 5locks in RCS file 3Log 3log message empty 9LOGNAME 11

Index 35

Mmemory limit 11merge invocation 14model interaction 1

NName 4names symbolic 3node layout file format 21non-strict locking 5number branch 2number revision 2

Oold-keyword-value substitution mode 9order of options and file names 7outdating revisions 15overview 1

Ppairing RCS and working files 7patches contributing 25problems 25projects related 1

Qquiet mode 9

Rrange of revisions specifying 7RCS file 2rcs invocation 14 15RCS version emulation 10RCS_MEM_LIMIT 11rcsclean invocation 16rcsdiff invocation 17RCSfile 4RCSfile format 20RCSINIT 10rcsmerge invocation 17removing revisions 15reporting bugs 25Revision 4revision number 2revision range specifying 7

revision specifying 7revisions tree of 3rlog invocation 18

SSource 4specifying a date 8specifying a range of revisions 7specifying a revision 7specifying a state 9specifying a suffix list 10specifying a timedate 8specifying author 10specifying description text 8specifying substitution mode 8State 4state specifying 9strict locking 5substitution mode default 8substitution mode specifying 8suffix list specifying 10symbolic names 3

TTEMP 11third-party interop file format 21Tichy Walter F 1time zone 8timedate specifying 8tip 2tip increment 7TMP 11TMPDIR 11tree of revisions 3

Uunlocking a revision 15USER 11

Vvalue-only substitution mode 9

Wwhitespace file format 21working file description 2working file instantiation 2

  • Overview
    • Credits
    • Concepts
      • Interaction model
      • Working file
      • RCS file
      • Fundamental operations
      • Keywords
        • Quick tour
          • Usage
            • Common elements
              • Revision options
              • Date option
              • Description option
              • Substitution mode option
              • Log message option
              • Misc common options
              • Environment
                • Invoking ci
                • Invoking co
                • Invoking ident
                • Invoking merge
                • Invoking rcs
                  • modern
                  • legacy
                    • Invoking rcsclean
                    • Invoking rcsdiff
                    • Invoking rcsmerge
                    • Invoking rlog
                      • Hacking
                        • File format
                          • File format grammar
                          • Additional particulars of the file format
                            • Still missing
                            • Reporting bugs
                              • GNU Free Documentation License
                              • Index
Page 9: GNU RCS · The RCS file is also known (colloquially) as the “comma-v file”, due to its name often ending in ,v (e.g., a.c,v). A revision number is a branch number followed by

Chapter 1 Overview 6

ci -r2 fc

ci -r21 fc

assigns the number 21 to the new revision From then on ci will number the subsequentrevisions with 22 23 etc The corresponding co commands

co -r2 fc

co -r21 fc

retrieve the latest revision numbered 2x and the revision 21 respectively co withouta revision number selects the latest revision on the trunk ie the highest revision with anumber consisting of two fields Numbers with more than two fields are needed for branchesFor example to start a branch at revision 13 invoke

ci -r131 fc

This command starts a branch numbered 1 at revision 13 and assigns the number 1311to the new revision Here is a diagram showing the new revision in relation to its branchand the trunk

11 -- 12 -- 13 -- 14 -- 15

|

[131] -- 1311

For more information about branches See Section 12 [Concepts] page 1

Chapter 2 Usage 7

2 Usage

This chapter describes how to invoke RCS commands including common command-lineelements as well options specific to each command

21 Common elements

All RCS commands accept --help and --version See Section ldquoCommand-Line Interfacesrdquoin The GNU Coding Standards

Aside from --help and --version RCS commands take the form lsquo-letter[arg]rsquo iea hyphen followed by a single letter optionally followed by extra information The squarebraces mean that the extra information is optional (No square braces means that the extrainformation is required) In any case when specified the extra information must abut theletter there can be no intervening whitespace

co -u 14 foo wrong space between -u and 14

co -u14 foo ok

Furthermore options must appear before file names (if any) on the command line

ident foo -q wrong option after file nameident -q foo ok

Lastly pairs of RCS and working files can be specified in three ways (a) both are given (b)only the working file is given (c) only the RCS file is given For (a) both RCS and workingfiles may have arbitrary directory components RCS commands pair them up intelligentlyFor (b) RCS commands will look first into the directory RCS if it exists to find theassociated RCS file

211 Revision options

As to be expected in a revision control system many options are of the form lsquo-flag[rev]rsquowhere flag is a single letter (eg lsquorrsquo) If ommitted rev defaults to the latest revision onthe default branch A revision can be specified in many ways

brn Straightforward dot-notation where br specifies the branch

n Like brn using the default branch

br Like brn using the a command-specific computation of n given the currenttip i For ci (see Section 22 [ci] page 11) n would be i + 1 while for othercommands n would be simply i

name This is the symbolic name of a revision as assigned previously by a ci -n orci -N command

$ The command computes the effective revision by examining the values of key-word expansions in the working file

For commands that accept a range of revisions the syntax is generally rev1rev2 ie tworevisions (specified as described above) separated by a colon

Chapter 2 Usage 8

212 Date option

Some commands accept an option of the form lsquo-ddatersquo to specify a date an absolute pointin time (to second resolution) expressed in a date format These also accept lsquo-zzonersquo tospecify the timezone The special value lsquoLTrsquo stands for the local time zone RCS recognizesmany date formats and time zones For example the following dates are equivalent if localtime is January 11 1990 8pm Pacific Standard Time eight hours west of CoordinatedUniversal Time (UTC)

800 pm lt

400 AM Jan 12 1990 default is UTC

1990-01-12 040000+00 ISO 8601 (UTC)

1990-01-11 200000-08 ISO 8601 (local time)

19900112 040000 traditional RCS format

Thu Jan 11 200000 1990 LT output of ctime(3) + LT

Thu Jan 11 200000 PST 1990 output of date(1)

Fri Jan 12 040000 GMT 1990

Thu 11 Jan 1990 200000 -0800 Internet RFC 822

12-January-1990 0400 WET

Most fields in the date and time can be defaulted The default time zone is normally UTCbut this can be overridden by the -z option The other defaults are determined in the orderyear month day hour minute and second (most to least significant) At least one of thesefields must be provided For omitted fields that are of higher significance than the highestprovided field the time zonersquos current values are assumed For all other omitted fields thelowest possible values are assumed For example without -z the date lsquo20 1030rsquo defaultsto lsquo103000 UTCrsquo of the 20th of the UTC time zonersquos current month and year Note thatfor the shell the datetime must be quoted if it contains spaces

RCS also accepts some other formats which specify only the date portion (omitting thetime portion)

YYYY-DDD DDD is the day of year 1-366

YYYY-wWW-D

WW is the ISO week number 0-53 (actually ISO week numbers are 1-53 week0 is a GNU RCS extension) and D is the ISO day number 1-7 (Monday throughSunday)

213 Description option

Some commands accept an option of the form lsquo-t-textrsquo or lsquo-tfile-namersquo This optionis to set or update the RCS file description text In the first form text is used directlyexcluding the leading hyphen (lsquo-rsquo) that distinguishes the two forms In the second formthe description text is taken from the contents of file-name

214 Substitution mode option

Some commands accept an option of the form -ksubst used to control how keywords (seeSection 12 [Concepts] page 1) are expanded in the working file In the following table ofsubst values the example keyword is lsquoRevisionrsquo and its value is lsquo513rsquo

kv Generate lsquo$Revision 513 $rsquo (dollar-sign keyword colon space value spacedollar-sign) A lockerrsquos name is inserted in the value of the Header Id and

Chapter 2 Usage 9

Locker keyword strings only as a file is being locked ie by ci -l and co -lThis is the default substitution mode

kvl Like -kkv except that a lockerrsquos name is always inserted if the given revisionis currently locked

k Generate lsquo$Revision$rsquo (dollar-sign keyword dollar-sign) This is useful whencomparing different revisions of a file Log messages are inserted after Log key-words even if -kk is specified since this tends to be more useful when mergingchanges

o Like -kkv but use the old value present in the working file just before it waschecked in This can be useful for file formats that cannot tolerate any changesto substrings that happen to take the form of keyword strings

b Like -ko but do all file io in binary mode This makes little difference onPOSIX and Unix hosts but on DOS-like hosts one should use rcs -i -kb toinitialize an RCS file intended to be used for binary files Also on all hostsrcsmerge normally refuses to merge files when -kb is in effect

v Generate lsquo513rsquo (value only) Further keyword substitution cannot be per-formed once the keyword names are removed so this should be used with careBecause of this danger of losing keywords -kv cannot be combined with -land the owner write permission of the working file is turned off to edit the filelater check it out again without -kv

215 Log message option

Both ci and rcs allow a log message to be specified with the -m option If themsg argumentto this option is empty RCS uses the default lsquo empty log message rsquo This particularmessage is handled specially (ie filtered out) by rlog

216 Misc common options

Other common options are -I -q -s -T -V -w -x

-I This option enables interactive mode More precisely it forces interactive modewhereby RCS commands believe that their standard input is a terminal nor-mally a precondition for displaying a prompt to receive input (such as a log mes-sage on checkin) The intention of -I is for scripting situations where standardinput is actually not a terminal but you know beforehand (without prompting)that input is needed and you are ready to provide it on standard input anyway

-q This option enables quiet mode Commands work silently (unless there is anerror condition) and suppress warnings and prompts

-sstate Specify the state to be state

-T This option controls how commands timestamp the RCS file Normally RCScommands set the RCS filersquos timestamp when modifying it in the ldquonaturalrdquo way(without taking any particular care) With -T on the other hand the com-mands either preserve the timestamp (for standalone lockunlock operations)or use the timestamp of the working file (for ci)

Chapter 2 Usage 10

This can be useful if the RCS file is found in a makefile targetrsquos list of pre-requisites (see Section ldquoRule Syntaxrdquo in The GNU Make Manual) that is ifsome target should be rebuilt if the RCS file is newer than it In that case youcan do lsquorcs -u -Trsquo for example to unlock a revision in the RCS file withouttriggering a recompilation

-V Behave like --version ie display command version information and exitsuccessfully NB This option is obsolete and its support will be removed insome future release

-Vn n specifies the RCS (major) version to emulate Valid values for n are 3 4 5Version 5 is the current version so -V5 does nothing special

In versions prior to 5 RCS outputs lsquotrsquo (tab U+09) between the lsquorsquo (colon) andthe value (for keyword substitution) instead of space uses the RCS file commentstring to prefix each line in the Log expansion instead of computing it on thefly from the input text writesreads localtime instead of UTC and displaysslightly different output for rlog

For version 4 the Header expansion unconditionally includes Locker lockeras if the kvl substitution mode were specified (see Section 214 [Substitutionmode option] page 8)

For version 3 the Header expansion omits the directories from the filename andsays only Locked instead of the state

-wlogin Some commands accept an option of the form lsquo-wloginrsquo to specify the loginname of the author of a revision ie ldquowhordquo is responsible

-xsuff Specify suff as the slash-separated list of file name suffixes used to recognizean RCS file The default value is lsquovrsquo that is first try with lsquovrsquo then try withan empty suffix

This basename search occurs within (ie starting from the beginning) the largerdirectory search loop which comprises two candidates dRCS and d where dis the directory component of the working file name For example given theworking file ac in the current directory RCS tries in order these candidates

RCSacv

RCSac

acv

ac

Note that the last candidate is impossible (and is in fact discarded) becausethe working and RCS files cannot have the same name

217 Environment

Various environment variables influence how RCS works

[Environment Variable]RCSINITAnother way to set common options is with the lsquoRCSINITrsquo environment variable Thisis a space-separated list of options Use lsquorsquo (backslash) to escape significant spaceFor example

Chapter 2 Usage 11

Set the value make it available to subsequent commandsRCSINIT=-q -xv -zLT

export RCSINIT

Use it (implicitly)rlog -L foo

This example in Bourne shell syntax arranges for RCS commands to operate as ifeach command-line had prepended lsquo-q -xv -zLTrsquo to the rest of the command-lineThe effective command-line that rlog sees is thus lsquo-q -xv -zLT -L foorsquo

[Environment Variable]RCS_MEM_LIMITNormally for speed commands either memory map or copy into memory the RCS fileif its size is less than thememory limit currently defaulting to ldquounlimitedrdquo Otherwise(or if the initially-tried speedy ways fail) the commands fall back to using standardio routines

You can adjust the memory limit by setting the lsquoRCS_MEM_LIMITrsquo environment variableto a numeric value (measured in kilobytes) An empty value is silently ignored

As a side effect specifying the memory limit inhibits fall-back to slower routines(This env var is mostly intended for testing RCS normally you can leave it unsetProbably it will be removed in a future release)

[Environment Variable]TMPDIR[Environment Variable]TMP[Environment Variable]TEMP

Commands sometimes create temporary files normally in a system-dependent direc-tory such as tmp You can override this directory by specifying another one asthe value of one of the environment variables TMPDIR TMP or TEMP (checked in thatorder)

[Environment Variable]LOGNAME[Environment Variable]USER

Absent -wlogin or when login is omitted (see Section 216 [Misc common options]page 9) commands check environment variables LOGNAME and USER (in that order)If neither of these are set RCS queries the host for and uses your login

22 Invoking ci

rcs ci [options] file

(or ldquocirdquo instead of ldquorcs cirdquo)

The ci command adds a revision to the RCS file reflecting the current state of the workingfile This operation is also known as ldquocheckinrdquo

-f[rev] Force new entry even if no content changed

-I[rev]

-q[rev] See Section 216 [Misc common options] page 9

-i[rev] Initial checkin error if the RCS file already exists

-j[rev] Just checkin donrsquot initialize error if the RCS file does not exist

Chapter 2 Usage 12

-k[rev] Compute revision from working file keywords

-r Release lock and delete working file

-rrev Do normal checkin

-l[rev] Like -r but immediately checkout locked (co -l) afterwards

-u[rev] Like -l but checkout unlocked (co -u)

-M[rev] Reset working file mtime (relevant for -l -u)

Multiple flags in -fiIjklMqru may be given except for -r -l -u which are mutuallyexclusive For a fully specified revision of the form brn nmust be greater than any existingon br or br must be new If rev is omitted compute it from the last lock (co -l) perhapsstarting a new branch If there is no lock use defbr(L+1) See Section 211 [Revisionoptions] page 7

-d[date]

-zzone See Section 212 [Date option] page 8 If no date specified use the workingfile modification time

-m[msg] Use msg as the log message See Section 215 [Log message option] page 9

-nname

-Nname Assign symbolic name to the entry For -n name must be new (no previousassignment) For -N overwrite any previous assignment

-sstate See Section 216 [Misc common options] page 9 Set the state

-t-text

-tfile-name

See Section 213 [Description option] page 8

-T Set the RCS filersquos modification time to the new revisionrsquos time if the former pre-cedes the latter and there is a new revision preserve the RCS filersquos modificationtime otherwise

-wwho Use who as the author

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

23 Invoking co

rcs co [options] file

(or ldquocordquo instead of ldquorcs cordquo)

The co command retrieves a revision from the RCS file writing a new working file Thisoperation is also known as ldquocheckoutrdquo

-f[rev] Force overwrite of working file

-I[rev]

-q[rev] See Section 216 [Misc common options] page 9

-p[rev] Write to stdout instead of the working file

Chapter 2 Usage 13

-r[rev] Normal checkout

-l[rev] Like -r but also lock

-u[rev] Like -l but unlock

-M[rev] Reset working file mtime (relevant for -l -u)

Multiple flags in -fIlMpqru may be given except for -r -l -u which are mutuallyexclusive See Section 211 [Revision options] page 7

-ksubst See Section 214 [Substitution mode option] page 8

-ddate

-zzone See Section 212 [Date option] page 8 Select latest before or on date

-jjoins Merge using joins a list of revrev pairs NB This option is obsolete (seeSection 29 [rcsmerge] page 17)

-sstate See Section 216 [Misc common options] page 9 Select matching state

-S Enable self-same mode In this mode the owner of a lock is unimportantjust that it exists Effectively this prevents you from checking out the samerevision twice

$ whoami

ttn

$ co -l -f z

RCSzv --gt z

revision 11 (locked)

done

$ co -S -l -f z

RCSzv --gt z

co RCSzv Revision 11 is already locked by ttn

-T Preserve the modification time on the RCS file even if it changes because a lockis added or removed

-wwho Select matching login who

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

24 Invoking ident

ident [options] [file ]

If no file is specified scan standard input The ident command scans its input for keywords(see Section 12 [Concepts] page 1) displaying to standard output what it finds

-q Normally if no patterns are found for a file ident emits a warning This optionsuppresses the warning

Chapter 2 Usage 14

-V Note that -Vn is not a valid option for ident in contrast to most other RCScommands (see Section 216 [Misc common options] page 9)

In addition to the normal keyword pattern for Subversion 12 (and later) compatibility1ident also recognizes patterns having one of the forms

$keyword text $

two colons and space after keyword

space before ending $

$keyword text$

two colons and space after keyword

hash before ending $

25 Invoking merge

merge [options] receiving-sibling parent other-sibling

The merge command combines the differences between a the parent and the other siblingand the differences between the parent and the receiving sibling It writes the result to thereceiving sibling

-A

-E

-e Use diff3 -A -E (default) or -e respectively

-p Write to stdout instead of overwriting receiving-sibling

-q See Section 216 [Misc common options] page 9 Suppress conflict warnings

-Llabel (up to three times) Specify the conflict labels for receiving-sibling parent andother-sibling respectively

-V Note that -Vn is not a valid option for merge in contrast to most other RCScommands (see Section 216 [Misc common options] page 9)

26 Invoking rcs

The rcs command is unique in the set of RCS programs in that it has two usages themodern (for RCS 590 and later) and the legacy

261 modern

rcs [options] command [command-arg ]

This rcs usage dispatches to command passing along command-arg without interpreta-tion

--commands

Display a list of available commands including a one-line description and exitsuccessfully

1 The fixed-length keyword syntax is described in detail in Version Control with Subversion chapterldquoAdvanced Topicsrdquo section ldquoKeyword Substitutionrdquo

Chapter 2 Usage 15

--aliases

Display a list of command aliases and exit successfully

--help command

Display help for a particular command and exit successfully For example todisplay help for the legacy interface use

--help frob

262 legacy

rcs frob [options] file

(or ldquorcsrdquo instead of ldquorcs frobrdquo)

This rcs usage performs various administrative operations on the RCS file depending onthe options given

-i Create and initialize a new RCS file

-L Set strict locking

-U Set non-strict locking

-M Donrsquot send mail when breaking someone elsersquos lock

-T Preserve the modification time on the RCS file unless a revision is removed

-I

-q See Section 216 [Misc common options] page 9

-alogins Append logins (comma-separated list of usernames) to access-list

-e[logins]

Erase logins (comma-separated list of usernames) from access-list If logins isomitted clear the access-list

-Afile-name

Append access-list of file-name to current access-list

-b[rev] Set default branch to that of rev or highest branch on trunk if rev is omitted

-l[rev] Lock a revision

-u[rev] Unlock a revision

-cstring Set comment leader to string NB Donrsquot use obsolete

-ksubst See Section 214 [Substitution mode option] page 8

-mrev[msg]

Replace log message with msg See Section 215 [Log message option] page 9

-nname[[rev]]

If rev is omitted delete symbolic name Otherwise associate name with rev name must be new

-Nname[[rev]]

Like -n but overwrite any previous assignment

-orange Delete (also known as ldquooutdaterdquo) revisions in range

Chapter 2 Usage 16

rev single revision

br latest revision on branch br

rev1rev2

rev1 to rev2 on same branch inclusive

rev beginning of branch to rev

rev rev to end of branch

-sstate[rev]

See Section 216 [Misc common options] page 9 Set state

-t-text

-tfile-name

See Section 213 [Description option] page 8 Replace description

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

These options have no effect and are included solely for consistency with other comamnds(see Section 217 [Environment] page 10) -zzone

27 Invoking rcsclean

rcs clean [options] [file ]

(or ldquorcscleanrdquo instead of ldquorcs cleanrdquo)

The rcsclean command removes working files that are not being worked on If given -u italso unlocks and removes working files that are being worked on but have not changed Ifno file is specified operate on all the working files in the current directory

-r[rev] Specify revision

-u[rev] Unlock if is locked and no differences found

-n[rev] Dry run (no act donrsquot operate)

-q[rev] See Section 216 [Misc common options] page 9

-ksubst See Section 214 [Substitution mode option] page 8

-T Preserve the modification time on the RCS file even it changes because a lockis removed

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

-zzone See Section 212 [Date option] page 8

Chapter 2 Usage 17

28 Invoking rcsdiff

rcs diff [options] file

(or ldquorcsdiffrdquo instead of ldquorcs diffrdquo)

The rcsdiff command runs diff to compare two revisions in an RCS file See Section ldquoIn-voking diffrdquo in The GNU Diffutils Manaual

-rrev (zero one or two times) Name a revision If given two revisions (lsquo-rrev1-rrev2rsquo) compare those revisions If given only one revision (lsquo-rrevrsquo) comparethe working file with it If given no revisions compare the working file with thelatest revision on the default branch

-ksubst See Section 214 [Substitution mode option] page 8

-q See Section 216 [Misc common options] page 9

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

-zzone See Section 212 [Date option] page 8

These options have no effect and are included solely for consistency with other comamnds(see Section 217 [Environment] page 10) -T

Additionally the following options (and their argument if any) are passed to the underlyingdiff command

-0 -1 -2 -3 -4 -5 -6 -7 -8 -9 -B -C -D -F -H -I

-L -U -W -a -b -c -d -e -f -h -i -n -p -t -u -w -y

long options (that start with --)

(Not all of these options are meaningful)

29 Invoking rcsmerge

rcs merge [options] file

(or ldquorcsmergerdquo instead of ldquorcs mergerdquo)

The rcsmerge command incorporates the changes between two revisions of an RCS file intothe corresponding working file

-A

-E

-e Passed to the diff3 command The default if none are specified is -E With -esuppress warnings on conflict The -A style generates the most verbose outputSee Section ldquoInvoking diff3rdquo in The GNU Diffutils Manual

-p[rev] Write to stdout instead of overwriting the working file

-q[rev] See Section 216 [Misc common options] page 9

-rrev (one or two times) specify a revision

One or two revisions must be specified (using -p -q -r) If only one is specified the secondrevision defaults to the latest revision on the default branch

Chapter 2 Usage 18

-ksubst See Section 214 [Substitution mode option] page 8

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

-zzone See Section 212 [Date option] page 8

These options have no effect and are included solely for consistency with other comamnds(see Section 217 [Environment] page 10) -T

210 Invoking rlog

rcs log [options] file

(or ldquorlogrdquo instead of ldquorcs logrdquo)

The rlog command displays information about RCS files

-L Ignore RCS files with no locks set

-R Print only the name of the RCS file

-h Print only the ldquoheaderrdquo information

-t Like -h but also include the description

-N Omit symbolic names

-b Select the default branch

-ddates See Section 212 [Date option] page 8 Select revisions based on timestampin the range dates with spec

d single revision d or earlier

d1ltd2

d2gtd1 between d1 and d2 exclusive

ltd

dgt before d

gtd

dlt after d

Instead of lsquoltrsquo or lsquogtrsquo you can use lsquolt=rsquo or lsquogt=rsquo respectively to specify inclusiveranges dates may also be a list of semicolon-separated specs

-l[who] Select revisions locked by who (comma-separated list of usernames) only or byanyone if who is omitted

-r[revs] Select revisions in revs a comma-separated list of range specs one of revrev rev rev1rev2

-sstates See Section 216 [Misc common options] page 9 states can also be a comma-separated list of states Select revisions with specified state(s)

-w[who] Select revisions checked in by who (comma-separated list of usernames) or bythe user if who is omitted

Chapter 2 Usage 19

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

-zzone See Section 212 [Date option] page 8

These options have no effect and are included solely for consistency with other comamnds(see Section 217 [Environment] page 10) lsquo-qrsquo lsquo-Trsquo

Chapter 3 Hacking 20

3 Hacking

This chapter in contrast to the previous (see Chapter 2 [Usage] page 7) is introspective Itdescribes an important aspect of RCS interop with other programs and development ideasand methods

31 File format

An RCS filersquos contents are described by the grammar below1 Overall the format is freendashformat text In most environments RCS uses the ISO 88591 encoding visible graphiccharacters are (octal) codes 041ndash176 and 240ndash377 and whitespace characters are codes010ndash015 and 040TODO Discuss or point to encoding compatibility issues

311 File format grammar

The meta syntax in this section uses the following conventions lsquo|rsquo (U+7C) separates al-ternatives lsquorsquo (U+7B) and lsquorsquo (U+7D) enclose optional phrases lsquorsquo and lsquorsquo (trailing U+2A)enclose phrases that can be repeated zero or more times lsquorsquo and lsquo+rsquo (trailing U+2B) enclosephrases that must appear at least once and can be repeated terminal symbols are in lsquorsquo(two U+22)

rcstext = admin delta desc deltatext

admin = head num

branch num

access id

symbols sym num

locks id num

strict

integrity intstring

comment string

expand string

delta = num

date num

author id

state id

branches num

next num

commitid sym

desc = desc string

deltatext = num

log string

text string

1 This section is adapted from the lsquorcsfile(5)rsquo manpage written by Walter F Tichy

Chapter 3 Hacking 21

num = digit | +

digit = 0 through 9

id = idchar | +

sym = idchar+

idchar = any visible graphic character except special

special = $ | | | | |

string = any character with doubled

word = id | num | string |

intchar = any character except

thirdp = ^L intchar

intstring = intchar thirdp

312 Additional particulars of the file format

bull In releases prior to 58 (2011-08-30) the grammar included the production

newphrase = id word

and used it in the admin delta and deltatext productions This allowed third-partyprograms to interoperate with RCS by storing opaque (to RCS) data in the file

As of 58 in the name of progress (towards more systematic file integrity support) theonly area reserved for third-party interop is in the (string) value of the integrity fieldspecifically after the first formfeed (U+0C) A further restriction (for all programs) isthat the integrity value must not contain lsquorsquo

bull Whitespace has no significance except in strings However whitespace cannot appearwithin an id num or sym and an RCS file must end with newline (U+0A) Strings areenclosed by lsquorsquo (U+40) If a string contains a lsquorsquo it must be doubled otherwise stringscan contain arbitrary binary data

bull Identifiers are case sensitive Keywords are in lower case only The sets of keywordsand identifiers can overlap

bull Dates which appear after the date keyword are of the form Ymmddhhmmss whereY is the year mm the month (01ndash12) dd the day (01ndash31) hh the hour (00ndash23) mm theminute (00ndash59) and ss the second (00ndash60) Y contains just the last two digits of theyear for years from 1900 through 1999 and all the digits of years thereafter Dates usethe Gregorian calendar times use UTC

bull The delta nodes form a tree All nodes whose numbers consist of a single pair (eg 2321 13) are on the trunk and are linked through the next field in order of decreasing

Chapter 3 Hacking 22

numbers The head field in the admin node points to the head of that sequence (iecontains the highest pair) The branch node in the admin node indicates the defaultbranch (or revision) for most RCS operations If empty the default branch is thehighest branch on the trunk

All delta nodes whose numbers consist of 2n fields (n ge 2) (eg 3111 2122) arelinked as follows All nodes whose first 2nminus1 number fields are identical are linkedthrough the next field in order of increasing numbers For each such sequence thedelta node whose number is identical to the first 2nminus2 number fields of the delta

nodes on that sequence is called the branchpoint The branches field of a node containsa list of the numbers of the first nodes of all sequences for which it is a branchpointThis list is ordered in increasing numbers See Figure 31

Chapter 3 Hacking 23

Head

|

|

v

---------

| |

| 21 |

| |

1213 1311 | | 1222 122111

--------- --------- --------- --------- -------------

^ ^ | ^ ^

| | | | |

| | v | |

| --------- |

| 13 |

--------- -----------

1211 131 1221 12211

--------- ---------

^ | ^

| | |

| v |

| --------- |

| 12 |

---------------------- ---------

121 122

|

|

v

---------

11

Figure 31 The organization of an example RCS file

32 Still missing

RCS is still missing some features The following is an unordered list of ldquoto-do musingsrdquo keptby the RCS maintainers If you would like to hack on an item See Section 33 [Reportingbugs] page 25

bull Add an option to rcsmerge so that it can use an arbitrary program to do the 3-waymerge instead of the default merge Likewise for rcsdiff and diff It should be possibleto pass arbitrary options to these programs and to the subsidiary co invocations

bull Add format options for finer control over the output of ident and rlog Eg thereshould be an easy way for rlog to output lines like lsquosrcmainc 24 wftrsquo one for

Chapter 3 Hacking 24

each locked revision rlog options should have three orthogonal types selecting filesselecting revisions and selecting rlog format

bull Add format options for finer control over the output of keyword strings Eg thereshould be some way to prepend lsquo()rsquo and there should be some way to change lsquo$rsquo tosome other character to disable further substitution These options should make theresulting files uneditable like lsquo-kvrsquo

bull Add long options eg --keyword-substitution Unfortunately RCSrsquos option syntaxis incompatible with getopt Perhaps the best way is to overload rcs eg lsquorcs diff

--keyword-substitution=old filersquo instead of lsquorcsdiff -ko filersquo

bull rlog -rMN should work even if M and N have different numbers of fields so long asM is an ancestor of N or vice versa

bull rcs should evaluate options in order this allows rcs -oS -nS

bull Be able to redo your most recent checkin with minor changes

bull co -u shouldnrsquot complain about a lsquo+wrsquo working file if contents donrsquot change

bull Add a lsquo-rsquo option to take the list of file names from standard input Perhaps the filenames should be null-terminated not newline-terminated so that those that containnewlines are handled properly

bull Permit multiple optionndashfilename pairs eg co -r14 a -r15 b

bull Add an option to break a symbolic link to an RCS file instead of breaking the hardlink that it points to

bull Add ways to specify the earliest revision the most recent revision the earliest or latestrevision on a particular branch and the parent or child of some other revision

bull If a user has multiple locks perhaps ci should fall back on the method of ci -k to figureout which revision to use

bull Add an option to rcsclean to clean directories recursively

bull Write an rcsck program that repairs corrupted RCS files much as fsck repairs corruptedfile systems For example it should remove stale lock files

bull Update the date parser to use the more modern getdatey by Bellovin Salz andBerets or the even more modern getdate by Moraes None of these getdate imple-mentations are as robust as RCSrsquos old warhorse in avoiding problems like arithmeticoverflow so theyrsquoll have to be fixed first (Perhaps we can use gnulib module getdate)

bull Break up the code into a library so that itrsquos easier to write new programs that manip-ulate RCS files and so that useless code is removed from the existing programs Forexample the rcs command contains unnecessary keyword substitution baggage andthe merge command can be greatly pruned

bull Make it easier to use your favorite text editor to edit log messages etc instead ofhaving to type them in irretrievably at the terminal

bull Let the user specify a search path for default branches eg to use L as the defaultbranch if it works and M otherwise Let the user require that at least one entry inthe search path works Let the user say that later entries in the search path are readonly ie one cannot check in changes to them This should be an option settable bylsquoRCSINITrsquo

bull Add a way for a user to see which revisions affected which lines

Chapter 3 Hacking 25

bull Have rlog -nN F print just the revision number that N translates to Eg rlog -nB

F would print the highest revision on the branch B Use this to add an option -bB torcsbranch to freeze the named branch This should interact well with default branches

bull Add a co option that prints the revision number before each line as SCCSrsquos get -m

does [I implemented this for Emacs 22 as a subroutine of vc-annotate qv mdashttn]

33 Reporting bugs

To report bugs or suggest enhancements for GNU RCS please visit its homepage (httpwwwgnuorgsoftwarercs) to find directions on how to ldquofile a bug reportrdquo online orsend electronic mail to help-rcsgnuorg (If you use the web interface you donrsquot needto also send email since that is done automatically)

For bug reports please include enough information for the maintainers to reproduce theproblem Generally speaking that means

bull The RCS version command(s) and manual section(s) involved

bull Hardware and operating system names and versions

bull The contents of any input files necessary to reproduce the bug

bull The expected behavior andor output

bull A description of the problem and samples of any erroneous output

bull Options you gave to configure other than specifying installation directories

bull Anything else that you think would be helpful

When in doubt whether something is needed or not include it Itrsquos better to include toomuch than to leave out something important

Patches are welcome if possible please make them with lsquogit format-patchrsquo and includeChangeLog entries (see Section ldquoChange Logrdquo in The GNU Emacs Manual) Please followthe existing coding style

Appendix A GNU Free Documentation License 26

Appendix A GNU Free Documentation License

Version 13 3 November 2008

Copyright ccopy 2000 2001 2002 2007 2008 Free Software Foundation Inchttpfsforg

Everyone is permitted to copy and distribute verbatim copiesof this license document but changing it is not allowed

0 PREAMBLE

The purpose of this License is to make a manual textbook or other functional anduseful document free in the sense of freedom to assure everyone the effective freedomto copy and redistribute it with or without modifying it either commercially or non-commercially Secondarily this License preserves for the author and publisher a wayto get credit for their work while not being considered responsible for modificationsmade by others

This License is a kind of ldquocopyleftrdquo which means that derivative works of the documentmust themselves be free in the same sense It complements the GNU General PublicLicense which is a copyleft license designed for free software

We have designed this License in order to use it for manuals for free software becausefree software needs free documentation a free program should come with manualsproviding the same freedoms that the software does But this License is not limited tosoftware manuals it can be used for any textual work regardless of subject matter orwhether it is published as a printed book We recommend this License principally forworks whose purpose is instruction or reference

1 APPLICABILITY AND DEFINITIONS

This License applies to any manual or other work in any medium that contains anotice placed by the copyright holder saying it can be distributed under the termsof this License Such a notice grants a world-wide royalty-free license unlimited induration to use that work under the conditions stated herein The ldquoDocumentrdquobelow refers to any such manual or work Any member of the public is a licensee andis addressed as ldquoyourdquo You accept the license if you copy modify or distribute the workin a way requiring permission under copyright law

A ldquoModified Versionrdquo of the Document means any work containing the Document ora portion of it either copied verbatim or with modifications andor translated intoanother language

A ldquoSecondary Sectionrdquo is a named appendix or a front-matter section of the Documentthat deals exclusively with the relationship of the publishers or authors of the Documentto the Documentrsquos overall subject (or to related matters) and contains nothing thatcould fall directly within that overall subject (Thus if the Document is in part atextbook of mathematics a Secondary Section may not explain any mathematics) Therelationship could be a matter of historical connection with the subject or with relatedmatters or of legal commercial philosophical ethical or political position regardingthem

The ldquoInvariant Sectionsrdquo are certain Secondary Sections whose titles are designated asbeing those of Invariant Sections in the notice that says that the Document is released

Appendix A GNU Free Documentation License 27

under this License If a section does not fit the above definition of Secondary then it isnot allowed to be designated as Invariant The Document may contain zero InvariantSections If the Document does not identify any Invariant Sections then there are none

The ldquoCover Textsrdquo are certain short passages of text that are listed as Front-CoverTexts or Back-Cover Texts in the notice that says that the Document is released underthis License A Front-Cover Text may be at most 5 words and a Back-Cover Text maybe at most 25 words

A ldquoTransparentrdquo copy of the Document means a machine-readable copy representedin a format whose specification is available to the general public that is suitable forrevising the document straightforwardly with generic text editors or (for images com-posed of pixels) generic paint programs or (for drawings) some widely available drawingeditor and that is suitable for input to text formatters or for automatic translation toa variety of formats suitable for input to text formatters A copy made in an otherwiseTransparent file format whose markup or absence of markup has been arranged tothwart or discourage subsequent modification by readers is not Transparent An imageformat is not Transparent if used for any substantial amount of text A copy that isnot ldquoTransparentrdquo is called ldquoOpaquerdquo

Examples of suitable formats for Transparent copies include plain ASCII withoutmarkup Texinfo input format LaTEX input format SGML or XML using a publiclyavailable DTD and standard-conforming simple HTML PostScript or PDF designedfor human modification Examples of transparent image formats include PNG XCFand JPG Opaque formats include proprietary formats that can be read and editedonly by proprietary word processors SGML or XML for which the DTD andor pro-cessing tools are not generally available and the machine-generated HTML PostScriptor PDF produced by some word processors for output purposes only

The ldquoTitle Pagerdquo means for a printed book the title page itself plus such followingpages as are needed to hold legibly the material this License requires to appear in thetitle page For works in formats which do not have any title page as such ldquoTitle Pagerdquomeans the text near the most prominent appearance of the workrsquos title preceding thebeginning of the body of the text

The ldquopublisherrdquo means any person or entity that distributes copies of the Documentto the public

A section ldquoEntitled XYZrdquo means a named subunit of the Document whose title eitheris precisely XYZ or contains XYZ in parentheses following text that translates XYZ inanother language (Here XYZ stands for a specific section name mentioned below suchas ldquoAcknowledgementsrdquo ldquoDedicationsrdquo ldquoEndorsementsrdquo or ldquoHistoryrdquo) To ldquoPreservethe Titlerdquo of such a section when you modify the Document means that it remains asection ldquoEntitled XYZrdquo according to this definition

The Document may include Warranty Disclaimers next to the notice which states thatthis License applies to the Document These Warranty Disclaimers are considered tobe included by reference in this License but only as regards disclaiming warrantiesany other implication that these Warranty Disclaimers may have is void and has noeffect on the meaning of this License

2 VERBATIM COPYING

Appendix A GNU Free Documentation License 28

You may copy and distribute the Document in any medium either commercially ornoncommercially provided that this License the copyright notices and the licensenotice saying this License applies to the Document are reproduced in all copies andthat you add no other conditions whatsoever to those of this License You may not usetechnical measures to obstruct or control the reading or further copying of the copiesyou make or distribute However you may accept compensation in exchange for copiesIf you distribute a large enough number of copies you must also follow the conditionsin section 3

You may also lend copies under the same conditions stated above and you may publiclydisplay copies

3 COPYING IN QUANTITY

If you publish printed copies (or copies in media that commonly have printed covers) ofthe Document numbering more than 100 and the Documentrsquos license notice requiresCover Texts you must enclose the copies in covers that carry clearly and legibly allthese Cover Texts Front-Cover Texts on the front cover and Back-Cover Texts onthe back cover Both covers must also clearly and legibly identify you as the publisherof these copies The front cover must present the full title with all words of the titleequally prominent and visible You may add other material on the covers in additionCopying with changes limited to the covers as long as they preserve the title of theDocument and satisfy these conditions can be treated as verbatim copying in otherrespects

If the required texts for either cover are too voluminous to fit legibly you should putthe first ones listed (as many as fit reasonably) on the actual cover and continue therest onto adjacent pages

If you publish or distribute Opaque copies of the Document numbering more than 100you must either include a machine-readable Transparent copy along with each Opaquecopy or state in or with each Opaque copy a computer-network location from whichthe general network-using public has access to download using public-standard networkprotocols a complete Transparent copy of the Document free of added material Ifyou use the latter option you must take reasonably prudent steps when you begindistribution of Opaque copies in quantity to ensure that this Transparent copy willremain thus accessible at the stated location until at least one year after the last timeyou distribute an Opaque copy (directly or through your agents or retailers) of thatedition to the public

It is requested but not required that you contact the authors of the Document wellbefore redistributing any large number of copies to give them a chance to provide youwith an updated version of the Document

4 MODIFICATIONS

You may copy and distribute a Modified Version of the Document under the conditionsof sections 2 and 3 above provided that you release the Modified Version under preciselythis License with the Modified Version filling the role of the Document thus licensingdistribution and modification of the Modified Version to whoever possesses a copy ofit In addition you must do these things in the Modified Version

A Use in the Title Page (and on the covers if any) a title distinct from that of theDocument and from those of previous versions (which should if there were any

Appendix A GNU Free Documentation License 29

be listed in the History section of the Document) You may use the same title asa previous version if the original publisher of that version gives permission

B List on the Title Page as authors one or more persons or entities responsible forauthorship of the modifications in the Modified Version together with at least fiveof the principal authors of the Document (all of its principal authors if it has fewerthan five) unless they release you from this requirement

C State on the Title page the name of the publisher of the Modified Version as thepublisher

D Preserve all the copyright notices of the Document

E Add an appropriate copyright notice for your modifications adjacent to the othercopyright notices

F Include immediately after the copyright notices a license notice giving the publicpermission to use the Modified Version under the terms of this License in the formshown in the Addendum below

G Preserve in that license notice the full lists of Invariant Sections and required CoverTexts given in the Documentrsquos license notice

H Include an unaltered copy of this License

I Preserve the section Entitled ldquoHistoryrdquo Preserve its Title and add to it an itemstating at least the title year new authors and publisher of the Modified Versionas given on the Title Page If there is no section Entitled ldquoHistoryrdquo in the Docu-ment create one stating the title year authors and publisher of the Documentas given on its Title Page then add an item describing the Modified Version asstated in the previous sentence

J Preserve the network location if any given in the Document for public access toa Transparent copy of the Document and likewise the network locations given inthe Document for previous versions it was based on These may be placed in theldquoHistoryrdquo section You may omit a network location for a work that was publishedat least four years before the Document itself or if the original publisher of theversion it refers to gives permission

K For any section Entitled ldquoAcknowledgementsrdquo or ldquoDedicationsrdquo Preserve the Titleof the section and preserve in the section all the substance and tone of each of thecontributor acknowledgements andor dedications given therein

L Preserve all the Invariant Sections of the Document unaltered in their text andin their titles Section numbers or the equivalent are not considered part of thesection titles

M Delete any section Entitled ldquoEndorsementsrdquo Such a section may not be includedin the Modified Version

N Do not retitle any existing section to be Entitled ldquoEndorsementsrdquo or to conflict intitle with any Invariant Section

O Preserve any Warranty Disclaimers

If the Modified Version includes new front-matter sections or appendices that qualifyas Secondary Sections and contain no material copied from the Document you may atyour option designate some or all of these sections as invariant To do this add their

Appendix A GNU Free Documentation License 30

titles to the list of Invariant Sections in the Modified Versionrsquos license notice Thesetitles must be distinct from any other section titles

You may add a section Entitled ldquoEndorsementsrdquo provided it contains nothing butendorsements of your Modified Version by various partiesmdashfor example statements ofpeer review or that the text has been approved by an organization as the authoritativedefinition of a standard

You may add a passage of up to five words as a Front-Cover Text and a passage of upto 25 words as a Back-Cover Text to the end of the list of Cover Texts in the ModifiedVersion Only one passage of Front-Cover Text and one of Back-Cover Text may beadded by (or through arrangements made by) any one entity If the Document alreadyincludes a cover text for the same cover previously added by you or by arrangementmade by the same entity you are acting on behalf of you may not add another butyou may replace the old one on explicit permission from the previous publisher thatadded the old one

The author(s) and publisher(s) of the Document do not by this License give permissionto use their names for publicity for or to assert or imply endorsement of any ModifiedVersion

5 COMBINING DOCUMENTS

You may combine the Document with other documents released under this Licenseunder the terms defined in section 4 above for modified versions provided that youinclude in the combination all of the Invariant Sections of all of the original documentsunmodified and list them all as Invariant Sections of your combined work in its licensenotice and that you preserve all their Warranty Disclaimers

The combined work need only contain one copy of this License and multiple identicalInvariant Sections may be replaced with a single copy If there are multiple InvariantSections with the same name but different contents make the title of each such sectionunique by adding at the end of it in parentheses the name of the original author orpublisher of that section if known or else a unique number Make the same adjustmentto the section titles in the list of Invariant Sections in the license notice of the combinedwork

In the combination you must combine any sections Entitled ldquoHistoryrdquo in the vari-ous original documents forming one section Entitled ldquoHistoryrdquo likewise combine anysections Entitled ldquoAcknowledgementsrdquo and any sections Entitled ldquoDedicationsrdquo Youmust delete all sections Entitled ldquoEndorsementsrdquo

6 COLLECTIONS OF DOCUMENTS

You may make a collection consisting of the Document and other documents releasedunder this License and replace the individual copies of this License in the variousdocuments with a single copy that is included in the collection provided that youfollow the rules of this License for verbatim copying of each of the documents in allother respects

You may extract a single document from such a collection and distribute it individu-ally under this License provided you insert a copy of this License into the extracteddocument and follow this License in all other respects regarding verbatim copying ofthat document

Appendix A GNU Free Documentation License 31

7 AGGREGATION WITH INDEPENDENT WORKS

A compilation of the Document or its derivatives with other separate and independentdocuments or works in or on a volume of a storage or distribution medium is calledan ldquoaggregaterdquo if the copyright resulting from the compilation is not used to limit thelegal rights of the compilationrsquos users beyond what the individual works permit Whenthe Document is included in an aggregate this License does not apply to the otherworks in the aggregate which are not themselves derivative works of the Document

If the Cover Text requirement of section 3 is applicable to these copies of the Documentthen if the Document is less than one half of the entire aggregate the Documentrsquos CoverTexts may be placed on covers that bracket the Document within the aggregate or theelectronic equivalent of covers if the Document is in electronic form Otherwise theymust appear on printed covers that bracket the whole aggregate

8 TRANSLATION

Translation is considered a kind of modification so you may distribute translationsof the Document under the terms of section 4 Replacing Invariant Sections withtranslations requires special permission from their copyright holders but you mayinclude translations of some or all Invariant Sections in addition to the original versionsof these Invariant Sections You may include a translation of this License and all thelicense notices in the Document and any Warranty Disclaimers provided that youalso include the original English version of this License and the original versions ofthose notices and disclaimers In case of a disagreement between the translation andthe original version of this License or a notice or disclaimer the original version willprevail

If a section in the Document is Entitled ldquoAcknowledgementsrdquo ldquoDedicationsrdquo or ldquoHis-toryrdquo the requirement (section 4) to Preserve its Title (section 1) will typically requirechanging the actual title

9 TERMINATION

You may not copy modify sublicense or distribute the Document except as expresslyprovided under this License Any attempt otherwise to copy modify sublicense ordistribute it is void and will automatically terminate your rights under this License

However if you cease all violation of this License then your license from a particularcopyright holder is reinstated (a) provisionally unless and until the copyright holderexplicitly and finally terminates your license and (b) permanently if the copyrightholder fails to notify you of the violation by some reasonable means prior to 60 daysafter the cessation

Moreover your license from a particular copyright holder is reinstated permanently ifthe copyright holder notifies you of the violation by some reasonable means this is thefirst time you have received notice of violation of this License (for any work) from thatcopyright holder and you cure the violation prior to 30 days after your receipt of thenotice

Termination of your rights under this section does not terminate the licenses of partieswho have received copies or rights from you under this License If your rights havebeen terminated and not permanently reinstated receipt of a copy of some or all of thesame material does not give you any rights to use it

Appendix A GNU Free Documentation License 32

10 FUTURE REVISIONS OF THIS LICENSE

The Free Software Foundation may publish new revised versions of the GNU FreeDocumentation License from time to time Such new versions will be similar in spiritto the present version but may differ in detail to address new problems or concernsSee httpwwwgnuorgcopyleft

Each version of the License is given a distinguishing version number If the Documentspecifies that a particular numbered version of this License ldquoor any later versionrdquoapplies to it you have the option of following the terms and conditions either of thatspecified version or of any later version that has been published (not as a draft) bythe Free Software Foundation If the Document does not specify a version number ofthis License you may choose any version ever published (not as a draft) by the FreeSoftware Foundation If the Document specifies that a proxy can decide which futureversions of this License can be used that proxyrsquos public statement of acceptance of aversion permanently authorizes you to choose that version for the Document

11 RELICENSING

ldquoMassive Multiauthor Collaboration Siterdquo (or ldquoMMC Siterdquo) means any World WideWeb server that publishes copyrightable works and also provides prominent facilitiesfor anybody to edit those works A public wiki that anybody can edit is an example ofsuch a server A ldquoMassive Multiauthor Collaborationrdquo (or ldquoMMCrdquo) contained in thesite means any set of copyrightable works thus published on the MMC site

ldquoCC-BY-SArdquo means the Creative Commons Attribution-Share Alike 30 license pub-lished by Creative Commons Corporation a not-for-profit corporation with a principalplace of business in San Francisco California as well as future copyleft versions of thatlicense published by that same organization

ldquoIncorporaterdquo means to publish or republish a Document in whole or in part as partof another Document

An MMC is ldquoeligible for relicensingrdquo if it is licensed under this License and if all worksthat were first published under this License somewhere other than this MMC andsubsequently incorporated in whole or in part into the MMC (1) had no cover textsor invariant sections and (2) were thus incorporated prior to November 1 2008

The operator of an MMC Site may republish an MMC contained in the site underCC-BY-SA on the same site at any time before August 1 2009 provided the MMC iseligible for relicensing

Appendix A GNU Free Documentation License 33

ADDENDUM How to use this License for your documents

To use this License in a document you have written include a copy of the License in thedocument and put the following copyright and license notices just after the title page

Copyright (C) year your name

Permission is granted to copy distribute andor modify this document

under the terms of the GNU Free Documentation License Version 13

or any later version published by the Free Software Foundation

with no Invariant Sections no Front-Cover Texts and no Back-Cover

Texts A copy of the license is included in the section entitled lsquolsquoGNU

Free Documentation Licensersquorsquo

If you have Invariant Sections Front-Cover Texts and Back-Cover Texts replace theldquowith Textsrdquo line with this

with the Invariant Sections being list their titles with

the Front-Cover Texts being list and with the Back-Cover Texts

being list

If you have Invariant Sections without Cover Texts or some other combination of thethree merge those two alternatives to suit the situation

If your document contains nontrivial examples of program code we recommend releasingthese examples in parallel under your choice of free software license such as the GNUGeneral Public License to permit their use in free software

Index 34

Index

Aaccess control policy 3Author 3author specifying 10

Bbehavior prior to version 5 10behavior version 3 10behavior version 4 10binary-old-keyword-value substitution mode 9branch growth 7branch number 2branch tip 2branch default 3bug reporting 25

Ccase sensitivity file format 21checkin 3checklist for bug reports 25checkout 3checkout implicit 5ci invocation 11co invocation 12comma-v file format 1command help 7command version 7command-line option to specify a revision 7credits 1

DDate 3date formats 8date specifying 8dates file format 21default branch 3default branch setting 15deleting revisions 15description of working file 2description text specifying 8

Eempty log message 9emulation previous RCS versions 10encoding file format 20environment variables 10

Ffeatures still missing 23

file names on the command-line 7format RCSfile 20

Ggrammar file format 20

HHeader 3history 1

IId 3ident invocation 13implicit checkout circumstance 5implicit checkout locked 12implicit checkout unlocked 12instantiating a working file 2interaction model 1interactive mode 9invocation ci 11invocation co 12invocation ident 13invocation merge 14invocation rcs 14 15invocation rcsclean 16invocation rcsdiff 17invocation rcsmerge 17invocation rlog 18

Kkeyword-only substitution mode 9keyword-value substitution mode 8keyword-value-locker substitution mode 9keywords table of 3

Llayout of nodes file format 21license 1Locker 3locking a revision 15locking on implicit checkout 12locking non-strict 5locking set non-strict 15locking set strict 15locking strict 5locks in RCS file 3Log 3log message empty 9LOGNAME 11

Index 35

Mmemory limit 11merge invocation 14model interaction 1

NName 4names symbolic 3node layout file format 21non-strict locking 5number branch 2number revision 2

Oold-keyword-value substitution mode 9order of options and file names 7outdating revisions 15overview 1

Ppairing RCS and working files 7patches contributing 25problems 25projects related 1

Qquiet mode 9

Rrange of revisions specifying 7RCS file 2rcs invocation 14 15RCS version emulation 10RCS_MEM_LIMIT 11rcsclean invocation 16rcsdiff invocation 17RCSfile 4RCSfile format 20RCSINIT 10rcsmerge invocation 17removing revisions 15reporting bugs 25Revision 4revision number 2revision range specifying 7

revision specifying 7revisions tree of 3rlog invocation 18

SSource 4specifying a date 8specifying a range of revisions 7specifying a revision 7specifying a state 9specifying a suffix list 10specifying a timedate 8specifying author 10specifying description text 8specifying substitution mode 8State 4state specifying 9strict locking 5substitution mode default 8substitution mode specifying 8suffix list specifying 10symbolic names 3

TTEMP 11third-party interop file format 21Tichy Walter F 1time zone 8timedate specifying 8tip 2tip increment 7TMP 11TMPDIR 11tree of revisions 3

Uunlocking a revision 15USER 11

Vvalue-only substitution mode 9

Wwhitespace file format 21working file description 2working file instantiation 2

  • Overview
    • Credits
    • Concepts
      • Interaction model
      • Working file
      • RCS file
      • Fundamental operations
      • Keywords
        • Quick tour
          • Usage
            • Common elements
              • Revision options
              • Date option
              • Description option
              • Substitution mode option
              • Log message option
              • Misc common options
              • Environment
                • Invoking ci
                • Invoking co
                • Invoking ident
                • Invoking merge
                • Invoking rcs
                  • modern
                  • legacy
                    • Invoking rcsclean
                    • Invoking rcsdiff
                    • Invoking rcsmerge
                    • Invoking rlog
                      • Hacking
                        • File format
                          • File format grammar
                          • Additional particulars of the file format
                            • Still missing
                            • Reporting bugs
                              • GNU Free Documentation License
                              • Index
Page 10: GNU RCS · The RCS file is also known (colloquially) as the “comma-v file”, due to its name often ending in ,v (e.g., a.c,v). A revision number is a branch number followed by

Chapter 2 Usage 7

2 Usage

This chapter describes how to invoke RCS commands including common command-lineelements as well options specific to each command

21 Common elements

All RCS commands accept --help and --version See Section ldquoCommand-Line Interfacesrdquoin The GNU Coding Standards

Aside from --help and --version RCS commands take the form lsquo-letter[arg]rsquo iea hyphen followed by a single letter optionally followed by extra information The squarebraces mean that the extra information is optional (No square braces means that the extrainformation is required) In any case when specified the extra information must abut theletter there can be no intervening whitespace

co -u 14 foo wrong space between -u and 14

co -u14 foo ok

Furthermore options must appear before file names (if any) on the command line

ident foo -q wrong option after file nameident -q foo ok

Lastly pairs of RCS and working files can be specified in three ways (a) both are given (b)only the working file is given (c) only the RCS file is given For (a) both RCS and workingfiles may have arbitrary directory components RCS commands pair them up intelligentlyFor (b) RCS commands will look first into the directory RCS if it exists to find theassociated RCS file

211 Revision options

As to be expected in a revision control system many options are of the form lsquo-flag[rev]rsquowhere flag is a single letter (eg lsquorrsquo) If ommitted rev defaults to the latest revision onthe default branch A revision can be specified in many ways

brn Straightforward dot-notation where br specifies the branch

n Like brn using the default branch

br Like brn using the a command-specific computation of n given the currenttip i For ci (see Section 22 [ci] page 11) n would be i + 1 while for othercommands n would be simply i

name This is the symbolic name of a revision as assigned previously by a ci -n orci -N command

$ The command computes the effective revision by examining the values of key-word expansions in the working file

For commands that accept a range of revisions the syntax is generally rev1rev2 ie tworevisions (specified as described above) separated by a colon

Chapter 2 Usage 8

212 Date option

Some commands accept an option of the form lsquo-ddatersquo to specify a date an absolute pointin time (to second resolution) expressed in a date format These also accept lsquo-zzonersquo tospecify the timezone The special value lsquoLTrsquo stands for the local time zone RCS recognizesmany date formats and time zones For example the following dates are equivalent if localtime is January 11 1990 8pm Pacific Standard Time eight hours west of CoordinatedUniversal Time (UTC)

800 pm lt

400 AM Jan 12 1990 default is UTC

1990-01-12 040000+00 ISO 8601 (UTC)

1990-01-11 200000-08 ISO 8601 (local time)

19900112 040000 traditional RCS format

Thu Jan 11 200000 1990 LT output of ctime(3) + LT

Thu Jan 11 200000 PST 1990 output of date(1)

Fri Jan 12 040000 GMT 1990

Thu 11 Jan 1990 200000 -0800 Internet RFC 822

12-January-1990 0400 WET

Most fields in the date and time can be defaulted The default time zone is normally UTCbut this can be overridden by the -z option The other defaults are determined in the orderyear month day hour minute and second (most to least significant) At least one of thesefields must be provided For omitted fields that are of higher significance than the highestprovided field the time zonersquos current values are assumed For all other omitted fields thelowest possible values are assumed For example without -z the date lsquo20 1030rsquo defaultsto lsquo103000 UTCrsquo of the 20th of the UTC time zonersquos current month and year Note thatfor the shell the datetime must be quoted if it contains spaces

RCS also accepts some other formats which specify only the date portion (omitting thetime portion)

YYYY-DDD DDD is the day of year 1-366

YYYY-wWW-D

WW is the ISO week number 0-53 (actually ISO week numbers are 1-53 week0 is a GNU RCS extension) and D is the ISO day number 1-7 (Monday throughSunday)

213 Description option

Some commands accept an option of the form lsquo-t-textrsquo or lsquo-tfile-namersquo This optionis to set or update the RCS file description text In the first form text is used directlyexcluding the leading hyphen (lsquo-rsquo) that distinguishes the two forms In the second formthe description text is taken from the contents of file-name

214 Substitution mode option

Some commands accept an option of the form -ksubst used to control how keywords (seeSection 12 [Concepts] page 1) are expanded in the working file In the following table ofsubst values the example keyword is lsquoRevisionrsquo and its value is lsquo513rsquo

kv Generate lsquo$Revision 513 $rsquo (dollar-sign keyword colon space value spacedollar-sign) A lockerrsquos name is inserted in the value of the Header Id and

Chapter 2 Usage 9

Locker keyword strings only as a file is being locked ie by ci -l and co -lThis is the default substitution mode

kvl Like -kkv except that a lockerrsquos name is always inserted if the given revisionis currently locked

k Generate lsquo$Revision$rsquo (dollar-sign keyword dollar-sign) This is useful whencomparing different revisions of a file Log messages are inserted after Log key-words even if -kk is specified since this tends to be more useful when mergingchanges

o Like -kkv but use the old value present in the working file just before it waschecked in This can be useful for file formats that cannot tolerate any changesto substrings that happen to take the form of keyword strings

b Like -ko but do all file io in binary mode This makes little difference onPOSIX and Unix hosts but on DOS-like hosts one should use rcs -i -kb toinitialize an RCS file intended to be used for binary files Also on all hostsrcsmerge normally refuses to merge files when -kb is in effect

v Generate lsquo513rsquo (value only) Further keyword substitution cannot be per-formed once the keyword names are removed so this should be used with careBecause of this danger of losing keywords -kv cannot be combined with -land the owner write permission of the working file is turned off to edit the filelater check it out again without -kv

215 Log message option

Both ci and rcs allow a log message to be specified with the -m option If themsg argumentto this option is empty RCS uses the default lsquo empty log message rsquo This particularmessage is handled specially (ie filtered out) by rlog

216 Misc common options

Other common options are -I -q -s -T -V -w -x

-I This option enables interactive mode More precisely it forces interactive modewhereby RCS commands believe that their standard input is a terminal nor-mally a precondition for displaying a prompt to receive input (such as a log mes-sage on checkin) The intention of -I is for scripting situations where standardinput is actually not a terminal but you know beforehand (without prompting)that input is needed and you are ready to provide it on standard input anyway

-q This option enables quiet mode Commands work silently (unless there is anerror condition) and suppress warnings and prompts

-sstate Specify the state to be state

-T This option controls how commands timestamp the RCS file Normally RCScommands set the RCS filersquos timestamp when modifying it in the ldquonaturalrdquo way(without taking any particular care) With -T on the other hand the com-mands either preserve the timestamp (for standalone lockunlock operations)or use the timestamp of the working file (for ci)

Chapter 2 Usage 10

This can be useful if the RCS file is found in a makefile targetrsquos list of pre-requisites (see Section ldquoRule Syntaxrdquo in The GNU Make Manual) that is ifsome target should be rebuilt if the RCS file is newer than it In that case youcan do lsquorcs -u -Trsquo for example to unlock a revision in the RCS file withouttriggering a recompilation

-V Behave like --version ie display command version information and exitsuccessfully NB This option is obsolete and its support will be removed insome future release

-Vn n specifies the RCS (major) version to emulate Valid values for n are 3 4 5Version 5 is the current version so -V5 does nothing special

In versions prior to 5 RCS outputs lsquotrsquo (tab U+09) between the lsquorsquo (colon) andthe value (for keyword substitution) instead of space uses the RCS file commentstring to prefix each line in the Log expansion instead of computing it on thefly from the input text writesreads localtime instead of UTC and displaysslightly different output for rlog

For version 4 the Header expansion unconditionally includes Locker lockeras if the kvl substitution mode were specified (see Section 214 [Substitutionmode option] page 8)

For version 3 the Header expansion omits the directories from the filename andsays only Locked instead of the state

-wlogin Some commands accept an option of the form lsquo-wloginrsquo to specify the loginname of the author of a revision ie ldquowhordquo is responsible

-xsuff Specify suff as the slash-separated list of file name suffixes used to recognizean RCS file The default value is lsquovrsquo that is first try with lsquovrsquo then try withan empty suffix

This basename search occurs within (ie starting from the beginning) the largerdirectory search loop which comprises two candidates dRCS and d where dis the directory component of the working file name For example given theworking file ac in the current directory RCS tries in order these candidates

RCSacv

RCSac

acv

ac

Note that the last candidate is impossible (and is in fact discarded) becausethe working and RCS files cannot have the same name

217 Environment

Various environment variables influence how RCS works

[Environment Variable]RCSINITAnother way to set common options is with the lsquoRCSINITrsquo environment variable Thisis a space-separated list of options Use lsquorsquo (backslash) to escape significant spaceFor example

Chapter 2 Usage 11

Set the value make it available to subsequent commandsRCSINIT=-q -xv -zLT

export RCSINIT

Use it (implicitly)rlog -L foo

This example in Bourne shell syntax arranges for RCS commands to operate as ifeach command-line had prepended lsquo-q -xv -zLTrsquo to the rest of the command-lineThe effective command-line that rlog sees is thus lsquo-q -xv -zLT -L foorsquo

[Environment Variable]RCS_MEM_LIMITNormally for speed commands either memory map or copy into memory the RCS fileif its size is less than thememory limit currently defaulting to ldquounlimitedrdquo Otherwise(or if the initially-tried speedy ways fail) the commands fall back to using standardio routines

You can adjust the memory limit by setting the lsquoRCS_MEM_LIMITrsquo environment variableto a numeric value (measured in kilobytes) An empty value is silently ignored

As a side effect specifying the memory limit inhibits fall-back to slower routines(This env var is mostly intended for testing RCS normally you can leave it unsetProbably it will be removed in a future release)

[Environment Variable]TMPDIR[Environment Variable]TMP[Environment Variable]TEMP

Commands sometimes create temporary files normally in a system-dependent direc-tory such as tmp You can override this directory by specifying another one asthe value of one of the environment variables TMPDIR TMP or TEMP (checked in thatorder)

[Environment Variable]LOGNAME[Environment Variable]USER

Absent -wlogin or when login is omitted (see Section 216 [Misc common options]page 9) commands check environment variables LOGNAME and USER (in that order)If neither of these are set RCS queries the host for and uses your login

22 Invoking ci

rcs ci [options] file

(or ldquocirdquo instead of ldquorcs cirdquo)

The ci command adds a revision to the RCS file reflecting the current state of the workingfile This operation is also known as ldquocheckinrdquo

-f[rev] Force new entry even if no content changed

-I[rev]

-q[rev] See Section 216 [Misc common options] page 9

-i[rev] Initial checkin error if the RCS file already exists

-j[rev] Just checkin donrsquot initialize error if the RCS file does not exist

Chapter 2 Usage 12

-k[rev] Compute revision from working file keywords

-r Release lock and delete working file

-rrev Do normal checkin

-l[rev] Like -r but immediately checkout locked (co -l) afterwards

-u[rev] Like -l but checkout unlocked (co -u)

-M[rev] Reset working file mtime (relevant for -l -u)

Multiple flags in -fiIjklMqru may be given except for -r -l -u which are mutuallyexclusive For a fully specified revision of the form brn nmust be greater than any existingon br or br must be new If rev is omitted compute it from the last lock (co -l) perhapsstarting a new branch If there is no lock use defbr(L+1) See Section 211 [Revisionoptions] page 7

-d[date]

-zzone See Section 212 [Date option] page 8 If no date specified use the workingfile modification time

-m[msg] Use msg as the log message See Section 215 [Log message option] page 9

-nname

-Nname Assign symbolic name to the entry For -n name must be new (no previousassignment) For -N overwrite any previous assignment

-sstate See Section 216 [Misc common options] page 9 Set the state

-t-text

-tfile-name

See Section 213 [Description option] page 8

-T Set the RCS filersquos modification time to the new revisionrsquos time if the former pre-cedes the latter and there is a new revision preserve the RCS filersquos modificationtime otherwise

-wwho Use who as the author

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

23 Invoking co

rcs co [options] file

(or ldquocordquo instead of ldquorcs cordquo)

The co command retrieves a revision from the RCS file writing a new working file Thisoperation is also known as ldquocheckoutrdquo

-f[rev] Force overwrite of working file

-I[rev]

-q[rev] See Section 216 [Misc common options] page 9

-p[rev] Write to stdout instead of the working file

Chapter 2 Usage 13

-r[rev] Normal checkout

-l[rev] Like -r but also lock

-u[rev] Like -l but unlock

-M[rev] Reset working file mtime (relevant for -l -u)

Multiple flags in -fIlMpqru may be given except for -r -l -u which are mutuallyexclusive See Section 211 [Revision options] page 7

-ksubst See Section 214 [Substitution mode option] page 8

-ddate

-zzone See Section 212 [Date option] page 8 Select latest before or on date

-jjoins Merge using joins a list of revrev pairs NB This option is obsolete (seeSection 29 [rcsmerge] page 17)

-sstate See Section 216 [Misc common options] page 9 Select matching state

-S Enable self-same mode In this mode the owner of a lock is unimportantjust that it exists Effectively this prevents you from checking out the samerevision twice

$ whoami

ttn

$ co -l -f z

RCSzv --gt z

revision 11 (locked)

done

$ co -S -l -f z

RCSzv --gt z

co RCSzv Revision 11 is already locked by ttn

-T Preserve the modification time on the RCS file even if it changes because a lockis added or removed

-wwho Select matching login who

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

24 Invoking ident

ident [options] [file ]

If no file is specified scan standard input The ident command scans its input for keywords(see Section 12 [Concepts] page 1) displaying to standard output what it finds

-q Normally if no patterns are found for a file ident emits a warning This optionsuppresses the warning

Chapter 2 Usage 14

-V Note that -Vn is not a valid option for ident in contrast to most other RCScommands (see Section 216 [Misc common options] page 9)

In addition to the normal keyword pattern for Subversion 12 (and later) compatibility1ident also recognizes patterns having one of the forms

$keyword text $

two colons and space after keyword

space before ending $

$keyword text$

two colons and space after keyword

hash before ending $

25 Invoking merge

merge [options] receiving-sibling parent other-sibling

The merge command combines the differences between a the parent and the other siblingand the differences between the parent and the receiving sibling It writes the result to thereceiving sibling

-A

-E

-e Use diff3 -A -E (default) or -e respectively

-p Write to stdout instead of overwriting receiving-sibling

-q See Section 216 [Misc common options] page 9 Suppress conflict warnings

-Llabel (up to three times) Specify the conflict labels for receiving-sibling parent andother-sibling respectively

-V Note that -Vn is not a valid option for merge in contrast to most other RCScommands (see Section 216 [Misc common options] page 9)

26 Invoking rcs

The rcs command is unique in the set of RCS programs in that it has two usages themodern (for RCS 590 and later) and the legacy

261 modern

rcs [options] command [command-arg ]

This rcs usage dispatches to command passing along command-arg without interpreta-tion

--commands

Display a list of available commands including a one-line description and exitsuccessfully

1 The fixed-length keyword syntax is described in detail in Version Control with Subversion chapterldquoAdvanced Topicsrdquo section ldquoKeyword Substitutionrdquo

Chapter 2 Usage 15

--aliases

Display a list of command aliases and exit successfully

--help command

Display help for a particular command and exit successfully For example todisplay help for the legacy interface use

--help frob

262 legacy

rcs frob [options] file

(or ldquorcsrdquo instead of ldquorcs frobrdquo)

This rcs usage performs various administrative operations on the RCS file depending onthe options given

-i Create and initialize a new RCS file

-L Set strict locking

-U Set non-strict locking

-M Donrsquot send mail when breaking someone elsersquos lock

-T Preserve the modification time on the RCS file unless a revision is removed

-I

-q See Section 216 [Misc common options] page 9

-alogins Append logins (comma-separated list of usernames) to access-list

-e[logins]

Erase logins (comma-separated list of usernames) from access-list If logins isomitted clear the access-list

-Afile-name

Append access-list of file-name to current access-list

-b[rev] Set default branch to that of rev or highest branch on trunk if rev is omitted

-l[rev] Lock a revision

-u[rev] Unlock a revision

-cstring Set comment leader to string NB Donrsquot use obsolete

-ksubst See Section 214 [Substitution mode option] page 8

-mrev[msg]

Replace log message with msg See Section 215 [Log message option] page 9

-nname[[rev]]

If rev is omitted delete symbolic name Otherwise associate name with rev name must be new

-Nname[[rev]]

Like -n but overwrite any previous assignment

-orange Delete (also known as ldquooutdaterdquo) revisions in range

Chapter 2 Usage 16

rev single revision

br latest revision on branch br

rev1rev2

rev1 to rev2 on same branch inclusive

rev beginning of branch to rev

rev rev to end of branch

-sstate[rev]

See Section 216 [Misc common options] page 9 Set state

-t-text

-tfile-name

See Section 213 [Description option] page 8 Replace description

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

These options have no effect and are included solely for consistency with other comamnds(see Section 217 [Environment] page 10) -zzone

27 Invoking rcsclean

rcs clean [options] [file ]

(or ldquorcscleanrdquo instead of ldquorcs cleanrdquo)

The rcsclean command removes working files that are not being worked on If given -u italso unlocks and removes working files that are being worked on but have not changed Ifno file is specified operate on all the working files in the current directory

-r[rev] Specify revision

-u[rev] Unlock if is locked and no differences found

-n[rev] Dry run (no act donrsquot operate)

-q[rev] See Section 216 [Misc common options] page 9

-ksubst See Section 214 [Substitution mode option] page 8

-T Preserve the modification time on the RCS file even it changes because a lockis removed

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

-zzone See Section 212 [Date option] page 8

Chapter 2 Usage 17

28 Invoking rcsdiff

rcs diff [options] file

(or ldquorcsdiffrdquo instead of ldquorcs diffrdquo)

The rcsdiff command runs diff to compare two revisions in an RCS file See Section ldquoIn-voking diffrdquo in The GNU Diffutils Manaual

-rrev (zero one or two times) Name a revision If given two revisions (lsquo-rrev1-rrev2rsquo) compare those revisions If given only one revision (lsquo-rrevrsquo) comparethe working file with it If given no revisions compare the working file with thelatest revision on the default branch

-ksubst See Section 214 [Substitution mode option] page 8

-q See Section 216 [Misc common options] page 9

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

-zzone See Section 212 [Date option] page 8

These options have no effect and are included solely for consistency with other comamnds(see Section 217 [Environment] page 10) -T

Additionally the following options (and their argument if any) are passed to the underlyingdiff command

-0 -1 -2 -3 -4 -5 -6 -7 -8 -9 -B -C -D -F -H -I

-L -U -W -a -b -c -d -e -f -h -i -n -p -t -u -w -y

long options (that start with --)

(Not all of these options are meaningful)

29 Invoking rcsmerge

rcs merge [options] file

(or ldquorcsmergerdquo instead of ldquorcs mergerdquo)

The rcsmerge command incorporates the changes between two revisions of an RCS file intothe corresponding working file

-A

-E

-e Passed to the diff3 command The default if none are specified is -E With -esuppress warnings on conflict The -A style generates the most verbose outputSee Section ldquoInvoking diff3rdquo in The GNU Diffutils Manual

-p[rev] Write to stdout instead of overwriting the working file

-q[rev] See Section 216 [Misc common options] page 9

-rrev (one or two times) specify a revision

One or two revisions must be specified (using -p -q -r) If only one is specified the secondrevision defaults to the latest revision on the default branch

Chapter 2 Usage 18

-ksubst See Section 214 [Substitution mode option] page 8

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

-zzone See Section 212 [Date option] page 8

These options have no effect and are included solely for consistency with other comamnds(see Section 217 [Environment] page 10) -T

210 Invoking rlog

rcs log [options] file

(or ldquorlogrdquo instead of ldquorcs logrdquo)

The rlog command displays information about RCS files

-L Ignore RCS files with no locks set

-R Print only the name of the RCS file

-h Print only the ldquoheaderrdquo information

-t Like -h but also include the description

-N Omit symbolic names

-b Select the default branch

-ddates See Section 212 [Date option] page 8 Select revisions based on timestampin the range dates with spec

d single revision d or earlier

d1ltd2

d2gtd1 between d1 and d2 exclusive

ltd

dgt before d

gtd

dlt after d

Instead of lsquoltrsquo or lsquogtrsquo you can use lsquolt=rsquo or lsquogt=rsquo respectively to specify inclusiveranges dates may also be a list of semicolon-separated specs

-l[who] Select revisions locked by who (comma-separated list of usernames) only or byanyone if who is omitted

-r[revs] Select revisions in revs a comma-separated list of range specs one of revrev rev rev1rev2

-sstates See Section 216 [Misc common options] page 9 states can also be a comma-separated list of states Select revisions with specified state(s)

-w[who] Select revisions checked in by who (comma-separated list of usernames) or bythe user if who is omitted

Chapter 2 Usage 19

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

-zzone See Section 212 [Date option] page 8

These options have no effect and are included solely for consistency with other comamnds(see Section 217 [Environment] page 10) lsquo-qrsquo lsquo-Trsquo

Chapter 3 Hacking 20

3 Hacking

This chapter in contrast to the previous (see Chapter 2 [Usage] page 7) is introspective Itdescribes an important aspect of RCS interop with other programs and development ideasand methods

31 File format

An RCS filersquos contents are described by the grammar below1 Overall the format is freendashformat text In most environments RCS uses the ISO 88591 encoding visible graphiccharacters are (octal) codes 041ndash176 and 240ndash377 and whitespace characters are codes010ndash015 and 040TODO Discuss or point to encoding compatibility issues

311 File format grammar

The meta syntax in this section uses the following conventions lsquo|rsquo (U+7C) separates al-ternatives lsquorsquo (U+7B) and lsquorsquo (U+7D) enclose optional phrases lsquorsquo and lsquorsquo (trailing U+2A)enclose phrases that can be repeated zero or more times lsquorsquo and lsquo+rsquo (trailing U+2B) enclosephrases that must appear at least once and can be repeated terminal symbols are in lsquorsquo(two U+22)

rcstext = admin delta desc deltatext

admin = head num

branch num

access id

symbols sym num

locks id num

strict

integrity intstring

comment string

expand string

delta = num

date num

author id

state id

branches num

next num

commitid sym

desc = desc string

deltatext = num

log string

text string

1 This section is adapted from the lsquorcsfile(5)rsquo manpage written by Walter F Tichy

Chapter 3 Hacking 21

num = digit | +

digit = 0 through 9

id = idchar | +

sym = idchar+

idchar = any visible graphic character except special

special = $ | | | | |

string = any character with doubled

word = id | num | string |

intchar = any character except

thirdp = ^L intchar

intstring = intchar thirdp

312 Additional particulars of the file format

bull In releases prior to 58 (2011-08-30) the grammar included the production

newphrase = id word

and used it in the admin delta and deltatext productions This allowed third-partyprograms to interoperate with RCS by storing opaque (to RCS) data in the file

As of 58 in the name of progress (towards more systematic file integrity support) theonly area reserved for third-party interop is in the (string) value of the integrity fieldspecifically after the first formfeed (U+0C) A further restriction (for all programs) isthat the integrity value must not contain lsquorsquo

bull Whitespace has no significance except in strings However whitespace cannot appearwithin an id num or sym and an RCS file must end with newline (U+0A) Strings areenclosed by lsquorsquo (U+40) If a string contains a lsquorsquo it must be doubled otherwise stringscan contain arbitrary binary data

bull Identifiers are case sensitive Keywords are in lower case only The sets of keywordsand identifiers can overlap

bull Dates which appear after the date keyword are of the form Ymmddhhmmss whereY is the year mm the month (01ndash12) dd the day (01ndash31) hh the hour (00ndash23) mm theminute (00ndash59) and ss the second (00ndash60) Y contains just the last two digits of theyear for years from 1900 through 1999 and all the digits of years thereafter Dates usethe Gregorian calendar times use UTC

bull The delta nodes form a tree All nodes whose numbers consist of a single pair (eg 2321 13) are on the trunk and are linked through the next field in order of decreasing

Chapter 3 Hacking 22

numbers The head field in the admin node points to the head of that sequence (iecontains the highest pair) The branch node in the admin node indicates the defaultbranch (or revision) for most RCS operations If empty the default branch is thehighest branch on the trunk

All delta nodes whose numbers consist of 2n fields (n ge 2) (eg 3111 2122) arelinked as follows All nodes whose first 2nminus1 number fields are identical are linkedthrough the next field in order of increasing numbers For each such sequence thedelta node whose number is identical to the first 2nminus2 number fields of the delta

nodes on that sequence is called the branchpoint The branches field of a node containsa list of the numbers of the first nodes of all sequences for which it is a branchpointThis list is ordered in increasing numbers See Figure 31

Chapter 3 Hacking 23

Head

|

|

v

---------

| |

| 21 |

| |

1213 1311 | | 1222 122111

--------- --------- --------- --------- -------------

^ ^ | ^ ^

| | | | |

| | v | |

| --------- |

| 13 |

--------- -----------

1211 131 1221 12211

--------- ---------

^ | ^

| | |

| v |

| --------- |

| 12 |

---------------------- ---------

121 122

|

|

v

---------

11

Figure 31 The organization of an example RCS file

32 Still missing

RCS is still missing some features The following is an unordered list of ldquoto-do musingsrdquo keptby the RCS maintainers If you would like to hack on an item See Section 33 [Reportingbugs] page 25

bull Add an option to rcsmerge so that it can use an arbitrary program to do the 3-waymerge instead of the default merge Likewise for rcsdiff and diff It should be possibleto pass arbitrary options to these programs and to the subsidiary co invocations

bull Add format options for finer control over the output of ident and rlog Eg thereshould be an easy way for rlog to output lines like lsquosrcmainc 24 wftrsquo one for

Chapter 3 Hacking 24

each locked revision rlog options should have three orthogonal types selecting filesselecting revisions and selecting rlog format

bull Add format options for finer control over the output of keyword strings Eg thereshould be some way to prepend lsquo()rsquo and there should be some way to change lsquo$rsquo tosome other character to disable further substitution These options should make theresulting files uneditable like lsquo-kvrsquo

bull Add long options eg --keyword-substitution Unfortunately RCSrsquos option syntaxis incompatible with getopt Perhaps the best way is to overload rcs eg lsquorcs diff

--keyword-substitution=old filersquo instead of lsquorcsdiff -ko filersquo

bull rlog -rMN should work even if M and N have different numbers of fields so long asM is an ancestor of N or vice versa

bull rcs should evaluate options in order this allows rcs -oS -nS

bull Be able to redo your most recent checkin with minor changes

bull co -u shouldnrsquot complain about a lsquo+wrsquo working file if contents donrsquot change

bull Add a lsquo-rsquo option to take the list of file names from standard input Perhaps the filenames should be null-terminated not newline-terminated so that those that containnewlines are handled properly

bull Permit multiple optionndashfilename pairs eg co -r14 a -r15 b

bull Add an option to break a symbolic link to an RCS file instead of breaking the hardlink that it points to

bull Add ways to specify the earliest revision the most recent revision the earliest or latestrevision on a particular branch and the parent or child of some other revision

bull If a user has multiple locks perhaps ci should fall back on the method of ci -k to figureout which revision to use

bull Add an option to rcsclean to clean directories recursively

bull Write an rcsck program that repairs corrupted RCS files much as fsck repairs corruptedfile systems For example it should remove stale lock files

bull Update the date parser to use the more modern getdatey by Bellovin Salz andBerets or the even more modern getdate by Moraes None of these getdate imple-mentations are as robust as RCSrsquos old warhorse in avoiding problems like arithmeticoverflow so theyrsquoll have to be fixed first (Perhaps we can use gnulib module getdate)

bull Break up the code into a library so that itrsquos easier to write new programs that manip-ulate RCS files and so that useless code is removed from the existing programs Forexample the rcs command contains unnecessary keyword substitution baggage andthe merge command can be greatly pruned

bull Make it easier to use your favorite text editor to edit log messages etc instead ofhaving to type them in irretrievably at the terminal

bull Let the user specify a search path for default branches eg to use L as the defaultbranch if it works and M otherwise Let the user require that at least one entry inthe search path works Let the user say that later entries in the search path are readonly ie one cannot check in changes to them This should be an option settable bylsquoRCSINITrsquo

bull Add a way for a user to see which revisions affected which lines

Chapter 3 Hacking 25

bull Have rlog -nN F print just the revision number that N translates to Eg rlog -nB

F would print the highest revision on the branch B Use this to add an option -bB torcsbranch to freeze the named branch This should interact well with default branches

bull Add a co option that prints the revision number before each line as SCCSrsquos get -m

does [I implemented this for Emacs 22 as a subroutine of vc-annotate qv mdashttn]

33 Reporting bugs

To report bugs or suggest enhancements for GNU RCS please visit its homepage (httpwwwgnuorgsoftwarercs) to find directions on how to ldquofile a bug reportrdquo online orsend electronic mail to help-rcsgnuorg (If you use the web interface you donrsquot needto also send email since that is done automatically)

For bug reports please include enough information for the maintainers to reproduce theproblem Generally speaking that means

bull The RCS version command(s) and manual section(s) involved

bull Hardware and operating system names and versions

bull The contents of any input files necessary to reproduce the bug

bull The expected behavior andor output

bull A description of the problem and samples of any erroneous output

bull Options you gave to configure other than specifying installation directories

bull Anything else that you think would be helpful

When in doubt whether something is needed or not include it Itrsquos better to include toomuch than to leave out something important

Patches are welcome if possible please make them with lsquogit format-patchrsquo and includeChangeLog entries (see Section ldquoChange Logrdquo in The GNU Emacs Manual) Please followthe existing coding style

Appendix A GNU Free Documentation License 26

Appendix A GNU Free Documentation License

Version 13 3 November 2008

Copyright ccopy 2000 2001 2002 2007 2008 Free Software Foundation Inchttpfsforg

Everyone is permitted to copy and distribute verbatim copiesof this license document but changing it is not allowed

0 PREAMBLE

The purpose of this License is to make a manual textbook or other functional anduseful document free in the sense of freedom to assure everyone the effective freedomto copy and redistribute it with or without modifying it either commercially or non-commercially Secondarily this License preserves for the author and publisher a wayto get credit for their work while not being considered responsible for modificationsmade by others

This License is a kind of ldquocopyleftrdquo which means that derivative works of the documentmust themselves be free in the same sense It complements the GNU General PublicLicense which is a copyleft license designed for free software

We have designed this License in order to use it for manuals for free software becausefree software needs free documentation a free program should come with manualsproviding the same freedoms that the software does But this License is not limited tosoftware manuals it can be used for any textual work regardless of subject matter orwhether it is published as a printed book We recommend this License principally forworks whose purpose is instruction or reference

1 APPLICABILITY AND DEFINITIONS

This License applies to any manual or other work in any medium that contains anotice placed by the copyright holder saying it can be distributed under the termsof this License Such a notice grants a world-wide royalty-free license unlimited induration to use that work under the conditions stated herein The ldquoDocumentrdquobelow refers to any such manual or work Any member of the public is a licensee andis addressed as ldquoyourdquo You accept the license if you copy modify or distribute the workin a way requiring permission under copyright law

A ldquoModified Versionrdquo of the Document means any work containing the Document ora portion of it either copied verbatim or with modifications andor translated intoanother language

A ldquoSecondary Sectionrdquo is a named appendix or a front-matter section of the Documentthat deals exclusively with the relationship of the publishers or authors of the Documentto the Documentrsquos overall subject (or to related matters) and contains nothing thatcould fall directly within that overall subject (Thus if the Document is in part atextbook of mathematics a Secondary Section may not explain any mathematics) Therelationship could be a matter of historical connection with the subject or with relatedmatters or of legal commercial philosophical ethical or political position regardingthem

The ldquoInvariant Sectionsrdquo are certain Secondary Sections whose titles are designated asbeing those of Invariant Sections in the notice that says that the Document is released

Appendix A GNU Free Documentation License 27

under this License If a section does not fit the above definition of Secondary then it isnot allowed to be designated as Invariant The Document may contain zero InvariantSections If the Document does not identify any Invariant Sections then there are none

The ldquoCover Textsrdquo are certain short passages of text that are listed as Front-CoverTexts or Back-Cover Texts in the notice that says that the Document is released underthis License A Front-Cover Text may be at most 5 words and a Back-Cover Text maybe at most 25 words

A ldquoTransparentrdquo copy of the Document means a machine-readable copy representedin a format whose specification is available to the general public that is suitable forrevising the document straightforwardly with generic text editors or (for images com-posed of pixels) generic paint programs or (for drawings) some widely available drawingeditor and that is suitable for input to text formatters or for automatic translation toa variety of formats suitable for input to text formatters A copy made in an otherwiseTransparent file format whose markup or absence of markup has been arranged tothwart or discourage subsequent modification by readers is not Transparent An imageformat is not Transparent if used for any substantial amount of text A copy that isnot ldquoTransparentrdquo is called ldquoOpaquerdquo

Examples of suitable formats for Transparent copies include plain ASCII withoutmarkup Texinfo input format LaTEX input format SGML or XML using a publiclyavailable DTD and standard-conforming simple HTML PostScript or PDF designedfor human modification Examples of transparent image formats include PNG XCFand JPG Opaque formats include proprietary formats that can be read and editedonly by proprietary word processors SGML or XML for which the DTD andor pro-cessing tools are not generally available and the machine-generated HTML PostScriptor PDF produced by some word processors for output purposes only

The ldquoTitle Pagerdquo means for a printed book the title page itself plus such followingpages as are needed to hold legibly the material this License requires to appear in thetitle page For works in formats which do not have any title page as such ldquoTitle Pagerdquomeans the text near the most prominent appearance of the workrsquos title preceding thebeginning of the body of the text

The ldquopublisherrdquo means any person or entity that distributes copies of the Documentto the public

A section ldquoEntitled XYZrdquo means a named subunit of the Document whose title eitheris precisely XYZ or contains XYZ in parentheses following text that translates XYZ inanother language (Here XYZ stands for a specific section name mentioned below suchas ldquoAcknowledgementsrdquo ldquoDedicationsrdquo ldquoEndorsementsrdquo or ldquoHistoryrdquo) To ldquoPreservethe Titlerdquo of such a section when you modify the Document means that it remains asection ldquoEntitled XYZrdquo according to this definition

The Document may include Warranty Disclaimers next to the notice which states thatthis License applies to the Document These Warranty Disclaimers are considered tobe included by reference in this License but only as regards disclaiming warrantiesany other implication that these Warranty Disclaimers may have is void and has noeffect on the meaning of this License

2 VERBATIM COPYING

Appendix A GNU Free Documentation License 28

You may copy and distribute the Document in any medium either commercially ornoncommercially provided that this License the copyright notices and the licensenotice saying this License applies to the Document are reproduced in all copies andthat you add no other conditions whatsoever to those of this License You may not usetechnical measures to obstruct or control the reading or further copying of the copiesyou make or distribute However you may accept compensation in exchange for copiesIf you distribute a large enough number of copies you must also follow the conditionsin section 3

You may also lend copies under the same conditions stated above and you may publiclydisplay copies

3 COPYING IN QUANTITY

If you publish printed copies (or copies in media that commonly have printed covers) ofthe Document numbering more than 100 and the Documentrsquos license notice requiresCover Texts you must enclose the copies in covers that carry clearly and legibly allthese Cover Texts Front-Cover Texts on the front cover and Back-Cover Texts onthe back cover Both covers must also clearly and legibly identify you as the publisherof these copies The front cover must present the full title with all words of the titleequally prominent and visible You may add other material on the covers in additionCopying with changes limited to the covers as long as they preserve the title of theDocument and satisfy these conditions can be treated as verbatim copying in otherrespects

If the required texts for either cover are too voluminous to fit legibly you should putthe first ones listed (as many as fit reasonably) on the actual cover and continue therest onto adjacent pages

If you publish or distribute Opaque copies of the Document numbering more than 100you must either include a machine-readable Transparent copy along with each Opaquecopy or state in or with each Opaque copy a computer-network location from whichthe general network-using public has access to download using public-standard networkprotocols a complete Transparent copy of the Document free of added material Ifyou use the latter option you must take reasonably prudent steps when you begindistribution of Opaque copies in quantity to ensure that this Transparent copy willremain thus accessible at the stated location until at least one year after the last timeyou distribute an Opaque copy (directly or through your agents or retailers) of thatedition to the public

It is requested but not required that you contact the authors of the Document wellbefore redistributing any large number of copies to give them a chance to provide youwith an updated version of the Document

4 MODIFICATIONS

You may copy and distribute a Modified Version of the Document under the conditionsof sections 2 and 3 above provided that you release the Modified Version under preciselythis License with the Modified Version filling the role of the Document thus licensingdistribution and modification of the Modified Version to whoever possesses a copy ofit In addition you must do these things in the Modified Version

A Use in the Title Page (and on the covers if any) a title distinct from that of theDocument and from those of previous versions (which should if there were any

Appendix A GNU Free Documentation License 29

be listed in the History section of the Document) You may use the same title asa previous version if the original publisher of that version gives permission

B List on the Title Page as authors one or more persons or entities responsible forauthorship of the modifications in the Modified Version together with at least fiveof the principal authors of the Document (all of its principal authors if it has fewerthan five) unless they release you from this requirement

C State on the Title page the name of the publisher of the Modified Version as thepublisher

D Preserve all the copyright notices of the Document

E Add an appropriate copyright notice for your modifications adjacent to the othercopyright notices

F Include immediately after the copyright notices a license notice giving the publicpermission to use the Modified Version under the terms of this License in the formshown in the Addendum below

G Preserve in that license notice the full lists of Invariant Sections and required CoverTexts given in the Documentrsquos license notice

H Include an unaltered copy of this License

I Preserve the section Entitled ldquoHistoryrdquo Preserve its Title and add to it an itemstating at least the title year new authors and publisher of the Modified Versionas given on the Title Page If there is no section Entitled ldquoHistoryrdquo in the Docu-ment create one stating the title year authors and publisher of the Documentas given on its Title Page then add an item describing the Modified Version asstated in the previous sentence

J Preserve the network location if any given in the Document for public access toa Transparent copy of the Document and likewise the network locations given inthe Document for previous versions it was based on These may be placed in theldquoHistoryrdquo section You may omit a network location for a work that was publishedat least four years before the Document itself or if the original publisher of theversion it refers to gives permission

K For any section Entitled ldquoAcknowledgementsrdquo or ldquoDedicationsrdquo Preserve the Titleof the section and preserve in the section all the substance and tone of each of thecontributor acknowledgements andor dedications given therein

L Preserve all the Invariant Sections of the Document unaltered in their text andin their titles Section numbers or the equivalent are not considered part of thesection titles

M Delete any section Entitled ldquoEndorsementsrdquo Such a section may not be includedin the Modified Version

N Do not retitle any existing section to be Entitled ldquoEndorsementsrdquo or to conflict intitle with any Invariant Section

O Preserve any Warranty Disclaimers

If the Modified Version includes new front-matter sections or appendices that qualifyas Secondary Sections and contain no material copied from the Document you may atyour option designate some or all of these sections as invariant To do this add their

Appendix A GNU Free Documentation License 30

titles to the list of Invariant Sections in the Modified Versionrsquos license notice Thesetitles must be distinct from any other section titles

You may add a section Entitled ldquoEndorsementsrdquo provided it contains nothing butendorsements of your Modified Version by various partiesmdashfor example statements ofpeer review or that the text has been approved by an organization as the authoritativedefinition of a standard

You may add a passage of up to five words as a Front-Cover Text and a passage of upto 25 words as a Back-Cover Text to the end of the list of Cover Texts in the ModifiedVersion Only one passage of Front-Cover Text and one of Back-Cover Text may beadded by (or through arrangements made by) any one entity If the Document alreadyincludes a cover text for the same cover previously added by you or by arrangementmade by the same entity you are acting on behalf of you may not add another butyou may replace the old one on explicit permission from the previous publisher thatadded the old one

The author(s) and publisher(s) of the Document do not by this License give permissionto use their names for publicity for or to assert or imply endorsement of any ModifiedVersion

5 COMBINING DOCUMENTS

You may combine the Document with other documents released under this Licenseunder the terms defined in section 4 above for modified versions provided that youinclude in the combination all of the Invariant Sections of all of the original documentsunmodified and list them all as Invariant Sections of your combined work in its licensenotice and that you preserve all their Warranty Disclaimers

The combined work need only contain one copy of this License and multiple identicalInvariant Sections may be replaced with a single copy If there are multiple InvariantSections with the same name but different contents make the title of each such sectionunique by adding at the end of it in parentheses the name of the original author orpublisher of that section if known or else a unique number Make the same adjustmentto the section titles in the list of Invariant Sections in the license notice of the combinedwork

In the combination you must combine any sections Entitled ldquoHistoryrdquo in the vari-ous original documents forming one section Entitled ldquoHistoryrdquo likewise combine anysections Entitled ldquoAcknowledgementsrdquo and any sections Entitled ldquoDedicationsrdquo Youmust delete all sections Entitled ldquoEndorsementsrdquo

6 COLLECTIONS OF DOCUMENTS

You may make a collection consisting of the Document and other documents releasedunder this License and replace the individual copies of this License in the variousdocuments with a single copy that is included in the collection provided that youfollow the rules of this License for verbatim copying of each of the documents in allother respects

You may extract a single document from such a collection and distribute it individu-ally under this License provided you insert a copy of this License into the extracteddocument and follow this License in all other respects regarding verbatim copying ofthat document

Appendix A GNU Free Documentation License 31

7 AGGREGATION WITH INDEPENDENT WORKS

A compilation of the Document or its derivatives with other separate and independentdocuments or works in or on a volume of a storage or distribution medium is calledan ldquoaggregaterdquo if the copyright resulting from the compilation is not used to limit thelegal rights of the compilationrsquos users beyond what the individual works permit Whenthe Document is included in an aggregate this License does not apply to the otherworks in the aggregate which are not themselves derivative works of the Document

If the Cover Text requirement of section 3 is applicable to these copies of the Documentthen if the Document is less than one half of the entire aggregate the Documentrsquos CoverTexts may be placed on covers that bracket the Document within the aggregate or theelectronic equivalent of covers if the Document is in electronic form Otherwise theymust appear on printed covers that bracket the whole aggregate

8 TRANSLATION

Translation is considered a kind of modification so you may distribute translationsof the Document under the terms of section 4 Replacing Invariant Sections withtranslations requires special permission from their copyright holders but you mayinclude translations of some or all Invariant Sections in addition to the original versionsof these Invariant Sections You may include a translation of this License and all thelicense notices in the Document and any Warranty Disclaimers provided that youalso include the original English version of this License and the original versions ofthose notices and disclaimers In case of a disagreement between the translation andthe original version of this License or a notice or disclaimer the original version willprevail

If a section in the Document is Entitled ldquoAcknowledgementsrdquo ldquoDedicationsrdquo or ldquoHis-toryrdquo the requirement (section 4) to Preserve its Title (section 1) will typically requirechanging the actual title

9 TERMINATION

You may not copy modify sublicense or distribute the Document except as expresslyprovided under this License Any attempt otherwise to copy modify sublicense ordistribute it is void and will automatically terminate your rights under this License

However if you cease all violation of this License then your license from a particularcopyright holder is reinstated (a) provisionally unless and until the copyright holderexplicitly and finally terminates your license and (b) permanently if the copyrightholder fails to notify you of the violation by some reasonable means prior to 60 daysafter the cessation

Moreover your license from a particular copyright holder is reinstated permanently ifthe copyright holder notifies you of the violation by some reasonable means this is thefirst time you have received notice of violation of this License (for any work) from thatcopyright holder and you cure the violation prior to 30 days after your receipt of thenotice

Termination of your rights under this section does not terminate the licenses of partieswho have received copies or rights from you under this License If your rights havebeen terminated and not permanently reinstated receipt of a copy of some or all of thesame material does not give you any rights to use it

Appendix A GNU Free Documentation License 32

10 FUTURE REVISIONS OF THIS LICENSE

The Free Software Foundation may publish new revised versions of the GNU FreeDocumentation License from time to time Such new versions will be similar in spiritto the present version but may differ in detail to address new problems or concernsSee httpwwwgnuorgcopyleft

Each version of the License is given a distinguishing version number If the Documentspecifies that a particular numbered version of this License ldquoor any later versionrdquoapplies to it you have the option of following the terms and conditions either of thatspecified version or of any later version that has been published (not as a draft) bythe Free Software Foundation If the Document does not specify a version number ofthis License you may choose any version ever published (not as a draft) by the FreeSoftware Foundation If the Document specifies that a proxy can decide which futureversions of this License can be used that proxyrsquos public statement of acceptance of aversion permanently authorizes you to choose that version for the Document

11 RELICENSING

ldquoMassive Multiauthor Collaboration Siterdquo (or ldquoMMC Siterdquo) means any World WideWeb server that publishes copyrightable works and also provides prominent facilitiesfor anybody to edit those works A public wiki that anybody can edit is an example ofsuch a server A ldquoMassive Multiauthor Collaborationrdquo (or ldquoMMCrdquo) contained in thesite means any set of copyrightable works thus published on the MMC site

ldquoCC-BY-SArdquo means the Creative Commons Attribution-Share Alike 30 license pub-lished by Creative Commons Corporation a not-for-profit corporation with a principalplace of business in San Francisco California as well as future copyleft versions of thatlicense published by that same organization

ldquoIncorporaterdquo means to publish or republish a Document in whole or in part as partof another Document

An MMC is ldquoeligible for relicensingrdquo if it is licensed under this License and if all worksthat were first published under this License somewhere other than this MMC andsubsequently incorporated in whole or in part into the MMC (1) had no cover textsor invariant sections and (2) were thus incorporated prior to November 1 2008

The operator of an MMC Site may republish an MMC contained in the site underCC-BY-SA on the same site at any time before August 1 2009 provided the MMC iseligible for relicensing

Appendix A GNU Free Documentation License 33

ADDENDUM How to use this License for your documents

To use this License in a document you have written include a copy of the License in thedocument and put the following copyright and license notices just after the title page

Copyright (C) year your name

Permission is granted to copy distribute andor modify this document

under the terms of the GNU Free Documentation License Version 13

or any later version published by the Free Software Foundation

with no Invariant Sections no Front-Cover Texts and no Back-Cover

Texts A copy of the license is included in the section entitled lsquolsquoGNU

Free Documentation Licensersquorsquo

If you have Invariant Sections Front-Cover Texts and Back-Cover Texts replace theldquowith Textsrdquo line with this

with the Invariant Sections being list their titles with

the Front-Cover Texts being list and with the Back-Cover Texts

being list

If you have Invariant Sections without Cover Texts or some other combination of thethree merge those two alternatives to suit the situation

If your document contains nontrivial examples of program code we recommend releasingthese examples in parallel under your choice of free software license such as the GNUGeneral Public License to permit their use in free software

Index 34

Index

Aaccess control policy 3Author 3author specifying 10

Bbehavior prior to version 5 10behavior version 3 10behavior version 4 10binary-old-keyword-value substitution mode 9branch growth 7branch number 2branch tip 2branch default 3bug reporting 25

Ccase sensitivity file format 21checkin 3checklist for bug reports 25checkout 3checkout implicit 5ci invocation 11co invocation 12comma-v file format 1command help 7command version 7command-line option to specify a revision 7credits 1

DDate 3date formats 8date specifying 8dates file format 21default branch 3default branch setting 15deleting revisions 15description of working file 2description text specifying 8

Eempty log message 9emulation previous RCS versions 10encoding file format 20environment variables 10

Ffeatures still missing 23

file names on the command-line 7format RCSfile 20

Ggrammar file format 20

HHeader 3history 1

IId 3ident invocation 13implicit checkout circumstance 5implicit checkout locked 12implicit checkout unlocked 12instantiating a working file 2interaction model 1interactive mode 9invocation ci 11invocation co 12invocation ident 13invocation merge 14invocation rcs 14 15invocation rcsclean 16invocation rcsdiff 17invocation rcsmerge 17invocation rlog 18

Kkeyword-only substitution mode 9keyword-value substitution mode 8keyword-value-locker substitution mode 9keywords table of 3

Llayout of nodes file format 21license 1Locker 3locking a revision 15locking on implicit checkout 12locking non-strict 5locking set non-strict 15locking set strict 15locking strict 5locks in RCS file 3Log 3log message empty 9LOGNAME 11

Index 35

Mmemory limit 11merge invocation 14model interaction 1

NName 4names symbolic 3node layout file format 21non-strict locking 5number branch 2number revision 2

Oold-keyword-value substitution mode 9order of options and file names 7outdating revisions 15overview 1

Ppairing RCS and working files 7patches contributing 25problems 25projects related 1

Qquiet mode 9

Rrange of revisions specifying 7RCS file 2rcs invocation 14 15RCS version emulation 10RCS_MEM_LIMIT 11rcsclean invocation 16rcsdiff invocation 17RCSfile 4RCSfile format 20RCSINIT 10rcsmerge invocation 17removing revisions 15reporting bugs 25Revision 4revision number 2revision range specifying 7

revision specifying 7revisions tree of 3rlog invocation 18

SSource 4specifying a date 8specifying a range of revisions 7specifying a revision 7specifying a state 9specifying a suffix list 10specifying a timedate 8specifying author 10specifying description text 8specifying substitution mode 8State 4state specifying 9strict locking 5substitution mode default 8substitution mode specifying 8suffix list specifying 10symbolic names 3

TTEMP 11third-party interop file format 21Tichy Walter F 1time zone 8timedate specifying 8tip 2tip increment 7TMP 11TMPDIR 11tree of revisions 3

Uunlocking a revision 15USER 11

Vvalue-only substitution mode 9

Wwhitespace file format 21working file description 2working file instantiation 2

  • Overview
    • Credits
    • Concepts
      • Interaction model
      • Working file
      • RCS file
      • Fundamental operations
      • Keywords
        • Quick tour
          • Usage
            • Common elements
              • Revision options
              • Date option
              • Description option
              • Substitution mode option
              • Log message option
              • Misc common options
              • Environment
                • Invoking ci
                • Invoking co
                • Invoking ident
                • Invoking merge
                • Invoking rcs
                  • modern
                  • legacy
                    • Invoking rcsclean
                    • Invoking rcsdiff
                    • Invoking rcsmerge
                    • Invoking rlog
                      • Hacking
                        • File format
                          • File format grammar
                          • Additional particulars of the file format
                            • Still missing
                            • Reporting bugs
                              • GNU Free Documentation License
                              • Index
Page 11: GNU RCS · The RCS file is also known (colloquially) as the “comma-v file”, due to its name often ending in ,v (e.g., a.c,v). A revision number is a branch number followed by

Chapter 2 Usage 8

212 Date option

Some commands accept an option of the form lsquo-ddatersquo to specify a date an absolute pointin time (to second resolution) expressed in a date format These also accept lsquo-zzonersquo tospecify the timezone The special value lsquoLTrsquo stands for the local time zone RCS recognizesmany date formats and time zones For example the following dates are equivalent if localtime is January 11 1990 8pm Pacific Standard Time eight hours west of CoordinatedUniversal Time (UTC)

800 pm lt

400 AM Jan 12 1990 default is UTC

1990-01-12 040000+00 ISO 8601 (UTC)

1990-01-11 200000-08 ISO 8601 (local time)

19900112 040000 traditional RCS format

Thu Jan 11 200000 1990 LT output of ctime(3) + LT

Thu Jan 11 200000 PST 1990 output of date(1)

Fri Jan 12 040000 GMT 1990

Thu 11 Jan 1990 200000 -0800 Internet RFC 822

12-January-1990 0400 WET

Most fields in the date and time can be defaulted The default time zone is normally UTCbut this can be overridden by the -z option The other defaults are determined in the orderyear month day hour minute and second (most to least significant) At least one of thesefields must be provided For omitted fields that are of higher significance than the highestprovided field the time zonersquos current values are assumed For all other omitted fields thelowest possible values are assumed For example without -z the date lsquo20 1030rsquo defaultsto lsquo103000 UTCrsquo of the 20th of the UTC time zonersquos current month and year Note thatfor the shell the datetime must be quoted if it contains spaces

RCS also accepts some other formats which specify only the date portion (omitting thetime portion)

YYYY-DDD DDD is the day of year 1-366

YYYY-wWW-D

WW is the ISO week number 0-53 (actually ISO week numbers are 1-53 week0 is a GNU RCS extension) and D is the ISO day number 1-7 (Monday throughSunday)

213 Description option

Some commands accept an option of the form lsquo-t-textrsquo or lsquo-tfile-namersquo This optionis to set or update the RCS file description text In the first form text is used directlyexcluding the leading hyphen (lsquo-rsquo) that distinguishes the two forms In the second formthe description text is taken from the contents of file-name

214 Substitution mode option

Some commands accept an option of the form -ksubst used to control how keywords (seeSection 12 [Concepts] page 1) are expanded in the working file In the following table ofsubst values the example keyword is lsquoRevisionrsquo and its value is lsquo513rsquo

kv Generate lsquo$Revision 513 $rsquo (dollar-sign keyword colon space value spacedollar-sign) A lockerrsquos name is inserted in the value of the Header Id and

Chapter 2 Usage 9

Locker keyword strings only as a file is being locked ie by ci -l and co -lThis is the default substitution mode

kvl Like -kkv except that a lockerrsquos name is always inserted if the given revisionis currently locked

k Generate lsquo$Revision$rsquo (dollar-sign keyword dollar-sign) This is useful whencomparing different revisions of a file Log messages are inserted after Log key-words even if -kk is specified since this tends to be more useful when mergingchanges

o Like -kkv but use the old value present in the working file just before it waschecked in This can be useful for file formats that cannot tolerate any changesto substrings that happen to take the form of keyword strings

b Like -ko but do all file io in binary mode This makes little difference onPOSIX and Unix hosts but on DOS-like hosts one should use rcs -i -kb toinitialize an RCS file intended to be used for binary files Also on all hostsrcsmerge normally refuses to merge files when -kb is in effect

v Generate lsquo513rsquo (value only) Further keyword substitution cannot be per-formed once the keyword names are removed so this should be used with careBecause of this danger of losing keywords -kv cannot be combined with -land the owner write permission of the working file is turned off to edit the filelater check it out again without -kv

215 Log message option

Both ci and rcs allow a log message to be specified with the -m option If themsg argumentto this option is empty RCS uses the default lsquo empty log message rsquo This particularmessage is handled specially (ie filtered out) by rlog

216 Misc common options

Other common options are -I -q -s -T -V -w -x

-I This option enables interactive mode More precisely it forces interactive modewhereby RCS commands believe that their standard input is a terminal nor-mally a precondition for displaying a prompt to receive input (such as a log mes-sage on checkin) The intention of -I is for scripting situations where standardinput is actually not a terminal but you know beforehand (without prompting)that input is needed and you are ready to provide it on standard input anyway

-q This option enables quiet mode Commands work silently (unless there is anerror condition) and suppress warnings and prompts

-sstate Specify the state to be state

-T This option controls how commands timestamp the RCS file Normally RCScommands set the RCS filersquos timestamp when modifying it in the ldquonaturalrdquo way(without taking any particular care) With -T on the other hand the com-mands either preserve the timestamp (for standalone lockunlock operations)or use the timestamp of the working file (for ci)

Chapter 2 Usage 10

This can be useful if the RCS file is found in a makefile targetrsquos list of pre-requisites (see Section ldquoRule Syntaxrdquo in The GNU Make Manual) that is ifsome target should be rebuilt if the RCS file is newer than it In that case youcan do lsquorcs -u -Trsquo for example to unlock a revision in the RCS file withouttriggering a recompilation

-V Behave like --version ie display command version information and exitsuccessfully NB This option is obsolete and its support will be removed insome future release

-Vn n specifies the RCS (major) version to emulate Valid values for n are 3 4 5Version 5 is the current version so -V5 does nothing special

In versions prior to 5 RCS outputs lsquotrsquo (tab U+09) between the lsquorsquo (colon) andthe value (for keyword substitution) instead of space uses the RCS file commentstring to prefix each line in the Log expansion instead of computing it on thefly from the input text writesreads localtime instead of UTC and displaysslightly different output for rlog

For version 4 the Header expansion unconditionally includes Locker lockeras if the kvl substitution mode were specified (see Section 214 [Substitutionmode option] page 8)

For version 3 the Header expansion omits the directories from the filename andsays only Locked instead of the state

-wlogin Some commands accept an option of the form lsquo-wloginrsquo to specify the loginname of the author of a revision ie ldquowhordquo is responsible

-xsuff Specify suff as the slash-separated list of file name suffixes used to recognizean RCS file The default value is lsquovrsquo that is first try with lsquovrsquo then try withan empty suffix

This basename search occurs within (ie starting from the beginning) the largerdirectory search loop which comprises two candidates dRCS and d where dis the directory component of the working file name For example given theworking file ac in the current directory RCS tries in order these candidates

RCSacv

RCSac

acv

ac

Note that the last candidate is impossible (and is in fact discarded) becausethe working and RCS files cannot have the same name

217 Environment

Various environment variables influence how RCS works

[Environment Variable]RCSINITAnother way to set common options is with the lsquoRCSINITrsquo environment variable Thisis a space-separated list of options Use lsquorsquo (backslash) to escape significant spaceFor example

Chapter 2 Usage 11

Set the value make it available to subsequent commandsRCSINIT=-q -xv -zLT

export RCSINIT

Use it (implicitly)rlog -L foo

This example in Bourne shell syntax arranges for RCS commands to operate as ifeach command-line had prepended lsquo-q -xv -zLTrsquo to the rest of the command-lineThe effective command-line that rlog sees is thus lsquo-q -xv -zLT -L foorsquo

[Environment Variable]RCS_MEM_LIMITNormally for speed commands either memory map or copy into memory the RCS fileif its size is less than thememory limit currently defaulting to ldquounlimitedrdquo Otherwise(or if the initially-tried speedy ways fail) the commands fall back to using standardio routines

You can adjust the memory limit by setting the lsquoRCS_MEM_LIMITrsquo environment variableto a numeric value (measured in kilobytes) An empty value is silently ignored

As a side effect specifying the memory limit inhibits fall-back to slower routines(This env var is mostly intended for testing RCS normally you can leave it unsetProbably it will be removed in a future release)

[Environment Variable]TMPDIR[Environment Variable]TMP[Environment Variable]TEMP

Commands sometimes create temporary files normally in a system-dependent direc-tory such as tmp You can override this directory by specifying another one asthe value of one of the environment variables TMPDIR TMP or TEMP (checked in thatorder)

[Environment Variable]LOGNAME[Environment Variable]USER

Absent -wlogin or when login is omitted (see Section 216 [Misc common options]page 9) commands check environment variables LOGNAME and USER (in that order)If neither of these are set RCS queries the host for and uses your login

22 Invoking ci

rcs ci [options] file

(or ldquocirdquo instead of ldquorcs cirdquo)

The ci command adds a revision to the RCS file reflecting the current state of the workingfile This operation is also known as ldquocheckinrdquo

-f[rev] Force new entry even if no content changed

-I[rev]

-q[rev] See Section 216 [Misc common options] page 9

-i[rev] Initial checkin error if the RCS file already exists

-j[rev] Just checkin donrsquot initialize error if the RCS file does not exist

Chapter 2 Usage 12

-k[rev] Compute revision from working file keywords

-r Release lock and delete working file

-rrev Do normal checkin

-l[rev] Like -r but immediately checkout locked (co -l) afterwards

-u[rev] Like -l but checkout unlocked (co -u)

-M[rev] Reset working file mtime (relevant for -l -u)

Multiple flags in -fiIjklMqru may be given except for -r -l -u which are mutuallyexclusive For a fully specified revision of the form brn nmust be greater than any existingon br or br must be new If rev is omitted compute it from the last lock (co -l) perhapsstarting a new branch If there is no lock use defbr(L+1) See Section 211 [Revisionoptions] page 7

-d[date]

-zzone See Section 212 [Date option] page 8 If no date specified use the workingfile modification time

-m[msg] Use msg as the log message See Section 215 [Log message option] page 9

-nname

-Nname Assign symbolic name to the entry For -n name must be new (no previousassignment) For -N overwrite any previous assignment

-sstate See Section 216 [Misc common options] page 9 Set the state

-t-text

-tfile-name

See Section 213 [Description option] page 8

-T Set the RCS filersquos modification time to the new revisionrsquos time if the former pre-cedes the latter and there is a new revision preserve the RCS filersquos modificationtime otherwise

-wwho Use who as the author

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

23 Invoking co

rcs co [options] file

(or ldquocordquo instead of ldquorcs cordquo)

The co command retrieves a revision from the RCS file writing a new working file Thisoperation is also known as ldquocheckoutrdquo

-f[rev] Force overwrite of working file

-I[rev]

-q[rev] See Section 216 [Misc common options] page 9

-p[rev] Write to stdout instead of the working file

Chapter 2 Usage 13

-r[rev] Normal checkout

-l[rev] Like -r but also lock

-u[rev] Like -l but unlock

-M[rev] Reset working file mtime (relevant for -l -u)

Multiple flags in -fIlMpqru may be given except for -r -l -u which are mutuallyexclusive See Section 211 [Revision options] page 7

-ksubst See Section 214 [Substitution mode option] page 8

-ddate

-zzone See Section 212 [Date option] page 8 Select latest before or on date

-jjoins Merge using joins a list of revrev pairs NB This option is obsolete (seeSection 29 [rcsmerge] page 17)

-sstate See Section 216 [Misc common options] page 9 Select matching state

-S Enable self-same mode In this mode the owner of a lock is unimportantjust that it exists Effectively this prevents you from checking out the samerevision twice

$ whoami

ttn

$ co -l -f z

RCSzv --gt z

revision 11 (locked)

done

$ co -S -l -f z

RCSzv --gt z

co RCSzv Revision 11 is already locked by ttn

-T Preserve the modification time on the RCS file even if it changes because a lockis added or removed

-wwho Select matching login who

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

24 Invoking ident

ident [options] [file ]

If no file is specified scan standard input The ident command scans its input for keywords(see Section 12 [Concepts] page 1) displaying to standard output what it finds

-q Normally if no patterns are found for a file ident emits a warning This optionsuppresses the warning

Chapter 2 Usage 14

-V Note that -Vn is not a valid option for ident in contrast to most other RCScommands (see Section 216 [Misc common options] page 9)

In addition to the normal keyword pattern for Subversion 12 (and later) compatibility1ident also recognizes patterns having one of the forms

$keyword text $

two colons and space after keyword

space before ending $

$keyword text$

two colons and space after keyword

hash before ending $

25 Invoking merge

merge [options] receiving-sibling parent other-sibling

The merge command combines the differences between a the parent and the other siblingand the differences between the parent and the receiving sibling It writes the result to thereceiving sibling

-A

-E

-e Use diff3 -A -E (default) or -e respectively

-p Write to stdout instead of overwriting receiving-sibling

-q See Section 216 [Misc common options] page 9 Suppress conflict warnings

-Llabel (up to three times) Specify the conflict labels for receiving-sibling parent andother-sibling respectively

-V Note that -Vn is not a valid option for merge in contrast to most other RCScommands (see Section 216 [Misc common options] page 9)

26 Invoking rcs

The rcs command is unique in the set of RCS programs in that it has two usages themodern (for RCS 590 and later) and the legacy

261 modern

rcs [options] command [command-arg ]

This rcs usage dispatches to command passing along command-arg without interpreta-tion

--commands

Display a list of available commands including a one-line description and exitsuccessfully

1 The fixed-length keyword syntax is described in detail in Version Control with Subversion chapterldquoAdvanced Topicsrdquo section ldquoKeyword Substitutionrdquo

Chapter 2 Usage 15

--aliases

Display a list of command aliases and exit successfully

--help command

Display help for a particular command and exit successfully For example todisplay help for the legacy interface use

--help frob

262 legacy

rcs frob [options] file

(or ldquorcsrdquo instead of ldquorcs frobrdquo)

This rcs usage performs various administrative operations on the RCS file depending onthe options given

-i Create and initialize a new RCS file

-L Set strict locking

-U Set non-strict locking

-M Donrsquot send mail when breaking someone elsersquos lock

-T Preserve the modification time on the RCS file unless a revision is removed

-I

-q See Section 216 [Misc common options] page 9

-alogins Append logins (comma-separated list of usernames) to access-list

-e[logins]

Erase logins (comma-separated list of usernames) from access-list If logins isomitted clear the access-list

-Afile-name

Append access-list of file-name to current access-list

-b[rev] Set default branch to that of rev or highest branch on trunk if rev is omitted

-l[rev] Lock a revision

-u[rev] Unlock a revision

-cstring Set comment leader to string NB Donrsquot use obsolete

-ksubst See Section 214 [Substitution mode option] page 8

-mrev[msg]

Replace log message with msg See Section 215 [Log message option] page 9

-nname[[rev]]

If rev is omitted delete symbolic name Otherwise associate name with rev name must be new

-Nname[[rev]]

Like -n but overwrite any previous assignment

-orange Delete (also known as ldquooutdaterdquo) revisions in range

Chapter 2 Usage 16

rev single revision

br latest revision on branch br

rev1rev2

rev1 to rev2 on same branch inclusive

rev beginning of branch to rev

rev rev to end of branch

-sstate[rev]

See Section 216 [Misc common options] page 9 Set state

-t-text

-tfile-name

See Section 213 [Description option] page 8 Replace description

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

These options have no effect and are included solely for consistency with other comamnds(see Section 217 [Environment] page 10) -zzone

27 Invoking rcsclean

rcs clean [options] [file ]

(or ldquorcscleanrdquo instead of ldquorcs cleanrdquo)

The rcsclean command removes working files that are not being worked on If given -u italso unlocks and removes working files that are being worked on but have not changed Ifno file is specified operate on all the working files in the current directory

-r[rev] Specify revision

-u[rev] Unlock if is locked and no differences found

-n[rev] Dry run (no act donrsquot operate)

-q[rev] See Section 216 [Misc common options] page 9

-ksubst See Section 214 [Substitution mode option] page 8

-T Preserve the modification time on the RCS file even it changes because a lockis removed

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

-zzone See Section 212 [Date option] page 8

Chapter 2 Usage 17

28 Invoking rcsdiff

rcs diff [options] file

(or ldquorcsdiffrdquo instead of ldquorcs diffrdquo)

The rcsdiff command runs diff to compare two revisions in an RCS file See Section ldquoIn-voking diffrdquo in The GNU Diffutils Manaual

-rrev (zero one or two times) Name a revision If given two revisions (lsquo-rrev1-rrev2rsquo) compare those revisions If given only one revision (lsquo-rrevrsquo) comparethe working file with it If given no revisions compare the working file with thelatest revision on the default branch

-ksubst See Section 214 [Substitution mode option] page 8

-q See Section 216 [Misc common options] page 9

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

-zzone See Section 212 [Date option] page 8

These options have no effect and are included solely for consistency with other comamnds(see Section 217 [Environment] page 10) -T

Additionally the following options (and their argument if any) are passed to the underlyingdiff command

-0 -1 -2 -3 -4 -5 -6 -7 -8 -9 -B -C -D -F -H -I

-L -U -W -a -b -c -d -e -f -h -i -n -p -t -u -w -y

long options (that start with --)

(Not all of these options are meaningful)

29 Invoking rcsmerge

rcs merge [options] file

(or ldquorcsmergerdquo instead of ldquorcs mergerdquo)

The rcsmerge command incorporates the changes between two revisions of an RCS file intothe corresponding working file

-A

-E

-e Passed to the diff3 command The default if none are specified is -E With -esuppress warnings on conflict The -A style generates the most verbose outputSee Section ldquoInvoking diff3rdquo in The GNU Diffutils Manual

-p[rev] Write to stdout instead of overwriting the working file

-q[rev] See Section 216 [Misc common options] page 9

-rrev (one or two times) specify a revision

One or two revisions must be specified (using -p -q -r) If only one is specified the secondrevision defaults to the latest revision on the default branch

Chapter 2 Usage 18

-ksubst See Section 214 [Substitution mode option] page 8

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

-zzone See Section 212 [Date option] page 8

These options have no effect and are included solely for consistency with other comamnds(see Section 217 [Environment] page 10) -T

210 Invoking rlog

rcs log [options] file

(or ldquorlogrdquo instead of ldquorcs logrdquo)

The rlog command displays information about RCS files

-L Ignore RCS files with no locks set

-R Print only the name of the RCS file

-h Print only the ldquoheaderrdquo information

-t Like -h but also include the description

-N Omit symbolic names

-b Select the default branch

-ddates See Section 212 [Date option] page 8 Select revisions based on timestampin the range dates with spec

d single revision d or earlier

d1ltd2

d2gtd1 between d1 and d2 exclusive

ltd

dgt before d

gtd

dlt after d

Instead of lsquoltrsquo or lsquogtrsquo you can use lsquolt=rsquo or lsquogt=rsquo respectively to specify inclusiveranges dates may also be a list of semicolon-separated specs

-l[who] Select revisions locked by who (comma-separated list of usernames) only or byanyone if who is omitted

-r[revs] Select revisions in revs a comma-separated list of range specs one of revrev rev rev1rev2

-sstates See Section 216 [Misc common options] page 9 states can also be a comma-separated list of states Select revisions with specified state(s)

-w[who] Select revisions checked in by who (comma-separated list of usernames) or bythe user if who is omitted

Chapter 2 Usage 19

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

-zzone See Section 212 [Date option] page 8

These options have no effect and are included solely for consistency with other comamnds(see Section 217 [Environment] page 10) lsquo-qrsquo lsquo-Trsquo

Chapter 3 Hacking 20

3 Hacking

This chapter in contrast to the previous (see Chapter 2 [Usage] page 7) is introspective Itdescribes an important aspect of RCS interop with other programs and development ideasand methods

31 File format

An RCS filersquos contents are described by the grammar below1 Overall the format is freendashformat text In most environments RCS uses the ISO 88591 encoding visible graphiccharacters are (octal) codes 041ndash176 and 240ndash377 and whitespace characters are codes010ndash015 and 040TODO Discuss or point to encoding compatibility issues

311 File format grammar

The meta syntax in this section uses the following conventions lsquo|rsquo (U+7C) separates al-ternatives lsquorsquo (U+7B) and lsquorsquo (U+7D) enclose optional phrases lsquorsquo and lsquorsquo (trailing U+2A)enclose phrases that can be repeated zero or more times lsquorsquo and lsquo+rsquo (trailing U+2B) enclosephrases that must appear at least once and can be repeated terminal symbols are in lsquorsquo(two U+22)

rcstext = admin delta desc deltatext

admin = head num

branch num

access id

symbols sym num

locks id num

strict

integrity intstring

comment string

expand string

delta = num

date num

author id

state id

branches num

next num

commitid sym

desc = desc string

deltatext = num

log string

text string

1 This section is adapted from the lsquorcsfile(5)rsquo manpage written by Walter F Tichy

Chapter 3 Hacking 21

num = digit | +

digit = 0 through 9

id = idchar | +

sym = idchar+

idchar = any visible graphic character except special

special = $ | | | | |

string = any character with doubled

word = id | num | string |

intchar = any character except

thirdp = ^L intchar

intstring = intchar thirdp

312 Additional particulars of the file format

bull In releases prior to 58 (2011-08-30) the grammar included the production

newphrase = id word

and used it in the admin delta and deltatext productions This allowed third-partyprograms to interoperate with RCS by storing opaque (to RCS) data in the file

As of 58 in the name of progress (towards more systematic file integrity support) theonly area reserved for third-party interop is in the (string) value of the integrity fieldspecifically after the first formfeed (U+0C) A further restriction (for all programs) isthat the integrity value must not contain lsquorsquo

bull Whitespace has no significance except in strings However whitespace cannot appearwithin an id num or sym and an RCS file must end with newline (U+0A) Strings areenclosed by lsquorsquo (U+40) If a string contains a lsquorsquo it must be doubled otherwise stringscan contain arbitrary binary data

bull Identifiers are case sensitive Keywords are in lower case only The sets of keywordsand identifiers can overlap

bull Dates which appear after the date keyword are of the form Ymmddhhmmss whereY is the year mm the month (01ndash12) dd the day (01ndash31) hh the hour (00ndash23) mm theminute (00ndash59) and ss the second (00ndash60) Y contains just the last two digits of theyear for years from 1900 through 1999 and all the digits of years thereafter Dates usethe Gregorian calendar times use UTC

bull The delta nodes form a tree All nodes whose numbers consist of a single pair (eg 2321 13) are on the trunk and are linked through the next field in order of decreasing

Chapter 3 Hacking 22

numbers The head field in the admin node points to the head of that sequence (iecontains the highest pair) The branch node in the admin node indicates the defaultbranch (or revision) for most RCS operations If empty the default branch is thehighest branch on the trunk

All delta nodes whose numbers consist of 2n fields (n ge 2) (eg 3111 2122) arelinked as follows All nodes whose first 2nminus1 number fields are identical are linkedthrough the next field in order of increasing numbers For each such sequence thedelta node whose number is identical to the first 2nminus2 number fields of the delta

nodes on that sequence is called the branchpoint The branches field of a node containsa list of the numbers of the first nodes of all sequences for which it is a branchpointThis list is ordered in increasing numbers See Figure 31

Chapter 3 Hacking 23

Head

|

|

v

---------

| |

| 21 |

| |

1213 1311 | | 1222 122111

--------- --------- --------- --------- -------------

^ ^ | ^ ^

| | | | |

| | v | |

| --------- |

| 13 |

--------- -----------

1211 131 1221 12211

--------- ---------

^ | ^

| | |

| v |

| --------- |

| 12 |

---------------------- ---------

121 122

|

|

v

---------

11

Figure 31 The organization of an example RCS file

32 Still missing

RCS is still missing some features The following is an unordered list of ldquoto-do musingsrdquo keptby the RCS maintainers If you would like to hack on an item See Section 33 [Reportingbugs] page 25

bull Add an option to rcsmerge so that it can use an arbitrary program to do the 3-waymerge instead of the default merge Likewise for rcsdiff and diff It should be possibleto pass arbitrary options to these programs and to the subsidiary co invocations

bull Add format options for finer control over the output of ident and rlog Eg thereshould be an easy way for rlog to output lines like lsquosrcmainc 24 wftrsquo one for

Chapter 3 Hacking 24

each locked revision rlog options should have three orthogonal types selecting filesselecting revisions and selecting rlog format

bull Add format options for finer control over the output of keyword strings Eg thereshould be some way to prepend lsquo()rsquo and there should be some way to change lsquo$rsquo tosome other character to disable further substitution These options should make theresulting files uneditable like lsquo-kvrsquo

bull Add long options eg --keyword-substitution Unfortunately RCSrsquos option syntaxis incompatible with getopt Perhaps the best way is to overload rcs eg lsquorcs diff

--keyword-substitution=old filersquo instead of lsquorcsdiff -ko filersquo

bull rlog -rMN should work even if M and N have different numbers of fields so long asM is an ancestor of N or vice versa

bull rcs should evaluate options in order this allows rcs -oS -nS

bull Be able to redo your most recent checkin with minor changes

bull co -u shouldnrsquot complain about a lsquo+wrsquo working file if contents donrsquot change

bull Add a lsquo-rsquo option to take the list of file names from standard input Perhaps the filenames should be null-terminated not newline-terminated so that those that containnewlines are handled properly

bull Permit multiple optionndashfilename pairs eg co -r14 a -r15 b

bull Add an option to break a symbolic link to an RCS file instead of breaking the hardlink that it points to

bull Add ways to specify the earliest revision the most recent revision the earliest or latestrevision on a particular branch and the parent or child of some other revision

bull If a user has multiple locks perhaps ci should fall back on the method of ci -k to figureout which revision to use

bull Add an option to rcsclean to clean directories recursively

bull Write an rcsck program that repairs corrupted RCS files much as fsck repairs corruptedfile systems For example it should remove stale lock files

bull Update the date parser to use the more modern getdatey by Bellovin Salz andBerets or the even more modern getdate by Moraes None of these getdate imple-mentations are as robust as RCSrsquos old warhorse in avoiding problems like arithmeticoverflow so theyrsquoll have to be fixed first (Perhaps we can use gnulib module getdate)

bull Break up the code into a library so that itrsquos easier to write new programs that manip-ulate RCS files and so that useless code is removed from the existing programs Forexample the rcs command contains unnecessary keyword substitution baggage andthe merge command can be greatly pruned

bull Make it easier to use your favorite text editor to edit log messages etc instead ofhaving to type them in irretrievably at the terminal

bull Let the user specify a search path for default branches eg to use L as the defaultbranch if it works and M otherwise Let the user require that at least one entry inthe search path works Let the user say that later entries in the search path are readonly ie one cannot check in changes to them This should be an option settable bylsquoRCSINITrsquo

bull Add a way for a user to see which revisions affected which lines

Chapter 3 Hacking 25

bull Have rlog -nN F print just the revision number that N translates to Eg rlog -nB

F would print the highest revision on the branch B Use this to add an option -bB torcsbranch to freeze the named branch This should interact well with default branches

bull Add a co option that prints the revision number before each line as SCCSrsquos get -m

does [I implemented this for Emacs 22 as a subroutine of vc-annotate qv mdashttn]

33 Reporting bugs

To report bugs or suggest enhancements for GNU RCS please visit its homepage (httpwwwgnuorgsoftwarercs) to find directions on how to ldquofile a bug reportrdquo online orsend electronic mail to help-rcsgnuorg (If you use the web interface you donrsquot needto also send email since that is done automatically)

For bug reports please include enough information for the maintainers to reproduce theproblem Generally speaking that means

bull The RCS version command(s) and manual section(s) involved

bull Hardware and operating system names and versions

bull The contents of any input files necessary to reproduce the bug

bull The expected behavior andor output

bull A description of the problem and samples of any erroneous output

bull Options you gave to configure other than specifying installation directories

bull Anything else that you think would be helpful

When in doubt whether something is needed or not include it Itrsquos better to include toomuch than to leave out something important

Patches are welcome if possible please make them with lsquogit format-patchrsquo and includeChangeLog entries (see Section ldquoChange Logrdquo in The GNU Emacs Manual) Please followthe existing coding style

Appendix A GNU Free Documentation License 26

Appendix A GNU Free Documentation License

Version 13 3 November 2008

Copyright ccopy 2000 2001 2002 2007 2008 Free Software Foundation Inchttpfsforg

Everyone is permitted to copy and distribute verbatim copiesof this license document but changing it is not allowed

0 PREAMBLE

The purpose of this License is to make a manual textbook or other functional anduseful document free in the sense of freedom to assure everyone the effective freedomto copy and redistribute it with or without modifying it either commercially or non-commercially Secondarily this License preserves for the author and publisher a wayto get credit for their work while not being considered responsible for modificationsmade by others

This License is a kind of ldquocopyleftrdquo which means that derivative works of the documentmust themselves be free in the same sense It complements the GNU General PublicLicense which is a copyleft license designed for free software

We have designed this License in order to use it for manuals for free software becausefree software needs free documentation a free program should come with manualsproviding the same freedoms that the software does But this License is not limited tosoftware manuals it can be used for any textual work regardless of subject matter orwhether it is published as a printed book We recommend this License principally forworks whose purpose is instruction or reference

1 APPLICABILITY AND DEFINITIONS

This License applies to any manual or other work in any medium that contains anotice placed by the copyright holder saying it can be distributed under the termsof this License Such a notice grants a world-wide royalty-free license unlimited induration to use that work under the conditions stated herein The ldquoDocumentrdquobelow refers to any such manual or work Any member of the public is a licensee andis addressed as ldquoyourdquo You accept the license if you copy modify or distribute the workin a way requiring permission under copyright law

A ldquoModified Versionrdquo of the Document means any work containing the Document ora portion of it either copied verbatim or with modifications andor translated intoanother language

A ldquoSecondary Sectionrdquo is a named appendix or a front-matter section of the Documentthat deals exclusively with the relationship of the publishers or authors of the Documentto the Documentrsquos overall subject (or to related matters) and contains nothing thatcould fall directly within that overall subject (Thus if the Document is in part atextbook of mathematics a Secondary Section may not explain any mathematics) Therelationship could be a matter of historical connection with the subject or with relatedmatters or of legal commercial philosophical ethical or political position regardingthem

The ldquoInvariant Sectionsrdquo are certain Secondary Sections whose titles are designated asbeing those of Invariant Sections in the notice that says that the Document is released

Appendix A GNU Free Documentation License 27

under this License If a section does not fit the above definition of Secondary then it isnot allowed to be designated as Invariant The Document may contain zero InvariantSections If the Document does not identify any Invariant Sections then there are none

The ldquoCover Textsrdquo are certain short passages of text that are listed as Front-CoverTexts or Back-Cover Texts in the notice that says that the Document is released underthis License A Front-Cover Text may be at most 5 words and a Back-Cover Text maybe at most 25 words

A ldquoTransparentrdquo copy of the Document means a machine-readable copy representedin a format whose specification is available to the general public that is suitable forrevising the document straightforwardly with generic text editors or (for images com-posed of pixels) generic paint programs or (for drawings) some widely available drawingeditor and that is suitable for input to text formatters or for automatic translation toa variety of formats suitable for input to text formatters A copy made in an otherwiseTransparent file format whose markup or absence of markup has been arranged tothwart or discourage subsequent modification by readers is not Transparent An imageformat is not Transparent if used for any substantial amount of text A copy that isnot ldquoTransparentrdquo is called ldquoOpaquerdquo

Examples of suitable formats for Transparent copies include plain ASCII withoutmarkup Texinfo input format LaTEX input format SGML or XML using a publiclyavailable DTD and standard-conforming simple HTML PostScript or PDF designedfor human modification Examples of transparent image formats include PNG XCFand JPG Opaque formats include proprietary formats that can be read and editedonly by proprietary word processors SGML or XML for which the DTD andor pro-cessing tools are not generally available and the machine-generated HTML PostScriptor PDF produced by some word processors for output purposes only

The ldquoTitle Pagerdquo means for a printed book the title page itself plus such followingpages as are needed to hold legibly the material this License requires to appear in thetitle page For works in formats which do not have any title page as such ldquoTitle Pagerdquomeans the text near the most prominent appearance of the workrsquos title preceding thebeginning of the body of the text

The ldquopublisherrdquo means any person or entity that distributes copies of the Documentto the public

A section ldquoEntitled XYZrdquo means a named subunit of the Document whose title eitheris precisely XYZ or contains XYZ in parentheses following text that translates XYZ inanother language (Here XYZ stands for a specific section name mentioned below suchas ldquoAcknowledgementsrdquo ldquoDedicationsrdquo ldquoEndorsementsrdquo or ldquoHistoryrdquo) To ldquoPreservethe Titlerdquo of such a section when you modify the Document means that it remains asection ldquoEntitled XYZrdquo according to this definition

The Document may include Warranty Disclaimers next to the notice which states thatthis License applies to the Document These Warranty Disclaimers are considered tobe included by reference in this License but only as regards disclaiming warrantiesany other implication that these Warranty Disclaimers may have is void and has noeffect on the meaning of this License

2 VERBATIM COPYING

Appendix A GNU Free Documentation License 28

You may copy and distribute the Document in any medium either commercially ornoncommercially provided that this License the copyright notices and the licensenotice saying this License applies to the Document are reproduced in all copies andthat you add no other conditions whatsoever to those of this License You may not usetechnical measures to obstruct or control the reading or further copying of the copiesyou make or distribute However you may accept compensation in exchange for copiesIf you distribute a large enough number of copies you must also follow the conditionsin section 3

You may also lend copies under the same conditions stated above and you may publiclydisplay copies

3 COPYING IN QUANTITY

If you publish printed copies (or copies in media that commonly have printed covers) ofthe Document numbering more than 100 and the Documentrsquos license notice requiresCover Texts you must enclose the copies in covers that carry clearly and legibly allthese Cover Texts Front-Cover Texts on the front cover and Back-Cover Texts onthe back cover Both covers must also clearly and legibly identify you as the publisherof these copies The front cover must present the full title with all words of the titleequally prominent and visible You may add other material on the covers in additionCopying with changes limited to the covers as long as they preserve the title of theDocument and satisfy these conditions can be treated as verbatim copying in otherrespects

If the required texts for either cover are too voluminous to fit legibly you should putthe first ones listed (as many as fit reasonably) on the actual cover and continue therest onto adjacent pages

If you publish or distribute Opaque copies of the Document numbering more than 100you must either include a machine-readable Transparent copy along with each Opaquecopy or state in or with each Opaque copy a computer-network location from whichthe general network-using public has access to download using public-standard networkprotocols a complete Transparent copy of the Document free of added material Ifyou use the latter option you must take reasonably prudent steps when you begindistribution of Opaque copies in quantity to ensure that this Transparent copy willremain thus accessible at the stated location until at least one year after the last timeyou distribute an Opaque copy (directly or through your agents or retailers) of thatedition to the public

It is requested but not required that you contact the authors of the Document wellbefore redistributing any large number of copies to give them a chance to provide youwith an updated version of the Document

4 MODIFICATIONS

You may copy and distribute a Modified Version of the Document under the conditionsof sections 2 and 3 above provided that you release the Modified Version under preciselythis License with the Modified Version filling the role of the Document thus licensingdistribution and modification of the Modified Version to whoever possesses a copy ofit In addition you must do these things in the Modified Version

A Use in the Title Page (and on the covers if any) a title distinct from that of theDocument and from those of previous versions (which should if there were any

Appendix A GNU Free Documentation License 29

be listed in the History section of the Document) You may use the same title asa previous version if the original publisher of that version gives permission

B List on the Title Page as authors one or more persons or entities responsible forauthorship of the modifications in the Modified Version together with at least fiveof the principal authors of the Document (all of its principal authors if it has fewerthan five) unless they release you from this requirement

C State on the Title page the name of the publisher of the Modified Version as thepublisher

D Preserve all the copyright notices of the Document

E Add an appropriate copyright notice for your modifications adjacent to the othercopyright notices

F Include immediately after the copyright notices a license notice giving the publicpermission to use the Modified Version under the terms of this License in the formshown in the Addendum below

G Preserve in that license notice the full lists of Invariant Sections and required CoverTexts given in the Documentrsquos license notice

H Include an unaltered copy of this License

I Preserve the section Entitled ldquoHistoryrdquo Preserve its Title and add to it an itemstating at least the title year new authors and publisher of the Modified Versionas given on the Title Page If there is no section Entitled ldquoHistoryrdquo in the Docu-ment create one stating the title year authors and publisher of the Documentas given on its Title Page then add an item describing the Modified Version asstated in the previous sentence

J Preserve the network location if any given in the Document for public access toa Transparent copy of the Document and likewise the network locations given inthe Document for previous versions it was based on These may be placed in theldquoHistoryrdquo section You may omit a network location for a work that was publishedat least four years before the Document itself or if the original publisher of theversion it refers to gives permission

K For any section Entitled ldquoAcknowledgementsrdquo or ldquoDedicationsrdquo Preserve the Titleof the section and preserve in the section all the substance and tone of each of thecontributor acknowledgements andor dedications given therein

L Preserve all the Invariant Sections of the Document unaltered in their text andin their titles Section numbers or the equivalent are not considered part of thesection titles

M Delete any section Entitled ldquoEndorsementsrdquo Such a section may not be includedin the Modified Version

N Do not retitle any existing section to be Entitled ldquoEndorsementsrdquo or to conflict intitle with any Invariant Section

O Preserve any Warranty Disclaimers

If the Modified Version includes new front-matter sections or appendices that qualifyas Secondary Sections and contain no material copied from the Document you may atyour option designate some or all of these sections as invariant To do this add their

Appendix A GNU Free Documentation License 30

titles to the list of Invariant Sections in the Modified Versionrsquos license notice Thesetitles must be distinct from any other section titles

You may add a section Entitled ldquoEndorsementsrdquo provided it contains nothing butendorsements of your Modified Version by various partiesmdashfor example statements ofpeer review or that the text has been approved by an organization as the authoritativedefinition of a standard

You may add a passage of up to five words as a Front-Cover Text and a passage of upto 25 words as a Back-Cover Text to the end of the list of Cover Texts in the ModifiedVersion Only one passage of Front-Cover Text and one of Back-Cover Text may beadded by (or through arrangements made by) any one entity If the Document alreadyincludes a cover text for the same cover previously added by you or by arrangementmade by the same entity you are acting on behalf of you may not add another butyou may replace the old one on explicit permission from the previous publisher thatadded the old one

The author(s) and publisher(s) of the Document do not by this License give permissionto use their names for publicity for or to assert or imply endorsement of any ModifiedVersion

5 COMBINING DOCUMENTS

You may combine the Document with other documents released under this Licenseunder the terms defined in section 4 above for modified versions provided that youinclude in the combination all of the Invariant Sections of all of the original documentsunmodified and list them all as Invariant Sections of your combined work in its licensenotice and that you preserve all their Warranty Disclaimers

The combined work need only contain one copy of this License and multiple identicalInvariant Sections may be replaced with a single copy If there are multiple InvariantSections with the same name but different contents make the title of each such sectionunique by adding at the end of it in parentheses the name of the original author orpublisher of that section if known or else a unique number Make the same adjustmentto the section titles in the list of Invariant Sections in the license notice of the combinedwork

In the combination you must combine any sections Entitled ldquoHistoryrdquo in the vari-ous original documents forming one section Entitled ldquoHistoryrdquo likewise combine anysections Entitled ldquoAcknowledgementsrdquo and any sections Entitled ldquoDedicationsrdquo Youmust delete all sections Entitled ldquoEndorsementsrdquo

6 COLLECTIONS OF DOCUMENTS

You may make a collection consisting of the Document and other documents releasedunder this License and replace the individual copies of this License in the variousdocuments with a single copy that is included in the collection provided that youfollow the rules of this License for verbatim copying of each of the documents in allother respects

You may extract a single document from such a collection and distribute it individu-ally under this License provided you insert a copy of this License into the extracteddocument and follow this License in all other respects regarding verbatim copying ofthat document

Appendix A GNU Free Documentation License 31

7 AGGREGATION WITH INDEPENDENT WORKS

A compilation of the Document or its derivatives with other separate and independentdocuments or works in or on a volume of a storage or distribution medium is calledan ldquoaggregaterdquo if the copyright resulting from the compilation is not used to limit thelegal rights of the compilationrsquos users beyond what the individual works permit Whenthe Document is included in an aggregate this License does not apply to the otherworks in the aggregate which are not themselves derivative works of the Document

If the Cover Text requirement of section 3 is applicable to these copies of the Documentthen if the Document is less than one half of the entire aggregate the Documentrsquos CoverTexts may be placed on covers that bracket the Document within the aggregate or theelectronic equivalent of covers if the Document is in electronic form Otherwise theymust appear on printed covers that bracket the whole aggregate

8 TRANSLATION

Translation is considered a kind of modification so you may distribute translationsof the Document under the terms of section 4 Replacing Invariant Sections withtranslations requires special permission from their copyright holders but you mayinclude translations of some or all Invariant Sections in addition to the original versionsof these Invariant Sections You may include a translation of this License and all thelicense notices in the Document and any Warranty Disclaimers provided that youalso include the original English version of this License and the original versions ofthose notices and disclaimers In case of a disagreement between the translation andthe original version of this License or a notice or disclaimer the original version willprevail

If a section in the Document is Entitled ldquoAcknowledgementsrdquo ldquoDedicationsrdquo or ldquoHis-toryrdquo the requirement (section 4) to Preserve its Title (section 1) will typically requirechanging the actual title

9 TERMINATION

You may not copy modify sublicense or distribute the Document except as expresslyprovided under this License Any attempt otherwise to copy modify sublicense ordistribute it is void and will automatically terminate your rights under this License

However if you cease all violation of this License then your license from a particularcopyright holder is reinstated (a) provisionally unless and until the copyright holderexplicitly and finally terminates your license and (b) permanently if the copyrightholder fails to notify you of the violation by some reasonable means prior to 60 daysafter the cessation

Moreover your license from a particular copyright holder is reinstated permanently ifthe copyright holder notifies you of the violation by some reasonable means this is thefirst time you have received notice of violation of this License (for any work) from thatcopyright holder and you cure the violation prior to 30 days after your receipt of thenotice

Termination of your rights under this section does not terminate the licenses of partieswho have received copies or rights from you under this License If your rights havebeen terminated and not permanently reinstated receipt of a copy of some or all of thesame material does not give you any rights to use it

Appendix A GNU Free Documentation License 32

10 FUTURE REVISIONS OF THIS LICENSE

The Free Software Foundation may publish new revised versions of the GNU FreeDocumentation License from time to time Such new versions will be similar in spiritto the present version but may differ in detail to address new problems or concernsSee httpwwwgnuorgcopyleft

Each version of the License is given a distinguishing version number If the Documentspecifies that a particular numbered version of this License ldquoor any later versionrdquoapplies to it you have the option of following the terms and conditions either of thatspecified version or of any later version that has been published (not as a draft) bythe Free Software Foundation If the Document does not specify a version number ofthis License you may choose any version ever published (not as a draft) by the FreeSoftware Foundation If the Document specifies that a proxy can decide which futureversions of this License can be used that proxyrsquos public statement of acceptance of aversion permanently authorizes you to choose that version for the Document

11 RELICENSING

ldquoMassive Multiauthor Collaboration Siterdquo (or ldquoMMC Siterdquo) means any World WideWeb server that publishes copyrightable works and also provides prominent facilitiesfor anybody to edit those works A public wiki that anybody can edit is an example ofsuch a server A ldquoMassive Multiauthor Collaborationrdquo (or ldquoMMCrdquo) contained in thesite means any set of copyrightable works thus published on the MMC site

ldquoCC-BY-SArdquo means the Creative Commons Attribution-Share Alike 30 license pub-lished by Creative Commons Corporation a not-for-profit corporation with a principalplace of business in San Francisco California as well as future copyleft versions of thatlicense published by that same organization

ldquoIncorporaterdquo means to publish or republish a Document in whole or in part as partof another Document

An MMC is ldquoeligible for relicensingrdquo if it is licensed under this License and if all worksthat were first published under this License somewhere other than this MMC andsubsequently incorporated in whole or in part into the MMC (1) had no cover textsor invariant sections and (2) were thus incorporated prior to November 1 2008

The operator of an MMC Site may republish an MMC contained in the site underCC-BY-SA on the same site at any time before August 1 2009 provided the MMC iseligible for relicensing

Appendix A GNU Free Documentation License 33

ADDENDUM How to use this License for your documents

To use this License in a document you have written include a copy of the License in thedocument and put the following copyright and license notices just after the title page

Copyright (C) year your name

Permission is granted to copy distribute andor modify this document

under the terms of the GNU Free Documentation License Version 13

or any later version published by the Free Software Foundation

with no Invariant Sections no Front-Cover Texts and no Back-Cover

Texts A copy of the license is included in the section entitled lsquolsquoGNU

Free Documentation Licensersquorsquo

If you have Invariant Sections Front-Cover Texts and Back-Cover Texts replace theldquowith Textsrdquo line with this

with the Invariant Sections being list their titles with

the Front-Cover Texts being list and with the Back-Cover Texts

being list

If you have Invariant Sections without Cover Texts or some other combination of thethree merge those two alternatives to suit the situation

If your document contains nontrivial examples of program code we recommend releasingthese examples in parallel under your choice of free software license such as the GNUGeneral Public License to permit their use in free software

Index 34

Index

Aaccess control policy 3Author 3author specifying 10

Bbehavior prior to version 5 10behavior version 3 10behavior version 4 10binary-old-keyword-value substitution mode 9branch growth 7branch number 2branch tip 2branch default 3bug reporting 25

Ccase sensitivity file format 21checkin 3checklist for bug reports 25checkout 3checkout implicit 5ci invocation 11co invocation 12comma-v file format 1command help 7command version 7command-line option to specify a revision 7credits 1

DDate 3date formats 8date specifying 8dates file format 21default branch 3default branch setting 15deleting revisions 15description of working file 2description text specifying 8

Eempty log message 9emulation previous RCS versions 10encoding file format 20environment variables 10

Ffeatures still missing 23

file names on the command-line 7format RCSfile 20

Ggrammar file format 20

HHeader 3history 1

IId 3ident invocation 13implicit checkout circumstance 5implicit checkout locked 12implicit checkout unlocked 12instantiating a working file 2interaction model 1interactive mode 9invocation ci 11invocation co 12invocation ident 13invocation merge 14invocation rcs 14 15invocation rcsclean 16invocation rcsdiff 17invocation rcsmerge 17invocation rlog 18

Kkeyword-only substitution mode 9keyword-value substitution mode 8keyword-value-locker substitution mode 9keywords table of 3

Llayout of nodes file format 21license 1Locker 3locking a revision 15locking on implicit checkout 12locking non-strict 5locking set non-strict 15locking set strict 15locking strict 5locks in RCS file 3Log 3log message empty 9LOGNAME 11

Index 35

Mmemory limit 11merge invocation 14model interaction 1

NName 4names symbolic 3node layout file format 21non-strict locking 5number branch 2number revision 2

Oold-keyword-value substitution mode 9order of options and file names 7outdating revisions 15overview 1

Ppairing RCS and working files 7patches contributing 25problems 25projects related 1

Qquiet mode 9

Rrange of revisions specifying 7RCS file 2rcs invocation 14 15RCS version emulation 10RCS_MEM_LIMIT 11rcsclean invocation 16rcsdiff invocation 17RCSfile 4RCSfile format 20RCSINIT 10rcsmerge invocation 17removing revisions 15reporting bugs 25Revision 4revision number 2revision range specifying 7

revision specifying 7revisions tree of 3rlog invocation 18

SSource 4specifying a date 8specifying a range of revisions 7specifying a revision 7specifying a state 9specifying a suffix list 10specifying a timedate 8specifying author 10specifying description text 8specifying substitution mode 8State 4state specifying 9strict locking 5substitution mode default 8substitution mode specifying 8suffix list specifying 10symbolic names 3

TTEMP 11third-party interop file format 21Tichy Walter F 1time zone 8timedate specifying 8tip 2tip increment 7TMP 11TMPDIR 11tree of revisions 3

Uunlocking a revision 15USER 11

Vvalue-only substitution mode 9

Wwhitespace file format 21working file description 2working file instantiation 2

  • Overview
    • Credits
    • Concepts
      • Interaction model
      • Working file
      • RCS file
      • Fundamental operations
      • Keywords
        • Quick tour
          • Usage
            • Common elements
              • Revision options
              • Date option
              • Description option
              • Substitution mode option
              • Log message option
              • Misc common options
              • Environment
                • Invoking ci
                • Invoking co
                • Invoking ident
                • Invoking merge
                • Invoking rcs
                  • modern
                  • legacy
                    • Invoking rcsclean
                    • Invoking rcsdiff
                    • Invoking rcsmerge
                    • Invoking rlog
                      • Hacking
                        • File format
                          • File format grammar
                          • Additional particulars of the file format
                            • Still missing
                            • Reporting bugs
                              • GNU Free Documentation License
                              • Index
Page 12: GNU RCS · The RCS file is also known (colloquially) as the “comma-v file”, due to its name often ending in ,v (e.g., a.c,v). A revision number is a branch number followed by

Chapter 2 Usage 9

Locker keyword strings only as a file is being locked ie by ci -l and co -lThis is the default substitution mode

kvl Like -kkv except that a lockerrsquos name is always inserted if the given revisionis currently locked

k Generate lsquo$Revision$rsquo (dollar-sign keyword dollar-sign) This is useful whencomparing different revisions of a file Log messages are inserted after Log key-words even if -kk is specified since this tends to be more useful when mergingchanges

o Like -kkv but use the old value present in the working file just before it waschecked in This can be useful for file formats that cannot tolerate any changesto substrings that happen to take the form of keyword strings

b Like -ko but do all file io in binary mode This makes little difference onPOSIX and Unix hosts but on DOS-like hosts one should use rcs -i -kb toinitialize an RCS file intended to be used for binary files Also on all hostsrcsmerge normally refuses to merge files when -kb is in effect

v Generate lsquo513rsquo (value only) Further keyword substitution cannot be per-formed once the keyword names are removed so this should be used with careBecause of this danger of losing keywords -kv cannot be combined with -land the owner write permission of the working file is turned off to edit the filelater check it out again without -kv

215 Log message option

Both ci and rcs allow a log message to be specified with the -m option If themsg argumentto this option is empty RCS uses the default lsquo empty log message rsquo This particularmessage is handled specially (ie filtered out) by rlog

216 Misc common options

Other common options are -I -q -s -T -V -w -x

-I This option enables interactive mode More precisely it forces interactive modewhereby RCS commands believe that their standard input is a terminal nor-mally a precondition for displaying a prompt to receive input (such as a log mes-sage on checkin) The intention of -I is for scripting situations where standardinput is actually not a terminal but you know beforehand (without prompting)that input is needed and you are ready to provide it on standard input anyway

-q This option enables quiet mode Commands work silently (unless there is anerror condition) and suppress warnings and prompts

-sstate Specify the state to be state

-T This option controls how commands timestamp the RCS file Normally RCScommands set the RCS filersquos timestamp when modifying it in the ldquonaturalrdquo way(without taking any particular care) With -T on the other hand the com-mands either preserve the timestamp (for standalone lockunlock operations)or use the timestamp of the working file (for ci)

Chapter 2 Usage 10

This can be useful if the RCS file is found in a makefile targetrsquos list of pre-requisites (see Section ldquoRule Syntaxrdquo in The GNU Make Manual) that is ifsome target should be rebuilt if the RCS file is newer than it In that case youcan do lsquorcs -u -Trsquo for example to unlock a revision in the RCS file withouttriggering a recompilation

-V Behave like --version ie display command version information and exitsuccessfully NB This option is obsolete and its support will be removed insome future release

-Vn n specifies the RCS (major) version to emulate Valid values for n are 3 4 5Version 5 is the current version so -V5 does nothing special

In versions prior to 5 RCS outputs lsquotrsquo (tab U+09) between the lsquorsquo (colon) andthe value (for keyword substitution) instead of space uses the RCS file commentstring to prefix each line in the Log expansion instead of computing it on thefly from the input text writesreads localtime instead of UTC and displaysslightly different output for rlog

For version 4 the Header expansion unconditionally includes Locker lockeras if the kvl substitution mode were specified (see Section 214 [Substitutionmode option] page 8)

For version 3 the Header expansion omits the directories from the filename andsays only Locked instead of the state

-wlogin Some commands accept an option of the form lsquo-wloginrsquo to specify the loginname of the author of a revision ie ldquowhordquo is responsible

-xsuff Specify suff as the slash-separated list of file name suffixes used to recognizean RCS file The default value is lsquovrsquo that is first try with lsquovrsquo then try withan empty suffix

This basename search occurs within (ie starting from the beginning) the largerdirectory search loop which comprises two candidates dRCS and d where dis the directory component of the working file name For example given theworking file ac in the current directory RCS tries in order these candidates

RCSacv

RCSac

acv

ac

Note that the last candidate is impossible (and is in fact discarded) becausethe working and RCS files cannot have the same name

217 Environment

Various environment variables influence how RCS works

[Environment Variable]RCSINITAnother way to set common options is with the lsquoRCSINITrsquo environment variable Thisis a space-separated list of options Use lsquorsquo (backslash) to escape significant spaceFor example

Chapter 2 Usage 11

Set the value make it available to subsequent commandsRCSINIT=-q -xv -zLT

export RCSINIT

Use it (implicitly)rlog -L foo

This example in Bourne shell syntax arranges for RCS commands to operate as ifeach command-line had prepended lsquo-q -xv -zLTrsquo to the rest of the command-lineThe effective command-line that rlog sees is thus lsquo-q -xv -zLT -L foorsquo

[Environment Variable]RCS_MEM_LIMITNormally for speed commands either memory map or copy into memory the RCS fileif its size is less than thememory limit currently defaulting to ldquounlimitedrdquo Otherwise(or if the initially-tried speedy ways fail) the commands fall back to using standardio routines

You can adjust the memory limit by setting the lsquoRCS_MEM_LIMITrsquo environment variableto a numeric value (measured in kilobytes) An empty value is silently ignored

As a side effect specifying the memory limit inhibits fall-back to slower routines(This env var is mostly intended for testing RCS normally you can leave it unsetProbably it will be removed in a future release)

[Environment Variable]TMPDIR[Environment Variable]TMP[Environment Variable]TEMP

Commands sometimes create temporary files normally in a system-dependent direc-tory such as tmp You can override this directory by specifying another one asthe value of one of the environment variables TMPDIR TMP or TEMP (checked in thatorder)

[Environment Variable]LOGNAME[Environment Variable]USER

Absent -wlogin or when login is omitted (see Section 216 [Misc common options]page 9) commands check environment variables LOGNAME and USER (in that order)If neither of these are set RCS queries the host for and uses your login

22 Invoking ci

rcs ci [options] file

(or ldquocirdquo instead of ldquorcs cirdquo)

The ci command adds a revision to the RCS file reflecting the current state of the workingfile This operation is also known as ldquocheckinrdquo

-f[rev] Force new entry even if no content changed

-I[rev]

-q[rev] See Section 216 [Misc common options] page 9

-i[rev] Initial checkin error if the RCS file already exists

-j[rev] Just checkin donrsquot initialize error if the RCS file does not exist

Chapter 2 Usage 12

-k[rev] Compute revision from working file keywords

-r Release lock and delete working file

-rrev Do normal checkin

-l[rev] Like -r but immediately checkout locked (co -l) afterwards

-u[rev] Like -l but checkout unlocked (co -u)

-M[rev] Reset working file mtime (relevant for -l -u)

Multiple flags in -fiIjklMqru may be given except for -r -l -u which are mutuallyexclusive For a fully specified revision of the form brn nmust be greater than any existingon br or br must be new If rev is omitted compute it from the last lock (co -l) perhapsstarting a new branch If there is no lock use defbr(L+1) See Section 211 [Revisionoptions] page 7

-d[date]

-zzone See Section 212 [Date option] page 8 If no date specified use the workingfile modification time

-m[msg] Use msg as the log message See Section 215 [Log message option] page 9

-nname

-Nname Assign symbolic name to the entry For -n name must be new (no previousassignment) For -N overwrite any previous assignment

-sstate See Section 216 [Misc common options] page 9 Set the state

-t-text

-tfile-name

See Section 213 [Description option] page 8

-T Set the RCS filersquos modification time to the new revisionrsquos time if the former pre-cedes the latter and there is a new revision preserve the RCS filersquos modificationtime otherwise

-wwho Use who as the author

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

23 Invoking co

rcs co [options] file

(or ldquocordquo instead of ldquorcs cordquo)

The co command retrieves a revision from the RCS file writing a new working file Thisoperation is also known as ldquocheckoutrdquo

-f[rev] Force overwrite of working file

-I[rev]

-q[rev] See Section 216 [Misc common options] page 9

-p[rev] Write to stdout instead of the working file

Chapter 2 Usage 13

-r[rev] Normal checkout

-l[rev] Like -r but also lock

-u[rev] Like -l but unlock

-M[rev] Reset working file mtime (relevant for -l -u)

Multiple flags in -fIlMpqru may be given except for -r -l -u which are mutuallyexclusive See Section 211 [Revision options] page 7

-ksubst See Section 214 [Substitution mode option] page 8

-ddate

-zzone See Section 212 [Date option] page 8 Select latest before or on date

-jjoins Merge using joins a list of revrev pairs NB This option is obsolete (seeSection 29 [rcsmerge] page 17)

-sstate See Section 216 [Misc common options] page 9 Select matching state

-S Enable self-same mode In this mode the owner of a lock is unimportantjust that it exists Effectively this prevents you from checking out the samerevision twice

$ whoami

ttn

$ co -l -f z

RCSzv --gt z

revision 11 (locked)

done

$ co -S -l -f z

RCSzv --gt z

co RCSzv Revision 11 is already locked by ttn

-T Preserve the modification time on the RCS file even if it changes because a lockis added or removed

-wwho Select matching login who

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

24 Invoking ident

ident [options] [file ]

If no file is specified scan standard input The ident command scans its input for keywords(see Section 12 [Concepts] page 1) displaying to standard output what it finds

-q Normally if no patterns are found for a file ident emits a warning This optionsuppresses the warning

Chapter 2 Usage 14

-V Note that -Vn is not a valid option for ident in contrast to most other RCScommands (see Section 216 [Misc common options] page 9)

In addition to the normal keyword pattern for Subversion 12 (and later) compatibility1ident also recognizes patterns having one of the forms

$keyword text $

two colons and space after keyword

space before ending $

$keyword text$

two colons and space after keyword

hash before ending $

25 Invoking merge

merge [options] receiving-sibling parent other-sibling

The merge command combines the differences between a the parent and the other siblingand the differences between the parent and the receiving sibling It writes the result to thereceiving sibling

-A

-E

-e Use diff3 -A -E (default) or -e respectively

-p Write to stdout instead of overwriting receiving-sibling

-q See Section 216 [Misc common options] page 9 Suppress conflict warnings

-Llabel (up to three times) Specify the conflict labels for receiving-sibling parent andother-sibling respectively

-V Note that -Vn is not a valid option for merge in contrast to most other RCScommands (see Section 216 [Misc common options] page 9)

26 Invoking rcs

The rcs command is unique in the set of RCS programs in that it has two usages themodern (for RCS 590 and later) and the legacy

261 modern

rcs [options] command [command-arg ]

This rcs usage dispatches to command passing along command-arg without interpreta-tion

--commands

Display a list of available commands including a one-line description and exitsuccessfully

1 The fixed-length keyword syntax is described in detail in Version Control with Subversion chapterldquoAdvanced Topicsrdquo section ldquoKeyword Substitutionrdquo

Chapter 2 Usage 15

--aliases

Display a list of command aliases and exit successfully

--help command

Display help for a particular command and exit successfully For example todisplay help for the legacy interface use

--help frob

262 legacy

rcs frob [options] file

(or ldquorcsrdquo instead of ldquorcs frobrdquo)

This rcs usage performs various administrative operations on the RCS file depending onthe options given

-i Create and initialize a new RCS file

-L Set strict locking

-U Set non-strict locking

-M Donrsquot send mail when breaking someone elsersquos lock

-T Preserve the modification time on the RCS file unless a revision is removed

-I

-q See Section 216 [Misc common options] page 9

-alogins Append logins (comma-separated list of usernames) to access-list

-e[logins]

Erase logins (comma-separated list of usernames) from access-list If logins isomitted clear the access-list

-Afile-name

Append access-list of file-name to current access-list

-b[rev] Set default branch to that of rev or highest branch on trunk if rev is omitted

-l[rev] Lock a revision

-u[rev] Unlock a revision

-cstring Set comment leader to string NB Donrsquot use obsolete

-ksubst See Section 214 [Substitution mode option] page 8

-mrev[msg]

Replace log message with msg See Section 215 [Log message option] page 9

-nname[[rev]]

If rev is omitted delete symbolic name Otherwise associate name with rev name must be new

-Nname[[rev]]

Like -n but overwrite any previous assignment

-orange Delete (also known as ldquooutdaterdquo) revisions in range

Chapter 2 Usage 16

rev single revision

br latest revision on branch br

rev1rev2

rev1 to rev2 on same branch inclusive

rev beginning of branch to rev

rev rev to end of branch

-sstate[rev]

See Section 216 [Misc common options] page 9 Set state

-t-text

-tfile-name

See Section 213 [Description option] page 8 Replace description

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

These options have no effect and are included solely for consistency with other comamnds(see Section 217 [Environment] page 10) -zzone

27 Invoking rcsclean

rcs clean [options] [file ]

(or ldquorcscleanrdquo instead of ldquorcs cleanrdquo)

The rcsclean command removes working files that are not being worked on If given -u italso unlocks and removes working files that are being worked on but have not changed Ifno file is specified operate on all the working files in the current directory

-r[rev] Specify revision

-u[rev] Unlock if is locked and no differences found

-n[rev] Dry run (no act donrsquot operate)

-q[rev] See Section 216 [Misc common options] page 9

-ksubst See Section 214 [Substitution mode option] page 8

-T Preserve the modification time on the RCS file even it changes because a lockis removed

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

-zzone See Section 212 [Date option] page 8

Chapter 2 Usage 17

28 Invoking rcsdiff

rcs diff [options] file

(or ldquorcsdiffrdquo instead of ldquorcs diffrdquo)

The rcsdiff command runs diff to compare two revisions in an RCS file See Section ldquoIn-voking diffrdquo in The GNU Diffutils Manaual

-rrev (zero one or two times) Name a revision If given two revisions (lsquo-rrev1-rrev2rsquo) compare those revisions If given only one revision (lsquo-rrevrsquo) comparethe working file with it If given no revisions compare the working file with thelatest revision on the default branch

-ksubst See Section 214 [Substitution mode option] page 8

-q See Section 216 [Misc common options] page 9

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

-zzone See Section 212 [Date option] page 8

These options have no effect and are included solely for consistency with other comamnds(see Section 217 [Environment] page 10) -T

Additionally the following options (and their argument if any) are passed to the underlyingdiff command

-0 -1 -2 -3 -4 -5 -6 -7 -8 -9 -B -C -D -F -H -I

-L -U -W -a -b -c -d -e -f -h -i -n -p -t -u -w -y

long options (that start with --)

(Not all of these options are meaningful)

29 Invoking rcsmerge

rcs merge [options] file

(or ldquorcsmergerdquo instead of ldquorcs mergerdquo)

The rcsmerge command incorporates the changes between two revisions of an RCS file intothe corresponding working file

-A

-E

-e Passed to the diff3 command The default if none are specified is -E With -esuppress warnings on conflict The -A style generates the most verbose outputSee Section ldquoInvoking diff3rdquo in The GNU Diffutils Manual

-p[rev] Write to stdout instead of overwriting the working file

-q[rev] See Section 216 [Misc common options] page 9

-rrev (one or two times) specify a revision

One or two revisions must be specified (using -p -q -r) If only one is specified the secondrevision defaults to the latest revision on the default branch

Chapter 2 Usage 18

-ksubst See Section 214 [Substitution mode option] page 8

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

-zzone See Section 212 [Date option] page 8

These options have no effect and are included solely for consistency with other comamnds(see Section 217 [Environment] page 10) -T

210 Invoking rlog

rcs log [options] file

(or ldquorlogrdquo instead of ldquorcs logrdquo)

The rlog command displays information about RCS files

-L Ignore RCS files with no locks set

-R Print only the name of the RCS file

-h Print only the ldquoheaderrdquo information

-t Like -h but also include the description

-N Omit symbolic names

-b Select the default branch

-ddates See Section 212 [Date option] page 8 Select revisions based on timestampin the range dates with spec

d single revision d or earlier

d1ltd2

d2gtd1 between d1 and d2 exclusive

ltd

dgt before d

gtd

dlt after d

Instead of lsquoltrsquo or lsquogtrsquo you can use lsquolt=rsquo or lsquogt=rsquo respectively to specify inclusiveranges dates may also be a list of semicolon-separated specs

-l[who] Select revisions locked by who (comma-separated list of usernames) only or byanyone if who is omitted

-r[revs] Select revisions in revs a comma-separated list of range specs one of revrev rev rev1rev2

-sstates See Section 216 [Misc common options] page 9 states can also be a comma-separated list of states Select revisions with specified state(s)

-w[who] Select revisions checked in by who (comma-separated list of usernames) or bythe user if who is omitted

Chapter 2 Usage 19

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

-zzone See Section 212 [Date option] page 8

These options have no effect and are included solely for consistency with other comamnds(see Section 217 [Environment] page 10) lsquo-qrsquo lsquo-Trsquo

Chapter 3 Hacking 20

3 Hacking

This chapter in contrast to the previous (see Chapter 2 [Usage] page 7) is introspective Itdescribes an important aspect of RCS interop with other programs and development ideasand methods

31 File format

An RCS filersquos contents are described by the grammar below1 Overall the format is freendashformat text In most environments RCS uses the ISO 88591 encoding visible graphiccharacters are (octal) codes 041ndash176 and 240ndash377 and whitespace characters are codes010ndash015 and 040TODO Discuss or point to encoding compatibility issues

311 File format grammar

The meta syntax in this section uses the following conventions lsquo|rsquo (U+7C) separates al-ternatives lsquorsquo (U+7B) and lsquorsquo (U+7D) enclose optional phrases lsquorsquo and lsquorsquo (trailing U+2A)enclose phrases that can be repeated zero or more times lsquorsquo and lsquo+rsquo (trailing U+2B) enclosephrases that must appear at least once and can be repeated terminal symbols are in lsquorsquo(two U+22)

rcstext = admin delta desc deltatext

admin = head num

branch num

access id

symbols sym num

locks id num

strict

integrity intstring

comment string

expand string

delta = num

date num

author id

state id

branches num

next num

commitid sym

desc = desc string

deltatext = num

log string

text string

1 This section is adapted from the lsquorcsfile(5)rsquo manpage written by Walter F Tichy

Chapter 3 Hacking 21

num = digit | +

digit = 0 through 9

id = idchar | +

sym = idchar+

idchar = any visible graphic character except special

special = $ | | | | |

string = any character with doubled

word = id | num | string |

intchar = any character except

thirdp = ^L intchar

intstring = intchar thirdp

312 Additional particulars of the file format

bull In releases prior to 58 (2011-08-30) the grammar included the production

newphrase = id word

and used it in the admin delta and deltatext productions This allowed third-partyprograms to interoperate with RCS by storing opaque (to RCS) data in the file

As of 58 in the name of progress (towards more systematic file integrity support) theonly area reserved for third-party interop is in the (string) value of the integrity fieldspecifically after the first formfeed (U+0C) A further restriction (for all programs) isthat the integrity value must not contain lsquorsquo

bull Whitespace has no significance except in strings However whitespace cannot appearwithin an id num or sym and an RCS file must end with newline (U+0A) Strings areenclosed by lsquorsquo (U+40) If a string contains a lsquorsquo it must be doubled otherwise stringscan contain arbitrary binary data

bull Identifiers are case sensitive Keywords are in lower case only The sets of keywordsand identifiers can overlap

bull Dates which appear after the date keyword are of the form Ymmddhhmmss whereY is the year mm the month (01ndash12) dd the day (01ndash31) hh the hour (00ndash23) mm theminute (00ndash59) and ss the second (00ndash60) Y contains just the last two digits of theyear for years from 1900 through 1999 and all the digits of years thereafter Dates usethe Gregorian calendar times use UTC

bull The delta nodes form a tree All nodes whose numbers consist of a single pair (eg 2321 13) are on the trunk and are linked through the next field in order of decreasing

Chapter 3 Hacking 22

numbers The head field in the admin node points to the head of that sequence (iecontains the highest pair) The branch node in the admin node indicates the defaultbranch (or revision) for most RCS operations If empty the default branch is thehighest branch on the trunk

All delta nodes whose numbers consist of 2n fields (n ge 2) (eg 3111 2122) arelinked as follows All nodes whose first 2nminus1 number fields are identical are linkedthrough the next field in order of increasing numbers For each such sequence thedelta node whose number is identical to the first 2nminus2 number fields of the delta

nodes on that sequence is called the branchpoint The branches field of a node containsa list of the numbers of the first nodes of all sequences for which it is a branchpointThis list is ordered in increasing numbers See Figure 31

Chapter 3 Hacking 23

Head

|

|

v

---------

| |

| 21 |

| |

1213 1311 | | 1222 122111

--------- --------- --------- --------- -------------

^ ^ | ^ ^

| | | | |

| | v | |

| --------- |

| 13 |

--------- -----------

1211 131 1221 12211

--------- ---------

^ | ^

| | |

| v |

| --------- |

| 12 |

---------------------- ---------

121 122

|

|

v

---------

11

Figure 31 The organization of an example RCS file

32 Still missing

RCS is still missing some features The following is an unordered list of ldquoto-do musingsrdquo keptby the RCS maintainers If you would like to hack on an item See Section 33 [Reportingbugs] page 25

bull Add an option to rcsmerge so that it can use an arbitrary program to do the 3-waymerge instead of the default merge Likewise for rcsdiff and diff It should be possibleto pass arbitrary options to these programs and to the subsidiary co invocations

bull Add format options for finer control over the output of ident and rlog Eg thereshould be an easy way for rlog to output lines like lsquosrcmainc 24 wftrsquo one for

Chapter 3 Hacking 24

each locked revision rlog options should have three orthogonal types selecting filesselecting revisions and selecting rlog format

bull Add format options for finer control over the output of keyword strings Eg thereshould be some way to prepend lsquo()rsquo and there should be some way to change lsquo$rsquo tosome other character to disable further substitution These options should make theresulting files uneditable like lsquo-kvrsquo

bull Add long options eg --keyword-substitution Unfortunately RCSrsquos option syntaxis incompatible with getopt Perhaps the best way is to overload rcs eg lsquorcs diff

--keyword-substitution=old filersquo instead of lsquorcsdiff -ko filersquo

bull rlog -rMN should work even if M and N have different numbers of fields so long asM is an ancestor of N or vice versa

bull rcs should evaluate options in order this allows rcs -oS -nS

bull Be able to redo your most recent checkin with minor changes

bull co -u shouldnrsquot complain about a lsquo+wrsquo working file if contents donrsquot change

bull Add a lsquo-rsquo option to take the list of file names from standard input Perhaps the filenames should be null-terminated not newline-terminated so that those that containnewlines are handled properly

bull Permit multiple optionndashfilename pairs eg co -r14 a -r15 b

bull Add an option to break a symbolic link to an RCS file instead of breaking the hardlink that it points to

bull Add ways to specify the earliest revision the most recent revision the earliest or latestrevision on a particular branch and the parent or child of some other revision

bull If a user has multiple locks perhaps ci should fall back on the method of ci -k to figureout which revision to use

bull Add an option to rcsclean to clean directories recursively

bull Write an rcsck program that repairs corrupted RCS files much as fsck repairs corruptedfile systems For example it should remove stale lock files

bull Update the date parser to use the more modern getdatey by Bellovin Salz andBerets or the even more modern getdate by Moraes None of these getdate imple-mentations are as robust as RCSrsquos old warhorse in avoiding problems like arithmeticoverflow so theyrsquoll have to be fixed first (Perhaps we can use gnulib module getdate)

bull Break up the code into a library so that itrsquos easier to write new programs that manip-ulate RCS files and so that useless code is removed from the existing programs Forexample the rcs command contains unnecessary keyword substitution baggage andthe merge command can be greatly pruned

bull Make it easier to use your favorite text editor to edit log messages etc instead ofhaving to type them in irretrievably at the terminal

bull Let the user specify a search path for default branches eg to use L as the defaultbranch if it works and M otherwise Let the user require that at least one entry inthe search path works Let the user say that later entries in the search path are readonly ie one cannot check in changes to them This should be an option settable bylsquoRCSINITrsquo

bull Add a way for a user to see which revisions affected which lines

Chapter 3 Hacking 25

bull Have rlog -nN F print just the revision number that N translates to Eg rlog -nB

F would print the highest revision on the branch B Use this to add an option -bB torcsbranch to freeze the named branch This should interact well with default branches

bull Add a co option that prints the revision number before each line as SCCSrsquos get -m

does [I implemented this for Emacs 22 as a subroutine of vc-annotate qv mdashttn]

33 Reporting bugs

To report bugs or suggest enhancements for GNU RCS please visit its homepage (httpwwwgnuorgsoftwarercs) to find directions on how to ldquofile a bug reportrdquo online orsend electronic mail to help-rcsgnuorg (If you use the web interface you donrsquot needto also send email since that is done automatically)

For bug reports please include enough information for the maintainers to reproduce theproblem Generally speaking that means

bull The RCS version command(s) and manual section(s) involved

bull Hardware and operating system names and versions

bull The contents of any input files necessary to reproduce the bug

bull The expected behavior andor output

bull A description of the problem and samples of any erroneous output

bull Options you gave to configure other than specifying installation directories

bull Anything else that you think would be helpful

When in doubt whether something is needed or not include it Itrsquos better to include toomuch than to leave out something important

Patches are welcome if possible please make them with lsquogit format-patchrsquo and includeChangeLog entries (see Section ldquoChange Logrdquo in The GNU Emacs Manual) Please followthe existing coding style

Appendix A GNU Free Documentation License 26

Appendix A GNU Free Documentation License

Version 13 3 November 2008

Copyright ccopy 2000 2001 2002 2007 2008 Free Software Foundation Inchttpfsforg

Everyone is permitted to copy and distribute verbatim copiesof this license document but changing it is not allowed

0 PREAMBLE

The purpose of this License is to make a manual textbook or other functional anduseful document free in the sense of freedom to assure everyone the effective freedomto copy and redistribute it with or without modifying it either commercially or non-commercially Secondarily this License preserves for the author and publisher a wayto get credit for their work while not being considered responsible for modificationsmade by others

This License is a kind of ldquocopyleftrdquo which means that derivative works of the documentmust themselves be free in the same sense It complements the GNU General PublicLicense which is a copyleft license designed for free software

We have designed this License in order to use it for manuals for free software becausefree software needs free documentation a free program should come with manualsproviding the same freedoms that the software does But this License is not limited tosoftware manuals it can be used for any textual work regardless of subject matter orwhether it is published as a printed book We recommend this License principally forworks whose purpose is instruction or reference

1 APPLICABILITY AND DEFINITIONS

This License applies to any manual or other work in any medium that contains anotice placed by the copyright holder saying it can be distributed under the termsof this License Such a notice grants a world-wide royalty-free license unlimited induration to use that work under the conditions stated herein The ldquoDocumentrdquobelow refers to any such manual or work Any member of the public is a licensee andis addressed as ldquoyourdquo You accept the license if you copy modify or distribute the workin a way requiring permission under copyright law

A ldquoModified Versionrdquo of the Document means any work containing the Document ora portion of it either copied verbatim or with modifications andor translated intoanother language

A ldquoSecondary Sectionrdquo is a named appendix or a front-matter section of the Documentthat deals exclusively with the relationship of the publishers or authors of the Documentto the Documentrsquos overall subject (or to related matters) and contains nothing thatcould fall directly within that overall subject (Thus if the Document is in part atextbook of mathematics a Secondary Section may not explain any mathematics) Therelationship could be a matter of historical connection with the subject or with relatedmatters or of legal commercial philosophical ethical or political position regardingthem

The ldquoInvariant Sectionsrdquo are certain Secondary Sections whose titles are designated asbeing those of Invariant Sections in the notice that says that the Document is released

Appendix A GNU Free Documentation License 27

under this License If a section does not fit the above definition of Secondary then it isnot allowed to be designated as Invariant The Document may contain zero InvariantSections If the Document does not identify any Invariant Sections then there are none

The ldquoCover Textsrdquo are certain short passages of text that are listed as Front-CoverTexts or Back-Cover Texts in the notice that says that the Document is released underthis License A Front-Cover Text may be at most 5 words and a Back-Cover Text maybe at most 25 words

A ldquoTransparentrdquo copy of the Document means a machine-readable copy representedin a format whose specification is available to the general public that is suitable forrevising the document straightforwardly with generic text editors or (for images com-posed of pixels) generic paint programs or (for drawings) some widely available drawingeditor and that is suitable for input to text formatters or for automatic translation toa variety of formats suitable for input to text formatters A copy made in an otherwiseTransparent file format whose markup or absence of markup has been arranged tothwart or discourage subsequent modification by readers is not Transparent An imageformat is not Transparent if used for any substantial amount of text A copy that isnot ldquoTransparentrdquo is called ldquoOpaquerdquo

Examples of suitable formats for Transparent copies include plain ASCII withoutmarkup Texinfo input format LaTEX input format SGML or XML using a publiclyavailable DTD and standard-conforming simple HTML PostScript or PDF designedfor human modification Examples of transparent image formats include PNG XCFand JPG Opaque formats include proprietary formats that can be read and editedonly by proprietary word processors SGML or XML for which the DTD andor pro-cessing tools are not generally available and the machine-generated HTML PostScriptor PDF produced by some word processors for output purposes only

The ldquoTitle Pagerdquo means for a printed book the title page itself plus such followingpages as are needed to hold legibly the material this License requires to appear in thetitle page For works in formats which do not have any title page as such ldquoTitle Pagerdquomeans the text near the most prominent appearance of the workrsquos title preceding thebeginning of the body of the text

The ldquopublisherrdquo means any person or entity that distributes copies of the Documentto the public

A section ldquoEntitled XYZrdquo means a named subunit of the Document whose title eitheris precisely XYZ or contains XYZ in parentheses following text that translates XYZ inanother language (Here XYZ stands for a specific section name mentioned below suchas ldquoAcknowledgementsrdquo ldquoDedicationsrdquo ldquoEndorsementsrdquo or ldquoHistoryrdquo) To ldquoPreservethe Titlerdquo of such a section when you modify the Document means that it remains asection ldquoEntitled XYZrdquo according to this definition

The Document may include Warranty Disclaimers next to the notice which states thatthis License applies to the Document These Warranty Disclaimers are considered tobe included by reference in this License but only as regards disclaiming warrantiesany other implication that these Warranty Disclaimers may have is void and has noeffect on the meaning of this License

2 VERBATIM COPYING

Appendix A GNU Free Documentation License 28

You may copy and distribute the Document in any medium either commercially ornoncommercially provided that this License the copyright notices and the licensenotice saying this License applies to the Document are reproduced in all copies andthat you add no other conditions whatsoever to those of this License You may not usetechnical measures to obstruct or control the reading or further copying of the copiesyou make or distribute However you may accept compensation in exchange for copiesIf you distribute a large enough number of copies you must also follow the conditionsin section 3

You may also lend copies under the same conditions stated above and you may publiclydisplay copies

3 COPYING IN QUANTITY

If you publish printed copies (or copies in media that commonly have printed covers) ofthe Document numbering more than 100 and the Documentrsquos license notice requiresCover Texts you must enclose the copies in covers that carry clearly and legibly allthese Cover Texts Front-Cover Texts on the front cover and Back-Cover Texts onthe back cover Both covers must also clearly and legibly identify you as the publisherof these copies The front cover must present the full title with all words of the titleequally prominent and visible You may add other material on the covers in additionCopying with changes limited to the covers as long as they preserve the title of theDocument and satisfy these conditions can be treated as verbatim copying in otherrespects

If the required texts for either cover are too voluminous to fit legibly you should putthe first ones listed (as many as fit reasonably) on the actual cover and continue therest onto adjacent pages

If you publish or distribute Opaque copies of the Document numbering more than 100you must either include a machine-readable Transparent copy along with each Opaquecopy or state in or with each Opaque copy a computer-network location from whichthe general network-using public has access to download using public-standard networkprotocols a complete Transparent copy of the Document free of added material Ifyou use the latter option you must take reasonably prudent steps when you begindistribution of Opaque copies in quantity to ensure that this Transparent copy willremain thus accessible at the stated location until at least one year after the last timeyou distribute an Opaque copy (directly or through your agents or retailers) of thatedition to the public

It is requested but not required that you contact the authors of the Document wellbefore redistributing any large number of copies to give them a chance to provide youwith an updated version of the Document

4 MODIFICATIONS

You may copy and distribute a Modified Version of the Document under the conditionsof sections 2 and 3 above provided that you release the Modified Version under preciselythis License with the Modified Version filling the role of the Document thus licensingdistribution and modification of the Modified Version to whoever possesses a copy ofit In addition you must do these things in the Modified Version

A Use in the Title Page (and on the covers if any) a title distinct from that of theDocument and from those of previous versions (which should if there were any

Appendix A GNU Free Documentation License 29

be listed in the History section of the Document) You may use the same title asa previous version if the original publisher of that version gives permission

B List on the Title Page as authors one or more persons or entities responsible forauthorship of the modifications in the Modified Version together with at least fiveof the principal authors of the Document (all of its principal authors if it has fewerthan five) unless they release you from this requirement

C State on the Title page the name of the publisher of the Modified Version as thepublisher

D Preserve all the copyright notices of the Document

E Add an appropriate copyright notice for your modifications adjacent to the othercopyright notices

F Include immediately after the copyright notices a license notice giving the publicpermission to use the Modified Version under the terms of this License in the formshown in the Addendum below

G Preserve in that license notice the full lists of Invariant Sections and required CoverTexts given in the Documentrsquos license notice

H Include an unaltered copy of this License

I Preserve the section Entitled ldquoHistoryrdquo Preserve its Title and add to it an itemstating at least the title year new authors and publisher of the Modified Versionas given on the Title Page If there is no section Entitled ldquoHistoryrdquo in the Docu-ment create one stating the title year authors and publisher of the Documentas given on its Title Page then add an item describing the Modified Version asstated in the previous sentence

J Preserve the network location if any given in the Document for public access toa Transparent copy of the Document and likewise the network locations given inthe Document for previous versions it was based on These may be placed in theldquoHistoryrdquo section You may omit a network location for a work that was publishedat least four years before the Document itself or if the original publisher of theversion it refers to gives permission

K For any section Entitled ldquoAcknowledgementsrdquo or ldquoDedicationsrdquo Preserve the Titleof the section and preserve in the section all the substance and tone of each of thecontributor acknowledgements andor dedications given therein

L Preserve all the Invariant Sections of the Document unaltered in their text andin their titles Section numbers or the equivalent are not considered part of thesection titles

M Delete any section Entitled ldquoEndorsementsrdquo Such a section may not be includedin the Modified Version

N Do not retitle any existing section to be Entitled ldquoEndorsementsrdquo or to conflict intitle with any Invariant Section

O Preserve any Warranty Disclaimers

If the Modified Version includes new front-matter sections or appendices that qualifyas Secondary Sections and contain no material copied from the Document you may atyour option designate some or all of these sections as invariant To do this add their

Appendix A GNU Free Documentation License 30

titles to the list of Invariant Sections in the Modified Versionrsquos license notice Thesetitles must be distinct from any other section titles

You may add a section Entitled ldquoEndorsementsrdquo provided it contains nothing butendorsements of your Modified Version by various partiesmdashfor example statements ofpeer review or that the text has been approved by an organization as the authoritativedefinition of a standard

You may add a passage of up to five words as a Front-Cover Text and a passage of upto 25 words as a Back-Cover Text to the end of the list of Cover Texts in the ModifiedVersion Only one passage of Front-Cover Text and one of Back-Cover Text may beadded by (or through arrangements made by) any one entity If the Document alreadyincludes a cover text for the same cover previously added by you or by arrangementmade by the same entity you are acting on behalf of you may not add another butyou may replace the old one on explicit permission from the previous publisher thatadded the old one

The author(s) and publisher(s) of the Document do not by this License give permissionto use their names for publicity for or to assert or imply endorsement of any ModifiedVersion

5 COMBINING DOCUMENTS

You may combine the Document with other documents released under this Licenseunder the terms defined in section 4 above for modified versions provided that youinclude in the combination all of the Invariant Sections of all of the original documentsunmodified and list them all as Invariant Sections of your combined work in its licensenotice and that you preserve all their Warranty Disclaimers

The combined work need only contain one copy of this License and multiple identicalInvariant Sections may be replaced with a single copy If there are multiple InvariantSections with the same name but different contents make the title of each such sectionunique by adding at the end of it in parentheses the name of the original author orpublisher of that section if known or else a unique number Make the same adjustmentto the section titles in the list of Invariant Sections in the license notice of the combinedwork

In the combination you must combine any sections Entitled ldquoHistoryrdquo in the vari-ous original documents forming one section Entitled ldquoHistoryrdquo likewise combine anysections Entitled ldquoAcknowledgementsrdquo and any sections Entitled ldquoDedicationsrdquo Youmust delete all sections Entitled ldquoEndorsementsrdquo

6 COLLECTIONS OF DOCUMENTS

You may make a collection consisting of the Document and other documents releasedunder this License and replace the individual copies of this License in the variousdocuments with a single copy that is included in the collection provided that youfollow the rules of this License for verbatim copying of each of the documents in allother respects

You may extract a single document from such a collection and distribute it individu-ally under this License provided you insert a copy of this License into the extracteddocument and follow this License in all other respects regarding verbatim copying ofthat document

Appendix A GNU Free Documentation License 31

7 AGGREGATION WITH INDEPENDENT WORKS

A compilation of the Document or its derivatives with other separate and independentdocuments or works in or on a volume of a storage or distribution medium is calledan ldquoaggregaterdquo if the copyright resulting from the compilation is not used to limit thelegal rights of the compilationrsquos users beyond what the individual works permit Whenthe Document is included in an aggregate this License does not apply to the otherworks in the aggregate which are not themselves derivative works of the Document

If the Cover Text requirement of section 3 is applicable to these copies of the Documentthen if the Document is less than one half of the entire aggregate the Documentrsquos CoverTexts may be placed on covers that bracket the Document within the aggregate or theelectronic equivalent of covers if the Document is in electronic form Otherwise theymust appear on printed covers that bracket the whole aggregate

8 TRANSLATION

Translation is considered a kind of modification so you may distribute translationsof the Document under the terms of section 4 Replacing Invariant Sections withtranslations requires special permission from their copyright holders but you mayinclude translations of some or all Invariant Sections in addition to the original versionsof these Invariant Sections You may include a translation of this License and all thelicense notices in the Document and any Warranty Disclaimers provided that youalso include the original English version of this License and the original versions ofthose notices and disclaimers In case of a disagreement between the translation andthe original version of this License or a notice or disclaimer the original version willprevail

If a section in the Document is Entitled ldquoAcknowledgementsrdquo ldquoDedicationsrdquo or ldquoHis-toryrdquo the requirement (section 4) to Preserve its Title (section 1) will typically requirechanging the actual title

9 TERMINATION

You may not copy modify sublicense or distribute the Document except as expresslyprovided under this License Any attempt otherwise to copy modify sublicense ordistribute it is void and will automatically terminate your rights under this License

However if you cease all violation of this License then your license from a particularcopyright holder is reinstated (a) provisionally unless and until the copyright holderexplicitly and finally terminates your license and (b) permanently if the copyrightholder fails to notify you of the violation by some reasonable means prior to 60 daysafter the cessation

Moreover your license from a particular copyright holder is reinstated permanently ifthe copyright holder notifies you of the violation by some reasonable means this is thefirst time you have received notice of violation of this License (for any work) from thatcopyright holder and you cure the violation prior to 30 days after your receipt of thenotice

Termination of your rights under this section does not terminate the licenses of partieswho have received copies or rights from you under this License If your rights havebeen terminated and not permanently reinstated receipt of a copy of some or all of thesame material does not give you any rights to use it

Appendix A GNU Free Documentation License 32

10 FUTURE REVISIONS OF THIS LICENSE

The Free Software Foundation may publish new revised versions of the GNU FreeDocumentation License from time to time Such new versions will be similar in spiritto the present version but may differ in detail to address new problems or concernsSee httpwwwgnuorgcopyleft

Each version of the License is given a distinguishing version number If the Documentspecifies that a particular numbered version of this License ldquoor any later versionrdquoapplies to it you have the option of following the terms and conditions either of thatspecified version or of any later version that has been published (not as a draft) bythe Free Software Foundation If the Document does not specify a version number ofthis License you may choose any version ever published (not as a draft) by the FreeSoftware Foundation If the Document specifies that a proxy can decide which futureversions of this License can be used that proxyrsquos public statement of acceptance of aversion permanently authorizes you to choose that version for the Document

11 RELICENSING

ldquoMassive Multiauthor Collaboration Siterdquo (or ldquoMMC Siterdquo) means any World WideWeb server that publishes copyrightable works and also provides prominent facilitiesfor anybody to edit those works A public wiki that anybody can edit is an example ofsuch a server A ldquoMassive Multiauthor Collaborationrdquo (or ldquoMMCrdquo) contained in thesite means any set of copyrightable works thus published on the MMC site

ldquoCC-BY-SArdquo means the Creative Commons Attribution-Share Alike 30 license pub-lished by Creative Commons Corporation a not-for-profit corporation with a principalplace of business in San Francisco California as well as future copyleft versions of thatlicense published by that same organization

ldquoIncorporaterdquo means to publish or republish a Document in whole or in part as partof another Document

An MMC is ldquoeligible for relicensingrdquo if it is licensed under this License and if all worksthat were first published under this License somewhere other than this MMC andsubsequently incorporated in whole or in part into the MMC (1) had no cover textsor invariant sections and (2) were thus incorporated prior to November 1 2008

The operator of an MMC Site may republish an MMC contained in the site underCC-BY-SA on the same site at any time before August 1 2009 provided the MMC iseligible for relicensing

Appendix A GNU Free Documentation License 33

ADDENDUM How to use this License for your documents

To use this License in a document you have written include a copy of the License in thedocument and put the following copyright and license notices just after the title page

Copyright (C) year your name

Permission is granted to copy distribute andor modify this document

under the terms of the GNU Free Documentation License Version 13

or any later version published by the Free Software Foundation

with no Invariant Sections no Front-Cover Texts and no Back-Cover

Texts A copy of the license is included in the section entitled lsquolsquoGNU

Free Documentation Licensersquorsquo

If you have Invariant Sections Front-Cover Texts and Back-Cover Texts replace theldquowith Textsrdquo line with this

with the Invariant Sections being list their titles with

the Front-Cover Texts being list and with the Back-Cover Texts

being list

If you have Invariant Sections without Cover Texts or some other combination of thethree merge those two alternatives to suit the situation

If your document contains nontrivial examples of program code we recommend releasingthese examples in parallel under your choice of free software license such as the GNUGeneral Public License to permit their use in free software

Index 34

Index

Aaccess control policy 3Author 3author specifying 10

Bbehavior prior to version 5 10behavior version 3 10behavior version 4 10binary-old-keyword-value substitution mode 9branch growth 7branch number 2branch tip 2branch default 3bug reporting 25

Ccase sensitivity file format 21checkin 3checklist for bug reports 25checkout 3checkout implicit 5ci invocation 11co invocation 12comma-v file format 1command help 7command version 7command-line option to specify a revision 7credits 1

DDate 3date formats 8date specifying 8dates file format 21default branch 3default branch setting 15deleting revisions 15description of working file 2description text specifying 8

Eempty log message 9emulation previous RCS versions 10encoding file format 20environment variables 10

Ffeatures still missing 23

file names on the command-line 7format RCSfile 20

Ggrammar file format 20

HHeader 3history 1

IId 3ident invocation 13implicit checkout circumstance 5implicit checkout locked 12implicit checkout unlocked 12instantiating a working file 2interaction model 1interactive mode 9invocation ci 11invocation co 12invocation ident 13invocation merge 14invocation rcs 14 15invocation rcsclean 16invocation rcsdiff 17invocation rcsmerge 17invocation rlog 18

Kkeyword-only substitution mode 9keyword-value substitution mode 8keyword-value-locker substitution mode 9keywords table of 3

Llayout of nodes file format 21license 1Locker 3locking a revision 15locking on implicit checkout 12locking non-strict 5locking set non-strict 15locking set strict 15locking strict 5locks in RCS file 3Log 3log message empty 9LOGNAME 11

Index 35

Mmemory limit 11merge invocation 14model interaction 1

NName 4names symbolic 3node layout file format 21non-strict locking 5number branch 2number revision 2

Oold-keyword-value substitution mode 9order of options and file names 7outdating revisions 15overview 1

Ppairing RCS and working files 7patches contributing 25problems 25projects related 1

Qquiet mode 9

Rrange of revisions specifying 7RCS file 2rcs invocation 14 15RCS version emulation 10RCS_MEM_LIMIT 11rcsclean invocation 16rcsdiff invocation 17RCSfile 4RCSfile format 20RCSINIT 10rcsmerge invocation 17removing revisions 15reporting bugs 25Revision 4revision number 2revision range specifying 7

revision specifying 7revisions tree of 3rlog invocation 18

SSource 4specifying a date 8specifying a range of revisions 7specifying a revision 7specifying a state 9specifying a suffix list 10specifying a timedate 8specifying author 10specifying description text 8specifying substitution mode 8State 4state specifying 9strict locking 5substitution mode default 8substitution mode specifying 8suffix list specifying 10symbolic names 3

TTEMP 11third-party interop file format 21Tichy Walter F 1time zone 8timedate specifying 8tip 2tip increment 7TMP 11TMPDIR 11tree of revisions 3

Uunlocking a revision 15USER 11

Vvalue-only substitution mode 9

Wwhitespace file format 21working file description 2working file instantiation 2

  • Overview
    • Credits
    • Concepts
      • Interaction model
      • Working file
      • RCS file
      • Fundamental operations
      • Keywords
        • Quick tour
          • Usage
            • Common elements
              • Revision options
              • Date option
              • Description option
              • Substitution mode option
              • Log message option
              • Misc common options
              • Environment
                • Invoking ci
                • Invoking co
                • Invoking ident
                • Invoking merge
                • Invoking rcs
                  • modern
                  • legacy
                    • Invoking rcsclean
                    • Invoking rcsdiff
                    • Invoking rcsmerge
                    • Invoking rlog
                      • Hacking
                        • File format
                          • File format grammar
                          • Additional particulars of the file format
                            • Still missing
                            • Reporting bugs
                              • GNU Free Documentation License
                              • Index
Page 13: GNU RCS · The RCS file is also known (colloquially) as the “comma-v file”, due to its name often ending in ,v (e.g., a.c,v). A revision number is a branch number followed by

Chapter 2 Usage 10

This can be useful if the RCS file is found in a makefile targetrsquos list of pre-requisites (see Section ldquoRule Syntaxrdquo in The GNU Make Manual) that is ifsome target should be rebuilt if the RCS file is newer than it In that case youcan do lsquorcs -u -Trsquo for example to unlock a revision in the RCS file withouttriggering a recompilation

-V Behave like --version ie display command version information and exitsuccessfully NB This option is obsolete and its support will be removed insome future release

-Vn n specifies the RCS (major) version to emulate Valid values for n are 3 4 5Version 5 is the current version so -V5 does nothing special

In versions prior to 5 RCS outputs lsquotrsquo (tab U+09) between the lsquorsquo (colon) andthe value (for keyword substitution) instead of space uses the RCS file commentstring to prefix each line in the Log expansion instead of computing it on thefly from the input text writesreads localtime instead of UTC and displaysslightly different output for rlog

For version 4 the Header expansion unconditionally includes Locker lockeras if the kvl substitution mode were specified (see Section 214 [Substitutionmode option] page 8)

For version 3 the Header expansion omits the directories from the filename andsays only Locked instead of the state

-wlogin Some commands accept an option of the form lsquo-wloginrsquo to specify the loginname of the author of a revision ie ldquowhordquo is responsible

-xsuff Specify suff as the slash-separated list of file name suffixes used to recognizean RCS file The default value is lsquovrsquo that is first try with lsquovrsquo then try withan empty suffix

This basename search occurs within (ie starting from the beginning) the largerdirectory search loop which comprises two candidates dRCS and d where dis the directory component of the working file name For example given theworking file ac in the current directory RCS tries in order these candidates

RCSacv

RCSac

acv

ac

Note that the last candidate is impossible (and is in fact discarded) becausethe working and RCS files cannot have the same name

217 Environment

Various environment variables influence how RCS works

[Environment Variable]RCSINITAnother way to set common options is with the lsquoRCSINITrsquo environment variable Thisis a space-separated list of options Use lsquorsquo (backslash) to escape significant spaceFor example

Chapter 2 Usage 11

Set the value make it available to subsequent commandsRCSINIT=-q -xv -zLT

export RCSINIT

Use it (implicitly)rlog -L foo

This example in Bourne shell syntax arranges for RCS commands to operate as ifeach command-line had prepended lsquo-q -xv -zLTrsquo to the rest of the command-lineThe effective command-line that rlog sees is thus lsquo-q -xv -zLT -L foorsquo

[Environment Variable]RCS_MEM_LIMITNormally for speed commands either memory map or copy into memory the RCS fileif its size is less than thememory limit currently defaulting to ldquounlimitedrdquo Otherwise(or if the initially-tried speedy ways fail) the commands fall back to using standardio routines

You can adjust the memory limit by setting the lsquoRCS_MEM_LIMITrsquo environment variableto a numeric value (measured in kilobytes) An empty value is silently ignored

As a side effect specifying the memory limit inhibits fall-back to slower routines(This env var is mostly intended for testing RCS normally you can leave it unsetProbably it will be removed in a future release)

[Environment Variable]TMPDIR[Environment Variable]TMP[Environment Variable]TEMP

Commands sometimes create temporary files normally in a system-dependent direc-tory such as tmp You can override this directory by specifying another one asthe value of one of the environment variables TMPDIR TMP or TEMP (checked in thatorder)

[Environment Variable]LOGNAME[Environment Variable]USER

Absent -wlogin or when login is omitted (see Section 216 [Misc common options]page 9) commands check environment variables LOGNAME and USER (in that order)If neither of these are set RCS queries the host for and uses your login

22 Invoking ci

rcs ci [options] file

(or ldquocirdquo instead of ldquorcs cirdquo)

The ci command adds a revision to the RCS file reflecting the current state of the workingfile This operation is also known as ldquocheckinrdquo

-f[rev] Force new entry even if no content changed

-I[rev]

-q[rev] See Section 216 [Misc common options] page 9

-i[rev] Initial checkin error if the RCS file already exists

-j[rev] Just checkin donrsquot initialize error if the RCS file does not exist

Chapter 2 Usage 12

-k[rev] Compute revision from working file keywords

-r Release lock and delete working file

-rrev Do normal checkin

-l[rev] Like -r but immediately checkout locked (co -l) afterwards

-u[rev] Like -l but checkout unlocked (co -u)

-M[rev] Reset working file mtime (relevant for -l -u)

Multiple flags in -fiIjklMqru may be given except for -r -l -u which are mutuallyexclusive For a fully specified revision of the form brn nmust be greater than any existingon br or br must be new If rev is omitted compute it from the last lock (co -l) perhapsstarting a new branch If there is no lock use defbr(L+1) See Section 211 [Revisionoptions] page 7

-d[date]

-zzone See Section 212 [Date option] page 8 If no date specified use the workingfile modification time

-m[msg] Use msg as the log message See Section 215 [Log message option] page 9

-nname

-Nname Assign symbolic name to the entry For -n name must be new (no previousassignment) For -N overwrite any previous assignment

-sstate See Section 216 [Misc common options] page 9 Set the state

-t-text

-tfile-name

See Section 213 [Description option] page 8

-T Set the RCS filersquos modification time to the new revisionrsquos time if the former pre-cedes the latter and there is a new revision preserve the RCS filersquos modificationtime otherwise

-wwho Use who as the author

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

23 Invoking co

rcs co [options] file

(or ldquocordquo instead of ldquorcs cordquo)

The co command retrieves a revision from the RCS file writing a new working file Thisoperation is also known as ldquocheckoutrdquo

-f[rev] Force overwrite of working file

-I[rev]

-q[rev] See Section 216 [Misc common options] page 9

-p[rev] Write to stdout instead of the working file

Chapter 2 Usage 13

-r[rev] Normal checkout

-l[rev] Like -r but also lock

-u[rev] Like -l but unlock

-M[rev] Reset working file mtime (relevant for -l -u)

Multiple flags in -fIlMpqru may be given except for -r -l -u which are mutuallyexclusive See Section 211 [Revision options] page 7

-ksubst See Section 214 [Substitution mode option] page 8

-ddate

-zzone See Section 212 [Date option] page 8 Select latest before or on date

-jjoins Merge using joins a list of revrev pairs NB This option is obsolete (seeSection 29 [rcsmerge] page 17)

-sstate See Section 216 [Misc common options] page 9 Select matching state

-S Enable self-same mode In this mode the owner of a lock is unimportantjust that it exists Effectively this prevents you from checking out the samerevision twice

$ whoami

ttn

$ co -l -f z

RCSzv --gt z

revision 11 (locked)

done

$ co -S -l -f z

RCSzv --gt z

co RCSzv Revision 11 is already locked by ttn

-T Preserve the modification time on the RCS file even if it changes because a lockis added or removed

-wwho Select matching login who

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

24 Invoking ident

ident [options] [file ]

If no file is specified scan standard input The ident command scans its input for keywords(see Section 12 [Concepts] page 1) displaying to standard output what it finds

-q Normally if no patterns are found for a file ident emits a warning This optionsuppresses the warning

Chapter 2 Usage 14

-V Note that -Vn is not a valid option for ident in contrast to most other RCScommands (see Section 216 [Misc common options] page 9)

In addition to the normal keyword pattern for Subversion 12 (and later) compatibility1ident also recognizes patterns having one of the forms

$keyword text $

two colons and space after keyword

space before ending $

$keyword text$

two colons and space after keyword

hash before ending $

25 Invoking merge

merge [options] receiving-sibling parent other-sibling

The merge command combines the differences between a the parent and the other siblingand the differences between the parent and the receiving sibling It writes the result to thereceiving sibling

-A

-E

-e Use diff3 -A -E (default) or -e respectively

-p Write to stdout instead of overwriting receiving-sibling

-q See Section 216 [Misc common options] page 9 Suppress conflict warnings

-Llabel (up to three times) Specify the conflict labels for receiving-sibling parent andother-sibling respectively

-V Note that -Vn is not a valid option for merge in contrast to most other RCScommands (see Section 216 [Misc common options] page 9)

26 Invoking rcs

The rcs command is unique in the set of RCS programs in that it has two usages themodern (for RCS 590 and later) and the legacy

261 modern

rcs [options] command [command-arg ]

This rcs usage dispatches to command passing along command-arg without interpreta-tion

--commands

Display a list of available commands including a one-line description and exitsuccessfully

1 The fixed-length keyword syntax is described in detail in Version Control with Subversion chapterldquoAdvanced Topicsrdquo section ldquoKeyword Substitutionrdquo

Chapter 2 Usage 15

--aliases

Display a list of command aliases and exit successfully

--help command

Display help for a particular command and exit successfully For example todisplay help for the legacy interface use

--help frob

262 legacy

rcs frob [options] file

(or ldquorcsrdquo instead of ldquorcs frobrdquo)

This rcs usage performs various administrative operations on the RCS file depending onthe options given

-i Create and initialize a new RCS file

-L Set strict locking

-U Set non-strict locking

-M Donrsquot send mail when breaking someone elsersquos lock

-T Preserve the modification time on the RCS file unless a revision is removed

-I

-q See Section 216 [Misc common options] page 9

-alogins Append logins (comma-separated list of usernames) to access-list

-e[logins]

Erase logins (comma-separated list of usernames) from access-list If logins isomitted clear the access-list

-Afile-name

Append access-list of file-name to current access-list

-b[rev] Set default branch to that of rev or highest branch on trunk if rev is omitted

-l[rev] Lock a revision

-u[rev] Unlock a revision

-cstring Set comment leader to string NB Donrsquot use obsolete

-ksubst See Section 214 [Substitution mode option] page 8

-mrev[msg]

Replace log message with msg See Section 215 [Log message option] page 9

-nname[[rev]]

If rev is omitted delete symbolic name Otherwise associate name with rev name must be new

-Nname[[rev]]

Like -n but overwrite any previous assignment

-orange Delete (also known as ldquooutdaterdquo) revisions in range

Chapter 2 Usage 16

rev single revision

br latest revision on branch br

rev1rev2

rev1 to rev2 on same branch inclusive

rev beginning of branch to rev

rev rev to end of branch

-sstate[rev]

See Section 216 [Misc common options] page 9 Set state

-t-text

-tfile-name

See Section 213 [Description option] page 8 Replace description

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

These options have no effect and are included solely for consistency with other comamnds(see Section 217 [Environment] page 10) -zzone

27 Invoking rcsclean

rcs clean [options] [file ]

(or ldquorcscleanrdquo instead of ldquorcs cleanrdquo)

The rcsclean command removes working files that are not being worked on If given -u italso unlocks and removes working files that are being worked on but have not changed Ifno file is specified operate on all the working files in the current directory

-r[rev] Specify revision

-u[rev] Unlock if is locked and no differences found

-n[rev] Dry run (no act donrsquot operate)

-q[rev] See Section 216 [Misc common options] page 9

-ksubst See Section 214 [Substitution mode option] page 8

-T Preserve the modification time on the RCS file even it changes because a lockis removed

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

-zzone See Section 212 [Date option] page 8

Chapter 2 Usage 17

28 Invoking rcsdiff

rcs diff [options] file

(or ldquorcsdiffrdquo instead of ldquorcs diffrdquo)

The rcsdiff command runs diff to compare two revisions in an RCS file See Section ldquoIn-voking diffrdquo in The GNU Diffutils Manaual

-rrev (zero one or two times) Name a revision If given two revisions (lsquo-rrev1-rrev2rsquo) compare those revisions If given only one revision (lsquo-rrevrsquo) comparethe working file with it If given no revisions compare the working file with thelatest revision on the default branch

-ksubst See Section 214 [Substitution mode option] page 8

-q See Section 216 [Misc common options] page 9

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

-zzone See Section 212 [Date option] page 8

These options have no effect and are included solely for consistency with other comamnds(see Section 217 [Environment] page 10) -T

Additionally the following options (and their argument if any) are passed to the underlyingdiff command

-0 -1 -2 -3 -4 -5 -6 -7 -8 -9 -B -C -D -F -H -I

-L -U -W -a -b -c -d -e -f -h -i -n -p -t -u -w -y

long options (that start with --)

(Not all of these options are meaningful)

29 Invoking rcsmerge

rcs merge [options] file

(or ldquorcsmergerdquo instead of ldquorcs mergerdquo)

The rcsmerge command incorporates the changes between two revisions of an RCS file intothe corresponding working file

-A

-E

-e Passed to the diff3 command The default if none are specified is -E With -esuppress warnings on conflict The -A style generates the most verbose outputSee Section ldquoInvoking diff3rdquo in The GNU Diffutils Manual

-p[rev] Write to stdout instead of overwriting the working file

-q[rev] See Section 216 [Misc common options] page 9

-rrev (one or two times) specify a revision

One or two revisions must be specified (using -p -q -r) If only one is specified the secondrevision defaults to the latest revision on the default branch

Chapter 2 Usage 18

-ksubst See Section 214 [Substitution mode option] page 8

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

-zzone See Section 212 [Date option] page 8

These options have no effect and are included solely for consistency with other comamnds(see Section 217 [Environment] page 10) -T

210 Invoking rlog

rcs log [options] file

(or ldquorlogrdquo instead of ldquorcs logrdquo)

The rlog command displays information about RCS files

-L Ignore RCS files with no locks set

-R Print only the name of the RCS file

-h Print only the ldquoheaderrdquo information

-t Like -h but also include the description

-N Omit symbolic names

-b Select the default branch

-ddates See Section 212 [Date option] page 8 Select revisions based on timestampin the range dates with spec

d single revision d or earlier

d1ltd2

d2gtd1 between d1 and d2 exclusive

ltd

dgt before d

gtd

dlt after d

Instead of lsquoltrsquo or lsquogtrsquo you can use lsquolt=rsquo or lsquogt=rsquo respectively to specify inclusiveranges dates may also be a list of semicolon-separated specs

-l[who] Select revisions locked by who (comma-separated list of usernames) only or byanyone if who is omitted

-r[revs] Select revisions in revs a comma-separated list of range specs one of revrev rev rev1rev2

-sstates See Section 216 [Misc common options] page 9 states can also be a comma-separated list of states Select revisions with specified state(s)

-w[who] Select revisions checked in by who (comma-separated list of usernames) or bythe user if who is omitted

Chapter 2 Usage 19

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

-zzone See Section 212 [Date option] page 8

These options have no effect and are included solely for consistency with other comamnds(see Section 217 [Environment] page 10) lsquo-qrsquo lsquo-Trsquo

Chapter 3 Hacking 20

3 Hacking

This chapter in contrast to the previous (see Chapter 2 [Usage] page 7) is introspective Itdescribes an important aspect of RCS interop with other programs and development ideasand methods

31 File format

An RCS filersquos contents are described by the grammar below1 Overall the format is freendashformat text In most environments RCS uses the ISO 88591 encoding visible graphiccharacters are (octal) codes 041ndash176 and 240ndash377 and whitespace characters are codes010ndash015 and 040TODO Discuss or point to encoding compatibility issues

311 File format grammar

The meta syntax in this section uses the following conventions lsquo|rsquo (U+7C) separates al-ternatives lsquorsquo (U+7B) and lsquorsquo (U+7D) enclose optional phrases lsquorsquo and lsquorsquo (trailing U+2A)enclose phrases that can be repeated zero or more times lsquorsquo and lsquo+rsquo (trailing U+2B) enclosephrases that must appear at least once and can be repeated terminal symbols are in lsquorsquo(two U+22)

rcstext = admin delta desc deltatext

admin = head num

branch num

access id

symbols sym num

locks id num

strict

integrity intstring

comment string

expand string

delta = num

date num

author id

state id

branches num

next num

commitid sym

desc = desc string

deltatext = num

log string

text string

1 This section is adapted from the lsquorcsfile(5)rsquo manpage written by Walter F Tichy

Chapter 3 Hacking 21

num = digit | +

digit = 0 through 9

id = idchar | +

sym = idchar+

idchar = any visible graphic character except special

special = $ | | | | |

string = any character with doubled

word = id | num | string |

intchar = any character except

thirdp = ^L intchar

intstring = intchar thirdp

312 Additional particulars of the file format

bull In releases prior to 58 (2011-08-30) the grammar included the production

newphrase = id word

and used it in the admin delta and deltatext productions This allowed third-partyprograms to interoperate with RCS by storing opaque (to RCS) data in the file

As of 58 in the name of progress (towards more systematic file integrity support) theonly area reserved for third-party interop is in the (string) value of the integrity fieldspecifically after the first formfeed (U+0C) A further restriction (for all programs) isthat the integrity value must not contain lsquorsquo

bull Whitespace has no significance except in strings However whitespace cannot appearwithin an id num or sym and an RCS file must end with newline (U+0A) Strings areenclosed by lsquorsquo (U+40) If a string contains a lsquorsquo it must be doubled otherwise stringscan contain arbitrary binary data

bull Identifiers are case sensitive Keywords are in lower case only The sets of keywordsand identifiers can overlap

bull Dates which appear after the date keyword are of the form Ymmddhhmmss whereY is the year mm the month (01ndash12) dd the day (01ndash31) hh the hour (00ndash23) mm theminute (00ndash59) and ss the second (00ndash60) Y contains just the last two digits of theyear for years from 1900 through 1999 and all the digits of years thereafter Dates usethe Gregorian calendar times use UTC

bull The delta nodes form a tree All nodes whose numbers consist of a single pair (eg 2321 13) are on the trunk and are linked through the next field in order of decreasing

Chapter 3 Hacking 22

numbers The head field in the admin node points to the head of that sequence (iecontains the highest pair) The branch node in the admin node indicates the defaultbranch (or revision) for most RCS operations If empty the default branch is thehighest branch on the trunk

All delta nodes whose numbers consist of 2n fields (n ge 2) (eg 3111 2122) arelinked as follows All nodes whose first 2nminus1 number fields are identical are linkedthrough the next field in order of increasing numbers For each such sequence thedelta node whose number is identical to the first 2nminus2 number fields of the delta

nodes on that sequence is called the branchpoint The branches field of a node containsa list of the numbers of the first nodes of all sequences for which it is a branchpointThis list is ordered in increasing numbers See Figure 31

Chapter 3 Hacking 23

Head

|

|

v

---------

| |

| 21 |

| |

1213 1311 | | 1222 122111

--------- --------- --------- --------- -------------

^ ^ | ^ ^

| | | | |

| | v | |

| --------- |

| 13 |

--------- -----------

1211 131 1221 12211

--------- ---------

^ | ^

| | |

| v |

| --------- |

| 12 |

---------------------- ---------

121 122

|

|

v

---------

11

Figure 31 The organization of an example RCS file

32 Still missing

RCS is still missing some features The following is an unordered list of ldquoto-do musingsrdquo keptby the RCS maintainers If you would like to hack on an item See Section 33 [Reportingbugs] page 25

bull Add an option to rcsmerge so that it can use an arbitrary program to do the 3-waymerge instead of the default merge Likewise for rcsdiff and diff It should be possibleto pass arbitrary options to these programs and to the subsidiary co invocations

bull Add format options for finer control over the output of ident and rlog Eg thereshould be an easy way for rlog to output lines like lsquosrcmainc 24 wftrsquo one for

Chapter 3 Hacking 24

each locked revision rlog options should have three orthogonal types selecting filesselecting revisions and selecting rlog format

bull Add format options for finer control over the output of keyword strings Eg thereshould be some way to prepend lsquo()rsquo and there should be some way to change lsquo$rsquo tosome other character to disable further substitution These options should make theresulting files uneditable like lsquo-kvrsquo

bull Add long options eg --keyword-substitution Unfortunately RCSrsquos option syntaxis incompatible with getopt Perhaps the best way is to overload rcs eg lsquorcs diff

--keyword-substitution=old filersquo instead of lsquorcsdiff -ko filersquo

bull rlog -rMN should work even if M and N have different numbers of fields so long asM is an ancestor of N or vice versa

bull rcs should evaluate options in order this allows rcs -oS -nS

bull Be able to redo your most recent checkin with minor changes

bull co -u shouldnrsquot complain about a lsquo+wrsquo working file if contents donrsquot change

bull Add a lsquo-rsquo option to take the list of file names from standard input Perhaps the filenames should be null-terminated not newline-terminated so that those that containnewlines are handled properly

bull Permit multiple optionndashfilename pairs eg co -r14 a -r15 b

bull Add an option to break a symbolic link to an RCS file instead of breaking the hardlink that it points to

bull Add ways to specify the earliest revision the most recent revision the earliest or latestrevision on a particular branch and the parent or child of some other revision

bull If a user has multiple locks perhaps ci should fall back on the method of ci -k to figureout which revision to use

bull Add an option to rcsclean to clean directories recursively

bull Write an rcsck program that repairs corrupted RCS files much as fsck repairs corruptedfile systems For example it should remove stale lock files

bull Update the date parser to use the more modern getdatey by Bellovin Salz andBerets or the even more modern getdate by Moraes None of these getdate imple-mentations are as robust as RCSrsquos old warhorse in avoiding problems like arithmeticoverflow so theyrsquoll have to be fixed first (Perhaps we can use gnulib module getdate)

bull Break up the code into a library so that itrsquos easier to write new programs that manip-ulate RCS files and so that useless code is removed from the existing programs Forexample the rcs command contains unnecessary keyword substitution baggage andthe merge command can be greatly pruned

bull Make it easier to use your favorite text editor to edit log messages etc instead ofhaving to type them in irretrievably at the terminal

bull Let the user specify a search path for default branches eg to use L as the defaultbranch if it works and M otherwise Let the user require that at least one entry inthe search path works Let the user say that later entries in the search path are readonly ie one cannot check in changes to them This should be an option settable bylsquoRCSINITrsquo

bull Add a way for a user to see which revisions affected which lines

Chapter 3 Hacking 25

bull Have rlog -nN F print just the revision number that N translates to Eg rlog -nB

F would print the highest revision on the branch B Use this to add an option -bB torcsbranch to freeze the named branch This should interact well with default branches

bull Add a co option that prints the revision number before each line as SCCSrsquos get -m

does [I implemented this for Emacs 22 as a subroutine of vc-annotate qv mdashttn]

33 Reporting bugs

To report bugs or suggest enhancements for GNU RCS please visit its homepage (httpwwwgnuorgsoftwarercs) to find directions on how to ldquofile a bug reportrdquo online orsend electronic mail to help-rcsgnuorg (If you use the web interface you donrsquot needto also send email since that is done automatically)

For bug reports please include enough information for the maintainers to reproduce theproblem Generally speaking that means

bull The RCS version command(s) and manual section(s) involved

bull Hardware and operating system names and versions

bull The contents of any input files necessary to reproduce the bug

bull The expected behavior andor output

bull A description of the problem and samples of any erroneous output

bull Options you gave to configure other than specifying installation directories

bull Anything else that you think would be helpful

When in doubt whether something is needed or not include it Itrsquos better to include toomuch than to leave out something important

Patches are welcome if possible please make them with lsquogit format-patchrsquo and includeChangeLog entries (see Section ldquoChange Logrdquo in The GNU Emacs Manual) Please followthe existing coding style

Appendix A GNU Free Documentation License 26

Appendix A GNU Free Documentation License

Version 13 3 November 2008

Copyright ccopy 2000 2001 2002 2007 2008 Free Software Foundation Inchttpfsforg

Everyone is permitted to copy and distribute verbatim copiesof this license document but changing it is not allowed

0 PREAMBLE

The purpose of this License is to make a manual textbook or other functional anduseful document free in the sense of freedom to assure everyone the effective freedomto copy and redistribute it with or without modifying it either commercially or non-commercially Secondarily this License preserves for the author and publisher a wayto get credit for their work while not being considered responsible for modificationsmade by others

This License is a kind of ldquocopyleftrdquo which means that derivative works of the documentmust themselves be free in the same sense It complements the GNU General PublicLicense which is a copyleft license designed for free software

We have designed this License in order to use it for manuals for free software becausefree software needs free documentation a free program should come with manualsproviding the same freedoms that the software does But this License is not limited tosoftware manuals it can be used for any textual work regardless of subject matter orwhether it is published as a printed book We recommend this License principally forworks whose purpose is instruction or reference

1 APPLICABILITY AND DEFINITIONS

This License applies to any manual or other work in any medium that contains anotice placed by the copyright holder saying it can be distributed under the termsof this License Such a notice grants a world-wide royalty-free license unlimited induration to use that work under the conditions stated herein The ldquoDocumentrdquobelow refers to any such manual or work Any member of the public is a licensee andis addressed as ldquoyourdquo You accept the license if you copy modify or distribute the workin a way requiring permission under copyright law

A ldquoModified Versionrdquo of the Document means any work containing the Document ora portion of it either copied verbatim or with modifications andor translated intoanother language

A ldquoSecondary Sectionrdquo is a named appendix or a front-matter section of the Documentthat deals exclusively with the relationship of the publishers or authors of the Documentto the Documentrsquos overall subject (or to related matters) and contains nothing thatcould fall directly within that overall subject (Thus if the Document is in part atextbook of mathematics a Secondary Section may not explain any mathematics) Therelationship could be a matter of historical connection with the subject or with relatedmatters or of legal commercial philosophical ethical or political position regardingthem

The ldquoInvariant Sectionsrdquo are certain Secondary Sections whose titles are designated asbeing those of Invariant Sections in the notice that says that the Document is released

Appendix A GNU Free Documentation License 27

under this License If a section does not fit the above definition of Secondary then it isnot allowed to be designated as Invariant The Document may contain zero InvariantSections If the Document does not identify any Invariant Sections then there are none

The ldquoCover Textsrdquo are certain short passages of text that are listed as Front-CoverTexts or Back-Cover Texts in the notice that says that the Document is released underthis License A Front-Cover Text may be at most 5 words and a Back-Cover Text maybe at most 25 words

A ldquoTransparentrdquo copy of the Document means a machine-readable copy representedin a format whose specification is available to the general public that is suitable forrevising the document straightforwardly with generic text editors or (for images com-posed of pixels) generic paint programs or (for drawings) some widely available drawingeditor and that is suitable for input to text formatters or for automatic translation toa variety of formats suitable for input to text formatters A copy made in an otherwiseTransparent file format whose markup or absence of markup has been arranged tothwart or discourage subsequent modification by readers is not Transparent An imageformat is not Transparent if used for any substantial amount of text A copy that isnot ldquoTransparentrdquo is called ldquoOpaquerdquo

Examples of suitable formats for Transparent copies include plain ASCII withoutmarkup Texinfo input format LaTEX input format SGML or XML using a publiclyavailable DTD and standard-conforming simple HTML PostScript or PDF designedfor human modification Examples of transparent image formats include PNG XCFand JPG Opaque formats include proprietary formats that can be read and editedonly by proprietary word processors SGML or XML for which the DTD andor pro-cessing tools are not generally available and the machine-generated HTML PostScriptor PDF produced by some word processors for output purposes only

The ldquoTitle Pagerdquo means for a printed book the title page itself plus such followingpages as are needed to hold legibly the material this License requires to appear in thetitle page For works in formats which do not have any title page as such ldquoTitle Pagerdquomeans the text near the most prominent appearance of the workrsquos title preceding thebeginning of the body of the text

The ldquopublisherrdquo means any person or entity that distributes copies of the Documentto the public

A section ldquoEntitled XYZrdquo means a named subunit of the Document whose title eitheris precisely XYZ or contains XYZ in parentheses following text that translates XYZ inanother language (Here XYZ stands for a specific section name mentioned below suchas ldquoAcknowledgementsrdquo ldquoDedicationsrdquo ldquoEndorsementsrdquo or ldquoHistoryrdquo) To ldquoPreservethe Titlerdquo of such a section when you modify the Document means that it remains asection ldquoEntitled XYZrdquo according to this definition

The Document may include Warranty Disclaimers next to the notice which states thatthis License applies to the Document These Warranty Disclaimers are considered tobe included by reference in this License but only as regards disclaiming warrantiesany other implication that these Warranty Disclaimers may have is void and has noeffect on the meaning of this License

2 VERBATIM COPYING

Appendix A GNU Free Documentation License 28

You may copy and distribute the Document in any medium either commercially ornoncommercially provided that this License the copyright notices and the licensenotice saying this License applies to the Document are reproduced in all copies andthat you add no other conditions whatsoever to those of this License You may not usetechnical measures to obstruct or control the reading or further copying of the copiesyou make or distribute However you may accept compensation in exchange for copiesIf you distribute a large enough number of copies you must also follow the conditionsin section 3

You may also lend copies under the same conditions stated above and you may publiclydisplay copies

3 COPYING IN QUANTITY

If you publish printed copies (or copies in media that commonly have printed covers) ofthe Document numbering more than 100 and the Documentrsquos license notice requiresCover Texts you must enclose the copies in covers that carry clearly and legibly allthese Cover Texts Front-Cover Texts on the front cover and Back-Cover Texts onthe back cover Both covers must also clearly and legibly identify you as the publisherof these copies The front cover must present the full title with all words of the titleequally prominent and visible You may add other material on the covers in additionCopying with changes limited to the covers as long as they preserve the title of theDocument and satisfy these conditions can be treated as verbatim copying in otherrespects

If the required texts for either cover are too voluminous to fit legibly you should putthe first ones listed (as many as fit reasonably) on the actual cover and continue therest onto adjacent pages

If you publish or distribute Opaque copies of the Document numbering more than 100you must either include a machine-readable Transparent copy along with each Opaquecopy or state in or with each Opaque copy a computer-network location from whichthe general network-using public has access to download using public-standard networkprotocols a complete Transparent copy of the Document free of added material Ifyou use the latter option you must take reasonably prudent steps when you begindistribution of Opaque copies in quantity to ensure that this Transparent copy willremain thus accessible at the stated location until at least one year after the last timeyou distribute an Opaque copy (directly or through your agents or retailers) of thatedition to the public

It is requested but not required that you contact the authors of the Document wellbefore redistributing any large number of copies to give them a chance to provide youwith an updated version of the Document

4 MODIFICATIONS

You may copy and distribute a Modified Version of the Document under the conditionsof sections 2 and 3 above provided that you release the Modified Version under preciselythis License with the Modified Version filling the role of the Document thus licensingdistribution and modification of the Modified Version to whoever possesses a copy ofit In addition you must do these things in the Modified Version

A Use in the Title Page (and on the covers if any) a title distinct from that of theDocument and from those of previous versions (which should if there were any

Appendix A GNU Free Documentation License 29

be listed in the History section of the Document) You may use the same title asa previous version if the original publisher of that version gives permission

B List on the Title Page as authors one or more persons or entities responsible forauthorship of the modifications in the Modified Version together with at least fiveof the principal authors of the Document (all of its principal authors if it has fewerthan five) unless they release you from this requirement

C State on the Title page the name of the publisher of the Modified Version as thepublisher

D Preserve all the copyright notices of the Document

E Add an appropriate copyright notice for your modifications adjacent to the othercopyright notices

F Include immediately after the copyright notices a license notice giving the publicpermission to use the Modified Version under the terms of this License in the formshown in the Addendum below

G Preserve in that license notice the full lists of Invariant Sections and required CoverTexts given in the Documentrsquos license notice

H Include an unaltered copy of this License

I Preserve the section Entitled ldquoHistoryrdquo Preserve its Title and add to it an itemstating at least the title year new authors and publisher of the Modified Versionas given on the Title Page If there is no section Entitled ldquoHistoryrdquo in the Docu-ment create one stating the title year authors and publisher of the Documentas given on its Title Page then add an item describing the Modified Version asstated in the previous sentence

J Preserve the network location if any given in the Document for public access toa Transparent copy of the Document and likewise the network locations given inthe Document for previous versions it was based on These may be placed in theldquoHistoryrdquo section You may omit a network location for a work that was publishedat least four years before the Document itself or if the original publisher of theversion it refers to gives permission

K For any section Entitled ldquoAcknowledgementsrdquo or ldquoDedicationsrdquo Preserve the Titleof the section and preserve in the section all the substance and tone of each of thecontributor acknowledgements andor dedications given therein

L Preserve all the Invariant Sections of the Document unaltered in their text andin their titles Section numbers or the equivalent are not considered part of thesection titles

M Delete any section Entitled ldquoEndorsementsrdquo Such a section may not be includedin the Modified Version

N Do not retitle any existing section to be Entitled ldquoEndorsementsrdquo or to conflict intitle with any Invariant Section

O Preserve any Warranty Disclaimers

If the Modified Version includes new front-matter sections or appendices that qualifyas Secondary Sections and contain no material copied from the Document you may atyour option designate some or all of these sections as invariant To do this add their

Appendix A GNU Free Documentation License 30

titles to the list of Invariant Sections in the Modified Versionrsquos license notice Thesetitles must be distinct from any other section titles

You may add a section Entitled ldquoEndorsementsrdquo provided it contains nothing butendorsements of your Modified Version by various partiesmdashfor example statements ofpeer review or that the text has been approved by an organization as the authoritativedefinition of a standard

You may add a passage of up to five words as a Front-Cover Text and a passage of upto 25 words as a Back-Cover Text to the end of the list of Cover Texts in the ModifiedVersion Only one passage of Front-Cover Text and one of Back-Cover Text may beadded by (or through arrangements made by) any one entity If the Document alreadyincludes a cover text for the same cover previously added by you or by arrangementmade by the same entity you are acting on behalf of you may not add another butyou may replace the old one on explicit permission from the previous publisher thatadded the old one

The author(s) and publisher(s) of the Document do not by this License give permissionto use their names for publicity for or to assert or imply endorsement of any ModifiedVersion

5 COMBINING DOCUMENTS

You may combine the Document with other documents released under this Licenseunder the terms defined in section 4 above for modified versions provided that youinclude in the combination all of the Invariant Sections of all of the original documentsunmodified and list them all as Invariant Sections of your combined work in its licensenotice and that you preserve all their Warranty Disclaimers

The combined work need only contain one copy of this License and multiple identicalInvariant Sections may be replaced with a single copy If there are multiple InvariantSections with the same name but different contents make the title of each such sectionunique by adding at the end of it in parentheses the name of the original author orpublisher of that section if known or else a unique number Make the same adjustmentto the section titles in the list of Invariant Sections in the license notice of the combinedwork

In the combination you must combine any sections Entitled ldquoHistoryrdquo in the vari-ous original documents forming one section Entitled ldquoHistoryrdquo likewise combine anysections Entitled ldquoAcknowledgementsrdquo and any sections Entitled ldquoDedicationsrdquo Youmust delete all sections Entitled ldquoEndorsementsrdquo

6 COLLECTIONS OF DOCUMENTS

You may make a collection consisting of the Document and other documents releasedunder this License and replace the individual copies of this License in the variousdocuments with a single copy that is included in the collection provided that youfollow the rules of this License for verbatim copying of each of the documents in allother respects

You may extract a single document from such a collection and distribute it individu-ally under this License provided you insert a copy of this License into the extracteddocument and follow this License in all other respects regarding verbatim copying ofthat document

Appendix A GNU Free Documentation License 31

7 AGGREGATION WITH INDEPENDENT WORKS

A compilation of the Document or its derivatives with other separate and independentdocuments or works in or on a volume of a storage or distribution medium is calledan ldquoaggregaterdquo if the copyright resulting from the compilation is not used to limit thelegal rights of the compilationrsquos users beyond what the individual works permit Whenthe Document is included in an aggregate this License does not apply to the otherworks in the aggregate which are not themselves derivative works of the Document

If the Cover Text requirement of section 3 is applicable to these copies of the Documentthen if the Document is less than one half of the entire aggregate the Documentrsquos CoverTexts may be placed on covers that bracket the Document within the aggregate or theelectronic equivalent of covers if the Document is in electronic form Otherwise theymust appear on printed covers that bracket the whole aggregate

8 TRANSLATION

Translation is considered a kind of modification so you may distribute translationsof the Document under the terms of section 4 Replacing Invariant Sections withtranslations requires special permission from their copyright holders but you mayinclude translations of some or all Invariant Sections in addition to the original versionsof these Invariant Sections You may include a translation of this License and all thelicense notices in the Document and any Warranty Disclaimers provided that youalso include the original English version of this License and the original versions ofthose notices and disclaimers In case of a disagreement between the translation andthe original version of this License or a notice or disclaimer the original version willprevail

If a section in the Document is Entitled ldquoAcknowledgementsrdquo ldquoDedicationsrdquo or ldquoHis-toryrdquo the requirement (section 4) to Preserve its Title (section 1) will typically requirechanging the actual title

9 TERMINATION

You may not copy modify sublicense or distribute the Document except as expresslyprovided under this License Any attempt otherwise to copy modify sublicense ordistribute it is void and will automatically terminate your rights under this License

However if you cease all violation of this License then your license from a particularcopyright holder is reinstated (a) provisionally unless and until the copyright holderexplicitly and finally terminates your license and (b) permanently if the copyrightholder fails to notify you of the violation by some reasonable means prior to 60 daysafter the cessation

Moreover your license from a particular copyright holder is reinstated permanently ifthe copyright holder notifies you of the violation by some reasonable means this is thefirst time you have received notice of violation of this License (for any work) from thatcopyright holder and you cure the violation prior to 30 days after your receipt of thenotice

Termination of your rights under this section does not terminate the licenses of partieswho have received copies or rights from you under this License If your rights havebeen terminated and not permanently reinstated receipt of a copy of some or all of thesame material does not give you any rights to use it

Appendix A GNU Free Documentation License 32

10 FUTURE REVISIONS OF THIS LICENSE

The Free Software Foundation may publish new revised versions of the GNU FreeDocumentation License from time to time Such new versions will be similar in spiritto the present version but may differ in detail to address new problems or concernsSee httpwwwgnuorgcopyleft

Each version of the License is given a distinguishing version number If the Documentspecifies that a particular numbered version of this License ldquoor any later versionrdquoapplies to it you have the option of following the terms and conditions either of thatspecified version or of any later version that has been published (not as a draft) bythe Free Software Foundation If the Document does not specify a version number ofthis License you may choose any version ever published (not as a draft) by the FreeSoftware Foundation If the Document specifies that a proxy can decide which futureversions of this License can be used that proxyrsquos public statement of acceptance of aversion permanently authorizes you to choose that version for the Document

11 RELICENSING

ldquoMassive Multiauthor Collaboration Siterdquo (or ldquoMMC Siterdquo) means any World WideWeb server that publishes copyrightable works and also provides prominent facilitiesfor anybody to edit those works A public wiki that anybody can edit is an example ofsuch a server A ldquoMassive Multiauthor Collaborationrdquo (or ldquoMMCrdquo) contained in thesite means any set of copyrightable works thus published on the MMC site

ldquoCC-BY-SArdquo means the Creative Commons Attribution-Share Alike 30 license pub-lished by Creative Commons Corporation a not-for-profit corporation with a principalplace of business in San Francisco California as well as future copyleft versions of thatlicense published by that same organization

ldquoIncorporaterdquo means to publish or republish a Document in whole or in part as partof another Document

An MMC is ldquoeligible for relicensingrdquo if it is licensed under this License and if all worksthat were first published under this License somewhere other than this MMC andsubsequently incorporated in whole or in part into the MMC (1) had no cover textsor invariant sections and (2) were thus incorporated prior to November 1 2008

The operator of an MMC Site may republish an MMC contained in the site underCC-BY-SA on the same site at any time before August 1 2009 provided the MMC iseligible for relicensing

Appendix A GNU Free Documentation License 33

ADDENDUM How to use this License for your documents

To use this License in a document you have written include a copy of the License in thedocument and put the following copyright and license notices just after the title page

Copyright (C) year your name

Permission is granted to copy distribute andor modify this document

under the terms of the GNU Free Documentation License Version 13

or any later version published by the Free Software Foundation

with no Invariant Sections no Front-Cover Texts and no Back-Cover

Texts A copy of the license is included in the section entitled lsquolsquoGNU

Free Documentation Licensersquorsquo

If you have Invariant Sections Front-Cover Texts and Back-Cover Texts replace theldquowith Textsrdquo line with this

with the Invariant Sections being list their titles with

the Front-Cover Texts being list and with the Back-Cover Texts

being list

If you have Invariant Sections without Cover Texts or some other combination of thethree merge those two alternatives to suit the situation

If your document contains nontrivial examples of program code we recommend releasingthese examples in parallel under your choice of free software license such as the GNUGeneral Public License to permit their use in free software

Index 34

Index

Aaccess control policy 3Author 3author specifying 10

Bbehavior prior to version 5 10behavior version 3 10behavior version 4 10binary-old-keyword-value substitution mode 9branch growth 7branch number 2branch tip 2branch default 3bug reporting 25

Ccase sensitivity file format 21checkin 3checklist for bug reports 25checkout 3checkout implicit 5ci invocation 11co invocation 12comma-v file format 1command help 7command version 7command-line option to specify a revision 7credits 1

DDate 3date formats 8date specifying 8dates file format 21default branch 3default branch setting 15deleting revisions 15description of working file 2description text specifying 8

Eempty log message 9emulation previous RCS versions 10encoding file format 20environment variables 10

Ffeatures still missing 23

file names on the command-line 7format RCSfile 20

Ggrammar file format 20

HHeader 3history 1

IId 3ident invocation 13implicit checkout circumstance 5implicit checkout locked 12implicit checkout unlocked 12instantiating a working file 2interaction model 1interactive mode 9invocation ci 11invocation co 12invocation ident 13invocation merge 14invocation rcs 14 15invocation rcsclean 16invocation rcsdiff 17invocation rcsmerge 17invocation rlog 18

Kkeyword-only substitution mode 9keyword-value substitution mode 8keyword-value-locker substitution mode 9keywords table of 3

Llayout of nodes file format 21license 1Locker 3locking a revision 15locking on implicit checkout 12locking non-strict 5locking set non-strict 15locking set strict 15locking strict 5locks in RCS file 3Log 3log message empty 9LOGNAME 11

Index 35

Mmemory limit 11merge invocation 14model interaction 1

NName 4names symbolic 3node layout file format 21non-strict locking 5number branch 2number revision 2

Oold-keyword-value substitution mode 9order of options and file names 7outdating revisions 15overview 1

Ppairing RCS and working files 7patches contributing 25problems 25projects related 1

Qquiet mode 9

Rrange of revisions specifying 7RCS file 2rcs invocation 14 15RCS version emulation 10RCS_MEM_LIMIT 11rcsclean invocation 16rcsdiff invocation 17RCSfile 4RCSfile format 20RCSINIT 10rcsmerge invocation 17removing revisions 15reporting bugs 25Revision 4revision number 2revision range specifying 7

revision specifying 7revisions tree of 3rlog invocation 18

SSource 4specifying a date 8specifying a range of revisions 7specifying a revision 7specifying a state 9specifying a suffix list 10specifying a timedate 8specifying author 10specifying description text 8specifying substitution mode 8State 4state specifying 9strict locking 5substitution mode default 8substitution mode specifying 8suffix list specifying 10symbolic names 3

TTEMP 11third-party interop file format 21Tichy Walter F 1time zone 8timedate specifying 8tip 2tip increment 7TMP 11TMPDIR 11tree of revisions 3

Uunlocking a revision 15USER 11

Vvalue-only substitution mode 9

Wwhitespace file format 21working file description 2working file instantiation 2

  • Overview
    • Credits
    • Concepts
      • Interaction model
      • Working file
      • RCS file
      • Fundamental operations
      • Keywords
        • Quick tour
          • Usage
            • Common elements
              • Revision options
              • Date option
              • Description option
              • Substitution mode option
              • Log message option
              • Misc common options
              • Environment
                • Invoking ci
                • Invoking co
                • Invoking ident
                • Invoking merge
                • Invoking rcs
                  • modern
                  • legacy
                    • Invoking rcsclean
                    • Invoking rcsdiff
                    • Invoking rcsmerge
                    • Invoking rlog
                      • Hacking
                        • File format
                          • File format grammar
                          • Additional particulars of the file format
                            • Still missing
                            • Reporting bugs
                              • GNU Free Documentation License
                              • Index
Page 14: GNU RCS · The RCS file is also known (colloquially) as the “comma-v file”, due to its name often ending in ,v (e.g., a.c,v). A revision number is a branch number followed by

Chapter 2 Usage 11

Set the value make it available to subsequent commandsRCSINIT=-q -xv -zLT

export RCSINIT

Use it (implicitly)rlog -L foo

This example in Bourne shell syntax arranges for RCS commands to operate as ifeach command-line had prepended lsquo-q -xv -zLTrsquo to the rest of the command-lineThe effective command-line that rlog sees is thus lsquo-q -xv -zLT -L foorsquo

[Environment Variable]RCS_MEM_LIMITNormally for speed commands either memory map or copy into memory the RCS fileif its size is less than thememory limit currently defaulting to ldquounlimitedrdquo Otherwise(or if the initially-tried speedy ways fail) the commands fall back to using standardio routines

You can adjust the memory limit by setting the lsquoRCS_MEM_LIMITrsquo environment variableto a numeric value (measured in kilobytes) An empty value is silently ignored

As a side effect specifying the memory limit inhibits fall-back to slower routines(This env var is mostly intended for testing RCS normally you can leave it unsetProbably it will be removed in a future release)

[Environment Variable]TMPDIR[Environment Variable]TMP[Environment Variable]TEMP

Commands sometimes create temporary files normally in a system-dependent direc-tory such as tmp You can override this directory by specifying another one asthe value of one of the environment variables TMPDIR TMP or TEMP (checked in thatorder)

[Environment Variable]LOGNAME[Environment Variable]USER

Absent -wlogin or when login is omitted (see Section 216 [Misc common options]page 9) commands check environment variables LOGNAME and USER (in that order)If neither of these are set RCS queries the host for and uses your login

22 Invoking ci

rcs ci [options] file

(or ldquocirdquo instead of ldquorcs cirdquo)

The ci command adds a revision to the RCS file reflecting the current state of the workingfile This operation is also known as ldquocheckinrdquo

-f[rev] Force new entry even if no content changed

-I[rev]

-q[rev] See Section 216 [Misc common options] page 9

-i[rev] Initial checkin error if the RCS file already exists

-j[rev] Just checkin donrsquot initialize error if the RCS file does not exist

Chapter 2 Usage 12

-k[rev] Compute revision from working file keywords

-r Release lock and delete working file

-rrev Do normal checkin

-l[rev] Like -r but immediately checkout locked (co -l) afterwards

-u[rev] Like -l but checkout unlocked (co -u)

-M[rev] Reset working file mtime (relevant for -l -u)

Multiple flags in -fiIjklMqru may be given except for -r -l -u which are mutuallyexclusive For a fully specified revision of the form brn nmust be greater than any existingon br or br must be new If rev is omitted compute it from the last lock (co -l) perhapsstarting a new branch If there is no lock use defbr(L+1) See Section 211 [Revisionoptions] page 7

-d[date]

-zzone See Section 212 [Date option] page 8 If no date specified use the workingfile modification time

-m[msg] Use msg as the log message See Section 215 [Log message option] page 9

-nname

-Nname Assign symbolic name to the entry For -n name must be new (no previousassignment) For -N overwrite any previous assignment

-sstate See Section 216 [Misc common options] page 9 Set the state

-t-text

-tfile-name

See Section 213 [Description option] page 8

-T Set the RCS filersquos modification time to the new revisionrsquos time if the former pre-cedes the latter and there is a new revision preserve the RCS filersquos modificationtime otherwise

-wwho Use who as the author

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

23 Invoking co

rcs co [options] file

(or ldquocordquo instead of ldquorcs cordquo)

The co command retrieves a revision from the RCS file writing a new working file Thisoperation is also known as ldquocheckoutrdquo

-f[rev] Force overwrite of working file

-I[rev]

-q[rev] See Section 216 [Misc common options] page 9

-p[rev] Write to stdout instead of the working file

Chapter 2 Usage 13

-r[rev] Normal checkout

-l[rev] Like -r but also lock

-u[rev] Like -l but unlock

-M[rev] Reset working file mtime (relevant for -l -u)

Multiple flags in -fIlMpqru may be given except for -r -l -u which are mutuallyexclusive See Section 211 [Revision options] page 7

-ksubst See Section 214 [Substitution mode option] page 8

-ddate

-zzone See Section 212 [Date option] page 8 Select latest before or on date

-jjoins Merge using joins a list of revrev pairs NB This option is obsolete (seeSection 29 [rcsmerge] page 17)

-sstate See Section 216 [Misc common options] page 9 Select matching state

-S Enable self-same mode In this mode the owner of a lock is unimportantjust that it exists Effectively this prevents you from checking out the samerevision twice

$ whoami

ttn

$ co -l -f z

RCSzv --gt z

revision 11 (locked)

done

$ co -S -l -f z

RCSzv --gt z

co RCSzv Revision 11 is already locked by ttn

-T Preserve the modification time on the RCS file even if it changes because a lockis added or removed

-wwho Select matching login who

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

24 Invoking ident

ident [options] [file ]

If no file is specified scan standard input The ident command scans its input for keywords(see Section 12 [Concepts] page 1) displaying to standard output what it finds

-q Normally if no patterns are found for a file ident emits a warning This optionsuppresses the warning

Chapter 2 Usage 14

-V Note that -Vn is not a valid option for ident in contrast to most other RCScommands (see Section 216 [Misc common options] page 9)

In addition to the normal keyword pattern for Subversion 12 (and later) compatibility1ident also recognizes patterns having one of the forms

$keyword text $

two colons and space after keyword

space before ending $

$keyword text$

two colons and space after keyword

hash before ending $

25 Invoking merge

merge [options] receiving-sibling parent other-sibling

The merge command combines the differences between a the parent and the other siblingand the differences between the parent and the receiving sibling It writes the result to thereceiving sibling

-A

-E

-e Use diff3 -A -E (default) or -e respectively

-p Write to stdout instead of overwriting receiving-sibling

-q See Section 216 [Misc common options] page 9 Suppress conflict warnings

-Llabel (up to three times) Specify the conflict labels for receiving-sibling parent andother-sibling respectively

-V Note that -Vn is not a valid option for merge in contrast to most other RCScommands (see Section 216 [Misc common options] page 9)

26 Invoking rcs

The rcs command is unique in the set of RCS programs in that it has two usages themodern (for RCS 590 and later) and the legacy

261 modern

rcs [options] command [command-arg ]

This rcs usage dispatches to command passing along command-arg without interpreta-tion

--commands

Display a list of available commands including a one-line description and exitsuccessfully

1 The fixed-length keyword syntax is described in detail in Version Control with Subversion chapterldquoAdvanced Topicsrdquo section ldquoKeyword Substitutionrdquo

Chapter 2 Usage 15

--aliases

Display a list of command aliases and exit successfully

--help command

Display help for a particular command and exit successfully For example todisplay help for the legacy interface use

--help frob

262 legacy

rcs frob [options] file

(or ldquorcsrdquo instead of ldquorcs frobrdquo)

This rcs usage performs various administrative operations on the RCS file depending onthe options given

-i Create and initialize a new RCS file

-L Set strict locking

-U Set non-strict locking

-M Donrsquot send mail when breaking someone elsersquos lock

-T Preserve the modification time on the RCS file unless a revision is removed

-I

-q See Section 216 [Misc common options] page 9

-alogins Append logins (comma-separated list of usernames) to access-list

-e[logins]

Erase logins (comma-separated list of usernames) from access-list If logins isomitted clear the access-list

-Afile-name

Append access-list of file-name to current access-list

-b[rev] Set default branch to that of rev or highest branch on trunk if rev is omitted

-l[rev] Lock a revision

-u[rev] Unlock a revision

-cstring Set comment leader to string NB Donrsquot use obsolete

-ksubst See Section 214 [Substitution mode option] page 8

-mrev[msg]

Replace log message with msg See Section 215 [Log message option] page 9

-nname[[rev]]

If rev is omitted delete symbolic name Otherwise associate name with rev name must be new

-Nname[[rev]]

Like -n but overwrite any previous assignment

-orange Delete (also known as ldquooutdaterdquo) revisions in range

Chapter 2 Usage 16

rev single revision

br latest revision on branch br

rev1rev2

rev1 to rev2 on same branch inclusive

rev beginning of branch to rev

rev rev to end of branch

-sstate[rev]

See Section 216 [Misc common options] page 9 Set state

-t-text

-tfile-name

See Section 213 [Description option] page 8 Replace description

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

These options have no effect and are included solely for consistency with other comamnds(see Section 217 [Environment] page 10) -zzone

27 Invoking rcsclean

rcs clean [options] [file ]

(or ldquorcscleanrdquo instead of ldquorcs cleanrdquo)

The rcsclean command removes working files that are not being worked on If given -u italso unlocks and removes working files that are being worked on but have not changed Ifno file is specified operate on all the working files in the current directory

-r[rev] Specify revision

-u[rev] Unlock if is locked and no differences found

-n[rev] Dry run (no act donrsquot operate)

-q[rev] See Section 216 [Misc common options] page 9

-ksubst See Section 214 [Substitution mode option] page 8

-T Preserve the modification time on the RCS file even it changes because a lockis removed

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

-zzone See Section 212 [Date option] page 8

Chapter 2 Usage 17

28 Invoking rcsdiff

rcs diff [options] file

(or ldquorcsdiffrdquo instead of ldquorcs diffrdquo)

The rcsdiff command runs diff to compare two revisions in an RCS file See Section ldquoIn-voking diffrdquo in The GNU Diffutils Manaual

-rrev (zero one or two times) Name a revision If given two revisions (lsquo-rrev1-rrev2rsquo) compare those revisions If given only one revision (lsquo-rrevrsquo) comparethe working file with it If given no revisions compare the working file with thelatest revision on the default branch

-ksubst See Section 214 [Substitution mode option] page 8

-q See Section 216 [Misc common options] page 9

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

-zzone See Section 212 [Date option] page 8

These options have no effect and are included solely for consistency with other comamnds(see Section 217 [Environment] page 10) -T

Additionally the following options (and their argument if any) are passed to the underlyingdiff command

-0 -1 -2 -3 -4 -5 -6 -7 -8 -9 -B -C -D -F -H -I

-L -U -W -a -b -c -d -e -f -h -i -n -p -t -u -w -y

long options (that start with --)

(Not all of these options are meaningful)

29 Invoking rcsmerge

rcs merge [options] file

(or ldquorcsmergerdquo instead of ldquorcs mergerdquo)

The rcsmerge command incorporates the changes between two revisions of an RCS file intothe corresponding working file

-A

-E

-e Passed to the diff3 command The default if none are specified is -E With -esuppress warnings on conflict The -A style generates the most verbose outputSee Section ldquoInvoking diff3rdquo in The GNU Diffutils Manual

-p[rev] Write to stdout instead of overwriting the working file

-q[rev] See Section 216 [Misc common options] page 9

-rrev (one or two times) specify a revision

One or two revisions must be specified (using -p -q -r) If only one is specified the secondrevision defaults to the latest revision on the default branch

Chapter 2 Usage 18

-ksubst See Section 214 [Substitution mode option] page 8

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

-zzone See Section 212 [Date option] page 8

These options have no effect and are included solely for consistency with other comamnds(see Section 217 [Environment] page 10) -T

210 Invoking rlog

rcs log [options] file

(or ldquorlogrdquo instead of ldquorcs logrdquo)

The rlog command displays information about RCS files

-L Ignore RCS files with no locks set

-R Print only the name of the RCS file

-h Print only the ldquoheaderrdquo information

-t Like -h but also include the description

-N Omit symbolic names

-b Select the default branch

-ddates See Section 212 [Date option] page 8 Select revisions based on timestampin the range dates with spec

d single revision d or earlier

d1ltd2

d2gtd1 between d1 and d2 exclusive

ltd

dgt before d

gtd

dlt after d

Instead of lsquoltrsquo or lsquogtrsquo you can use lsquolt=rsquo or lsquogt=rsquo respectively to specify inclusiveranges dates may also be a list of semicolon-separated specs

-l[who] Select revisions locked by who (comma-separated list of usernames) only or byanyone if who is omitted

-r[revs] Select revisions in revs a comma-separated list of range specs one of revrev rev rev1rev2

-sstates See Section 216 [Misc common options] page 9 states can also be a comma-separated list of states Select revisions with specified state(s)

-w[who] Select revisions checked in by who (comma-separated list of usernames) or bythe user if who is omitted

Chapter 2 Usage 19

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

-zzone See Section 212 [Date option] page 8

These options have no effect and are included solely for consistency with other comamnds(see Section 217 [Environment] page 10) lsquo-qrsquo lsquo-Trsquo

Chapter 3 Hacking 20

3 Hacking

This chapter in contrast to the previous (see Chapter 2 [Usage] page 7) is introspective Itdescribes an important aspect of RCS interop with other programs and development ideasand methods

31 File format

An RCS filersquos contents are described by the grammar below1 Overall the format is freendashformat text In most environments RCS uses the ISO 88591 encoding visible graphiccharacters are (octal) codes 041ndash176 and 240ndash377 and whitespace characters are codes010ndash015 and 040TODO Discuss or point to encoding compatibility issues

311 File format grammar

The meta syntax in this section uses the following conventions lsquo|rsquo (U+7C) separates al-ternatives lsquorsquo (U+7B) and lsquorsquo (U+7D) enclose optional phrases lsquorsquo and lsquorsquo (trailing U+2A)enclose phrases that can be repeated zero or more times lsquorsquo and lsquo+rsquo (trailing U+2B) enclosephrases that must appear at least once and can be repeated terminal symbols are in lsquorsquo(two U+22)

rcstext = admin delta desc deltatext

admin = head num

branch num

access id

symbols sym num

locks id num

strict

integrity intstring

comment string

expand string

delta = num

date num

author id

state id

branches num

next num

commitid sym

desc = desc string

deltatext = num

log string

text string

1 This section is adapted from the lsquorcsfile(5)rsquo manpage written by Walter F Tichy

Chapter 3 Hacking 21

num = digit | +

digit = 0 through 9

id = idchar | +

sym = idchar+

idchar = any visible graphic character except special

special = $ | | | | |

string = any character with doubled

word = id | num | string |

intchar = any character except

thirdp = ^L intchar

intstring = intchar thirdp

312 Additional particulars of the file format

bull In releases prior to 58 (2011-08-30) the grammar included the production

newphrase = id word

and used it in the admin delta and deltatext productions This allowed third-partyprograms to interoperate with RCS by storing opaque (to RCS) data in the file

As of 58 in the name of progress (towards more systematic file integrity support) theonly area reserved for third-party interop is in the (string) value of the integrity fieldspecifically after the first formfeed (U+0C) A further restriction (for all programs) isthat the integrity value must not contain lsquorsquo

bull Whitespace has no significance except in strings However whitespace cannot appearwithin an id num or sym and an RCS file must end with newline (U+0A) Strings areenclosed by lsquorsquo (U+40) If a string contains a lsquorsquo it must be doubled otherwise stringscan contain arbitrary binary data

bull Identifiers are case sensitive Keywords are in lower case only The sets of keywordsand identifiers can overlap

bull Dates which appear after the date keyword are of the form Ymmddhhmmss whereY is the year mm the month (01ndash12) dd the day (01ndash31) hh the hour (00ndash23) mm theminute (00ndash59) and ss the second (00ndash60) Y contains just the last two digits of theyear for years from 1900 through 1999 and all the digits of years thereafter Dates usethe Gregorian calendar times use UTC

bull The delta nodes form a tree All nodes whose numbers consist of a single pair (eg 2321 13) are on the trunk and are linked through the next field in order of decreasing

Chapter 3 Hacking 22

numbers The head field in the admin node points to the head of that sequence (iecontains the highest pair) The branch node in the admin node indicates the defaultbranch (or revision) for most RCS operations If empty the default branch is thehighest branch on the trunk

All delta nodes whose numbers consist of 2n fields (n ge 2) (eg 3111 2122) arelinked as follows All nodes whose first 2nminus1 number fields are identical are linkedthrough the next field in order of increasing numbers For each such sequence thedelta node whose number is identical to the first 2nminus2 number fields of the delta

nodes on that sequence is called the branchpoint The branches field of a node containsa list of the numbers of the first nodes of all sequences for which it is a branchpointThis list is ordered in increasing numbers See Figure 31

Chapter 3 Hacking 23

Head

|

|

v

---------

| |

| 21 |

| |

1213 1311 | | 1222 122111

--------- --------- --------- --------- -------------

^ ^ | ^ ^

| | | | |

| | v | |

| --------- |

| 13 |

--------- -----------

1211 131 1221 12211

--------- ---------

^ | ^

| | |

| v |

| --------- |

| 12 |

---------------------- ---------

121 122

|

|

v

---------

11

Figure 31 The organization of an example RCS file

32 Still missing

RCS is still missing some features The following is an unordered list of ldquoto-do musingsrdquo keptby the RCS maintainers If you would like to hack on an item See Section 33 [Reportingbugs] page 25

bull Add an option to rcsmerge so that it can use an arbitrary program to do the 3-waymerge instead of the default merge Likewise for rcsdiff and diff It should be possibleto pass arbitrary options to these programs and to the subsidiary co invocations

bull Add format options for finer control over the output of ident and rlog Eg thereshould be an easy way for rlog to output lines like lsquosrcmainc 24 wftrsquo one for

Chapter 3 Hacking 24

each locked revision rlog options should have three orthogonal types selecting filesselecting revisions and selecting rlog format

bull Add format options for finer control over the output of keyword strings Eg thereshould be some way to prepend lsquo()rsquo and there should be some way to change lsquo$rsquo tosome other character to disable further substitution These options should make theresulting files uneditable like lsquo-kvrsquo

bull Add long options eg --keyword-substitution Unfortunately RCSrsquos option syntaxis incompatible with getopt Perhaps the best way is to overload rcs eg lsquorcs diff

--keyword-substitution=old filersquo instead of lsquorcsdiff -ko filersquo

bull rlog -rMN should work even if M and N have different numbers of fields so long asM is an ancestor of N or vice versa

bull rcs should evaluate options in order this allows rcs -oS -nS

bull Be able to redo your most recent checkin with minor changes

bull co -u shouldnrsquot complain about a lsquo+wrsquo working file if contents donrsquot change

bull Add a lsquo-rsquo option to take the list of file names from standard input Perhaps the filenames should be null-terminated not newline-terminated so that those that containnewlines are handled properly

bull Permit multiple optionndashfilename pairs eg co -r14 a -r15 b

bull Add an option to break a symbolic link to an RCS file instead of breaking the hardlink that it points to

bull Add ways to specify the earliest revision the most recent revision the earliest or latestrevision on a particular branch and the parent or child of some other revision

bull If a user has multiple locks perhaps ci should fall back on the method of ci -k to figureout which revision to use

bull Add an option to rcsclean to clean directories recursively

bull Write an rcsck program that repairs corrupted RCS files much as fsck repairs corruptedfile systems For example it should remove stale lock files

bull Update the date parser to use the more modern getdatey by Bellovin Salz andBerets or the even more modern getdate by Moraes None of these getdate imple-mentations are as robust as RCSrsquos old warhorse in avoiding problems like arithmeticoverflow so theyrsquoll have to be fixed first (Perhaps we can use gnulib module getdate)

bull Break up the code into a library so that itrsquos easier to write new programs that manip-ulate RCS files and so that useless code is removed from the existing programs Forexample the rcs command contains unnecessary keyword substitution baggage andthe merge command can be greatly pruned

bull Make it easier to use your favorite text editor to edit log messages etc instead ofhaving to type them in irretrievably at the terminal

bull Let the user specify a search path for default branches eg to use L as the defaultbranch if it works and M otherwise Let the user require that at least one entry inthe search path works Let the user say that later entries in the search path are readonly ie one cannot check in changes to them This should be an option settable bylsquoRCSINITrsquo

bull Add a way for a user to see which revisions affected which lines

Chapter 3 Hacking 25

bull Have rlog -nN F print just the revision number that N translates to Eg rlog -nB

F would print the highest revision on the branch B Use this to add an option -bB torcsbranch to freeze the named branch This should interact well with default branches

bull Add a co option that prints the revision number before each line as SCCSrsquos get -m

does [I implemented this for Emacs 22 as a subroutine of vc-annotate qv mdashttn]

33 Reporting bugs

To report bugs or suggest enhancements for GNU RCS please visit its homepage (httpwwwgnuorgsoftwarercs) to find directions on how to ldquofile a bug reportrdquo online orsend electronic mail to help-rcsgnuorg (If you use the web interface you donrsquot needto also send email since that is done automatically)

For bug reports please include enough information for the maintainers to reproduce theproblem Generally speaking that means

bull The RCS version command(s) and manual section(s) involved

bull Hardware and operating system names and versions

bull The contents of any input files necessary to reproduce the bug

bull The expected behavior andor output

bull A description of the problem and samples of any erroneous output

bull Options you gave to configure other than specifying installation directories

bull Anything else that you think would be helpful

When in doubt whether something is needed or not include it Itrsquos better to include toomuch than to leave out something important

Patches are welcome if possible please make them with lsquogit format-patchrsquo and includeChangeLog entries (see Section ldquoChange Logrdquo in The GNU Emacs Manual) Please followthe existing coding style

Appendix A GNU Free Documentation License 26

Appendix A GNU Free Documentation License

Version 13 3 November 2008

Copyright ccopy 2000 2001 2002 2007 2008 Free Software Foundation Inchttpfsforg

Everyone is permitted to copy and distribute verbatim copiesof this license document but changing it is not allowed

0 PREAMBLE

The purpose of this License is to make a manual textbook or other functional anduseful document free in the sense of freedom to assure everyone the effective freedomto copy and redistribute it with or without modifying it either commercially or non-commercially Secondarily this License preserves for the author and publisher a wayto get credit for their work while not being considered responsible for modificationsmade by others

This License is a kind of ldquocopyleftrdquo which means that derivative works of the documentmust themselves be free in the same sense It complements the GNU General PublicLicense which is a copyleft license designed for free software

We have designed this License in order to use it for manuals for free software becausefree software needs free documentation a free program should come with manualsproviding the same freedoms that the software does But this License is not limited tosoftware manuals it can be used for any textual work regardless of subject matter orwhether it is published as a printed book We recommend this License principally forworks whose purpose is instruction or reference

1 APPLICABILITY AND DEFINITIONS

This License applies to any manual or other work in any medium that contains anotice placed by the copyright holder saying it can be distributed under the termsof this License Such a notice grants a world-wide royalty-free license unlimited induration to use that work under the conditions stated herein The ldquoDocumentrdquobelow refers to any such manual or work Any member of the public is a licensee andis addressed as ldquoyourdquo You accept the license if you copy modify or distribute the workin a way requiring permission under copyright law

A ldquoModified Versionrdquo of the Document means any work containing the Document ora portion of it either copied verbatim or with modifications andor translated intoanother language

A ldquoSecondary Sectionrdquo is a named appendix or a front-matter section of the Documentthat deals exclusively with the relationship of the publishers or authors of the Documentto the Documentrsquos overall subject (or to related matters) and contains nothing thatcould fall directly within that overall subject (Thus if the Document is in part atextbook of mathematics a Secondary Section may not explain any mathematics) Therelationship could be a matter of historical connection with the subject or with relatedmatters or of legal commercial philosophical ethical or political position regardingthem

The ldquoInvariant Sectionsrdquo are certain Secondary Sections whose titles are designated asbeing those of Invariant Sections in the notice that says that the Document is released

Appendix A GNU Free Documentation License 27

under this License If a section does not fit the above definition of Secondary then it isnot allowed to be designated as Invariant The Document may contain zero InvariantSections If the Document does not identify any Invariant Sections then there are none

The ldquoCover Textsrdquo are certain short passages of text that are listed as Front-CoverTexts or Back-Cover Texts in the notice that says that the Document is released underthis License A Front-Cover Text may be at most 5 words and a Back-Cover Text maybe at most 25 words

A ldquoTransparentrdquo copy of the Document means a machine-readable copy representedin a format whose specification is available to the general public that is suitable forrevising the document straightforwardly with generic text editors or (for images com-posed of pixels) generic paint programs or (for drawings) some widely available drawingeditor and that is suitable for input to text formatters or for automatic translation toa variety of formats suitable for input to text formatters A copy made in an otherwiseTransparent file format whose markup or absence of markup has been arranged tothwart or discourage subsequent modification by readers is not Transparent An imageformat is not Transparent if used for any substantial amount of text A copy that isnot ldquoTransparentrdquo is called ldquoOpaquerdquo

Examples of suitable formats for Transparent copies include plain ASCII withoutmarkup Texinfo input format LaTEX input format SGML or XML using a publiclyavailable DTD and standard-conforming simple HTML PostScript or PDF designedfor human modification Examples of transparent image formats include PNG XCFand JPG Opaque formats include proprietary formats that can be read and editedonly by proprietary word processors SGML or XML for which the DTD andor pro-cessing tools are not generally available and the machine-generated HTML PostScriptor PDF produced by some word processors for output purposes only

The ldquoTitle Pagerdquo means for a printed book the title page itself plus such followingpages as are needed to hold legibly the material this License requires to appear in thetitle page For works in formats which do not have any title page as such ldquoTitle Pagerdquomeans the text near the most prominent appearance of the workrsquos title preceding thebeginning of the body of the text

The ldquopublisherrdquo means any person or entity that distributes copies of the Documentto the public

A section ldquoEntitled XYZrdquo means a named subunit of the Document whose title eitheris precisely XYZ or contains XYZ in parentheses following text that translates XYZ inanother language (Here XYZ stands for a specific section name mentioned below suchas ldquoAcknowledgementsrdquo ldquoDedicationsrdquo ldquoEndorsementsrdquo or ldquoHistoryrdquo) To ldquoPreservethe Titlerdquo of such a section when you modify the Document means that it remains asection ldquoEntitled XYZrdquo according to this definition

The Document may include Warranty Disclaimers next to the notice which states thatthis License applies to the Document These Warranty Disclaimers are considered tobe included by reference in this License but only as regards disclaiming warrantiesany other implication that these Warranty Disclaimers may have is void and has noeffect on the meaning of this License

2 VERBATIM COPYING

Appendix A GNU Free Documentation License 28

You may copy and distribute the Document in any medium either commercially ornoncommercially provided that this License the copyright notices and the licensenotice saying this License applies to the Document are reproduced in all copies andthat you add no other conditions whatsoever to those of this License You may not usetechnical measures to obstruct or control the reading or further copying of the copiesyou make or distribute However you may accept compensation in exchange for copiesIf you distribute a large enough number of copies you must also follow the conditionsin section 3

You may also lend copies under the same conditions stated above and you may publiclydisplay copies

3 COPYING IN QUANTITY

If you publish printed copies (or copies in media that commonly have printed covers) ofthe Document numbering more than 100 and the Documentrsquos license notice requiresCover Texts you must enclose the copies in covers that carry clearly and legibly allthese Cover Texts Front-Cover Texts on the front cover and Back-Cover Texts onthe back cover Both covers must also clearly and legibly identify you as the publisherof these copies The front cover must present the full title with all words of the titleequally prominent and visible You may add other material on the covers in additionCopying with changes limited to the covers as long as they preserve the title of theDocument and satisfy these conditions can be treated as verbatim copying in otherrespects

If the required texts for either cover are too voluminous to fit legibly you should putthe first ones listed (as many as fit reasonably) on the actual cover and continue therest onto adjacent pages

If you publish or distribute Opaque copies of the Document numbering more than 100you must either include a machine-readable Transparent copy along with each Opaquecopy or state in or with each Opaque copy a computer-network location from whichthe general network-using public has access to download using public-standard networkprotocols a complete Transparent copy of the Document free of added material Ifyou use the latter option you must take reasonably prudent steps when you begindistribution of Opaque copies in quantity to ensure that this Transparent copy willremain thus accessible at the stated location until at least one year after the last timeyou distribute an Opaque copy (directly or through your agents or retailers) of thatedition to the public

It is requested but not required that you contact the authors of the Document wellbefore redistributing any large number of copies to give them a chance to provide youwith an updated version of the Document

4 MODIFICATIONS

You may copy and distribute a Modified Version of the Document under the conditionsof sections 2 and 3 above provided that you release the Modified Version under preciselythis License with the Modified Version filling the role of the Document thus licensingdistribution and modification of the Modified Version to whoever possesses a copy ofit In addition you must do these things in the Modified Version

A Use in the Title Page (and on the covers if any) a title distinct from that of theDocument and from those of previous versions (which should if there were any

Appendix A GNU Free Documentation License 29

be listed in the History section of the Document) You may use the same title asa previous version if the original publisher of that version gives permission

B List on the Title Page as authors one or more persons or entities responsible forauthorship of the modifications in the Modified Version together with at least fiveof the principal authors of the Document (all of its principal authors if it has fewerthan five) unless they release you from this requirement

C State on the Title page the name of the publisher of the Modified Version as thepublisher

D Preserve all the copyright notices of the Document

E Add an appropriate copyright notice for your modifications adjacent to the othercopyright notices

F Include immediately after the copyright notices a license notice giving the publicpermission to use the Modified Version under the terms of this License in the formshown in the Addendum below

G Preserve in that license notice the full lists of Invariant Sections and required CoverTexts given in the Documentrsquos license notice

H Include an unaltered copy of this License

I Preserve the section Entitled ldquoHistoryrdquo Preserve its Title and add to it an itemstating at least the title year new authors and publisher of the Modified Versionas given on the Title Page If there is no section Entitled ldquoHistoryrdquo in the Docu-ment create one stating the title year authors and publisher of the Documentas given on its Title Page then add an item describing the Modified Version asstated in the previous sentence

J Preserve the network location if any given in the Document for public access toa Transparent copy of the Document and likewise the network locations given inthe Document for previous versions it was based on These may be placed in theldquoHistoryrdquo section You may omit a network location for a work that was publishedat least four years before the Document itself or if the original publisher of theversion it refers to gives permission

K For any section Entitled ldquoAcknowledgementsrdquo or ldquoDedicationsrdquo Preserve the Titleof the section and preserve in the section all the substance and tone of each of thecontributor acknowledgements andor dedications given therein

L Preserve all the Invariant Sections of the Document unaltered in their text andin their titles Section numbers or the equivalent are not considered part of thesection titles

M Delete any section Entitled ldquoEndorsementsrdquo Such a section may not be includedin the Modified Version

N Do not retitle any existing section to be Entitled ldquoEndorsementsrdquo or to conflict intitle with any Invariant Section

O Preserve any Warranty Disclaimers

If the Modified Version includes new front-matter sections or appendices that qualifyas Secondary Sections and contain no material copied from the Document you may atyour option designate some or all of these sections as invariant To do this add their

Appendix A GNU Free Documentation License 30

titles to the list of Invariant Sections in the Modified Versionrsquos license notice Thesetitles must be distinct from any other section titles

You may add a section Entitled ldquoEndorsementsrdquo provided it contains nothing butendorsements of your Modified Version by various partiesmdashfor example statements ofpeer review or that the text has been approved by an organization as the authoritativedefinition of a standard

You may add a passage of up to five words as a Front-Cover Text and a passage of upto 25 words as a Back-Cover Text to the end of the list of Cover Texts in the ModifiedVersion Only one passage of Front-Cover Text and one of Back-Cover Text may beadded by (or through arrangements made by) any one entity If the Document alreadyincludes a cover text for the same cover previously added by you or by arrangementmade by the same entity you are acting on behalf of you may not add another butyou may replace the old one on explicit permission from the previous publisher thatadded the old one

The author(s) and publisher(s) of the Document do not by this License give permissionto use their names for publicity for or to assert or imply endorsement of any ModifiedVersion

5 COMBINING DOCUMENTS

You may combine the Document with other documents released under this Licenseunder the terms defined in section 4 above for modified versions provided that youinclude in the combination all of the Invariant Sections of all of the original documentsunmodified and list them all as Invariant Sections of your combined work in its licensenotice and that you preserve all their Warranty Disclaimers

The combined work need only contain one copy of this License and multiple identicalInvariant Sections may be replaced with a single copy If there are multiple InvariantSections with the same name but different contents make the title of each such sectionunique by adding at the end of it in parentheses the name of the original author orpublisher of that section if known or else a unique number Make the same adjustmentto the section titles in the list of Invariant Sections in the license notice of the combinedwork

In the combination you must combine any sections Entitled ldquoHistoryrdquo in the vari-ous original documents forming one section Entitled ldquoHistoryrdquo likewise combine anysections Entitled ldquoAcknowledgementsrdquo and any sections Entitled ldquoDedicationsrdquo Youmust delete all sections Entitled ldquoEndorsementsrdquo

6 COLLECTIONS OF DOCUMENTS

You may make a collection consisting of the Document and other documents releasedunder this License and replace the individual copies of this License in the variousdocuments with a single copy that is included in the collection provided that youfollow the rules of this License for verbatim copying of each of the documents in allother respects

You may extract a single document from such a collection and distribute it individu-ally under this License provided you insert a copy of this License into the extracteddocument and follow this License in all other respects regarding verbatim copying ofthat document

Appendix A GNU Free Documentation License 31

7 AGGREGATION WITH INDEPENDENT WORKS

A compilation of the Document or its derivatives with other separate and independentdocuments or works in or on a volume of a storage or distribution medium is calledan ldquoaggregaterdquo if the copyright resulting from the compilation is not used to limit thelegal rights of the compilationrsquos users beyond what the individual works permit Whenthe Document is included in an aggregate this License does not apply to the otherworks in the aggregate which are not themselves derivative works of the Document

If the Cover Text requirement of section 3 is applicable to these copies of the Documentthen if the Document is less than one half of the entire aggregate the Documentrsquos CoverTexts may be placed on covers that bracket the Document within the aggregate or theelectronic equivalent of covers if the Document is in electronic form Otherwise theymust appear on printed covers that bracket the whole aggregate

8 TRANSLATION

Translation is considered a kind of modification so you may distribute translationsof the Document under the terms of section 4 Replacing Invariant Sections withtranslations requires special permission from their copyright holders but you mayinclude translations of some or all Invariant Sections in addition to the original versionsof these Invariant Sections You may include a translation of this License and all thelicense notices in the Document and any Warranty Disclaimers provided that youalso include the original English version of this License and the original versions ofthose notices and disclaimers In case of a disagreement between the translation andthe original version of this License or a notice or disclaimer the original version willprevail

If a section in the Document is Entitled ldquoAcknowledgementsrdquo ldquoDedicationsrdquo or ldquoHis-toryrdquo the requirement (section 4) to Preserve its Title (section 1) will typically requirechanging the actual title

9 TERMINATION

You may not copy modify sublicense or distribute the Document except as expresslyprovided under this License Any attempt otherwise to copy modify sublicense ordistribute it is void and will automatically terminate your rights under this License

However if you cease all violation of this License then your license from a particularcopyright holder is reinstated (a) provisionally unless and until the copyright holderexplicitly and finally terminates your license and (b) permanently if the copyrightholder fails to notify you of the violation by some reasonable means prior to 60 daysafter the cessation

Moreover your license from a particular copyright holder is reinstated permanently ifthe copyright holder notifies you of the violation by some reasonable means this is thefirst time you have received notice of violation of this License (for any work) from thatcopyright holder and you cure the violation prior to 30 days after your receipt of thenotice

Termination of your rights under this section does not terminate the licenses of partieswho have received copies or rights from you under this License If your rights havebeen terminated and not permanently reinstated receipt of a copy of some or all of thesame material does not give you any rights to use it

Appendix A GNU Free Documentation License 32

10 FUTURE REVISIONS OF THIS LICENSE

The Free Software Foundation may publish new revised versions of the GNU FreeDocumentation License from time to time Such new versions will be similar in spiritto the present version but may differ in detail to address new problems or concernsSee httpwwwgnuorgcopyleft

Each version of the License is given a distinguishing version number If the Documentspecifies that a particular numbered version of this License ldquoor any later versionrdquoapplies to it you have the option of following the terms and conditions either of thatspecified version or of any later version that has been published (not as a draft) bythe Free Software Foundation If the Document does not specify a version number ofthis License you may choose any version ever published (not as a draft) by the FreeSoftware Foundation If the Document specifies that a proxy can decide which futureversions of this License can be used that proxyrsquos public statement of acceptance of aversion permanently authorizes you to choose that version for the Document

11 RELICENSING

ldquoMassive Multiauthor Collaboration Siterdquo (or ldquoMMC Siterdquo) means any World WideWeb server that publishes copyrightable works and also provides prominent facilitiesfor anybody to edit those works A public wiki that anybody can edit is an example ofsuch a server A ldquoMassive Multiauthor Collaborationrdquo (or ldquoMMCrdquo) contained in thesite means any set of copyrightable works thus published on the MMC site

ldquoCC-BY-SArdquo means the Creative Commons Attribution-Share Alike 30 license pub-lished by Creative Commons Corporation a not-for-profit corporation with a principalplace of business in San Francisco California as well as future copyleft versions of thatlicense published by that same organization

ldquoIncorporaterdquo means to publish or republish a Document in whole or in part as partof another Document

An MMC is ldquoeligible for relicensingrdquo if it is licensed under this License and if all worksthat were first published under this License somewhere other than this MMC andsubsequently incorporated in whole or in part into the MMC (1) had no cover textsor invariant sections and (2) were thus incorporated prior to November 1 2008

The operator of an MMC Site may republish an MMC contained in the site underCC-BY-SA on the same site at any time before August 1 2009 provided the MMC iseligible for relicensing

Appendix A GNU Free Documentation License 33

ADDENDUM How to use this License for your documents

To use this License in a document you have written include a copy of the License in thedocument and put the following copyright and license notices just after the title page

Copyright (C) year your name

Permission is granted to copy distribute andor modify this document

under the terms of the GNU Free Documentation License Version 13

or any later version published by the Free Software Foundation

with no Invariant Sections no Front-Cover Texts and no Back-Cover

Texts A copy of the license is included in the section entitled lsquolsquoGNU

Free Documentation Licensersquorsquo

If you have Invariant Sections Front-Cover Texts and Back-Cover Texts replace theldquowith Textsrdquo line with this

with the Invariant Sections being list their titles with

the Front-Cover Texts being list and with the Back-Cover Texts

being list

If you have Invariant Sections without Cover Texts or some other combination of thethree merge those two alternatives to suit the situation

If your document contains nontrivial examples of program code we recommend releasingthese examples in parallel under your choice of free software license such as the GNUGeneral Public License to permit their use in free software

Index 34

Index

Aaccess control policy 3Author 3author specifying 10

Bbehavior prior to version 5 10behavior version 3 10behavior version 4 10binary-old-keyword-value substitution mode 9branch growth 7branch number 2branch tip 2branch default 3bug reporting 25

Ccase sensitivity file format 21checkin 3checklist for bug reports 25checkout 3checkout implicit 5ci invocation 11co invocation 12comma-v file format 1command help 7command version 7command-line option to specify a revision 7credits 1

DDate 3date formats 8date specifying 8dates file format 21default branch 3default branch setting 15deleting revisions 15description of working file 2description text specifying 8

Eempty log message 9emulation previous RCS versions 10encoding file format 20environment variables 10

Ffeatures still missing 23

file names on the command-line 7format RCSfile 20

Ggrammar file format 20

HHeader 3history 1

IId 3ident invocation 13implicit checkout circumstance 5implicit checkout locked 12implicit checkout unlocked 12instantiating a working file 2interaction model 1interactive mode 9invocation ci 11invocation co 12invocation ident 13invocation merge 14invocation rcs 14 15invocation rcsclean 16invocation rcsdiff 17invocation rcsmerge 17invocation rlog 18

Kkeyword-only substitution mode 9keyword-value substitution mode 8keyword-value-locker substitution mode 9keywords table of 3

Llayout of nodes file format 21license 1Locker 3locking a revision 15locking on implicit checkout 12locking non-strict 5locking set non-strict 15locking set strict 15locking strict 5locks in RCS file 3Log 3log message empty 9LOGNAME 11

Index 35

Mmemory limit 11merge invocation 14model interaction 1

NName 4names symbolic 3node layout file format 21non-strict locking 5number branch 2number revision 2

Oold-keyword-value substitution mode 9order of options and file names 7outdating revisions 15overview 1

Ppairing RCS and working files 7patches contributing 25problems 25projects related 1

Qquiet mode 9

Rrange of revisions specifying 7RCS file 2rcs invocation 14 15RCS version emulation 10RCS_MEM_LIMIT 11rcsclean invocation 16rcsdiff invocation 17RCSfile 4RCSfile format 20RCSINIT 10rcsmerge invocation 17removing revisions 15reporting bugs 25Revision 4revision number 2revision range specifying 7

revision specifying 7revisions tree of 3rlog invocation 18

SSource 4specifying a date 8specifying a range of revisions 7specifying a revision 7specifying a state 9specifying a suffix list 10specifying a timedate 8specifying author 10specifying description text 8specifying substitution mode 8State 4state specifying 9strict locking 5substitution mode default 8substitution mode specifying 8suffix list specifying 10symbolic names 3

TTEMP 11third-party interop file format 21Tichy Walter F 1time zone 8timedate specifying 8tip 2tip increment 7TMP 11TMPDIR 11tree of revisions 3

Uunlocking a revision 15USER 11

Vvalue-only substitution mode 9

Wwhitespace file format 21working file description 2working file instantiation 2

  • Overview
    • Credits
    • Concepts
      • Interaction model
      • Working file
      • RCS file
      • Fundamental operations
      • Keywords
        • Quick tour
          • Usage
            • Common elements
              • Revision options
              • Date option
              • Description option
              • Substitution mode option
              • Log message option
              • Misc common options
              • Environment
                • Invoking ci
                • Invoking co
                • Invoking ident
                • Invoking merge
                • Invoking rcs
                  • modern
                  • legacy
                    • Invoking rcsclean
                    • Invoking rcsdiff
                    • Invoking rcsmerge
                    • Invoking rlog
                      • Hacking
                        • File format
                          • File format grammar
                          • Additional particulars of the file format
                            • Still missing
                            • Reporting bugs
                              • GNU Free Documentation License
                              • Index
Page 15: GNU RCS · The RCS file is also known (colloquially) as the “comma-v file”, due to its name often ending in ,v (e.g., a.c,v). A revision number is a branch number followed by

Chapter 2 Usage 12

-k[rev] Compute revision from working file keywords

-r Release lock and delete working file

-rrev Do normal checkin

-l[rev] Like -r but immediately checkout locked (co -l) afterwards

-u[rev] Like -l but checkout unlocked (co -u)

-M[rev] Reset working file mtime (relevant for -l -u)

Multiple flags in -fiIjklMqru may be given except for -r -l -u which are mutuallyexclusive For a fully specified revision of the form brn nmust be greater than any existingon br or br must be new If rev is omitted compute it from the last lock (co -l) perhapsstarting a new branch If there is no lock use defbr(L+1) See Section 211 [Revisionoptions] page 7

-d[date]

-zzone See Section 212 [Date option] page 8 If no date specified use the workingfile modification time

-m[msg] Use msg as the log message See Section 215 [Log message option] page 9

-nname

-Nname Assign symbolic name to the entry For -n name must be new (no previousassignment) For -N overwrite any previous assignment

-sstate See Section 216 [Misc common options] page 9 Set the state

-t-text

-tfile-name

See Section 213 [Description option] page 8

-T Set the RCS filersquos modification time to the new revisionrsquos time if the former pre-cedes the latter and there is a new revision preserve the RCS filersquos modificationtime otherwise

-wwho Use who as the author

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

23 Invoking co

rcs co [options] file

(or ldquocordquo instead of ldquorcs cordquo)

The co command retrieves a revision from the RCS file writing a new working file Thisoperation is also known as ldquocheckoutrdquo

-f[rev] Force overwrite of working file

-I[rev]

-q[rev] See Section 216 [Misc common options] page 9

-p[rev] Write to stdout instead of the working file

Chapter 2 Usage 13

-r[rev] Normal checkout

-l[rev] Like -r but also lock

-u[rev] Like -l but unlock

-M[rev] Reset working file mtime (relevant for -l -u)

Multiple flags in -fIlMpqru may be given except for -r -l -u which are mutuallyexclusive See Section 211 [Revision options] page 7

-ksubst See Section 214 [Substitution mode option] page 8

-ddate

-zzone See Section 212 [Date option] page 8 Select latest before or on date

-jjoins Merge using joins a list of revrev pairs NB This option is obsolete (seeSection 29 [rcsmerge] page 17)

-sstate See Section 216 [Misc common options] page 9 Select matching state

-S Enable self-same mode In this mode the owner of a lock is unimportantjust that it exists Effectively this prevents you from checking out the samerevision twice

$ whoami

ttn

$ co -l -f z

RCSzv --gt z

revision 11 (locked)

done

$ co -S -l -f z

RCSzv --gt z

co RCSzv Revision 11 is already locked by ttn

-T Preserve the modification time on the RCS file even if it changes because a lockis added or removed

-wwho Select matching login who

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

24 Invoking ident

ident [options] [file ]

If no file is specified scan standard input The ident command scans its input for keywords(see Section 12 [Concepts] page 1) displaying to standard output what it finds

-q Normally if no patterns are found for a file ident emits a warning This optionsuppresses the warning

Chapter 2 Usage 14

-V Note that -Vn is not a valid option for ident in contrast to most other RCScommands (see Section 216 [Misc common options] page 9)

In addition to the normal keyword pattern for Subversion 12 (and later) compatibility1ident also recognizes patterns having one of the forms

$keyword text $

two colons and space after keyword

space before ending $

$keyword text$

two colons and space after keyword

hash before ending $

25 Invoking merge

merge [options] receiving-sibling parent other-sibling

The merge command combines the differences between a the parent and the other siblingand the differences between the parent and the receiving sibling It writes the result to thereceiving sibling

-A

-E

-e Use diff3 -A -E (default) or -e respectively

-p Write to stdout instead of overwriting receiving-sibling

-q See Section 216 [Misc common options] page 9 Suppress conflict warnings

-Llabel (up to three times) Specify the conflict labels for receiving-sibling parent andother-sibling respectively

-V Note that -Vn is not a valid option for merge in contrast to most other RCScommands (see Section 216 [Misc common options] page 9)

26 Invoking rcs

The rcs command is unique in the set of RCS programs in that it has two usages themodern (for RCS 590 and later) and the legacy

261 modern

rcs [options] command [command-arg ]

This rcs usage dispatches to command passing along command-arg without interpreta-tion

--commands

Display a list of available commands including a one-line description and exitsuccessfully

1 The fixed-length keyword syntax is described in detail in Version Control with Subversion chapterldquoAdvanced Topicsrdquo section ldquoKeyword Substitutionrdquo

Chapter 2 Usage 15

--aliases

Display a list of command aliases and exit successfully

--help command

Display help for a particular command and exit successfully For example todisplay help for the legacy interface use

--help frob

262 legacy

rcs frob [options] file

(or ldquorcsrdquo instead of ldquorcs frobrdquo)

This rcs usage performs various administrative operations on the RCS file depending onthe options given

-i Create and initialize a new RCS file

-L Set strict locking

-U Set non-strict locking

-M Donrsquot send mail when breaking someone elsersquos lock

-T Preserve the modification time on the RCS file unless a revision is removed

-I

-q See Section 216 [Misc common options] page 9

-alogins Append logins (comma-separated list of usernames) to access-list

-e[logins]

Erase logins (comma-separated list of usernames) from access-list If logins isomitted clear the access-list

-Afile-name

Append access-list of file-name to current access-list

-b[rev] Set default branch to that of rev or highest branch on trunk if rev is omitted

-l[rev] Lock a revision

-u[rev] Unlock a revision

-cstring Set comment leader to string NB Donrsquot use obsolete

-ksubst See Section 214 [Substitution mode option] page 8

-mrev[msg]

Replace log message with msg See Section 215 [Log message option] page 9

-nname[[rev]]

If rev is omitted delete symbolic name Otherwise associate name with rev name must be new

-Nname[[rev]]

Like -n but overwrite any previous assignment

-orange Delete (also known as ldquooutdaterdquo) revisions in range

Chapter 2 Usage 16

rev single revision

br latest revision on branch br

rev1rev2

rev1 to rev2 on same branch inclusive

rev beginning of branch to rev

rev rev to end of branch

-sstate[rev]

See Section 216 [Misc common options] page 9 Set state

-t-text

-tfile-name

See Section 213 [Description option] page 8 Replace description

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

These options have no effect and are included solely for consistency with other comamnds(see Section 217 [Environment] page 10) -zzone

27 Invoking rcsclean

rcs clean [options] [file ]

(or ldquorcscleanrdquo instead of ldquorcs cleanrdquo)

The rcsclean command removes working files that are not being worked on If given -u italso unlocks and removes working files that are being worked on but have not changed Ifno file is specified operate on all the working files in the current directory

-r[rev] Specify revision

-u[rev] Unlock if is locked and no differences found

-n[rev] Dry run (no act donrsquot operate)

-q[rev] See Section 216 [Misc common options] page 9

-ksubst See Section 214 [Substitution mode option] page 8

-T Preserve the modification time on the RCS file even it changes because a lockis removed

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

-zzone See Section 212 [Date option] page 8

Chapter 2 Usage 17

28 Invoking rcsdiff

rcs diff [options] file

(or ldquorcsdiffrdquo instead of ldquorcs diffrdquo)

The rcsdiff command runs diff to compare two revisions in an RCS file See Section ldquoIn-voking diffrdquo in The GNU Diffutils Manaual

-rrev (zero one or two times) Name a revision If given two revisions (lsquo-rrev1-rrev2rsquo) compare those revisions If given only one revision (lsquo-rrevrsquo) comparethe working file with it If given no revisions compare the working file with thelatest revision on the default branch

-ksubst See Section 214 [Substitution mode option] page 8

-q See Section 216 [Misc common options] page 9

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

-zzone See Section 212 [Date option] page 8

These options have no effect and are included solely for consistency with other comamnds(see Section 217 [Environment] page 10) -T

Additionally the following options (and their argument if any) are passed to the underlyingdiff command

-0 -1 -2 -3 -4 -5 -6 -7 -8 -9 -B -C -D -F -H -I

-L -U -W -a -b -c -d -e -f -h -i -n -p -t -u -w -y

long options (that start with --)

(Not all of these options are meaningful)

29 Invoking rcsmerge

rcs merge [options] file

(or ldquorcsmergerdquo instead of ldquorcs mergerdquo)

The rcsmerge command incorporates the changes between two revisions of an RCS file intothe corresponding working file

-A

-E

-e Passed to the diff3 command The default if none are specified is -E With -esuppress warnings on conflict The -A style generates the most verbose outputSee Section ldquoInvoking diff3rdquo in The GNU Diffutils Manual

-p[rev] Write to stdout instead of overwriting the working file

-q[rev] See Section 216 [Misc common options] page 9

-rrev (one or two times) specify a revision

One or two revisions must be specified (using -p -q -r) If only one is specified the secondrevision defaults to the latest revision on the default branch

Chapter 2 Usage 18

-ksubst See Section 214 [Substitution mode option] page 8

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

-zzone See Section 212 [Date option] page 8

These options have no effect and are included solely for consistency with other comamnds(see Section 217 [Environment] page 10) -T

210 Invoking rlog

rcs log [options] file

(or ldquorlogrdquo instead of ldquorcs logrdquo)

The rlog command displays information about RCS files

-L Ignore RCS files with no locks set

-R Print only the name of the RCS file

-h Print only the ldquoheaderrdquo information

-t Like -h but also include the description

-N Omit symbolic names

-b Select the default branch

-ddates See Section 212 [Date option] page 8 Select revisions based on timestampin the range dates with spec

d single revision d or earlier

d1ltd2

d2gtd1 between d1 and d2 exclusive

ltd

dgt before d

gtd

dlt after d

Instead of lsquoltrsquo or lsquogtrsquo you can use lsquolt=rsquo or lsquogt=rsquo respectively to specify inclusiveranges dates may also be a list of semicolon-separated specs

-l[who] Select revisions locked by who (comma-separated list of usernames) only or byanyone if who is omitted

-r[revs] Select revisions in revs a comma-separated list of range specs one of revrev rev rev1rev2

-sstates See Section 216 [Misc common options] page 9 states can also be a comma-separated list of states Select revisions with specified state(s)

-w[who] Select revisions checked in by who (comma-separated list of usernames) or bythe user if who is omitted

Chapter 2 Usage 19

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

-zzone See Section 212 [Date option] page 8

These options have no effect and are included solely for consistency with other comamnds(see Section 217 [Environment] page 10) lsquo-qrsquo lsquo-Trsquo

Chapter 3 Hacking 20

3 Hacking

This chapter in contrast to the previous (see Chapter 2 [Usage] page 7) is introspective Itdescribes an important aspect of RCS interop with other programs and development ideasand methods

31 File format

An RCS filersquos contents are described by the grammar below1 Overall the format is freendashformat text In most environments RCS uses the ISO 88591 encoding visible graphiccharacters are (octal) codes 041ndash176 and 240ndash377 and whitespace characters are codes010ndash015 and 040TODO Discuss or point to encoding compatibility issues

311 File format grammar

The meta syntax in this section uses the following conventions lsquo|rsquo (U+7C) separates al-ternatives lsquorsquo (U+7B) and lsquorsquo (U+7D) enclose optional phrases lsquorsquo and lsquorsquo (trailing U+2A)enclose phrases that can be repeated zero or more times lsquorsquo and lsquo+rsquo (trailing U+2B) enclosephrases that must appear at least once and can be repeated terminal symbols are in lsquorsquo(two U+22)

rcstext = admin delta desc deltatext

admin = head num

branch num

access id

symbols sym num

locks id num

strict

integrity intstring

comment string

expand string

delta = num

date num

author id

state id

branches num

next num

commitid sym

desc = desc string

deltatext = num

log string

text string

1 This section is adapted from the lsquorcsfile(5)rsquo manpage written by Walter F Tichy

Chapter 3 Hacking 21

num = digit | +

digit = 0 through 9

id = idchar | +

sym = idchar+

idchar = any visible graphic character except special

special = $ | | | | |

string = any character with doubled

word = id | num | string |

intchar = any character except

thirdp = ^L intchar

intstring = intchar thirdp

312 Additional particulars of the file format

bull In releases prior to 58 (2011-08-30) the grammar included the production

newphrase = id word

and used it in the admin delta and deltatext productions This allowed third-partyprograms to interoperate with RCS by storing opaque (to RCS) data in the file

As of 58 in the name of progress (towards more systematic file integrity support) theonly area reserved for third-party interop is in the (string) value of the integrity fieldspecifically after the first formfeed (U+0C) A further restriction (for all programs) isthat the integrity value must not contain lsquorsquo

bull Whitespace has no significance except in strings However whitespace cannot appearwithin an id num or sym and an RCS file must end with newline (U+0A) Strings areenclosed by lsquorsquo (U+40) If a string contains a lsquorsquo it must be doubled otherwise stringscan contain arbitrary binary data

bull Identifiers are case sensitive Keywords are in lower case only The sets of keywordsand identifiers can overlap

bull Dates which appear after the date keyword are of the form Ymmddhhmmss whereY is the year mm the month (01ndash12) dd the day (01ndash31) hh the hour (00ndash23) mm theminute (00ndash59) and ss the second (00ndash60) Y contains just the last two digits of theyear for years from 1900 through 1999 and all the digits of years thereafter Dates usethe Gregorian calendar times use UTC

bull The delta nodes form a tree All nodes whose numbers consist of a single pair (eg 2321 13) are on the trunk and are linked through the next field in order of decreasing

Chapter 3 Hacking 22

numbers The head field in the admin node points to the head of that sequence (iecontains the highest pair) The branch node in the admin node indicates the defaultbranch (or revision) for most RCS operations If empty the default branch is thehighest branch on the trunk

All delta nodes whose numbers consist of 2n fields (n ge 2) (eg 3111 2122) arelinked as follows All nodes whose first 2nminus1 number fields are identical are linkedthrough the next field in order of increasing numbers For each such sequence thedelta node whose number is identical to the first 2nminus2 number fields of the delta

nodes on that sequence is called the branchpoint The branches field of a node containsa list of the numbers of the first nodes of all sequences for which it is a branchpointThis list is ordered in increasing numbers See Figure 31

Chapter 3 Hacking 23

Head

|

|

v

---------

| |

| 21 |

| |

1213 1311 | | 1222 122111

--------- --------- --------- --------- -------------

^ ^ | ^ ^

| | | | |

| | v | |

| --------- |

| 13 |

--------- -----------

1211 131 1221 12211

--------- ---------

^ | ^

| | |

| v |

| --------- |

| 12 |

---------------------- ---------

121 122

|

|

v

---------

11

Figure 31 The organization of an example RCS file

32 Still missing

RCS is still missing some features The following is an unordered list of ldquoto-do musingsrdquo keptby the RCS maintainers If you would like to hack on an item See Section 33 [Reportingbugs] page 25

bull Add an option to rcsmerge so that it can use an arbitrary program to do the 3-waymerge instead of the default merge Likewise for rcsdiff and diff It should be possibleto pass arbitrary options to these programs and to the subsidiary co invocations

bull Add format options for finer control over the output of ident and rlog Eg thereshould be an easy way for rlog to output lines like lsquosrcmainc 24 wftrsquo one for

Chapter 3 Hacking 24

each locked revision rlog options should have three orthogonal types selecting filesselecting revisions and selecting rlog format

bull Add format options for finer control over the output of keyword strings Eg thereshould be some way to prepend lsquo()rsquo and there should be some way to change lsquo$rsquo tosome other character to disable further substitution These options should make theresulting files uneditable like lsquo-kvrsquo

bull Add long options eg --keyword-substitution Unfortunately RCSrsquos option syntaxis incompatible with getopt Perhaps the best way is to overload rcs eg lsquorcs diff

--keyword-substitution=old filersquo instead of lsquorcsdiff -ko filersquo

bull rlog -rMN should work even if M and N have different numbers of fields so long asM is an ancestor of N or vice versa

bull rcs should evaluate options in order this allows rcs -oS -nS

bull Be able to redo your most recent checkin with minor changes

bull co -u shouldnrsquot complain about a lsquo+wrsquo working file if contents donrsquot change

bull Add a lsquo-rsquo option to take the list of file names from standard input Perhaps the filenames should be null-terminated not newline-terminated so that those that containnewlines are handled properly

bull Permit multiple optionndashfilename pairs eg co -r14 a -r15 b

bull Add an option to break a symbolic link to an RCS file instead of breaking the hardlink that it points to

bull Add ways to specify the earliest revision the most recent revision the earliest or latestrevision on a particular branch and the parent or child of some other revision

bull If a user has multiple locks perhaps ci should fall back on the method of ci -k to figureout which revision to use

bull Add an option to rcsclean to clean directories recursively

bull Write an rcsck program that repairs corrupted RCS files much as fsck repairs corruptedfile systems For example it should remove stale lock files

bull Update the date parser to use the more modern getdatey by Bellovin Salz andBerets or the even more modern getdate by Moraes None of these getdate imple-mentations are as robust as RCSrsquos old warhorse in avoiding problems like arithmeticoverflow so theyrsquoll have to be fixed first (Perhaps we can use gnulib module getdate)

bull Break up the code into a library so that itrsquos easier to write new programs that manip-ulate RCS files and so that useless code is removed from the existing programs Forexample the rcs command contains unnecessary keyword substitution baggage andthe merge command can be greatly pruned

bull Make it easier to use your favorite text editor to edit log messages etc instead ofhaving to type them in irretrievably at the terminal

bull Let the user specify a search path for default branches eg to use L as the defaultbranch if it works and M otherwise Let the user require that at least one entry inthe search path works Let the user say that later entries in the search path are readonly ie one cannot check in changes to them This should be an option settable bylsquoRCSINITrsquo

bull Add a way for a user to see which revisions affected which lines

Chapter 3 Hacking 25

bull Have rlog -nN F print just the revision number that N translates to Eg rlog -nB

F would print the highest revision on the branch B Use this to add an option -bB torcsbranch to freeze the named branch This should interact well with default branches

bull Add a co option that prints the revision number before each line as SCCSrsquos get -m

does [I implemented this for Emacs 22 as a subroutine of vc-annotate qv mdashttn]

33 Reporting bugs

To report bugs or suggest enhancements for GNU RCS please visit its homepage (httpwwwgnuorgsoftwarercs) to find directions on how to ldquofile a bug reportrdquo online orsend electronic mail to help-rcsgnuorg (If you use the web interface you donrsquot needto also send email since that is done automatically)

For bug reports please include enough information for the maintainers to reproduce theproblem Generally speaking that means

bull The RCS version command(s) and manual section(s) involved

bull Hardware and operating system names and versions

bull The contents of any input files necessary to reproduce the bug

bull The expected behavior andor output

bull A description of the problem and samples of any erroneous output

bull Options you gave to configure other than specifying installation directories

bull Anything else that you think would be helpful

When in doubt whether something is needed or not include it Itrsquos better to include toomuch than to leave out something important

Patches are welcome if possible please make them with lsquogit format-patchrsquo and includeChangeLog entries (see Section ldquoChange Logrdquo in The GNU Emacs Manual) Please followthe existing coding style

Appendix A GNU Free Documentation License 26

Appendix A GNU Free Documentation License

Version 13 3 November 2008

Copyright ccopy 2000 2001 2002 2007 2008 Free Software Foundation Inchttpfsforg

Everyone is permitted to copy and distribute verbatim copiesof this license document but changing it is not allowed

0 PREAMBLE

The purpose of this License is to make a manual textbook or other functional anduseful document free in the sense of freedom to assure everyone the effective freedomto copy and redistribute it with or without modifying it either commercially or non-commercially Secondarily this License preserves for the author and publisher a wayto get credit for their work while not being considered responsible for modificationsmade by others

This License is a kind of ldquocopyleftrdquo which means that derivative works of the documentmust themselves be free in the same sense It complements the GNU General PublicLicense which is a copyleft license designed for free software

We have designed this License in order to use it for manuals for free software becausefree software needs free documentation a free program should come with manualsproviding the same freedoms that the software does But this License is not limited tosoftware manuals it can be used for any textual work regardless of subject matter orwhether it is published as a printed book We recommend this License principally forworks whose purpose is instruction or reference

1 APPLICABILITY AND DEFINITIONS

This License applies to any manual or other work in any medium that contains anotice placed by the copyright holder saying it can be distributed under the termsof this License Such a notice grants a world-wide royalty-free license unlimited induration to use that work under the conditions stated herein The ldquoDocumentrdquobelow refers to any such manual or work Any member of the public is a licensee andis addressed as ldquoyourdquo You accept the license if you copy modify or distribute the workin a way requiring permission under copyright law

A ldquoModified Versionrdquo of the Document means any work containing the Document ora portion of it either copied verbatim or with modifications andor translated intoanother language

A ldquoSecondary Sectionrdquo is a named appendix or a front-matter section of the Documentthat deals exclusively with the relationship of the publishers or authors of the Documentto the Documentrsquos overall subject (or to related matters) and contains nothing thatcould fall directly within that overall subject (Thus if the Document is in part atextbook of mathematics a Secondary Section may not explain any mathematics) Therelationship could be a matter of historical connection with the subject or with relatedmatters or of legal commercial philosophical ethical or political position regardingthem

The ldquoInvariant Sectionsrdquo are certain Secondary Sections whose titles are designated asbeing those of Invariant Sections in the notice that says that the Document is released

Appendix A GNU Free Documentation License 27

under this License If a section does not fit the above definition of Secondary then it isnot allowed to be designated as Invariant The Document may contain zero InvariantSections If the Document does not identify any Invariant Sections then there are none

The ldquoCover Textsrdquo are certain short passages of text that are listed as Front-CoverTexts or Back-Cover Texts in the notice that says that the Document is released underthis License A Front-Cover Text may be at most 5 words and a Back-Cover Text maybe at most 25 words

A ldquoTransparentrdquo copy of the Document means a machine-readable copy representedin a format whose specification is available to the general public that is suitable forrevising the document straightforwardly with generic text editors or (for images com-posed of pixels) generic paint programs or (for drawings) some widely available drawingeditor and that is suitable for input to text formatters or for automatic translation toa variety of formats suitable for input to text formatters A copy made in an otherwiseTransparent file format whose markup or absence of markup has been arranged tothwart or discourage subsequent modification by readers is not Transparent An imageformat is not Transparent if used for any substantial amount of text A copy that isnot ldquoTransparentrdquo is called ldquoOpaquerdquo

Examples of suitable formats for Transparent copies include plain ASCII withoutmarkup Texinfo input format LaTEX input format SGML or XML using a publiclyavailable DTD and standard-conforming simple HTML PostScript or PDF designedfor human modification Examples of transparent image formats include PNG XCFand JPG Opaque formats include proprietary formats that can be read and editedonly by proprietary word processors SGML or XML for which the DTD andor pro-cessing tools are not generally available and the machine-generated HTML PostScriptor PDF produced by some word processors for output purposes only

The ldquoTitle Pagerdquo means for a printed book the title page itself plus such followingpages as are needed to hold legibly the material this License requires to appear in thetitle page For works in formats which do not have any title page as such ldquoTitle Pagerdquomeans the text near the most prominent appearance of the workrsquos title preceding thebeginning of the body of the text

The ldquopublisherrdquo means any person or entity that distributes copies of the Documentto the public

A section ldquoEntitled XYZrdquo means a named subunit of the Document whose title eitheris precisely XYZ or contains XYZ in parentheses following text that translates XYZ inanother language (Here XYZ stands for a specific section name mentioned below suchas ldquoAcknowledgementsrdquo ldquoDedicationsrdquo ldquoEndorsementsrdquo or ldquoHistoryrdquo) To ldquoPreservethe Titlerdquo of such a section when you modify the Document means that it remains asection ldquoEntitled XYZrdquo according to this definition

The Document may include Warranty Disclaimers next to the notice which states thatthis License applies to the Document These Warranty Disclaimers are considered tobe included by reference in this License but only as regards disclaiming warrantiesany other implication that these Warranty Disclaimers may have is void and has noeffect on the meaning of this License

2 VERBATIM COPYING

Appendix A GNU Free Documentation License 28

You may copy and distribute the Document in any medium either commercially ornoncommercially provided that this License the copyright notices and the licensenotice saying this License applies to the Document are reproduced in all copies andthat you add no other conditions whatsoever to those of this License You may not usetechnical measures to obstruct or control the reading or further copying of the copiesyou make or distribute However you may accept compensation in exchange for copiesIf you distribute a large enough number of copies you must also follow the conditionsin section 3

You may also lend copies under the same conditions stated above and you may publiclydisplay copies

3 COPYING IN QUANTITY

If you publish printed copies (or copies in media that commonly have printed covers) ofthe Document numbering more than 100 and the Documentrsquos license notice requiresCover Texts you must enclose the copies in covers that carry clearly and legibly allthese Cover Texts Front-Cover Texts on the front cover and Back-Cover Texts onthe back cover Both covers must also clearly and legibly identify you as the publisherof these copies The front cover must present the full title with all words of the titleequally prominent and visible You may add other material on the covers in additionCopying with changes limited to the covers as long as they preserve the title of theDocument and satisfy these conditions can be treated as verbatim copying in otherrespects

If the required texts for either cover are too voluminous to fit legibly you should putthe first ones listed (as many as fit reasonably) on the actual cover and continue therest onto adjacent pages

If you publish or distribute Opaque copies of the Document numbering more than 100you must either include a machine-readable Transparent copy along with each Opaquecopy or state in or with each Opaque copy a computer-network location from whichthe general network-using public has access to download using public-standard networkprotocols a complete Transparent copy of the Document free of added material Ifyou use the latter option you must take reasonably prudent steps when you begindistribution of Opaque copies in quantity to ensure that this Transparent copy willremain thus accessible at the stated location until at least one year after the last timeyou distribute an Opaque copy (directly or through your agents or retailers) of thatedition to the public

It is requested but not required that you contact the authors of the Document wellbefore redistributing any large number of copies to give them a chance to provide youwith an updated version of the Document

4 MODIFICATIONS

You may copy and distribute a Modified Version of the Document under the conditionsof sections 2 and 3 above provided that you release the Modified Version under preciselythis License with the Modified Version filling the role of the Document thus licensingdistribution and modification of the Modified Version to whoever possesses a copy ofit In addition you must do these things in the Modified Version

A Use in the Title Page (and on the covers if any) a title distinct from that of theDocument and from those of previous versions (which should if there were any

Appendix A GNU Free Documentation License 29

be listed in the History section of the Document) You may use the same title asa previous version if the original publisher of that version gives permission

B List on the Title Page as authors one or more persons or entities responsible forauthorship of the modifications in the Modified Version together with at least fiveof the principal authors of the Document (all of its principal authors if it has fewerthan five) unless they release you from this requirement

C State on the Title page the name of the publisher of the Modified Version as thepublisher

D Preserve all the copyright notices of the Document

E Add an appropriate copyright notice for your modifications adjacent to the othercopyright notices

F Include immediately after the copyright notices a license notice giving the publicpermission to use the Modified Version under the terms of this License in the formshown in the Addendum below

G Preserve in that license notice the full lists of Invariant Sections and required CoverTexts given in the Documentrsquos license notice

H Include an unaltered copy of this License

I Preserve the section Entitled ldquoHistoryrdquo Preserve its Title and add to it an itemstating at least the title year new authors and publisher of the Modified Versionas given on the Title Page If there is no section Entitled ldquoHistoryrdquo in the Docu-ment create one stating the title year authors and publisher of the Documentas given on its Title Page then add an item describing the Modified Version asstated in the previous sentence

J Preserve the network location if any given in the Document for public access toa Transparent copy of the Document and likewise the network locations given inthe Document for previous versions it was based on These may be placed in theldquoHistoryrdquo section You may omit a network location for a work that was publishedat least four years before the Document itself or if the original publisher of theversion it refers to gives permission

K For any section Entitled ldquoAcknowledgementsrdquo or ldquoDedicationsrdquo Preserve the Titleof the section and preserve in the section all the substance and tone of each of thecontributor acknowledgements andor dedications given therein

L Preserve all the Invariant Sections of the Document unaltered in their text andin their titles Section numbers or the equivalent are not considered part of thesection titles

M Delete any section Entitled ldquoEndorsementsrdquo Such a section may not be includedin the Modified Version

N Do not retitle any existing section to be Entitled ldquoEndorsementsrdquo or to conflict intitle with any Invariant Section

O Preserve any Warranty Disclaimers

If the Modified Version includes new front-matter sections or appendices that qualifyas Secondary Sections and contain no material copied from the Document you may atyour option designate some or all of these sections as invariant To do this add their

Appendix A GNU Free Documentation License 30

titles to the list of Invariant Sections in the Modified Versionrsquos license notice Thesetitles must be distinct from any other section titles

You may add a section Entitled ldquoEndorsementsrdquo provided it contains nothing butendorsements of your Modified Version by various partiesmdashfor example statements ofpeer review or that the text has been approved by an organization as the authoritativedefinition of a standard

You may add a passage of up to five words as a Front-Cover Text and a passage of upto 25 words as a Back-Cover Text to the end of the list of Cover Texts in the ModifiedVersion Only one passage of Front-Cover Text and one of Back-Cover Text may beadded by (or through arrangements made by) any one entity If the Document alreadyincludes a cover text for the same cover previously added by you or by arrangementmade by the same entity you are acting on behalf of you may not add another butyou may replace the old one on explicit permission from the previous publisher thatadded the old one

The author(s) and publisher(s) of the Document do not by this License give permissionto use their names for publicity for or to assert or imply endorsement of any ModifiedVersion

5 COMBINING DOCUMENTS

You may combine the Document with other documents released under this Licenseunder the terms defined in section 4 above for modified versions provided that youinclude in the combination all of the Invariant Sections of all of the original documentsunmodified and list them all as Invariant Sections of your combined work in its licensenotice and that you preserve all their Warranty Disclaimers

The combined work need only contain one copy of this License and multiple identicalInvariant Sections may be replaced with a single copy If there are multiple InvariantSections with the same name but different contents make the title of each such sectionunique by adding at the end of it in parentheses the name of the original author orpublisher of that section if known or else a unique number Make the same adjustmentto the section titles in the list of Invariant Sections in the license notice of the combinedwork

In the combination you must combine any sections Entitled ldquoHistoryrdquo in the vari-ous original documents forming one section Entitled ldquoHistoryrdquo likewise combine anysections Entitled ldquoAcknowledgementsrdquo and any sections Entitled ldquoDedicationsrdquo Youmust delete all sections Entitled ldquoEndorsementsrdquo

6 COLLECTIONS OF DOCUMENTS

You may make a collection consisting of the Document and other documents releasedunder this License and replace the individual copies of this License in the variousdocuments with a single copy that is included in the collection provided that youfollow the rules of this License for verbatim copying of each of the documents in allother respects

You may extract a single document from such a collection and distribute it individu-ally under this License provided you insert a copy of this License into the extracteddocument and follow this License in all other respects regarding verbatim copying ofthat document

Appendix A GNU Free Documentation License 31

7 AGGREGATION WITH INDEPENDENT WORKS

A compilation of the Document or its derivatives with other separate and independentdocuments or works in or on a volume of a storage or distribution medium is calledan ldquoaggregaterdquo if the copyright resulting from the compilation is not used to limit thelegal rights of the compilationrsquos users beyond what the individual works permit Whenthe Document is included in an aggregate this License does not apply to the otherworks in the aggregate which are not themselves derivative works of the Document

If the Cover Text requirement of section 3 is applicable to these copies of the Documentthen if the Document is less than one half of the entire aggregate the Documentrsquos CoverTexts may be placed on covers that bracket the Document within the aggregate or theelectronic equivalent of covers if the Document is in electronic form Otherwise theymust appear on printed covers that bracket the whole aggregate

8 TRANSLATION

Translation is considered a kind of modification so you may distribute translationsof the Document under the terms of section 4 Replacing Invariant Sections withtranslations requires special permission from their copyright holders but you mayinclude translations of some or all Invariant Sections in addition to the original versionsof these Invariant Sections You may include a translation of this License and all thelicense notices in the Document and any Warranty Disclaimers provided that youalso include the original English version of this License and the original versions ofthose notices and disclaimers In case of a disagreement between the translation andthe original version of this License or a notice or disclaimer the original version willprevail

If a section in the Document is Entitled ldquoAcknowledgementsrdquo ldquoDedicationsrdquo or ldquoHis-toryrdquo the requirement (section 4) to Preserve its Title (section 1) will typically requirechanging the actual title

9 TERMINATION

You may not copy modify sublicense or distribute the Document except as expresslyprovided under this License Any attempt otherwise to copy modify sublicense ordistribute it is void and will automatically terminate your rights under this License

However if you cease all violation of this License then your license from a particularcopyright holder is reinstated (a) provisionally unless and until the copyright holderexplicitly and finally terminates your license and (b) permanently if the copyrightholder fails to notify you of the violation by some reasonable means prior to 60 daysafter the cessation

Moreover your license from a particular copyright holder is reinstated permanently ifthe copyright holder notifies you of the violation by some reasonable means this is thefirst time you have received notice of violation of this License (for any work) from thatcopyright holder and you cure the violation prior to 30 days after your receipt of thenotice

Termination of your rights under this section does not terminate the licenses of partieswho have received copies or rights from you under this License If your rights havebeen terminated and not permanently reinstated receipt of a copy of some or all of thesame material does not give you any rights to use it

Appendix A GNU Free Documentation License 32

10 FUTURE REVISIONS OF THIS LICENSE

The Free Software Foundation may publish new revised versions of the GNU FreeDocumentation License from time to time Such new versions will be similar in spiritto the present version but may differ in detail to address new problems or concernsSee httpwwwgnuorgcopyleft

Each version of the License is given a distinguishing version number If the Documentspecifies that a particular numbered version of this License ldquoor any later versionrdquoapplies to it you have the option of following the terms and conditions either of thatspecified version or of any later version that has been published (not as a draft) bythe Free Software Foundation If the Document does not specify a version number ofthis License you may choose any version ever published (not as a draft) by the FreeSoftware Foundation If the Document specifies that a proxy can decide which futureversions of this License can be used that proxyrsquos public statement of acceptance of aversion permanently authorizes you to choose that version for the Document

11 RELICENSING

ldquoMassive Multiauthor Collaboration Siterdquo (or ldquoMMC Siterdquo) means any World WideWeb server that publishes copyrightable works and also provides prominent facilitiesfor anybody to edit those works A public wiki that anybody can edit is an example ofsuch a server A ldquoMassive Multiauthor Collaborationrdquo (or ldquoMMCrdquo) contained in thesite means any set of copyrightable works thus published on the MMC site

ldquoCC-BY-SArdquo means the Creative Commons Attribution-Share Alike 30 license pub-lished by Creative Commons Corporation a not-for-profit corporation with a principalplace of business in San Francisco California as well as future copyleft versions of thatlicense published by that same organization

ldquoIncorporaterdquo means to publish or republish a Document in whole or in part as partof another Document

An MMC is ldquoeligible for relicensingrdquo if it is licensed under this License and if all worksthat were first published under this License somewhere other than this MMC andsubsequently incorporated in whole or in part into the MMC (1) had no cover textsor invariant sections and (2) were thus incorporated prior to November 1 2008

The operator of an MMC Site may republish an MMC contained in the site underCC-BY-SA on the same site at any time before August 1 2009 provided the MMC iseligible for relicensing

Appendix A GNU Free Documentation License 33

ADDENDUM How to use this License for your documents

To use this License in a document you have written include a copy of the License in thedocument and put the following copyright and license notices just after the title page

Copyright (C) year your name

Permission is granted to copy distribute andor modify this document

under the terms of the GNU Free Documentation License Version 13

or any later version published by the Free Software Foundation

with no Invariant Sections no Front-Cover Texts and no Back-Cover

Texts A copy of the license is included in the section entitled lsquolsquoGNU

Free Documentation Licensersquorsquo

If you have Invariant Sections Front-Cover Texts and Back-Cover Texts replace theldquowith Textsrdquo line with this

with the Invariant Sections being list their titles with

the Front-Cover Texts being list and with the Back-Cover Texts

being list

If you have Invariant Sections without Cover Texts or some other combination of thethree merge those two alternatives to suit the situation

If your document contains nontrivial examples of program code we recommend releasingthese examples in parallel under your choice of free software license such as the GNUGeneral Public License to permit their use in free software

Index 34

Index

Aaccess control policy 3Author 3author specifying 10

Bbehavior prior to version 5 10behavior version 3 10behavior version 4 10binary-old-keyword-value substitution mode 9branch growth 7branch number 2branch tip 2branch default 3bug reporting 25

Ccase sensitivity file format 21checkin 3checklist for bug reports 25checkout 3checkout implicit 5ci invocation 11co invocation 12comma-v file format 1command help 7command version 7command-line option to specify a revision 7credits 1

DDate 3date formats 8date specifying 8dates file format 21default branch 3default branch setting 15deleting revisions 15description of working file 2description text specifying 8

Eempty log message 9emulation previous RCS versions 10encoding file format 20environment variables 10

Ffeatures still missing 23

file names on the command-line 7format RCSfile 20

Ggrammar file format 20

HHeader 3history 1

IId 3ident invocation 13implicit checkout circumstance 5implicit checkout locked 12implicit checkout unlocked 12instantiating a working file 2interaction model 1interactive mode 9invocation ci 11invocation co 12invocation ident 13invocation merge 14invocation rcs 14 15invocation rcsclean 16invocation rcsdiff 17invocation rcsmerge 17invocation rlog 18

Kkeyword-only substitution mode 9keyword-value substitution mode 8keyword-value-locker substitution mode 9keywords table of 3

Llayout of nodes file format 21license 1Locker 3locking a revision 15locking on implicit checkout 12locking non-strict 5locking set non-strict 15locking set strict 15locking strict 5locks in RCS file 3Log 3log message empty 9LOGNAME 11

Index 35

Mmemory limit 11merge invocation 14model interaction 1

NName 4names symbolic 3node layout file format 21non-strict locking 5number branch 2number revision 2

Oold-keyword-value substitution mode 9order of options and file names 7outdating revisions 15overview 1

Ppairing RCS and working files 7patches contributing 25problems 25projects related 1

Qquiet mode 9

Rrange of revisions specifying 7RCS file 2rcs invocation 14 15RCS version emulation 10RCS_MEM_LIMIT 11rcsclean invocation 16rcsdiff invocation 17RCSfile 4RCSfile format 20RCSINIT 10rcsmerge invocation 17removing revisions 15reporting bugs 25Revision 4revision number 2revision range specifying 7

revision specifying 7revisions tree of 3rlog invocation 18

SSource 4specifying a date 8specifying a range of revisions 7specifying a revision 7specifying a state 9specifying a suffix list 10specifying a timedate 8specifying author 10specifying description text 8specifying substitution mode 8State 4state specifying 9strict locking 5substitution mode default 8substitution mode specifying 8suffix list specifying 10symbolic names 3

TTEMP 11third-party interop file format 21Tichy Walter F 1time zone 8timedate specifying 8tip 2tip increment 7TMP 11TMPDIR 11tree of revisions 3

Uunlocking a revision 15USER 11

Vvalue-only substitution mode 9

Wwhitespace file format 21working file description 2working file instantiation 2

  • Overview
    • Credits
    • Concepts
      • Interaction model
      • Working file
      • RCS file
      • Fundamental operations
      • Keywords
        • Quick tour
          • Usage
            • Common elements
              • Revision options
              • Date option
              • Description option
              • Substitution mode option
              • Log message option
              • Misc common options
              • Environment
                • Invoking ci
                • Invoking co
                • Invoking ident
                • Invoking merge
                • Invoking rcs
                  • modern
                  • legacy
                    • Invoking rcsclean
                    • Invoking rcsdiff
                    • Invoking rcsmerge
                    • Invoking rlog
                      • Hacking
                        • File format
                          • File format grammar
                          • Additional particulars of the file format
                            • Still missing
                            • Reporting bugs
                              • GNU Free Documentation License
                              • Index
Page 16: GNU RCS · The RCS file is also known (colloquially) as the “comma-v file”, due to its name often ending in ,v (e.g., a.c,v). A revision number is a branch number followed by

Chapter 2 Usage 13

-r[rev] Normal checkout

-l[rev] Like -r but also lock

-u[rev] Like -l but unlock

-M[rev] Reset working file mtime (relevant for -l -u)

Multiple flags in -fIlMpqru may be given except for -r -l -u which are mutuallyexclusive See Section 211 [Revision options] page 7

-ksubst See Section 214 [Substitution mode option] page 8

-ddate

-zzone See Section 212 [Date option] page 8 Select latest before or on date

-jjoins Merge using joins a list of revrev pairs NB This option is obsolete (seeSection 29 [rcsmerge] page 17)

-sstate See Section 216 [Misc common options] page 9 Select matching state

-S Enable self-same mode In this mode the owner of a lock is unimportantjust that it exists Effectively this prevents you from checking out the samerevision twice

$ whoami

ttn

$ co -l -f z

RCSzv --gt z

revision 11 (locked)

done

$ co -S -l -f z

RCSzv --gt z

co RCSzv Revision 11 is already locked by ttn

-T Preserve the modification time on the RCS file even if it changes because a lockis added or removed

-wwho Select matching login who

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

24 Invoking ident

ident [options] [file ]

If no file is specified scan standard input The ident command scans its input for keywords(see Section 12 [Concepts] page 1) displaying to standard output what it finds

-q Normally if no patterns are found for a file ident emits a warning This optionsuppresses the warning

Chapter 2 Usage 14

-V Note that -Vn is not a valid option for ident in contrast to most other RCScommands (see Section 216 [Misc common options] page 9)

In addition to the normal keyword pattern for Subversion 12 (and later) compatibility1ident also recognizes patterns having one of the forms

$keyword text $

two colons and space after keyword

space before ending $

$keyword text$

two colons and space after keyword

hash before ending $

25 Invoking merge

merge [options] receiving-sibling parent other-sibling

The merge command combines the differences between a the parent and the other siblingand the differences between the parent and the receiving sibling It writes the result to thereceiving sibling

-A

-E

-e Use diff3 -A -E (default) or -e respectively

-p Write to stdout instead of overwriting receiving-sibling

-q See Section 216 [Misc common options] page 9 Suppress conflict warnings

-Llabel (up to three times) Specify the conflict labels for receiving-sibling parent andother-sibling respectively

-V Note that -Vn is not a valid option for merge in contrast to most other RCScommands (see Section 216 [Misc common options] page 9)

26 Invoking rcs

The rcs command is unique in the set of RCS programs in that it has two usages themodern (for RCS 590 and later) and the legacy

261 modern

rcs [options] command [command-arg ]

This rcs usage dispatches to command passing along command-arg without interpreta-tion

--commands

Display a list of available commands including a one-line description and exitsuccessfully

1 The fixed-length keyword syntax is described in detail in Version Control with Subversion chapterldquoAdvanced Topicsrdquo section ldquoKeyword Substitutionrdquo

Chapter 2 Usage 15

--aliases

Display a list of command aliases and exit successfully

--help command

Display help for a particular command and exit successfully For example todisplay help for the legacy interface use

--help frob

262 legacy

rcs frob [options] file

(or ldquorcsrdquo instead of ldquorcs frobrdquo)

This rcs usage performs various administrative operations on the RCS file depending onthe options given

-i Create and initialize a new RCS file

-L Set strict locking

-U Set non-strict locking

-M Donrsquot send mail when breaking someone elsersquos lock

-T Preserve the modification time on the RCS file unless a revision is removed

-I

-q See Section 216 [Misc common options] page 9

-alogins Append logins (comma-separated list of usernames) to access-list

-e[logins]

Erase logins (comma-separated list of usernames) from access-list If logins isomitted clear the access-list

-Afile-name

Append access-list of file-name to current access-list

-b[rev] Set default branch to that of rev or highest branch on trunk if rev is omitted

-l[rev] Lock a revision

-u[rev] Unlock a revision

-cstring Set comment leader to string NB Donrsquot use obsolete

-ksubst See Section 214 [Substitution mode option] page 8

-mrev[msg]

Replace log message with msg See Section 215 [Log message option] page 9

-nname[[rev]]

If rev is omitted delete symbolic name Otherwise associate name with rev name must be new

-Nname[[rev]]

Like -n but overwrite any previous assignment

-orange Delete (also known as ldquooutdaterdquo) revisions in range

Chapter 2 Usage 16

rev single revision

br latest revision on branch br

rev1rev2

rev1 to rev2 on same branch inclusive

rev beginning of branch to rev

rev rev to end of branch

-sstate[rev]

See Section 216 [Misc common options] page 9 Set state

-t-text

-tfile-name

See Section 213 [Description option] page 8 Replace description

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

These options have no effect and are included solely for consistency with other comamnds(see Section 217 [Environment] page 10) -zzone

27 Invoking rcsclean

rcs clean [options] [file ]

(or ldquorcscleanrdquo instead of ldquorcs cleanrdquo)

The rcsclean command removes working files that are not being worked on If given -u italso unlocks and removes working files that are being worked on but have not changed Ifno file is specified operate on all the working files in the current directory

-r[rev] Specify revision

-u[rev] Unlock if is locked and no differences found

-n[rev] Dry run (no act donrsquot operate)

-q[rev] See Section 216 [Misc common options] page 9

-ksubst See Section 214 [Substitution mode option] page 8

-T Preserve the modification time on the RCS file even it changes because a lockis removed

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

-zzone See Section 212 [Date option] page 8

Chapter 2 Usage 17

28 Invoking rcsdiff

rcs diff [options] file

(or ldquorcsdiffrdquo instead of ldquorcs diffrdquo)

The rcsdiff command runs diff to compare two revisions in an RCS file See Section ldquoIn-voking diffrdquo in The GNU Diffutils Manaual

-rrev (zero one or two times) Name a revision If given two revisions (lsquo-rrev1-rrev2rsquo) compare those revisions If given only one revision (lsquo-rrevrsquo) comparethe working file with it If given no revisions compare the working file with thelatest revision on the default branch

-ksubst See Section 214 [Substitution mode option] page 8

-q See Section 216 [Misc common options] page 9

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

-zzone See Section 212 [Date option] page 8

These options have no effect and are included solely for consistency with other comamnds(see Section 217 [Environment] page 10) -T

Additionally the following options (and their argument if any) are passed to the underlyingdiff command

-0 -1 -2 -3 -4 -5 -6 -7 -8 -9 -B -C -D -F -H -I

-L -U -W -a -b -c -d -e -f -h -i -n -p -t -u -w -y

long options (that start with --)

(Not all of these options are meaningful)

29 Invoking rcsmerge

rcs merge [options] file

(or ldquorcsmergerdquo instead of ldquorcs mergerdquo)

The rcsmerge command incorporates the changes between two revisions of an RCS file intothe corresponding working file

-A

-E

-e Passed to the diff3 command The default if none are specified is -E With -esuppress warnings on conflict The -A style generates the most verbose outputSee Section ldquoInvoking diff3rdquo in The GNU Diffutils Manual

-p[rev] Write to stdout instead of overwriting the working file

-q[rev] See Section 216 [Misc common options] page 9

-rrev (one or two times) specify a revision

One or two revisions must be specified (using -p -q -r) If only one is specified the secondrevision defaults to the latest revision on the default branch

Chapter 2 Usage 18

-ksubst See Section 214 [Substitution mode option] page 8

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

-zzone See Section 212 [Date option] page 8

These options have no effect and are included solely for consistency with other comamnds(see Section 217 [Environment] page 10) -T

210 Invoking rlog

rcs log [options] file

(or ldquorlogrdquo instead of ldquorcs logrdquo)

The rlog command displays information about RCS files

-L Ignore RCS files with no locks set

-R Print only the name of the RCS file

-h Print only the ldquoheaderrdquo information

-t Like -h but also include the description

-N Omit symbolic names

-b Select the default branch

-ddates See Section 212 [Date option] page 8 Select revisions based on timestampin the range dates with spec

d single revision d or earlier

d1ltd2

d2gtd1 between d1 and d2 exclusive

ltd

dgt before d

gtd

dlt after d

Instead of lsquoltrsquo or lsquogtrsquo you can use lsquolt=rsquo or lsquogt=rsquo respectively to specify inclusiveranges dates may also be a list of semicolon-separated specs

-l[who] Select revisions locked by who (comma-separated list of usernames) only or byanyone if who is omitted

-r[revs] Select revisions in revs a comma-separated list of range specs one of revrev rev rev1rev2

-sstates See Section 216 [Misc common options] page 9 states can also be a comma-separated list of states Select revisions with specified state(s)

-w[who] Select revisions checked in by who (comma-separated list of usernames) or bythe user if who is omitted

Chapter 2 Usage 19

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

-zzone See Section 212 [Date option] page 8

These options have no effect and are included solely for consistency with other comamnds(see Section 217 [Environment] page 10) lsquo-qrsquo lsquo-Trsquo

Chapter 3 Hacking 20

3 Hacking

This chapter in contrast to the previous (see Chapter 2 [Usage] page 7) is introspective Itdescribes an important aspect of RCS interop with other programs and development ideasand methods

31 File format

An RCS filersquos contents are described by the grammar below1 Overall the format is freendashformat text In most environments RCS uses the ISO 88591 encoding visible graphiccharacters are (octal) codes 041ndash176 and 240ndash377 and whitespace characters are codes010ndash015 and 040TODO Discuss or point to encoding compatibility issues

311 File format grammar

The meta syntax in this section uses the following conventions lsquo|rsquo (U+7C) separates al-ternatives lsquorsquo (U+7B) and lsquorsquo (U+7D) enclose optional phrases lsquorsquo and lsquorsquo (trailing U+2A)enclose phrases that can be repeated zero or more times lsquorsquo and lsquo+rsquo (trailing U+2B) enclosephrases that must appear at least once and can be repeated terminal symbols are in lsquorsquo(two U+22)

rcstext = admin delta desc deltatext

admin = head num

branch num

access id

symbols sym num

locks id num

strict

integrity intstring

comment string

expand string

delta = num

date num

author id

state id

branches num

next num

commitid sym

desc = desc string

deltatext = num

log string

text string

1 This section is adapted from the lsquorcsfile(5)rsquo manpage written by Walter F Tichy

Chapter 3 Hacking 21

num = digit | +

digit = 0 through 9

id = idchar | +

sym = idchar+

idchar = any visible graphic character except special

special = $ | | | | |

string = any character with doubled

word = id | num | string |

intchar = any character except

thirdp = ^L intchar

intstring = intchar thirdp

312 Additional particulars of the file format

bull In releases prior to 58 (2011-08-30) the grammar included the production

newphrase = id word

and used it in the admin delta and deltatext productions This allowed third-partyprograms to interoperate with RCS by storing opaque (to RCS) data in the file

As of 58 in the name of progress (towards more systematic file integrity support) theonly area reserved for third-party interop is in the (string) value of the integrity fieldspecifically after the first formfeed (U+0C) A further restriction (for all programs) isthat the integrity value must not contain lsquorsquo

bull Whitespace has no significance except in strings However whitespace cannot appearwithin an id num or sym and an RCS file must end with newline (U+0A) Strings areenclosed by lsquorsquo (U+40) If a string contains a lsquorsquo it must be doubled otherwise stringscan contain arbitrary binary data

bull Identifiers are case sensitive Keywords are in lower case only The sets of keywordsand identifiers can overlap

bull Dates which appear after the date keyword are of the form Ymmddhhmmss whereY is the year mm the month (01ndash12) dd the day (01ndash31) hh the hour (00ndash23) mm theminute (00ndash59) and ss the second (00ndash60) Y contains just the last two digits of theyear for years from 1900 through 1999 and all the digits of years thereafter Dates usethe Gregorian calendar times use UTC

bull The delta nodes form a tree All nodes whose numbers consist of a single pair (eg 2321 13) are on the trunk and are linked through the next field in order of decreasing

Chapter 3 Hacking 22

numbers The head field in the admin node points to the head of that sequence (iecontains the highest pair) The branch node in the admin node indicates the defaultbranch (or revision) for most RCS operations If empty the default branch is thehighest branch on the trunk

All delta nodes whose numbers consist of 2n fields (n ge 2) (eg 3111 2122) arelinked as follows All nodes whose first 2nminus1 number fields are identical are linkedthrough the next field in order of increasing numbers For each such sequence thedelta node whose number is identical to the first 2nminus2 number fields of the delta

nodes on that sequence is called the branchpoint The branches field of a node containsa list of the numbers of the first nodes of all sequences for which it is a branchpointThis list is ordered in increasing numbers See Figure 31

Chapter 3 Hacking 23

Head

|

|

v

---------

| |

| 21 |

| |

1213 1311 | | 1222 122111

--------- --------- --------- --------- -------------

^ ^ | ^ ^

| | | | |

| | v | |

| --------- |

| 13 |

--------- -----------

1211 131 1221 12211

--------- ---------

^ | ^

| | |

| v |

| --------- |

| 12 |

---------------------- ---------

121 122

|

|

v

---------

11

Figure 31 The organization of an example RCS file

32 Still missing

RCS is still missing some features The following is an unordered list of ldquoto-do musingsrdquo keptby the RCS maintainers If you would like to hack on an item See Section 33 [Reportingbugs] page 25

bull Add an option to rcsmerge so that it can use an arbitrary program to do the 3-waymerge instead of the default merge Likewise for rcsdiff and diff It should be possibleto pass arbitrary options to these programs and to the subsidiary co invocations

bull Add format options for finer control over the output of ident and rlog Eg thereshould be an easy way for rlog to output lines like lsquosrcmainc 24 wftrsquo one for

Chapter 3 Hacking 24

each locked revision rlog options should have three orthogonal types selecting filesselecting revisions and selecting rlog format

bull Add format options for finer control over the output of keyword strings Eg thereshould be some way to prepend lsquo()rsquo and there should be some way to change lsquo$rsquo tosome other character to disable further substitution These options should make theresulting files uneditable like lsquo-kvrsquo

bull Add long options eg --keyword-substitution Unfortunately RCSrsquos option syntaxis incompatible with getopt Perhaps the best way is to overload rcs eg lsquorcs diff

--keyword-substitution=old filersquo instead of lsquorcsdiff -ko filersquo

bull rlog -rMN should work even if M and N have different numbers of fields so long asM is an ancestor of N or vice versa

bull rcs should evaluate options in order this allows rcs -oS -nS

bull Be able to redo your most recent checkin with minor changes

bull co -u shouldnrsquot complain about a lsquo+wrsquo working file if contents donrsquot change

bull Add a lsquo-rsquo option to take the list of file names from standard input Perhaps the filenames should be null-terminated not newline-terminated so that those that containnewlines are handled properly

bull Permit multiple optionndashfilename pairs eg co -r14 a -r15 b

bull Add an option to break a symbolic link to an RCS file instead of breaking the hardlink that it points to

bull Add ways to specify the earliest revision the most recent revision the earliest or latestrevision on a particular branch and the parent or child of some other revision

bull If a user has multiple locks perhaps ci should fall back on the method of ci -k to figureout which revision to use

bull Add an option to rcsclean to clean directories recursively

bull Write an rcsck program that repairs corrupted RCS files much as fsck repairs corruptedfile systems For example it should remove stale lock files

bull Update the date parser to use the more modern getdatey by Bellovin Salz andBerets or the even more modern getdate by Moraes None of these getdate imple-mentations are as robust as RCSrsquos old warhorse in avoiding problems like arithmeticoverflow so theyrsquoll have to be fixed first (Perhaps we can use gnulib module getdate)

bull Break up the code into a library so that itrsquos easier to write new programs that manip-ulate RCS files and so that useless code is removed from the existing programs Forexample the rcs command contains unnecessary keyword substitution baggage andthe merge command can be greatly pruned

bull Make it easier to use your favorite text editor to edit log messages etc instead ofhaving to type them in irretrievably at the terminal

bull Let the user specify a search path for default branches eg to use L as the defaultbranch if it works and M otherwise Let the user require that at least one entry inthe search path works Let the user say that later entries in the search path are readonly ie one cannot check in changes to them This should be an option settable bylsquoRCSINITrsquo

bull Add a way for a user to see which revisions affected which lines

Chapter 3 Hacking 25

bull Have rlog -nN F print just the revision number that N translates to Eg rlog -nB

F would print the highest revision on the branch B Use this to add an option -bB torcsbranch to freeze the named branch This should interact well with default branches

bull Add a co option that prints the revision number before each line as SCCSrsquos get -m

does [I implemented this for Emacs 22 as a subroutine of vc-annotate qv mdashttn]

33 Reporting bugs

To report bugs or suggest enhancements for GNU RCS please visit its homepage (httpwwwgnuorgsoftwarercs) to find directions on how to ldquofile a bug reportrdquo online orsend electronic mail to help-rcsgnuorg (If you use the web interface you donrsquot needto also send email since that is done automatically)

For bug reports please include enough information for the maintainers to reproduce theproblem Generally speaking that means

bull The RCS version command(s) and manual section(s) involved

bull Hardware and operating system names and versions

bull The contents of any input files necessary to reproduce the bug

bull The expected behavior andor output

bull A description of the problem and samples of any erroneous output

bull Options you gave to configure other than specifying installation directories

bull Anything else that you think would be helpful

When in doubt whether something is needed or not include it Itrsquos better to include toomuch than to leave out something important

Patches are welcome if possible please make them with lsquogit format-patchrsquo and includeChangeLog entries (see Section ldquoChange Logrdquo in The GNU Emacs Manual) Please followthe existing coding style

Appendix A GNU Free Documentation License 26

Appendix A GNU Free Documentation License

Version 13 3 November 2008

Copyright ccopy 2000 2001 2002 2007 2008 Free Software Foundation Inchttpfsforg

Everyone is permitted to copy and distribute verbatim copiesof this license document but changing it is not allowed

0 PREAMBLE

The purpose of this License is to make a manual textbook or other functional anduseful document free in the sense of freedom to assure everyone the effective freedomto copy and redistribute it with or without modifying it either commercially or non-commercially Secondarily this License preserves for the author and publisher a wayto get credit for their work while not being considered responsible for modificationsmade by others

This License is a kind of ldquocopyleftrdquo which means that derivative works of the documentmust themselves be free in the same sense It complements the GNU General PublicLicense which is a copyleft license designed for free software

We have designed this License in order to use it for manuals for free software becausefree software needs free documentation a free program should come with manualsproviding the same freedoms that the software does But this License is not limited tosoftware manuals it can be used for any textual work regardless of subject matter orwhether it is published as a printed book We recommend this License principally forworks whose purpose is instruction or reference

1 APPLICABILITY AND DEFINITIONS

This License applies to any manual or other work in any medium that contains anotice placed by the copyright holder saying it can be distributed under the termsof this License Such a notice grants a world-wide royalty-free license unlimited induration to use that work under the conditions stated herein The ldquoDocumentrdquobelow refers to any such manual or work Any member of the public is a licensee andis addressed as ldquoyourdquo You accept the license if you copy modify or distribute the workin a way requiring permission under copyright law

A ldquoModified Versionrdquo of the Document means any work containing the Document ora portion of it either copied verbatim or with modifications andor translated intoanother language

A ldquoSecondary Sectionrdquo is a named appendix or a front-matter section of the Documentthat deals exclusively with the relationship of the publishers or authors of the Documentto the Documentrsquos overall subject (or to related matters) and contains nothing thatcould fall directly within that overall subject (Thus if the Document is in part atextbook of mathematics a Secondary Section may not explain any mathematics) Therelationship could be a matter of historical connection with the subject or with relatedmatters or of legal commercial philosophical ethical or political position regardingthem

The ldquoInvariant Sectionsrdquo are certain Secondary Sections whose titles are designated asbeing those of Invariant Sections in the notice that says that the Document is released

Appendix A GNU Free Documentation License 27

under this License If a section does not fit the above definition of Secondary then it isnot allowed to be designated as Invariant The Document may contain zero InvariantSections If the Document does not identify any Invariant Sections then there are none

The ldquoCover Textsrdquo are certain short passages of text that are listed as Front-CoverTexts or Back-Cover Texts in the notice that says that the Document is released underthis License A Front-Cover Text may be at most 5 words and a Back-Cover Text maybe at most 25 words

A ldquoTransparentrdquo copy of the Document means a machine-readable copy representedin a format whose specification is available to the general public that is suitable forrevising the document straightforwardly with generic text editors or (for images com-posed of pixels) generic paint programs or (for drawings) some widely available drawingeditor and that is suitable for input to text formatters or for automatic translation toa variety of formats suitable for input to text formatters A copy made in an otherwiseTransparent file format whose markup or absence of markup has been arranged tothwart or discourage subsequent modification by readers is not Transparent An imageformat is not Transparent if used for any substantial amount of text A copy that isnot ldquoTransparentrdquo is called ldquoOpaquerdquo

Examples of suitable formats for Transparent copies include plain ASCII withoutmarkup Texinfo input format LaTEX input format SGML or XML using a publiclyavailable DTD and standard-conforming simple HTML PostScript or PDF designedfor human modification Examples of transparent image formats include PNG XCFand JPG Opaque formats include proprietary formats that can be read and editedonly by proprietary word processors SGML or XML for which the DTD andor pro-cessing tools are not generally available and the machine-generated HTML PostScriptor PDF produced by some word processors for output purposes only

The ldquoTitle Pagerdquo means for a printed book the title page itself plus such followingpages as are needed to hold legibly the material this License requires to appear in thetitle page For works in formats which do not have any title page as such ldquoTitle Pagerdquomeans the text near the most prominent appearance of the workrsquos title preceding thebeginning of the body of the text

The ldquopublisherrdquo means any person or entity that distributes copies of the Documentto the public

A section ldquoEntitled XYZrdquo means a named subunit of the Document whose title eitheris precisely XYZ or contains XYZ in parentheses following text that translates XYZ inanother language (Here XYZ stands for a specific section name mentioned below suchas ldquoAcknowledgementsrdquo ldquoDedicationsrdquo ldquoEndorsementsrdquo or ldquoHistoryrdquo) To ldquoPreservethe Titlerdquo of such a section when you modify the Document means that it remains asection ldquoEntitled XYZrdquo according to this definition

The Document may include Warranty Disclaimers next to the notice which states thatthis License applies to the Document These Warranty Disclaimers are considered tobe included by reference in this License but only as regards disclaiming warrantiesany other implication that these Warranty Disclaimers may have is void and has noeffect on the meaning of this License

2 VERBATIM COPYING

Appendix A GNU Free Documentation License 28

You may copy and distribute the Document in any medium either commercially ornoncommercially provided that this License the copyright notices and the licensenotice saying this License applies to the Document are reproduced in all copies andthat you add no other conditions whatsoever to those of this License You may not usetechnical measures to obstruct or control the reading or further copying of the copiesyou make or distribute However you may accept compensation in exchange for copiesIf you distribute a large enough number of copies you must also follow the conditionsin section 3

You may also lend copies under the same conditions stated above and you may publiclydisplay copies

3 COPYING IN QUANTITY

If you publish printed copies (or copies in media that commonly have printed covers) ofthe Document numbering more than 100 and the Documentrsquos license notice requiresCover Texts you must enclose the copies in covers that carry clearly and legibly allthese Cover Texts Front-Cover Texts on the front cover and Back-Cover Texts onthe back cover Both covers must also clearly and legibly identify you as the publisherof these copies The front cover must present the full title with all words of the titleequally prominent and visible You may add other material on the covers in additionCopying with changes limited to the covers as long as they preserve the title of theDocument and satisfy these conditions can be treated as verbatim copying in otherrespects

If the required texts for either cover are too voluminous to fit legibly you should putthe first ones listed (as many as fit reasonably) on the actual cover and continue therest onto adjacent pages

If you publish or distribute Opaque copies of the Document numbering more than 100you must either include a machine-readable Transparent copy along with each Opaquecopy or state in or with each Opaque copy a computer-network location from whichthe general network-using public has access to download using public-standard networkprotocols a complete Transparent copy of the Document free of added material Ifyou use the latter option you must take reasonably prudent steps when you begindistribution of Opaque copies in quantity to ensure that this Transparent copy willremain thus accessible at the stated location until at least one year after the last timeyou distribute an Opaque copy (directly or through your agents or retailers) of thatedition to the public

It is requested but not required that you contact the authors of the Document wellbefore redistributing any large number of copies to give them a chance to provide youwith an updated version of the Document

4 MODIFICATIONS

You may copy and distribute a Modified Version of the Document under the conditionsof sections 2 and 3 above provided that you release the Modified Version under preciselythis License with the Modified Version filling the role of the Document thus licensingdistribution and modification of the Modified Version to whoever possesses a copy ofit In addition you must do these things in the Modified Version

A Use in the Title Page (and on the covers if any) a title distinct from that of theDocument and from those of previous versions (which should if there were any

Appendix A GNU Free Documentation License 29

be listed in the History section of the Document) You may use the same title asa previous version if the original publisher of that version gives permission

B List on the Title Page as authors one or more persons or entities responsible forauthorship of the modifications in the Modified Version together with at least fiveof the principal authors of the Document (all of its principal authors if it has fewerthan five) unless they release you from this requirement

C State on the Title page the name of the publisher of the Modified Version as thepublisher

D Preserve all the copyright notices of the Document

E Add an appropriate copyright notice for your modifications adjacent to the othercopyright notices

F Include immediately after the copyright notices a license notice giving the publicpermission to use the Modified Version under the terms of this License in the formshown in the Addendum below

G Preserve in that license notice the full lists of Invariant Sections and required CoverTexts given in the Documentrsquos license notice

H Include an unaltered copy of this License

I Preserve the section Entitled ldquoHistoryrdquo Preserve its Title and add to it an itemstating at least the title year new authors and publisher of the Modified Versionas given on the Title Page If there is no section Entitled ldquoHistoryrdquo in the Docu-ment create one stating the title year authors and publisher of the Documentas given on its Title Page then add an item describing the Modified Version asstated in the previous sentence

J Preserve the network location if any given in the Document for public access toa Transparent copy of the Document and likewise the network locations given inthe Document for previous versions it was based on These may be placed in theldquoHistoryrdquo section You may omit a network location for a work that was publishedat least four years before the Document itself or if the original publisher of theversion it refers to gives permission

K For any section Entitled ldquoAcknowledgementsrdquo or ldquoDedicationsrdquo Preserve the Titleof the section and preserve in the section all the substance and tone of each of thecontributor acknowledgements andor dedications given therein

L Preserve all the Invariant Sections of the Document unaltered in their text andin their titles Section numbers or the equivalent are not considered part of thesection titles

M Delete any section Entitled ldquoEndorsementsrdquo Such a section may not be includedin the Modified Version

N Do not retitle any existing section to be Entitled ldquoEndorsementsrdquo or to conflict intitle with any Invariant Section

O Preserve any Warranty Disclaimers

If the Modified Version includes new front-matter sections or appendices that qualifyas Secondary Sections and contain no material copied from the Document you may atyour option designate some or all of these sections as invariant To do this add their

Appendix A GNU Free Documentation License 30

titles to the list of Invariant Sections in the Modified Versionrsquos license notice Thesetitles must be distinct from any other section titles

You may add a section Entitled ldquoEndorsementsrdquo provided it contains nothing butendorsements of your Modified Version by various partiesmdashfor example statements ofpeer review or that the text has been approved by an organization as the authoritativedefinition of a standard

You may add a passage of up to five words as a Front-Cover Text and a passage of upto 25 words as a Back-Cover Text to the end of the list of Cover Texts in the ModifiedVersion Only one passage of Front-Cover Text and one of Back-Cover Text may beadded by (or through arrangements made by) any one entity If the Document alreadyincludes a cover text for the same cover previously added by you or by arrangementmade by the same entity you are acting on behalf of you may not add another butyou may replace the old one on explicit permission from the previous publisher thatadded the old one

The author(s) and publisher(s) of the Document do not by this License give permissionto use their names for publicity for or to assert or imply endorsement of any ModifiedVersion

5 COMBINING DOCUMENTS

You may combine the Document with other documents released under this Licenseunder the terms defined in section 4 above for modified versions provided that youinclude in the combination all of the Invariant Sections of all of the original documentsunmodified and list them all as Invariant Sections of your combined work in its licensenotice and that you preserve all their Warranty Disclaimers

The combined work need only contain one copy of this License and multiple identicalInvariant Sections may be replaced with a single copy If there are multiple InvariantSections with the same name but different contents make the title of each such sectionunique by adding at the end of it in parentheses the name of the original author orpublisher of that section if known or else a unique number Make the same adjustmentto the section titles in the list of Invariant Sections in the license notice of the combinedwork

In the combination you must combine any sections Entitled ldquoHistoryrdquo in the vari-ous original documents forming one section Entitled ldquoHistoryrdquo likewise combine anysections Entitled ldquoAcknowledgementsrdquo and any sections Entitled ldquoDedicationsrdquo Youmust delete all sections Entitled ldquoEndorsementsrdquo

6 COLLECTIONS OF DOCUMENTS

You may make a collection consisting of the Document and other documents releasedunder this License and replace the individual copies of this License in the variousdocuments with a single copy that is included in the collection provided that youfollow the rules of this License for verbatim copying of each of the documents in allother respects

You may extract a single document from such a collection and distribute it individu-ally under this License provided you insert a copy of this License into the extracteddocument and follow this License in all other respects regarding verbatim copying ofthat document

Appendix A GNU Free Documentation License 31

7 AGGREGATION WITH INDEPENDENT WORKS

A compilation of the Document or its derivatives with other separate and independentdocuments or works in or on a volume of a storage or distribution medium is calledan ldquoaggregaterdquo if the copyright resulting from the compilation is not used to limit thelegal rights of the compilationrsquos users beyond what the individual works permit Whenthe Document is included in an aggregate this License does not apply to the otherworks in the aggregate which are not themselves derivative works of the Document

If the Cover Text requirement of section 3 is applicable to these copies of the Documentthen if the Document is less than one half of the entire aggregate the Documentrsquos CoverTexts may be placed on covers that bracket the Document within the aggregate or theelectronic equivalent of covers if the Document is in electronic form Otherwise theymust appear on printed covers that bracket the whole aggregate

8 TRANSLATION

Translation is considered a kind of modification so you may distribute translationsof the Document under the terms of section 4 Replacing Invariant Sections withtranslations requires special permission from their copyright holders but you mayinclude translations of some or all Invariant Sections in addition to the original versionsof these Invariant Sections You may include a translation of this License and all thelicense notices in the Document and any Warranty Disclaimers provided that youalso include the original English version of this License and the original versions ofthose notices and disclaimers In case of a disagreement between the translation andthe original version of this License or a notice or disclaimer the original version willprevail

If a section in the Document is Entitled ldquoAcknowledgementsrdquo ldquoDedicationsrdquo or ldquoHis-toryrdquo the requirement (section 4) to Preserve its Title (section 1) will typically requirechanging the actual title

9 TERMINATION

You may not copy modify sublicense or distribute the Document except as expresslyprovided under this License Any attempt otherwise to copy modify sublicense ordistribute it is void and will automatically terminate your rights under this License

However if you cease all violation of this License then your license from a particularcopyright holder is reinstated (a) provisionally unless and until the copyright holderexplicitly and finally terminates your license and (b) permanently if the copyrightholder fails to notify you of the violation by some reasonable means prior to 60 daysafter the cessation

Moreover your license from a particular copyright holder is reinstated permanently ifthe copyright holder notifies you of the violation by some reasonable means this is thefirst time you have received notice of violation of this License (for any work) from thatcopyright holder and you cure the violation prior to 30 days after your receipt of thenotice

Termination of your rights under this section does not terminate the licenses of partieswho have received copies or rights from you under this License If your rights havebeen terminated and not permanently reinstated receipt of a copy of some or all of thesame material does not give you any rights to use it

Appendix A GNU Free Documentation License 32

10 FUTURE REVISIONS OF THIS LICENSE

The Free Software Foundation may publish new revised versions of the GNU FreeDocumentation License from time to time Such new versions will be similar in spiritto the present version but may differ in detail to address new problems or concernsSee httpwwwgnuorgcopyleft

Each version of the License is given a distinguishing version number If the Documentspecifies that a particular numbered version of this License ldquoor any later versionrdquoapplies to it you have the option of following the terms and conditions either of thatspecified version or of any later version that has been published (not as a draft) bythe Free Software Foundation If the Document does not specify a version number ofthis License you may choose any version ever published (not as a draft) by the FreeSoftware Foundation If the Document specifies that a proxy can decide which futureversions of this License can be used that proxyrsquos public statement of acceptance of aversion permanently authorizes you to choose that version for the Document

11 RELICENSING

ldquoMassive Multiauthor Collaboration Siterdquo (or ldquoMMC Siterdquo) means any World WideWeb server that publishes copyrightable works and also provides prominent facilitiesfor anybody to edit those works A public wiki that anybody can edit is an example ofsuch a server A ldquoMassive Multiauthor Collaborationrdquo (or ldquoMMCrdquo) contained in thesite means any set of copyrightable works thus published on the MMC site

ldquoCC-BY-SArdquo means the Creative Commons Attribution-Share Alike 30 license pub-lished by Creative Commons Corporation a not-for-profit corporation with a principalplace of business in San Francisco California as well as future copyleft versions of thatlicense published by that same organization

ldquoIncorporaterdquo means to publish or republish a Document in whole or in part as partof another Document

An MMC is ldquoeligible for relicensingrdquo if it is licensed under this License and if all worksthat were first published under this License somewhere other than this MMC andsubsequently incorporated in whole or in part into the MMC (1) had no cover textsor invariant sections and (2) were thus incorporated prior to November 1 2008

The operator of an MMC Site may republish an MMC contained in the site underCC-BY-SA on the same site at any time before August 1 2009 provided the MMC iseligible for relicensing

Appendix A GNU Free Documentation License 33

ADDENDUM How to use this License for your documents

To use this License in a document you have written include a copy of the License in thedocument and put the following copyright and license notices just after the title page

Copyright (C) year your name

Permission is granted to copy distribute andor modify this document

under the terms of the GNU Free Documentation License Version 13

or any later version published by the Free Software Foundation

with no Invariant Sections no Front-Cover Texts and no Back-Cover

Texts A copy of the license is included in the section entitled lsquolsquoGNU

Free Documentation Licensersquorsquo

If you have Invariant Sections Front-Cover Texts and Back-Cover Texts replace theldquowith Textsrdquo line with this

with the Invariant Sections being list their titles with

the Front-Cover Texts being list and with the Back-Cover Texts

being list

If you have Invariant Sections without Cover Texts or some other combination of thethree merge those two alternatives to suit the situation

If your document contains nontrivial examples of program code we recommend releasingthese examples in parallel under your choice of free software license such as the GNUGeneral Public License to permit their use in free software

Index 34

Index

Aaccess control policy 3Author 3author specifying 10

Bbehavior prior to version 5 10behavior version 3 10behavior version 4 10binary-old-keyword-value substitution mode 9branch growth 7branch number 2branch tip 2branch default 3bug reporting 25

Ccase sensitivity file format 21checkin 3checklist for bug reports 25checkout 3checkout implicit 5ci invocation 11co invocation 12comma-v file format 1command help 7command version 7command-line option to specify a revision 7credits 1

DDate 3date formats 8date specifying 8dates file format 21default branch 3default branch setting 15deleting revisions 15description of working file 2description text specifying 8

Eempty log message 9emulation previous RCS versions 10encoding file format 20environment variables 10

Ffeatures still missing 23

file names on the command-line 7format RCSfile 20

Ggrammar file format 20

HHeader 3history 1

IId 3ident invocation 13implicit checkout circumstance 5implicit checkout locked 12implicit checkout unlocked 12instantiating a working file 2interaction model 1interactive mode 9invocation ci 11invocation co 12invocation ident 13invocation merge 14invocation rcs 14 15invocation rcsclean 16invocation rcsdiff 17invocation rcsmerge 17invocation rlog 18

Kkeyword-only substitution mode 9keyword-value substitution mode 8keyword-value-locker substitution mode 9keywords table of 3

Llayout of nodes file format 21license 1Locker 3locking a revision 15locking on implicit checkout 12locking non-strict 5locking set non-strict 15locking set strict 15locking strict 5locks in RCS file 3Log 3log message empty 9LOGNAME 11

Index 35

Mmemory limit 11merge invocation 14model interaction 1

NName 4names symbolic 3node layout file format 21non-strict locking 5number branch 2number revision 2

Oold-keyword-value substitution mode 9order of options and file names 7outdating revisions 15overview 1

Ppairing RCS and working files 7patches contributing 25problems 25projects related 1

Qquiet mode 9

Rrange of revisions specifying 7RCS file 2rcs invocation 14 15RCS version emulation 10RCS_MEM_LIMIT 11rcsclean invocation 16rcsdiff invocation 17RCSfile 4RCSfile format 20RCSINIT 10rcsmerge invocation 17removing revisions 15reporting bugs 25Revision 4revision number 2revision range specifying 7

revision specifying 7revisions tree of 3rlog invocation 18

SSource 4specifying a date 8specifying a range of revisions 7specifying a revision 7specifying a state 9specifying a suffix list 10specifying a timedate 8specifying author 10specifying description text 8specifying substitution mode 8State 4state specifying 9strict locking 5substitution mode default 8substitution mode specifying 8suffix list specifying 10symbolic names 3

TTEMP 11third-party interop file format 21Tichy Walter F 1time zone 8timedate specifying 8tip 2tip increment 7TMP 11TMPDIR 11tree of revisions 3

Uunlocking a revision 15USER 11

Vvalue-only substitution mode 9

Wwhitespace file format 21working file description 2working file instantiation 2

  • Overview
    • Credits
    • Concepts
      • Interaction model
      • Working file
      • RCS file
      • Fundamental operations
      • Keywords
        • Quick tour
          • Usage
            • Common elements
              • Revision options
              • Date option
              • Description option
              • Substitution mode option
              • Log message option
              • Misc common options
              • Environment
                • Invoking ci
                • Invoking co
                • Invoking ident
                • Invoking merge
                • Invoking rcs
                  • modern
                  • legacy
                    • Invoking rcsclean
                    • Invoking rcsdiff
                    • Invoking rcsmerge
                    • Invoking rlog
                      • Hacking
                        • File format
                          • File format grammar
                          • Additional particulars of the file format
                            • Still missing
                            • Reporting bugs
                              • GNU Free Documentation License
                              • Index
Page 17: GNU RCS · The RCS file is also known (colloquially) as the “comma-v file”, due to its name often ending in ,v (e.g., a.c,v). A revision number is a branch number followed by

Chapter 2 Usage 14

-V Note that -Vn is not a valid option for ident in contrast to most other RCScommands (see Section 216 [Misc common options] page 9)

In addition to the normal keyword pattern for Subversion 12 (and later) compatibility1ident also recognizes patterns having one of the forms

$keyword text $

two colons and space after keyword

space before ending $

$keyword text$

two colons and space after keyword

hash before ending $

25 Invoking merge

merge [options] receiving-sibling parent other-sibling

The merge command combines the differences between a the parent and the other siblingand the differences between the parent and the receiving sibling It writes the result to thereceiving sibling

-A

-E

-e Use diff3 -A -E (default) or -e respectively

-p Write to stdout instead of overwriting receiving-sibling

-q See Section 216 [Misc common options] page 9 Suppress conflict warnings

-Llabel (up to three times) Specify the conflict labels for receiving-sibling parent andother-sibling respectively

-V Note that -Vn is not a valid option for merge in contrast to most other RCScommands (see Section 216 [Misc common options] page 9)

26 Invoking rcs

The rcs command is unique in the set of RCS programs in that it has two usages themodern (for RCS 590 and later) and the legacy

261 modern

rcs [options] command [command-arg ]

This rcs usage dispatches to command passing along command-arg without interpreta-tion

--commands

Display a list of available commands including a one-line description and exitsuccessfully

1 The fixed-length keyword syntax is described in detail in Version Control with Subversion chapterldquoAdvanced Topicsrdquo section ldquoKeyword Substitutionrdquo

Chapter 2 Usage 15

--aliases

Display a list of command aliases and exit successfully

--help command

Display help for a particular command and exit successfully For example todisplay help for the legacy interface use

--help frob

262 legacy

rcs frob [options] file

(or ldquorcsrdquo instead of ldquorcs frobrdquo)

This rcs usage performs various administrative operations on the RCS file depending onthe options given

-i Create and initialize a new RCS file

-L Set strict locking

-U Set non-strict locking

-M Donrsquot send mail when breaking someone elsersquos lock

-T Preserve the modification time on the RCS file unless a revision is removed

-I

-q See Section 216 [Misc common options] page 9

-alogins Append logins (comma-separated list of usernames) to access-list

-e[logins]

Erase logins (comma-separated list of usernames) from access-list If logins isomitted clear the access-list

-Afile-name

Append access-list of file-name to current access-list

-b[rev] Set default branch to that of rev or highest branch on trunk if rev is omitted

-l[rev] Lock a revision

-u[rev] Unlock a revision

-cstring Set comment leader to string NB Donrsquot use obsolete

-ksubst See Section 214 [Substitution mode option] page 8

-mrev[msg]

Replace log message with msg See Section 215 [Log message option] page 9

-nname[[rev]]

If rev is omitted delete symbolic name Otherwise associate name with rev name must be new

-Nname[[rev]]

Like -n but overwrite any previous assignment

-orange Delete (also known as ldquooutdaterdquo) revisions in range

Chapter 2 Usage 16

rev single revision

br latest revision on branch br

rev1rev2

rev1 to rev2 on same branch inclusive

rev beginning of branch to rev

rev rev to end of branch

-sstate[rev]

See Section 216 [Misc common options] page 9 Set state

-t-text

-tfile-name

See Section 213 [Description option] page 8 Replace description

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

These options have no effect and are included solely for consistency with other comamnds(see Section 217 [Environment] page 10) -zzone

27 Invoking rcsclean

rcs clean [options] [file ]

(or ldquorcscleanrdquo instead of ldquorcs cleanrdquo)

The rcsclean command removes working files that are not being worked on If given -u italso unlocks and removes working files that are being worked on but have not changed Ifno file is specified operate on all the working files in the current directory

-r[rev] Specify revision

-u[rev] Unlock if is locked and no differences found

-n[rev] Dry run (no act donrsquot operate)

-q[rev] See Section 216 [Misc common options] page 9

-ksubst See Section 214 [Substitution mode option] page 8

-T Preserve the modification time on the RCS file even it changes because a lockis removed

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

-zzone See Section 212 [Date option] page 8

Chapter 2 Usage 17

28 Invoking rcsdiff

rcs diff [options] file

(or ldquorcsdiffrdquo instead of ldquorcs diffrdquo)

The rcsdiff command runs diff to compare two revisions in an RCS file See Section ldquoIn-voking diffrdquo in The GNU Diffutils Manaual

-rrev (zero one or two times) Name a revision If given two revisions (lsquo-rrev1-rrev2rsquo) compare those revisions If given only one revision (lsquo-rrevrsquo) comparethe working file with it If given no revisions compare the working file with thelatest revision on the default branch

-ksubst See Section 214 [Substitution mode option] page 8

-q See Section 216 [Misc common options] page 9

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

-zzone See Section 212 [Date option] page 8

These options have no effect and are included solely for consistency with other comamnds(see Section 217 [Environment] page 10) -T

Additionally the following options (and their argument if any) are passed to the underlyingdiff command

-0 -1 -2 -3 -4 -5 -6 -7 -8 -9 -B -C -D -F -H -I

-L -U -W -a -b -c -d -e -f -h -i -n -p -t -u -w -y

long options (that start with --)

(Not all of these options are meaningful)

29 Invoking rcsmerge

rcs merge [options] file

(or ldquorcsmergerdquo instead of ldquorcs mergerdquo)

The rcsmerge command incorporates the changes between two revisions of an RCS file intothe corresponding working file

-A

-E

-e Passed to the diff3 command The default if none are specified is -E With -esuppress warnings on conflict The -A style generates the most verbose outputSee Section ldquoInvoking diff3rdquo in The GNU Diffutils Manual

-p[rev] Write to stdout instead of overwriting the working file

-q[rev] See Section 216 [Misc common options] page 9

-rrev (one or two times) specify a revision

One or two revisions must be specified (using -p -q -r) If only one is specified the secondrevision defaults to the latest revision on the default branch

Chapter 2 Usage 18

-ksubst See Section 214 [Substitution mode option] page 8

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

-zzone See Section 212 [Date option] page 8

These options have no effect and are included solely for consistency with other comamnds(see Section 217 [Environment] page 10) -T

210 Invoking rlog

rcs log [options] file

(or ldquorlogrdquo instead of ldquorcs logrdquo)

The rlog command displays information about RCS files

-L Ignore RCS files with no locks set

-R Print only the name of the RCS file

-h Print only the ldquoheaderrdquo information

-t Like -h but also include the description

-N Omit symbolic names

-b Select the default branch

-ddates See Section 212 [Date option] page 8 Select revisions based on timestampin the range dates with spec

d single revision d or earlier

d1ltd2

d2gtd1 between d1 and d2 exclusive

ltd

dgt before d

gtd

dlt after d

Instead of lsquoltrsquo or lsquogtrsquo you can use lsquolt=rsquo or lsquogt=rsquo respectively to specify inclusiveranges dates may also be a list of semicolon-separated specs

-l[who] Select revisions locked by who (comma-separated list of usernames) only or byanyone if who is omitted

-r[revs] Select revisions in revs a comma-separated list of range specs one of revrev rev rev1rev2

-sstates See Section 216 [Misc common options] page 9 states can also be a comma-separated list of states Select revisions with specified state(s)

-w[who] Select revisions checked in by who (comma-separated list of usernames) or bythe user if who is omitted

Chapter 2 Usage 19

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

-zzone See Section 212 [Date option] page 8

These options have no effect and are included solely for consistency with other comamnds(see Section 217 [Environment] page 10) lsquo-qrsquo lsquo-Trsquo

Chapter 3 Hacking 20

3 Hacking

This chapter in contrast to the previous (see Chapter 2 [Usage] page 7) is introspective Itdescribes an important aspect of RCS interop with other programs and development ideasand methods

31 File format

An RCS filersquos contents are described by the grammar below1 Overall the format is freendashformat text In most environments RCS uses the ISO 88591 encoding visible graphiccharacters are (octal) codes 041ndash176 and 240ndash377 and whitespace characters are codes010ndash015 and 040TODO Discuss or point to encoding compatibility issues

311 File format grammar

The meta syntax in this section uses the following conventions lsquo|rsquo (U+7C) separates al-ternatives lsquorsquo (U+7B) and lsquorsquo (U+7D) enclose optional phrases lsquorsquo and lsquorsquo (trailing U+2A)enclose phrases that can be repeated zero or more times lsquorsquo and lsquo+rsquo (trailing U+2B) enclosephrases that must appear at least once and can be repeated terminal symbols are in lsquorsquo(two U+22)

rcstext = admin delta desc deltatext

admin = head num

branch num

access id

symbols sym num

locks id num

strict

integrity intstring

comment string

expand string

delta = num

date num

author id

state id

branches num

next num

commitid sym

desc = desc string

deltatext = num

log string

text string

1 This section is adapted from the lsquorcsfile(5)rsquo manpage written by Walter F Tichy

Chapter 3 Hacking 21

num = digit | +

digit = 0 through 9

id = idchar | +

sym = idchar+

idchar = any visible graphic character except special

special = $ | | | | |

string = any character with doubled

word = id | num | string |

intchar = any character except

thirdp = ^L intchar

intstring = intchar thirdp

312 Additional particulars of the file format

bull In releases prior to 58 (2011-08-30) the grammar included the production

newphrase = id word

and used it in the admin delta and deltatext productions This allowed third-partyprograms to interoperate with RCS by storing opaque (to RCS) data in the file

As of 58 in the name of progress (towards more systematic file integrity support) theonly area reserved for third-party interop is in the (string) value of the integrity fieldspecifically after the first formfeed (U+0C) A further restriction (for all programs) isthat the integrity value must not contain lsquorsquo

bull Whitespace has no significance except in strings However whitespace cannot appearwithin an id num or sym and an RCS file must end with newline (U+0A) Strings areenclosed by lsquorsquo (U+40) If a string contains a lsquorsquo it must be doubled otherwise stringscan contain arbitrary binary data

bull Identifiers are case sensitive Keywords are in lower case only The sets of keywordsand identifiers can overlap

bull Dates which appear after the date keyword are of the form Ymmddhhmmss whereY is the year mm the month (01ndash12) dd the day (01ndash31) hh the hour (00ndash23) mm theminute (00ndash59) and ss the second (00ndash60) Y contains just the last two digits of theyear for years from 1900 through 1999 and all the digits of years thereafter Dates usethe Gregorian calendar times use UTC

bull The delta nodes form a tree All nodes whose numbers consist of a single pair (eg 2321 13) are on the trunk and are linked through the next field in order of decreasing

Chapter 3 Hacking 22

numbers The head field in the admin node points to the head of that sequence (iecontains the highest pair) The branch node in the admin node indicates the defaultbranch (or revision) for most RCS operations If empty the default branch is thehighest branch on the trunk

All delta nodes whose numbers consist of 2n fields (n ge 2) (eg 3111 2122) arelinked as follows All nodes whose first 2nminus1 number fields are identical are linkedthrough the next field in order of increasing numbers For each such sequence thedelta node whose number is identical to the first 2nminus2 number fields of the delta

nodes on that sequence is called the branchpoint The branches field of a node containsa list of the numbers of the first nodes of all sequences for which it is a branchpointThis list is ordered in increasing numbers See Figure 31

Chapter 3 Hacking 23

Head

|

|

v

---------

| |

| 21 |

| |

1213 1311 | | 1222 122111

--------- --------- --------- --------- -------------

^ ^ | ^ ^

| | | | |

| | v | |

| --------- |

| 13 |

--------- -----------

1211 131 1221 12211

--------- ---------

^ | ^

| | |

| v |

| --------- |

| 12 |

---------------------- ---------

121 122

|

|

v

---------

11

Figure 31 The organization of an example RCS file

32 Still missing

RCS is still missing some features The following is an unordered list of ldquoto-do musingsrdquo keptby the RCS maintainers If you would like to hack on an item See Section 33 [Reportingbugs] page 25

bull Add an option to rcsmerge so that it can use an arbitrary program to do the 3-waymerge instead of the default merge Likewise for rcsdiff and diff It should be possibleto pass arbitrary options to these programs and to the subsidiary co invocations

bull Add format options for finer control over the output of ident and rlog Eg thereshould be an easy way for rlog to output lines like lsquosrcmainc 24 wftrsquo one for

Chapter 3 Hacking 24

each locked revision rlog options should have three orthogonal types selecting filesselecting revisions and selecting rlog format

bull Add format options for finer control over the output of keyword strings Eg thereshould be some way to prepend lsquo()rsquo and there should be some way to change lsquo$rsquo tosome other character to disable further substitution These options should make theresulting files uneditable like lsquo-kvrsquo

bull Add long options eg --keyword-substitution Unfortunately RCSrsquos option syntaxis incompatible with getopt Perhaps the best way is to overload rcs eg lsquorcs diff

--keyword-substitution=old filersquo instead of lsquorcsdiff -ko filersquo

bull rlog -rMN should work even if M and N have different numbers of fields so long asM is an ancestor of N or vice versa

bull rcs should evaluate options in order this allows rcs -oS -nS

bull Be able to redo your most recent checkin with minor changes

bull co -u shouldnrsquot complain about a lsquo+wrsquo working file if contents donrsquot change

bull Add a lsquo-rsquo option to take the list of file names from standard input Perhaps the filenames should be null-terminated not newline-terminated so that those that containnewlines are handled properly

bull Permit multiple optionndashfilename pairs eg co -r14 a -r15 b

bull Add an option to break a symbolic link to an RCS file instead of breaking the hardlink that it points to

bull Add ways to specify the earliest revision the most recent revision the earliest or latestrevision on a particular branch and the parent or child of some other revision

bull If a user has multiple locks perhaps ci should fall back on the method of ci -k to figureout which revision to use

bull Add an option to rcsclean to clean directories recursively

bull Write an rcsck program that repairs corrupted RCS files much as fsck repairs corruptedfile systems For example it should remove stale lock files

bull Update the date parser to use the more modern getdatey by Bellovin Salz andBerets or the even more modern getdate by Moraes None of these getdate imple-mentations are as robust as RCSrsquos old warhorse in avoiding problems like arithmeticoverflow so theyrsquoll have to be fixed first (Perhaps we can use gnulib module getdate)

bull Break up the code into a library so that itrsquos easier to write new programs that manip-ulate RCS files and so that useless code is removed from the existing programs Forexample the rcs command contains unnecessary keyword substitution baggage andthe merge command can be greatly pruned

bull Make it easier to use your favorite text editor to edit log messages etc instead ofhaving to type them in irretrievably at the terminal

bull Let the user specify a search path for default branches eg to use L as the defaultbranch if it works and M otherwise Let the user require that at least one entry inthe search path works Let the user say that later entries in the search path are readonly ie one cannot check in changes to them This should be an option settable bylsquoRCSINITrsquo

bull Add a way for a user to see which revisions affected which lines

Chapter 3 Hacking 25

bull Have rlog -nN F print just the revision number that N translates to Eg rlog -nB

F would print the highest revision on the branch B Use this to add an option -bB torcsbranch to freeze the named branch This should interact well with default branches

bull Add a co option that prints the revision number before each line as SCCSrsquos get -m

does [I implemented this for Emacs 22 as a subroutine of vc-annotate qv mdashttn]

33 Reporting bugs

To report bugs or suggest enhancements for GNU RCS please visit its homepage (httpwwwgnuorgsoftwarercs) to find directions on how to ldquofile a bug reportrdquo online orsend electronic mail to help-rcsgnuorg (If you use the web interface you donrsquot needto also send email since that is done automatically)

For bug reports please include enough information for the maintainers to reproduce theproblem Generally speaking that means

bull The RCS version command(s) and manual section(s) involved

bull Hardware and operating system names and versions

bull The contents of any input files necessary to reproduce the bug

bull The expected behavior andor output

bull A description of the problem and samples of any erroneous output

bull Options you gave to configure other than specifying installation directories

bull Anything else that you think would be helpful

When in doubt whether something is needed or not include it Itrsquos better to include toomuch than to leave out something important

Patches are welcome if possible please make them with lsquogit format-patchrsquo and includeChangeLog entries (see Section ldquoChange Logrdquo in The GNU Emacs Manual) Please followthe existing coding style

Appendix A GNU Free Documentation License 26

Appendix A GNU Free Documentation License

Version 13 3 November 2008

Copyright ccopy 2000 2001 2002 2007 2008 Free Software Foundation Inchttpfsforg

Everyone is permitted to copy and distribute verbatim copiesof this license document but changing it is not allowed

0 PREAMBLE

The purpose of this License is to make a manual textbook or other functional anduseful document free in the sense of freedom to assure everyone the effective freedomto copy and redistribute it with or without modifying it either commercially or non-commercially Secondarily this License preserves for the author and publisher a wayto get credit for their work while not being considered responsible for modificationsmade by others

This License is a kind of ldquocopyleftrdquo which means that derivative works of the documentmust themselves be free in the same sense It complements the GNU General PublicLicense which is a copyleft license designed for free software

We have designed this License in order to use it for manuals for free software becausefree software needs free documentation a free program should come with manualsproviding the same freedoms that the software does But this License is not limited tosoftware manuals it can be used for any textual work regardless of subject matter orwhether it is published as a printed book We recommend this License principally forworks whose purpose is instruction or reference

1 APPLICABILITY AND DEFINITIONS

This License applies to any manual or other work in any medium that contains anotice placed by the copyright holder saying it can be distributed under the termsof this License Such a notice grants a world-wide royalty-free license unlimited induration to use that work under the conditions stated herein The ldquoDocumentrdquobelow refers to any such manual or work Any member of the public is a licensee andis addressed as ldquoyourdquo You accept the license if you copy modify or distribute the workin a way requiring permission under copyright law

A ldquoModified Versionrdquo of the Document means any work containing the Document ora portion of it either copied verbatim or with modifications andor translated intoanother language

A ldquoSecondary Sectionrdquo is a named appendix or a front-matter section of the Documentthat deals exclusively with the relationship of the publishers or authors of the Documentto the Documentrsquos overall subject (or to related matters) and contains nothing thatcould fall directly within that overall subject (Thus if the Document is in part atextbook of mathematics a Secondary Section may not explain any mathematics) Therelationship could be a matter of historical connection with the subject or with relatedmatters or of legal commercial philosophical ethical or political position regardingthem

The ldquoInvariant Sectionsrdquo are certain Secondary Sections whose titles are designated asbeing those of Invariant Sections in the notice that says that the Document is released

Appendix A GNU Free Documentation License 27

under this License If a section does not fit the above definition of Secondary then it isnot allowed to be designated as Invariant The Document may contain zero InvariantSections If the Document does not identify any Invariant Sections then there are none

The ldquoCover Textsrdquo are certain short passages of text that are listed as Front-CoverTexts or Back-Cover Texts in the notice that says that the Document is released underthis License A Front-Cover Text may be at most 5 words and a Back-Cover Text maybe at most 25 words

A ldquoTransparentrdquo copy of the Document means a machine-readable copy representedin a format whose specification is available to the general public that is suitable forrevising the document straightforwardly with generic text editors or (for images com-posed of pixels) generic paint programs or (for drawings) some widely available drawingeditor and that is suitable for input to text formatters or for automatic translation toa variety of formats suitable for input to text formatters A copy made in an otherwiseTransparent file format whose markup or absence of markup has been arranged tothwart or discourage subsequent modification by readers is not Transparent An imageformat is not Transparent if used for any substantial amount of text A copy that isnot ldquoTransparentrdquo is called ldquoOpaquerdquo

Examples of suitable formats for Transparent copies include plain ASCII withoutmarkup Texinfo input format LaTEX input format SGML or XML using a publiclyavailable DTD and standard-conforming simple HTML PostScript or PDF designedfor human modification Examples of transparent image formats include PNG XCFand JPG Opaque formats include proprietary formats that can be read and editedonly by proprietary word processors SGML or XML for which the DTD andor pro-cessing tools are not generally available and the machine-generated HTML PostScriptor PDF produced by some word processors for output purposes only

The ldquoTitle Pagerdquo means for a printed book the title page itself plus such followingpages as are needed to hold legibly the material this License requires to appear in thetitle page For works in formats which do not have any title page as such ldquoTitle Pagerdquomeans the text near the most prominent appearance of the workrsquos title preceding thebeginning of the body of the text

The ldquopublisherrdquo means any person or entity that distributes copies of the Documentto the public

A section ldquoEntitled XYZrdquo means a named subunit of the Document whose title eitheris precisely XYZ or contains XYZ in parentheses following text that translates XYZ inanother language (Here XYZ stands for a specific section name mentioned below suchas ldquoAcknowledgementsrdquo ldquoDedicationsrdquo ldquoEndorsementsrdquo or ldquoHistoryrdquo) To ldquoPreservethe Titlerdquo of such a section when you modify the Document means that it remains asection ldquoEntitled XYZrdquo according to this definition

The Document may include Warranty Disclaimers next to the notice which states thatthis License applies to the Document These Warranty Disclaimers are considered tobe included by reference in this License but only as regards disclaiming warrantiesany other implication that these Warranty Disclaimers may have is void and has noeffect on the meaning of this License

2 VERBATIM COPYING

Appendix A GNU Free Documentation License 28

You may copy and distribute the Document in any medium either commercially ornoncommercially provided that this License the copyright notices and the licensenotice saying this License applies to the Document are reproduced in all copies andthat you add no other conditions whatsoever to those of this License You may not usetechnical measures to obstruct or control the reading or further copying of the copiesyou make or distribute However you may accept compensation in exchange for copiesIf you distribute a large enough number of copies you must also follow the conditionsin section 3

You may also lend copies under the same conditions stated above and you may publiclydisplay copies

3 COPYING IN QUANTITY

If you publish printed copies (or copies in media that commonly have printed covers) ofthe Document numbering more than 100 and the Documentrsquos license notice requiresCover Texts you must enclose the copies in covers that carry clearly and legibly allthese Cover Texts Front-Cover Texts on the front cover and Back-Cover Texts onthe back cover Both covers must also clearly and legibly identify you as the publisherof these copies The front cover must present the full title with all words of the titleequally prominent and visible You may add other material on the covers in additionCopying with changes limited to the covers as long as they preserve the title of theDocument and satisfy these conditions can be treated as verbatim copying in otherrespects

If the required texts for either cover are too voluminous to fit legibly you should putthe first ones listed (as many as fit reasonably) on the actual cover and continue therest onto adjacent pages

If you publish or distribute Opaque copies of the Document numbering more than 100you must either include a machine-readable Transparent copy along with each Opaquecopy or state in or with each Opaque copy a computer-network location from whichthe general network-using public has access to download using public-standard networkprotocols a complete Transparent copy of the Document free of added material Ifyou use the latter option you must take reasonably prudent steps when you begindistribution of Opaque copies in quantity to ensure that this Transparent copy willremain thus accessible at the stated location until at least one year after the last timeyou distribute an Opaque copy (directly or through your agents or retailers) of thatedition to the public

It is requested but not required that you contact the authors of the Document wellbefore redistributing any large number of copies to give them a chance to provide youwith an updated version of the Document

4 MODIFICATIONS

You may copy and distribute a Modified Version of the Document under the conditionsof sections 2 and 3 above provided that you release the Modified Version under preciselythis License with the Modified Version filling the role of the Document thus licensingdistribution and modification of the Modified Version to whoever possesses a copy ofit In addition you must do these things in the Modified Version

A Use in the Title Page (and on the covers if any) a title distinct from that of theDocument and from those of previous versions (which should if there were any

Appendix A GNU Free Documentation License 29

be listed in the History section of the Document) You may use the same title asa previous version if the original publisher of that version gives permission

B List on the Title Page as authors one or more persons or entities responsible forauthorship of the modifications in the Modified Version together with at least fiveof the principal authors of the Document (all of its principal authors if it has fewerthan five) unless they release you from this requirement

C State on the Title page the name of the publisher of the Modified Version as thepublisher

D Preserve all the copyright notices of the Document

E Add an appropriate copyright notice for your modifications adjacent to the othercopyright notices

F Include immediately after the copyright notices a license notice giving the publicpermission to use the Modified Version under the terms of this License in the formshown in the Addendum below

G Preserve in that license notice the full lists of Invariant Sections and required CoverTexts given in the Documentrsquos license notice

H Include an unaltered copy of this License

I Preserve the section Entitled ldquoHistoryrdquo Preserve its Title and add to it an itemstating at least the title year new authors and publisher of the Modified Versionas given on the Title Page If there is no section Entitled ldquoHistoryrdquo in the Docu-ment create one stating the title year authors and publisher of the Documentas given on its Title Page then add an item describing the Modified Version asstated in the previous sentence

J Preserve the network location if any given in the Document for public access toa Transparent copy of the Document and likewise the network locations given inthe Document for previous versions it was based on These may be placed in theldquoHistoryrdquo section You may omit a network location for a work that was publishedat least four years before the Document itself or if the original publisher of theversion it refers to gives permission

K For any section Entitled ldquoAcknowledgementsrdquo or ldquoDedicationsrdquo Preserve the Titleof the section and preserve in the section all the substance and tone of each of thecontributor acknowledgements andor dedications given therein

L Preserve all the Invariant Sections of the Document unaltered in their text andin their titles Section numbers or the equivalent are not considered part of thesection titles

M Delete any section Entitled ldquoEndorsementsrdquo Such a section may not be includedin the Modified Version

N Do not retitle any existing section to be Entitled ldquoEndorsementsrdquo or to conflict intitle with any Invariant Section

O Preserve any Warranty Disclaimers

If the Modified Version includes new front-matter sections or appendices that qualifyas Secondary Sections and contain no material copied from the Document you may atyour option designate some or all of these sections as invariant To do this add their

Appendix A GNU Free Documentation License 30

titles to the list of Invariant Sections in the Modified Versionrsquos license notice Thesetitles must be distinct from any other section titles

You may add a section Entitled ldquoEndorsementsrdquo provided it contains nothing butendorsements of your Modified Version by various partiesmdashfor example statements ofpeer review or that the text has been approved by an organization as the authoritativedefinition of a standard

You may add a passage of up to five words as a Front-Cover Text and a passage of upto 25 words as a Back-Cover Text to the end of the list of Cover Texts in the ModifiedVersion Only one passage of Front-Cover Text and one of Back-Cover Text may beadded by (or through arrangements made by) any one entity If the Document alreadyincludes a cover text for the same cover previously added by you or by arrangementmade by the same entity you are acting on behalf of you may not add another butyou may replace the old one on explicit permission from the previous publisher thatadded the old one

The author(s) and publisher(s) of the Document do not by this License give permissionto use their names for publicity for or to assert or imply endorsement of any ModifiedVersion

5 COMBINING DOCUMENTS

You may combine the Document with other documents released under this Licenseunder the terms defined in section 4 above for modified versions provided that youinclude in the combination all of the Invariant Sections of all of the original documentsunmodified and list them all as Invariant Sections of your combined work in its licensenotice and that you preserve all their Warranty Disclaimers

The combined work need only contain one copy of this License and multiple identicalInvariant Sections may be replaced with a single copy If there are multiple InvariantSections with the same name but different contents make the title of each such sectionunique by adding at the end of it in parentheses the name of the original author orpublisher of that section if known or else a unique number Make the same adjustmentto the section titles in the list of Invariant Sections in the license notice of the combinedwork

In the combination you must combine any sections Entitled ldquoHistoryrdquo in the vari-ous original documents forming one section Entitled ldquoHistoryrdquo likewise combine anysections Entitled ldquoAcknowledgementsrdquo and any sections Entitled ldquoDedicationsrdquo Youmust delete all sections Entitled ldquoEndorsementsrdquo

6 COLLECTIONS OF DOCUMENTS

You may make a collection consisting of the Document and other documents releasedunder this License and replace the individual copies of this License in the variousdocuments with a single copy that is included in the collection provided that youfollow the rules of this License for verbatim copying of each of the documents in allother respects

You may extract a single document from such a collection and distribute it individu-ally under this License provided you insert a copy of this License into the extracteddocument and follow this License in all other respects regarding verbatim copying ofthat document

Appendix A GNU Free Documentation License 31

7 AGGREGATION WITH INDEPENDENT WORKS

A compilation of the Document or its derivatives with other separate and independentdocuments or works in or on a volume of a storage or distribution medium is calledan ldquoaggregaterdquo if the copyright resulting from the compilation is not used to limit thelegal rights of the compilationrsquos users beyond what the individual works permit Whenthe Document is included in an aggregate this License does not apply to the otherworks in the aggregate which are not themselves derivative works of the Document

If the Cover Text requirement of section 3 is applicable to these copies of the Documentthen if the Document is less than one half of the entire aggregate the Documentrsquos CoverTexts may be placed on covers that bracket the Document within the aggregate or theelectronic equivalent of covers if the Document is in electronic form Otherwise theymust appear on printed covers that bracket the whole aggregate

8 TRANSLATION

Translation is considered a kind of modification so you may distribute translationsof the Document under the terms of section 4 Replacing Invariant Sections withtranslations requires special permission from their copyright holders but you mayinclude translations of some or all Invariant Sections in addition to the original versionsof these Invariant Sections You may include a translation of this License and all thelicense notices in the Document and any Warranty Disclaimers provided that youalso include the original English version of this License and the original versions ofthose notices and disclaimers In case of a disagreement between the translation andthe original version of this License or a notice or disclaimer the original version willprevail

If a section in the Document is Entitled ldquoAcknowledgementsrdquo ldquoDedicationsrdquo or ldquoHis-toryrdquo the requirement (section 4) to Preserve its Title (section 1) will typically requirechanging the actual title

9 TERMINATION

You may not copy modify sublicense or distribute the Document except as expresslyprovided under this License Any attempt otherwise to copy modify sublicense ordistribute it is void and will automatically terminate your rights under this License

However if you cease all violation of this License then your license from a particularcopyright holder is reinstated (a) provisionally unless and until the copyright holderexplicitly and finally terminates your license and (b) permanently if the copyrightholder fails to notify you of the violation by some reasonable means prior to 60 daysafter the cessation

Moreover your license from a particular copyright holder is reinstated permanently ifthe copyright holder notifies you of the violation by some reasonable means this is thefirst time you have received notice of violation of this License (for any work) from thatcopyright holder and you cure the violation prior to 30 days after your receipt of thenotice

Termination of your rights under this section does not terminate the licenses of partieswho have received copies or rights from you under this License If your rights havebeen terminated and not permanently reinstated receipt of a copy of some or all of thesame material does not give you any rights to use it

Appendix A GNU Free Documentation License 32

10 FUTURE REVISIONS OF THIS LICENSE

The Free Software Foundation may publish new revised versions of the GNU FreeDocumentation License from time to time Such new versions will be similar in spiritto the present version but may differ in detail to address new problems or concernsSee httpwwwgnuorgcopyleft

Each version of the License is given a distinguishing version number If the Documentspecifies that a particular numbered version of this License ldquoor any later versionrdquoapplies to it you have the option of following the terms and conditions either of thatspecified version or of any later version that has been published (not as a draft) bythe Free Software Foundation If the Document does not specify a version number ofthis License you may choose any version ever published (not as a draft) by the FreeSoftware Foundation If the Document specifies that a proxy can decide which futureversions of this License can be used that proxyrsquos public statement of acceptance of aversion permanently authorizes you to choose that version for the Document

11 RELICENSING

ldquoMassive Multiauthor Collaboration Siterdquo (or ldquoMMC Siterdquo) means any World WideWeb server that publishes copyrightable works and also provides prominent facilitiesfor anybody to edit those works A public wiki that anybody can edit is an example ofsuch a server A ldquoMassive Multiauthor Collaborationrdquo (or ldquoMMCrdquo) contained in thesite means any set of copyrightable works thus published on the MMC site

ldquoCC-BY-SArdquo means the Creative Commons Attribution-Share Alike 30 license pub-lished by Creative Commons Corporation a not-for-profit corporation with a principalplace of business in San Francisco California as well as future copyleft versions of thatlicense published by that same organization

ldquoIncorporaterdquo means to publish or republish a Document in whole or in part as partof another Document

An MMC is ldquoeligible for relicensingrdquo if it is licensed under this License and if all worksthat were first published under this License somewhere other than this MMC andsubsequently incorporated in whole or in part into the MMC (1) had no cover textsor invariant sections and (2) were thus incorporated prior to November 1 2008

The operator of an MMC Site may republish an MMC contained in the site underCC-BY-SA on the same site at any time before August 1 2009 provided the MMC iseligible for relicensing

Appendix A GNU Free Documentation License 33

ADDENDUM How to use this License for your documents

To use this License in a document you have written include a copy of the License in thedocument and put the following copyright and license notices just after the title page

Copyright (C) year your name

Permission is granted to copy distribute andor modify this document

under the terms of the GNU Free Documentation License Version 13

or any later version published by the Free Software Foundation

with no Invariant Sections no Front-Cover Texts and no Back-Cover

Texts A copy of the license is included in the section entitled lsquolsquoGNU

Free Documentation Licensersquorsquo

If you have Invariant Sections Front-Cover Texts and Back-Cover Texts replace theldquowith Textsrdquo line with this

with the Invariant Sections being list their titles with

the Front-Cover Texts being list and with the Back-Cover Texts

being list

If you have Invariant Sections without Cover Texts or some other combination of thethree merge those two alternatives to suit the situation

If your document contains nontrivial examples of program code we recommend releasingthese examples in parallel under your choice of free software license such as the GNUGeneral Public License to permit their use in free software

Index 34

Index

Aaccess control policy 3Author 3author specifying 10

Bbehavior prior to version 5 10behavior version 3 10behavior version 4 10binary-old-keyword-value substitution mode 9branch growth 7branch number 2branch tip 2branch default 3bug reporting 25

Ccase sensitivity file format 21checkin 3checklist for bug reports 25checkout 3checkout implicit 5ci invocation 11co invocation 12comma-v file format 1command help 7command version 7command-line option to specify a revision 7credits 1

DDate 3date formats 8date specifying 8dates file format 21default branch 3default branch setting 15deleting revisions 15description of working file 2description text specifying 8

Eempty log message 9emulation previous RCS versions 10encoding file format 20environment variables 10

Ffeatures still missing 23

file names on the command-line 7format RCSfile 20

Ggrammar file format 20

HHeader 3history 1

IId 3ident invocation 13implicit checkout circumstance 5implicit checkout locked 12implicit checkout unlocked 12instantiating a working file 2interaction model 1interactive mode 9invocation ci 11invocation co 12invocation ident 13invocation merge 14invocation rcs 14 15invocation rcsclean 16invocation rcsdiff 17invocation rcsmerge 17invocation rlog 18

Kkeyword-only substitution mode 9keyword-value substitution mode 8keyword-value-locker substitution mode 9keywords table of 3

Llayout of nodes file format 21license 1Locker 3locking a revision 15locking on implicit checkout 12locking non-strict 5locking set non-strict 15locking set strict 15locking strict 5locks in RCS file 3Log 3log message empty 9LOGNAME 11

Index 35

Mmemory limit 11merge invocation 14model interaction 1

NName 4names symbolic 3node layout file format 21non-strict locking 5number branch 2number revision 2

Oold-keyword-value substitution mode 9order of options and file names 7outdating revisions 15overview 1

Ppairing RCS and working files 7patches contributing 25problems 25projects related 1

Qquiet mode 9

Rrange of revisions specifying 7RCS file 2rcs invocation 14 15RCS version emulation 10RCS_MEM_LIMIT 11rcsclean invocation 16rcsdiff invocation 17RCSfile 4RCSfile format 20RCSINIT 10rcsmerge invocation 17removing revisions 15reporting bugs 25Revision 4revision number 2revision range specifying 7

revision specifying 7revisions tree of 3rlog invocation 18

SSource 4specifying a date 8specifying a range of revisions 7specifying a revision 7specifying a state 9specifying a suffix list 10specifying a timedate 8specifying author 10specifying description text 8specifying substitution mode 8State 4state specifying 9strict locking 5substitution mode default 8substitution mode specifying 8suffix list specifying 10symbolic names 3

TTEMP 11third-party interop file format 21Tichy Walter F 1time zone 8timedate specifying 8tip 2tip increment 7TMP 11TMPDIR 11tree of revisions 3

Uunlocking a revision 15USER 11

Vvalue-only substitution mode 9

Wwhitespace file format 21working file description 2working file instantiation 2

  • Overview
    • Credits
    • Concepts
      • Interaction model
      • Working file
      • RCS file
      • Fundamental operations
      • Keywords
        • Quick tour
          • Usage
            • Common elements
              • Revision options
              • Date option
              • Description option
              • Substitution mode option
              • Log message option
              • Misc common options
              • Environment
                • Invoking ci
                • Invoking co
                • Invoking ident
                • Invoking merge
                • Invoking rcs
                  • modern
                  • legacy
                    • Invoking rcsclean
                    • Invoking rcsdiff
                    • Invoking rcsmerge
                    • Invoking rlog
                      • Hacking
                        • File format
                          • File format grammar
                          • Additional particulars of the file format
                            • Still missing
                            • Reporting bugs
                              • GNU Free Documentation License
                              • Index
Page 18: GNU RCS · The RCS file is also known (colloquially) as the “comma-v file”, due to its name often ending in ,v (e.g., a.c,v). A revision number is a branch number followed by

Chapter 2 Usage 15

--aliases

Display a list of command aliases and exit successfully

--help command

Display help for a particular command and exit successfully For example todisplay help for the legacy interface use

--help frob

262 legacy

rcs frob [options] file

(or ldquorcsrdquo instead of ldquorcs frobrdquo)

This rcs usage performs various administrative operations on the RCS file depending onthe options given

-i Create and initialize a new RCS file

-L Set strict locking

-U Set non-strict locking

-M Donrsquot send mail when breaking someone elsersquos lock

-T Preserve the modification time on the RCS file unless a revision is removed

-I

-q See Section 216 [Misc common options] page 9

-alogins Append logins (comma-separated list of usernames) to access-list

-e[logins]

Erase logins (comma-separated list of usernames) from access-list If logins isomitted clear the access-list

-Afile-name

Append access-list of file-name to current access-list

-b[rev] Set default branch to that of rev or highest branch on trunk if rev is omitted

-l[rev] Lock a revision

-u[rev] Unlock a revision

-cstring Set comment leader to string NB Donrsquot use obsolete

-ksubst See Section 214 [Substitution mode option] page 8

-mrev[msg]

Replace log message with msg See Section 215 [Log message option] page 9

-nname[[rev]]

If rev is omitted delete symbolic name Otherwise associate name with rev name must be new

-Nname[[rev]]

Like -n but overwrite any previous assignment

-orange Delete (also known as ldquooutdaterdquo) revisions in range

Chapter 2 Usage 16

rev single revision

br latest revision on branch br

rev1rev2

rev1 to rev2 on same branch inclusive

rev beginning of branch to rev

rev rev to end of branch

-sstate[rev]

See Section 216 [Misc common options] page 9 Set state

-t-text

-tfile-name

See Section 213 [Description option] page 8 Replace description

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

These options have no effect and are included solely for consistency with other comamnds(see Section 217 [Environment] page 10) -zzone

27 Invoking rcsclean

rcs clean [options] [file ]

(or ldquorcscleanrdquo instead of ldquorcs cleanrdquo)

The rcsclean command removes working files that are not being worked on If given -u italso unlocks and removes working files that are being worked on but have not changed Ifno file is specified operate on all the working files in the current directory

-r[rev] Specify revision

-u[rev] Unlock if is locked and no differences found

-n[rev] Dry run (no act donrsquot operate)

-q[rev] See Section 216 [Misc common options] page 9

-ksubst See Section 214 [Substitution mode option] page 8

-T Preserve the modification time on the RCS file even it changes because a lockis removed

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

-zzone See Section 212 [Date option] page 8

Chapter 2 Usage 17

28 Invoking rcsdiff

rcs diff [options] file

(or ldquorcsdiffrdquo instead of ldquorcs diffrdquo)

The rcsdiff command runs diff to compare two revisions in an RCS file See Section ldquoIn-voking diffrdquo in The GNU Diffutils Manaual

-rrev (zero one or two times) Name a revision If given two revisions (lsquo-rrev1-rrev2rsquo) compare those revisions If given only one revision (lsquo-rrevrsquo) comparethe working file with it If given no revisions compare the working file with thelatest revision on the default branch

-ksubst See Section 214 [Substitution mode option] page 8

-q See Section 216 [Misc common options] page 9

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

-zzone See Section 212 [Date option] page 8

These options have no effect and are included solely for consistency with other comamnds(see Section 217 [Environment] page 10) -T

Additionally the following options (and their argument if any) are passed to the underlyingdiff command

-0 -1 -2 -3 -4 -5 -6 -7 -8 -9 -B -C -D -F -H -I

-L -U -W -a -b -c -d -e -f -h -i -n -p -t -u -w -y

long options (that start with --)

(Not all of these options are meaningful)

29 Invoking rcsmerge

rcs merge [options] file

(or ldquorcsmergerdquo instead of ldquorcs mergerdquo)

The rcsmerge command incorporates the changes between two revisions of an RCS file intothe corresponding working file

-A

-E

-e Passed to the diff3 command The default if none are specified is -E With -esuppress warnings on conflict The -A style generates the most verbose outputSee Section ldquoInvoking diff3rdquo in The GNU Diffutils Manual

-p[rev] Write to stdout instead of overwriting the working file

-q[rev] See Section 216 [Misc common options] page 9

-rrev (one or two times) specify a revision

One or two revisions must be specified (using -p -q -r) If only one is specified the secondrevision defaults to the latest revision on the default branch

Chapter 2 Usage 18

-ksubst See Section 214 [Substitution mode option] page 8

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

-zzone See Section 212 [Date option] page 8

These options have no effect and are included solely for consistency with other comamnds(see Section 217 [Environment] page 10) -T

210 Invoking rlog

rcs log [options] file

(or ldquorlogrdquo instead of ldquorcs logrdquo)

The rlog command displays information about RCS files

-L Ignore RCS files with no locks set

-R Print only the name of the RCS file

-h Print only the ldquoheaderrdquo information

-t Like -h but also include the description

-N Omit symbolic names

-b Select the default branch

-ddates See Section 212 [Date option] page 8 Select revisions based on timestampin the range dates with spec

d single revision d or earlier

d1ltd2

d2gtd1 between d1 and d2 exclusive

ltd

dgt before d

gtd

dlt after d

Instead of lsquoltrsquo or lsquogtrsquo you can use lsquolt=rsquo or lsquogt=rsquo respectively to specify inclusiveranges dates may also be a list of semicolon-separated specs

-l[who] Select revisions locked by who (comma-separated list of usernames) only or byanyone if who is omitted

-r[revs] Select revisions in revs a comma-separated list of range specs one of revrev rev rev1rev2

-sstates See Section 216 [Misc common options] page 9 states can also be a comma-separated list of states Select revisions with specified state(s)

-w[who] Select revisions checked in by who (comma-separated list of usernames) or bythe user if who is omitted

Chapter 2 Usage 19

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

-zzone See Section 212 [Date option] page 8

These options have no effect and are included solely for consistency with other comamnds(see Section 217 [Environment] page 10) lsquo-qrsquo lsquo-Trsquo

Chapter 3 Hacking 20

3 Hacking

This chapter in contrast to the previous (see Chapter 2 [Usage] page 7) is introspective Itdescribes an important aspect of RCS interop with other programs and development ideasand methods

31 File format

An RCS filersquos contents are described by the grammar below1 Overall the format is freendashformat text In most environments RCS uses the ISO 88591 encoding visible graphiccharacters are (octal) codes 041ndash176 and 240ndash377 and whitespace characters are codes010ndash015 and 040TODO Discuss or point to encoding compatibility issues

311 File format grammar

The meta syntax in this section uses the following conventions lsquo|rsquo (U+7C) separates al-ternatives lsquorsquo (U+7B) and lsquorsquo (U+7D) enclose optional phrases lsquorsquo and lsquorsquo (trailing U+2A)enclose phrases that can be repeated zero or more times lsquorsquo and lsquo+rsquo (trailing U+2B) enclosephrases that must appear at least once and can be repeated terminal symbols are in lsquorsquo(two U+22)

rcstext = admin delta desc deltatext

admin = head num

branch num

access id

symbols sym num

locks id num

strict

integrity intstring

comment string

expand string

delta = num

date num

author id

state id

branches num

next num

commitid sym

desc = desc string

deltatext = num

log string

text string

1 This section is adapted from the lsquorcsfile(5)rsquo manpage written by Walter F Tichy

Chapter 3 Hacking 21

num = digit | +

digit = 0 through 9

id = idchar | +

sym = idchar+

idchar = any visible graphic character except special

special = $ | | | | |

string = any character with doubled

word = id | num | string |

intchar = any character except

thirdp = ^L intchar

intstring = intchar thirdp

312 Additional particulars of the file format

bull In releases prior to 58 (2011-08-30) the grammar included the production

newphrase = id word

and used it in the admin delta and deltatext productions This allowed third-partyprograms to interoperate with RCS by storing opaque (to RCS) data in the file

As of 58 in the name of progress (towards more systematic file integrity support) theonly area reserved for third-party interop is in the (string) value of the integrity fieldspecifically after the first formfeed (U+0C) A further restriction (for all programs) isthat the integrity value must not contain lsquorsquo

bull Whitespace has no significance except in strings However whitespace cannot appearwithin an id num or sym and an RCS file must end with newline (U+0A) Strings areenclosed by lsquorsquo (U+40) If a string contains a lsquorsquo it must be doubled otherwise stringscan contain arbitrary binary data

bull Identifiers are case sensitive Keywords are in lower case only The sets of keywordsand identifiers can overlap

bull Dates which appear after the date keyword are of the form Ymmddhhmmss whereY is the year mm the month (01ndash12) dd the day (01ndash31) hh the hour (00ndash23) mm theminute (00ndash59) and ss the second (00ndash60) Y contains just the last two digits of theyear for years from 1900 through 1999 and all the digits of years thereafter Dates usethe Gregorian calendar times use UTC

bull The delta nodes form a tree All nodes whose numbers consist of a single pair (eg 2321 13) are on the trunk and are linked through the next field in order of decreasing

Chapter 3 Hacking 22

numbers The head field in the admin node points to the head of that sequence (iecontains the highest pair) The branch node in the admin node indicates the defaultbranch (or revision) for most RCS operations If empty the default branch is thehighest branch on the trunk

All delta nodes whose numbers consist of 2n fields (n ge 2) (eg 3111 2122) arelinked as follows All nodes whose first 2nminus1 number fields are identical are linkedthrough the next field in order of increasing numbers For each such sequence thedelta node whose number is identical to the first 2nminus2 number fields of the delta

nodes on that sequence is called the branchpoint The branches field of a node containsa list of the numbers of the first nodes of all sequences for which it is a branchpointThis list is ordered in increasing numbers See Figure 31

Chapter 3 Hacking 23

Head

|

|

v

---------

| |

| 21 |

| |

1213 1311 | | 1222 122111

--------- --------- --------- --------- -------------

^ ^ | ^ ^

| | | | |

| | v | |

| --------- |

| 13 |

--------- -----------

1211 131 1221 12211

--------- ---------

^ | ^

| | |

| v |

| --------- |

| 12 |

---------------------- ---------

121 122

|

|

v

---------

11

Figure 31 The organization of an example RCS file

32 Still missing

RCS is still missing some features The following is an unordered list of ldquoto-do musingsrdquo keptby the RCS maintainers If you would like to hack on an item See Section 33 [Reportingbugs] page 25

bull Add an option to rcsmerge so that it can use an arbitrary program to do the 3-waymerge instead of the default merge Likewise for rcsdiff and diff It should be possibleto pass arbitrary options to these programs and to the subsidiary co invocations

bull Add format options for finer control over the output of ident and rlog Eg thereshould be an easy way for rlog to output lines like lsquosrcmainc 24 wftrsquo one for

Chapter 3 Hacking 24

each locked revision rlog options should have three orthogonal types selecting filesselecting revisions and selecting rlog format

bull Add format options for finer control over the output of keyword strings Eg thereshould be some way to prepend lsquo()rsquo and there should be some way to change lsquo$rsquo tosome other character to disable further substitution These options should make theresulting files uneditable like lsquo-kvrsquo

bull Add long options eg --keyword-substitution Unfortunately RCSrsquos option syntaxis incompatible with getopt Perhaps the best way is to overload rcs eg lsquorcs diff

--keyword-substitution=old filersquo instead of lsquorcsdiff -ko filersquo

bull rlog -rMN should work even if M and N have different numbers of fields so long asM is an ancestor of N or vice versa

bull rcs should evaluate options in order this allows rcs -oS -nS

bull Be able to redo your most recent checkin with minor changes

bull co -u shouldnrsquot complain about a lsquo+wrsquo working file if contents donrsquot change

bull Add a lsquo-rsquo option to take the list of file names from standard input Perhaps the filenames should be null-terminated not newline-terminated so that those that containnewlines are handled properly

bull Permit multiple optionndashfilename pairs eg co -r14 a -r15 b

bull Add an option to break a symbolic link to an RCS file instead of breaking the hardlink that it points to

bull Add ways to specify the earliest revision the most recent revision the earliest or latestrevision on a particular branch and the parent or child of some other revision

bull If a user has multiple locks perhaps ci should fall back on the method of ci -k to figureout which revision to use

bull Add an option to rcsclean to clean directories recursively

bull Write an rcsck program that repairs corrupted RCS files much as fsck repairs corruptedfile systems For example it should remove stale lock files

bull Update the date parser to use the more modern getdatey by Bellovin Salz andBerets or the even more modern getdate by Moraes None of these getdate imple-mentations are as robust as RCSrsquos old warhorse in avoiding problems like arithmeticoverflow so theyrsquoll have to be fixed first (Perhaps we can use gnulib module getdate)

bull Break up the code into a library so that itrsquos easier to write new programs that manip-ulate RCS files and so that useless code is removed from the existing programs Forexample the rcs command contains unnecessary keyword substitution baggage andthe merge command can be greatly pruned

bull Make it easier to use your favorite text editor to edit log messages etc instead ofhaving to type them in irretrievably at the terminal

bull Let the user specify a search path for default branches eg to use L as the defaultbranch if it works and M otherwise Let the user require that at least one entry inthe search path works Let the user say that later entries in the search path are readonly ie one cannot check in changes to them This should be an option settable bylsquoRCSINITrsquo

bull Add a way for a user to see which revisions affected which lines

Chapter 3 Hacking 25

bull Have rlog -nN F print just the revision number that N translates to Eg rlog -nB

F would print the highest revision on the branch B Use this to add an option -bB torcsbranch to freeze the named branch This should interact well with default branches

bull Add a co option that prints the revision number before each line as SCCSrsquos get -m

does [I implemented this for Emacs 22 as a subroutine of vc-annotate qv mdashttn]

33 Reporting bugs

To report bugs or suggest enhancements for GNU RCS please visit its homepage (httpwwwgnuorgsoftwarercs) to find directions on how to ldquofile a bug reportrdquo online orsend electronic mail to help-rcsgnuorg (If you use the web interface you donrsquot needto also send email since that is done automatically)

For bug reports please include enough information for the maintainers to reproduce theproblem Generally speaking that means

bull The RCS version command(s) and manual section(s) involved

bull Hardware and operating system names and versions

bull The contents of any input files necessary to reproduce the bug

bull The expected behavior andor output

bull A description of the problem and samples of any erroneous output

bull Options you gave to configure other than specifying installation directories

bull Anything else that you think would be helpful

When in doubt whether something is needed or not include it Itrsquos better to include toomuch than to leave out something important

Patches are welcome if possible please make them with lsquogit format-patchrsquo and includeChangeLog entries (see Section ldquoChange Logrdquo in The GNU Emacs Manual) Please followthe existing coding style

Appendix A GNU Free Documentation License 26

Appendix A GNU Free Documentation License

Version 13 3 November 2008

Copyright ccopy 2000 2001 2002 2007 2008 Free Software Foundation Inchttpfsforg

Everyone is permitted to copy and distribute verbatim copiesof this license document but changing it is not allowed

0 PREAMBLE

The purpose of this License is to make a manual textbook or other functional anduseful document free in the sense of freedom to assure everyone the effective freedomto copy and redistribute it with or without modifying it either commercially or non-commercially Secondarily this License preserves for the author and publisher a wayto get credit for their work while not being considered responsible for modificationsmade by others

This License is a kind of ldquocopyleftrdquo which means that derivative works of the documentmust themselves be free in the same sense It complements the GNU General PublicLicense which is a copyleft license designed for free software

We have designed this License in order to use it for manuals for free software becausefree software needs free documentation a free program should come with manualsproviding the same freedoms that the software does But this License is not limited tosoftware manuals it can be used for any textual work regardless of subject matter orwhether it is published as a printed book We recommend this License principally forworks whose purpose is instruction or reference

1 APPLICABILITY AND DEFINITIONS

This License applies to any manual or other work in any medium that contains anotice placed by the copyright holder saying it can be distributed under the termsof this License Such a notice grants a world-wide royalty-free license unlimited induration to use that work under the conditions stated herein The ldquoDocumentrdquobelow refers to any such manual or work Any member of the public is a licensee andis addressed as ldquoyourdquo You accept the license if you copy modify or distribute the workin a way requiring permission under copyright law

A ldquoModified Versionrdquo of the Document means any work containing the Document ora portion of it either copied verbatim or with modifications andor translated intoanother language

A ldquoSecondary Sectionrdquo is a named appendix or a front-matter section of the Documentthat deals exclusively with the relationship of the publishers or authors of the Documentto the Documentrsquos overall subject (or to related matters) and contains nothing thatcould fall directly within that overall subject (Thus if the Document is in part atextbook of mathematics a Secondary Section may not explain any mathematics) Therelationship could be a matter of historical connection with the subject or with relatedmatters or of legal commercial philosophical ethical or political position regardingthem

The ldquoInvariant Sectionsrdquo are certain Secondary Sections whose titles are designated asbeing those of Invariant Sections in the notice that says that the Document is released

Appendix A GNU Free Documentation License 27

under this License If a section does not fit the above definition of Secondary then it isnot allowed to be designated as Invariant The Document may contain zero InvariantSections If the Document does not identify any Invariant Sections then there are none

The ldquoCover Textsrdquo are certain short passages of text that are listed as Front-CoverTexts or Back-Cover Texts in the notice that says that the Document is released underthis License A Front-Cover Text may be at most 5 words and a Back-Cover Text maybe at most 25 words

A ldquoTransparentrdquo copy of the Document means a machine-readable copy representedin a format whose specification is available to the general public that is suitable forrevising the document straightforwardly with generic text editors or (for images com-posed of pixels) generic paint programs or (for drawings) some widely available drawingeditor and that is suitable for input to text formatters or for automatic translation toa variety of formats suitable for input to text formatters A copy made in an otherwiseTransparent file format whose markup or absence of markup has been arranged tothwart or discourage subsequent modification by readers is not Transparent An imageformat is not Transparent if used for any substantial amount of text A copy that isnot ldquoTransparentrdquo is called ldquoOpaquerdquo

Examples of suitable formats for Transparent copies include plain ASCII withoutmarkup Texinfo input format LaTEX input format SGML or XML using a publiclyavailable DTD and standard-conforming simple HTML PostScript or PDF designedfor human modification Examples of transparent image formats include PNG XCFand JPG Opaque formats include proprietary formats that can be read and editedonly by proprietary word processors SGML or XML for which the DTD andor pro-cessing tools are not generally available and the machine-generated HTML PostScriptor PDF produced by some word processors for output purposes only

The ldquoTitle Pagerdquo means for a printed book the title page itself plus such followingpages as are needed to hold legibly the material this License requires to appear in thetitle page For works in formats which do not have any title page as such ldquoTitle Pagerdquomeans the text near the most prominent appearance of the workrsquos title preceding thebeginning of the body of the text

The ldquopublisherrdquo means any person or entity that distributes copies of the Documentto the public

A section ldquoEntitled XYZrdquo means a named subunit of the Document whose title eitheris precisely XYZ or contains XYZ in parentheses following text that translates XYZ inanother language (Here XYZ stands for a specific section name mentioned below suchas ldquoAcknowledgementsrdquo ldquoDedicationsrdquo ldquoEndorsementsrdquo or ldquoHistoryrdquo) To ldquoPreservethe Titlerdquo of such a section when you modify the Document means that it remains asection ldquoEntitled XYZrdquo according to this definition

The Document may include Warranty Disclaimers next to the notice which states thatthis License applies to the Document These Warranty Disclaimers are considered tobe included by reference in this License but only as regards disclaiming warrantiesany other implication that these Warranty Disclaimers may have is void and has noeffect on the meaning of this License

2 VERBATIM COPYING

Appendix A GNU Free Documentation License 28

You may copy and distribute the Document in any medium either commercially ornoncommercially provided that this License the copyright notices and the licensenotice saying this License applies to the Document are reproduced in all copies andthat you add no other conditions whatsoever to those of this License You may not usetechnical measures to obstruct or control the reading or further copying of the copiesyou make or distribute However you may accept compensation in exchange for copiesIf you distribute a large enough number of copies you must also follow the conditionsin section 3

You may also lend copies under the same conditions stated above and you may publiclydisplay copies

3 COPYING IN QUANTITY

If you publish printed copies (or copies in media that commonly have printed covers) ofthe Document numbering more than 100 and the Documentrsquos license notice requiresCover Texts you must enclose the copies in covers that carry clearly and legibly allthese Cover Texts Front-Cover Texts on the front cover and Back-Cover Texts onthe back cover Both covers must also clearly and legibly identify you as the publisherof these copies The front cover must present the full title with all words of the titleequally prominent and visible You may add other material on the covers in additionCopying with changes limited to the covers as long as they preserve the title of theDocument and satisfy these conditions can be treated as verbatim copying in otherrespects

If the required texts for either cover are too voluminous to fit legibly you should putthe first ones listed (as many as fit reasonably) on the actual cover and continue therest onto adjacent pages

If you publish or distribute Opaque copies of the Document numbering more than 100you must either include a machine-readable Transparent copy along with each Opaquecopy or state in or with each Opaque copy a computer-network location from whichthe general network-using public has access to download using public-standard networkprotocols a complete Transparent copy of the Document free of added material Ifyou use the latter option you must take reasonably prudent steps when you begindistribution of Opaque copies in quantity to ensure that this Transparent copy willremain thus accessible at the stated location until at least one year after the last timeyou distribute an Opaque copy (directly or through your agents or retailers) of thatedition to the public

It is requested but not required that you contact the authors of the Document wellbefore redistributing any large number of copies to give them a chance to provide youwith an updated version of the Document

4 MODIFICATIONS

You may copy and distribute a Modified Version of the Document under the conditionsof sections 2 and 3 above provided that you release the Modified Version under preciselythis License with the Modified Version filling the role of the Document thus licensingdistribution and modification of the Modified Version to whoever possesses a copy ofit In addition you must do these things in the Modified Version

A Use in the Title Page (and on the covers if any) a title distinct from that of theDocument and from those of previous versions (which should if there were any

Appendix A GNU Free Documentation License 29

be listed in the History section of the Document) You may use the same title asa previous version if the original publisher of that version gives permission

B List on the Title Page as authors one or more persons or entities responsible forauthorship of the modifications in the Modified Version together with at least fiveof the principal authors of the Document (all of its principal authors if it has fewerthan five) unless they release you from this requirement

C State on the Title page the name of the publisher of the Modified Version as thepublisher

D Preserve all the copyright notices of the Document

E Add an appropriate copyright notice for your modifications adjacent to the othercopyright notices

F Include immediately after the copyright notices a license notice giving the publicpermission to use the Modified Version under the terms of this License in the formshown in the Addendum below

G Preserve in that license notice the full lists of Invariant Sections and required CoverTexts given in the Documentrsquos license notice

H Include an unaltered copy of this License

I Preserve the section Entitled ldquoHistoryrdquo Preserve its Title and add to it an itemstating at least the title year new authors and publisher of the Modified Versionas given on the Title Page If there is no section Entitled ldquoHistoryrdquo in the Docu-ment create one stating the title year authors and publisher of the Documentas given on its Title Page then add an item describing the Modified Version asstated in the previous sentence

J Preserve the network location if any given in the Document for public access toa Transparent copy of the Document and likewise the network locations given inthe Document for previous versions it was based on These may be placed in theldquoHistoryrdquo section You may omit a network location for a work that was publishedat least four years before the Document itself or if the original publisher of theversion it refers to gives permission

K For any section Entitled ldquoAcknowledgementsrdquo or ldquoDedicationsrdquo Preserve the Titleof the section and preserve in the section all the substance and tone of each of thecontributor acknowledgements andor dedications given therein

L Preserve all the Invariant Sections of the Document unaltered in their text andin their titles Section numbers or the equivalent are not considered part of thesection titles

M Delete any section Entitled ldquoEndorsementsrdquo Such a section may not be includedin the Modified Version

N Do not retitle any existing section to be Entitled ldquoEndorsementsrdquo or to conflict intitle with any Invariant Section

O Preserve any Warranty Disclaimers

If the Modified Version includes new front-matter sections or appendices that qualifyas Secondary Sections and contain no material copied from the Document you may atyour option designate some or all of these sections as invariant To do this add their

Appendix A GNU Free Documentation License 30

titles to the list of Invariant Sections in the Modified Versionrsquos license notice Thesetitles must be distinct from any other section titles

You may add a section Entitled ldquoEndorsementsrdquo provided it contains nothing butendorsements of your Modified Version by various partiesmdashfor example statements ofpeer review or that the text has been approved by an organization as the authoritativedefinition of a standard

You may add a passage of up to five words as a Front-Cover Text and a passage of upto 25 words as a Back-Cover Text to the end of the list of Cover Texts in the ModifiedVersion Only one passage of Front-Cover Text and one of Back-Cover Text may beadded by (or through arrangements made by) any one entity If the Document alreadyincludes a cover text for the same cover previously added by you or by arrangementmade by the same entity you are acting on behalf of you may not add another butyou may replace the old one on explicit permission from the previous publisher thatadded the old one

The author(s) and publisher(s) of the Document do not by this License give permissionto use their names for publicity for or to assert or imply endorsement of any ModifiedVersion

5 COMBINING DOCUMENTS

You may combine the Document with other documents released under this Licenseunder the terms defined in section 4 above for modified versions provided that youinclude in the combination all of the Invariant Sections of all of the original documentsunmodified and list them all as Invariant Sections of your combined work in its licensenotice and that you preserve all their Warranty Disclaimers

The combined work need only contain one copy of this License and multiple identicalInvariant Sections may be replaced with a single copy If there are multiple InvariantSections with the same name but different contents make the title of each such sectionunique by adding at the end of it in parentheses the name of the original author orpublisher of that section if known or else a unique number Make the same adjustmentto the section titles in the list of Invariant Sections in the license notice of the combinedwork

In the combination you must combine any sections Entitled ldquoHistoryrdquo in the vari-ous original documents forming one section Entitled ldquoHistoryrdquo likewise combine anysections Entitled ldquoAcknowledgementsrdquo and any sections Entitled ldquoDedicationsrdquo Youmust delete all sections Entitled ldquoEndorsementsrdquo

6 COLLECTIONS OF DOCUMENTS

You may make a collection consisting of the Document and other documents releasedunder this License and replace the individual copies of this License in the variousdocuments with a single copy that is included in the collection provided that youfollow the rules of this License for verbatim copying of each of the documents in allother respects

You may extract a single document from such a collection and distribute it individu-ally under this License provided you insert a copy of this License into the extracteddocument and follow this License in all other respects regarding verbatim copying ofthat document

Appendix A GNU Free Documentation License 31

7 AGGREGATION WITH INDEPENDENT WORKS

A compilation of the Document or its derivatives with other separate and independentdocuments or works in or on a volume of a storage or distribution medium is calledan ldquoaggregaterdquo if the copyright resulting from the compilation is not used to limit thelegal rights of the compilationrsquos users beyond what the individual works permit Whenthe Document is included in an aggregate this License does not apply to the otherworks in the aggregate which are not themselves derivative works of the Document

If the Cover Text requirement of section 3 is applicable to these copies of the Documentthen if the Document is less than one half of the entire aggregate the Documentrsquos CoverTexts may be placed on covers that bracket the Document within the aggregate or theelectronic equivalent of covers if the Document is in electronic form Otherwise theymust appear on printed covers that bracket the whole aggregate

8 TRANSLATION

Translation is considered a kind of modification so you may distribute translationsof the Document under the terms of section 4 Replacing Invariant Sections withtranslations requires special permission from their copyright holders but you mayinclude translations of some or all Invariant Sections in addition to the original versionsof these Invariant Sections You may include a translation of this License and all thelicense notices in the Document and any Warranty Disclaimers provided that youalso include the original English version of this License and the original versions ofthose notices and disclaimers In case of a disagreement between the translation andthe original version of this License or a notice or disclaimer the original version willprevail

If a section in the Document is Entitled ldquoAcknowledgementsrdquo ldquoDedicationsrdquo or ldquoHis-toryrdquo the requirement (section 4) to Preserve its Title (section 1) will typically requirechanging the actual title

9 TERMINATION

You may not copy modify sublicense or distribute the Document except as expresslyprovided under this License Any attempt otherwise to copy modify sublicense ordistribute it is void and will automatically terminate your rights under this License

However if you cease all violation of this License then your license from a particularcopyright holder is reinstated (a) provisionally unless and until the copyright holderexplicitly and finally terminates your license and (b) permanently if the copyrightholder fails to notify you of the violation by some reasonable means prior to 60 daysafter the cessation

Moreover your license from a particular copyright holder is reinstated permanently ifthe copyright holder notifies you of the violation by some reasonable means this is thefirst time you have received notice of violation of this License (for any work) from thatcopyright holder and you cure the violation prior to 30 days after your receipt of thenotice

Termination of your rights under this section does not terminate the licenses of partieswho have received copies or rights from you under this License If your rights havebeen terminated and not permanently reinstated receipt of a copy of some or all of thesame material does not give you any rights to use it

Appendix A GNU Free Documentation License 32

10 FUTURE REVISIONS OF THIS LICENSE

The Free Software Foundation may publish new revised versions of the GNU FreeDocumentation License from time to time Such new versions will be similar in spiritto the present version but may differ in detail to address new problems or concernsSee httpwwwgnuorgcopyleft

Each version of the License is given a distinguishing version number If the Documentspecifies that a particular numbered version of this License ldquoor any later versionrdquoapplies to it you have the option of following the terms and conditions either of thatspecified version or of any later version that has been published (not as a draft) bythe Free Software Foundation If the Document does not specify a version number ofthis License you may choose any version ever published (not as a draft) by the FreeSoftware Foundation If the Document specifies that a proxy can decide which futureversions of this License can be used that proxyrsquos public statement of acceptance of aversion permanently authorizes you to choose that version for the Document

11 RELICENSING

ldquoMassive Multiauthor Collaboration Siterdquo (or ldquoMMC Siterdquo) means any World WideWeb server that publishes copyrightable works and also provides prominent facilitiesfor anybody to edit those works A public wiki that anybody can edit is an example ofsuch a server A ldquoMassive Multiauthor Collaborationrdquo (or ldquoMMCrdquo) contained in thesite means any set of copyrightable works thus published on the MMC site

ldquoCC-BY-SArdquo means the Creative Commons Attribution-Share Alike 30 license pub-lished by Creative Commons Corporation a not-for-profit corporation with a principalplace of business in San Francisco California as well as future copyleft versions of thatlicense published by that same organization

ldquoIncorporaterdquo means to publish or republish a Document in whole or in part as partof another Document

An MMC is ldquoeligible for relicensingrdquo if it is licensed under this License and if all worksthat were first published under this License somewhere other than this MMC andsubsequently incorporated in whole or in part into the MMC (1) had no cover textsor invariant sections and (2) were thus incorporated prior to November 1 2008

The operator of an MMC Site may republish an MMC contained in the site underCC-BY-SA on the same site at any time before August 1 2009 provided the MMC iseligible for relicensing

Appendix A GNU Free Documentation License 33

ADDENDUM How to use this License for your documents

To use this License in a document you have written include a copy of the License in thedocument and put the following copyright and license notices just after the title page

Copyright (C) year your name

Permission is granted to copy distribute andor modify this document

under the terms of the GNU Free Documentation License Version 13

or any later version published by the Free Software Foundation

with no Invariant Sections no Front-Cover Texts and no Back-Cover

Texts A copy of the license is included in the section entitled lsquolsquoGNU

Free Documentation Licensersquorsquo

If you have Invariant Sections Front-Cover Texts and Back-Cover Texts replace theldquowith Textsrdquo line with this

with the Invariant Sections being list their titles with

the Front-Cover Texts being list and with the Back-Cover Texts

being list

If you have Invariant Sections without Cover Texts or some other combination of thethree merge those two alternatives to suit the situation

If your document contains nontrivial examples of program code we recommend releasingthese examples in parallel under your choice of free software license such as the GNUGeneral Public License to permit their use in free software

Index 34

Index

Aaccess control policy 3Author 3author specifying 10

Bbehavior prior to version 5 10behavior version 3 10behavior version 4 10binary-old-keyword-value substitution mode 9branch growth 7branch number 2branch tip 2branch default 3bug reporting 25

Ccase sensitivity file format 21checkin 3checklist for bug reports 25checkout 3checkout implicit 5ci invocation 11co invocation 12comma-v file format 1command help 7command version 7command-line option to specify a revision 7credits 1

DDate 3date formats 8date specifying 8dates file format 21default branch 3default branch setting 15deleting revisions 15description of working file 2description text specifying 8

Eempty log message 9emulation previous RCS versions 10encoding file format 20environment variables 10

Ffeatures still missing 23

file names on the command-line 7format RCSfile 20

Ggrammar file format 20

HHeader 3history 1

IId 3ident invocation 13implicit checkout circumstance 5implicit checkout locked 12implicit checkout unlocked 12instantiating a working file 2interaction model 1interactive mode 9invocation ci 11invocation co 12invocation ident 13invocation merge 14invocation rcs 14 15invocation rcsclean 16invocation rcsdiff 17invocation rcsmerge 17invocation rlog 18

Kkeyword-only substitution mode 9keyword-value substitution mode 8keyword-value-locker substitution mode 9keywords table of 3

Llayout of nodes file format 21license 1Locker 3locking a revision 15locking on implicit checkout 12locking non-strict 5locking set non-strict 15locking set strict 15locking strict 5locks in RCS file 3Log 3log message empty 9LOGNAME 11

Index 35

Mmemory limit 11merge invocation 14model interaction 1

NName 4names symbolic 3node layout file format 21non-strict locking 5number branch 2number revision 2

Oold-keyword-value substitution mode 9order of options and file names 7outdating revisions 15overview 1

Ppairing RCS and working files 7patches contributing 25problems 25projects related 1

Qquiet mode 9

Rrange of revisions specifying 7RCS file 2rcs invocation 14 15RCS version emulation 10RCS_MEM_LIMIT 11rcsclean invocation 16rcsdiff invocation 17RCSfile 4RCSfile format 20RCSINIT 10rcsmerge invocation 17removing revisions 15reporting bugs 25Revision 4revision number 2revision range specifying 7

revision specifying 7revisions tree of 3rlog invocation 18

SSource 4specifying a date 8specifying a range of revisions 7specifying a revision 7specifying a state 9specifying a suffix list 10specifying a timedate 8specifying author 10specifying description text 8specifying substitution mode 8State 4state specifying 9strict locking 5substitution mode default 8substitution mode specifying 8suffix list specifying 10symbolic names 3

TTEMP 11third-party interop file format 21Tichy Walter F 1time zone 8timedate specifying 8tip 2tip increment 7TMP 11TMPDIR 11tree of revisions 3

Uunlocking a revision 15USER 11

Vvalue-only substitution mode 9

Wwhitespace file format 21working file description 2working file instantiation 2

  • Overview
    • Credits
    • Concepts
      • Interaction model
      • Working file
      • RCS file
      • Fundamental operations
      • Keywords
        • Quick tour
          • Usage
            • Common elements
              • Revision options
              • Date option
              • Description option
              • Substitution mode option
              • Log message option
              • Misc common options
              • Environment
                • Invoking ci
                • Invoking co
                • Invoking ident
                • Invoking merge
                • Invoking rcs
                  • modern
                  • legacy
                    • Invoking rcsclean
                    • Invoking rcsdiff
                    • Invoking rcsmerge
                    • Invoking rlog
                      • Hacking
                        • File format
                          • File format grammar
                          • Additional particulars of the file format
                            • Still missing
                            • Reporting bugs
                              • GNU Free Documentation License
                              • Index
Page 19: GNU RCS · The RCS file is also known (colloquially) as the “comma-v file”, due to its name often ending in ,v (e.g., a.c,v). A revision number is a branch number followed by

Chapter 2 Usage 16

rev single revision

br latest revision on branch br

rev1rev2

rev1 to rev2 on same branch inclusive

rev beginning of branch to rev

rev rev to end of branch

-sstate[rev]

See Section 216 [Misc common options] page 9 Set state

-t-text

-tfile-name

See Section 213 [Description option] page 8 Replace description

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

These options have no effect and are included solely for consistency with other comamnds(see Section 217 [Environment] page 10) -zzone

27 Invoking rcsclean

rcs clean [options] [file ]

(or ldquorcscleanrdquo instead of ldquorcs cleanrdquo)

The rcsclean command removes working files that are not being worked on If given -u italso unlocks and removes working files that are being worked on but have not changed Ifno file is specified operate on all the working files in the current directory

-r[rev] Specify revision

-u[rev] Unlock if is locked and no differences found

-n[rev] Dry run (no act donrsquot operate)

-q[rev] See Section 216 [Misc common options] page 9

-ksubst See Section 214 [Substitution mode option] page 8

-T Preserve the modification time on the RCS file even it changes because a lockis removed

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

-zzone See Section 212 [Date option] page 8

Chapter 2 Usage 17

28 Invoking rcsdiff

rcs diff [options] file

(or ldquorcsdiffrdquo instead of ldquorcs diffrdquo)

The rcsdiff command runs diff to compare two revisions in an RCS file See Section ldquoIn-voking diffrdquo in The GNU Diffutils Manaual

-rrev (zero one or two times) Name a revision If given two revisions (lsquo-rrev1-rrev2rsquo) compare those revisions If given only one revision (lsquo-rrevrsquo) comparethe working file with it If given no revisions compare the working file with thelatest revision on the default branch

-ksubst See Section 214 [Substitution mode option] page 8

-q See Section 216 [Misc common options] page 9

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

-zzone See Section 212 [Date option] page 8

These options have no effect and are included solely for consistency with other comamnds(see Section 217 [Environment] page 10) -T

Additionally the following options (and their argument if any) are passed to the underlyingdiff command

-0 -1 -2 -3 -4 -5 -6 -7 -8 -9 -B -C -D -F -H -I

-L -U -W -a -b -c -d -e -f -h -i -n -p -t -u -w -y

long options (that start with --)

(Not all of these options are meaningful)

29 Invoking rcsmerge

rcs merge [options] file

(or ldquorcsmergerdquo instead of ldquorcs mergerdquo)

The rcsmerge command incorporates the changes between two revisions of an RCS file intothe corresponding working file

-A

-E

-e Passed to the diff3 command The default if none are specified is -E With -esuppress warnings on conflict The -A style generates the most verbose outputSee Section ldquoInvoking diff3rdquo in The GNU Diffutils Manual

-p[rev] Write to stdout instead of overwriting the working file

-q[rev] See Section 216 [Misc common options] page 9

-rrev (one or two times) specify a revision

One or two revisions must be specified (using -p -q -r) If only one is specified the secondrevision defaults to the latest revision on the default branch

Chapter 2 Usage 18

-ksubst See Section 214 [Substitution mode option] page 8

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

-zzone See Section 212 [Date option] page 8

These options have no effect and are included solely for consistency with other comamnds(see Section 217 [Environment] page 10) -T

210 Invoking rlog

rcs log [options] file

(or ldquorlogrdquo instead of ldquorcs logrdquo)

The rlog command displays information about RCS files

-L Ignore RCS files with no locks set

-R Print only the name of the RCS file

-h Print only the ldquoheaderrdquo information

-t Like -h but also include the description

-N Omit symbolic names

-b Select the default branch

-ddates See Section 212 [Date option] page 8 Select revisions based on timestampin the range dates with spec

d single revision d or earlier

d1ltd2

d2gtd1 between d1 and d2 exclusive

ltd

dgt before d

gtd

dlt after d

Instead of lsquoltrsquo or lsquogtrsquo you can use lsquolt=rsquo or lsquogt=rsquo respectively to specify inclusiveranges dates may also be a list of semicolon-separated specs

-l[who] Select revisions locked by who (comma-separated list of usernames) only or byanyone if who is omitted

-r[revs] Select revisions in revs a comma-separated list of range specs one of revrev rev rev1rev2

-sstates See Section 216 [Misc common options] page 9 states can also be a comma-separated list of states Select revisions with specified state(s)

-w[who] Select revisions checked in by who (comma-separated list of usernames) or bythe user if who is omitted

Chapter 2 Usage 19

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

-zzone See Section 212 [Date option] page 8

These options have no effect and are included solely for consistency with other comamnds(see Section 217 [Environment] page 10) lsquo-qrsquo lsquo-Trsquo

Chapter 3 Hacking 20

3 Hacking

This chapter in contrast to the previous (see Chapter 2 [Usage] page 7) is introspective Itdescribes an important aspect of RCS interop with other programs and development ideasand methods

31 File format

An RCS filersquos contents are described by the grammar below1 Overall the format is freendashformat text In most environments RCS uses the ISO 88591 encoding visible graphiccharacters are (octal) codes 041ndash176 and 240ndash377 and whitespace characters are codes010ndash015 and 040TODO Discuss or point to encoding compatibility issues

311 File format grammar

The meta syntax in this section uses the following conventions lsquo|rsquo (U+7C) separates al-ternatives lsquorsquo (U+7B) and lsquorsquo (U+7D) enclose optional phrases lsquorsquo and lsquorsquo (trailing U+2A)enclose phrases that can be repeated zero or more times lsquorsquo and lsquo+rsquo (trailing U+2B) enclosephrases that must appear at least once and can be repeated terminal symbols are in lsquorsquo(two U+22)

rcstext = admin delta desc deltatext

admin = head num

branch num

access id

symbols sym num

locks id num

strict

integrity intstring

comment string

expand string

delta = num

date num

author id

state id

branches num

next num

commitid sym

desc = desc string

deltatext = num

log string

text string

1 This section is adapted from the lsquorcsfile(5)rsquo manpage written by Walter F Tichy

Chapter 3 Hacking 21

num = digit | +

digit = 0 through 9

id = idchar | +

sym = idchar+

idchar = any visible graphic character except special

special = $ | | | | |

string = any character with doubled

word = id | num | string |

intchar = any character except

thirdp = ^L intchar

intstring = intchar thirdp

312 Additional particulars of the file format

bull In releases prior to 58 (2011-08-30) the grammar included the production

newphrase = id word

and used it in the admin delta and deltatext productions This allowed third-partyprograms to interoperate with RCS by storing opaque (to RCS) data in the file

As of 58 in the name of progress (towards more systematic file integrity support) theonly area reserved for third-party interop is in the (string) value of the integrity fieldspecifically after the first formfeed (U+0C) A further restriction (for all programs) isthat the integrity value must not contain lsquorsquo

bull Whitespace has no significance except in strings However whitespace cannot appearwithin an id num or sym and an RCS file must end with newline (U+0A) Strings areenclosed by lsquorsquo (U+40) If a string contains a lsquorsquo it must be doubled otherwise stringscan contain arbitrary binary data

bull Identifiers are case sensitive Keywords are in lower case only The sets of keywordsand identifiers can overlap

bull Dates which appear after the date keyword are of the form Ymmddhhmmss whereY is the year mm the month (01ndash12) dd the day (01ndash31) hh the hour (00ndash23) mm theminute (00ndash59) and ss the second (00ndash60) Y contains just the last two digits of theyear for years from 1900 through 1999 and all the digits of years thereafter Dates usethe Gregorian calendar times use UTC

bull The delta nodes form a tree All nodes whose numbers consist of a single pair (eg 2321 13) are on the trunk and are linked through the next field in order of decreasing

Chapter 3 Hacking 22

numbers The head field in the admin node points to the head of that sequence (iecontains the highest pair) The branch node in the admin node indicates the defaultbranch (or revision) for most RCS operations If empty the default branch is thehighest branch on the trunk

All delta nodes whose numbers consist of 2n fields (n ge 2) (eg 3111 2122) arelinked as follows All nodes whose first 2nminus1 number fields are identical are linkedthrough the next field in order of increasing numbers For each such sequence thedelta node whose number is identical to the first 2nminus2 number fields of the delta

nodes on that sequence is called the branchpoint The branches field of a node containsa list of the numbers of the first nodes of all sequences for which it is a branchpointThis list is ordered in increasing numbers See Figure 31

Chapter 3 Hacking 23

Head

|

|

v

---------

| |

| 21 |

| |

1213 1311 | | 1222 122111

--------- --------- --------- --------- -------------

^ ^ | ^ ^

| | | | |

| | v | |

| --------- |

| 13 |

--------- -----------

1211 131 1221 12211

--------- ---------

^ | ^

| | |

| v |

| --------- |

| 12 |

---------------------- ---------

121 122

|

|

v

---------

11

Figure 31 The organization of an example RCS file

32 Still missing

RCS is still missing some features The following is an unordered list of ldquoto-do musingsrdquo keptby the RCS maintainers If you would like to hack on an item See Section 33 [Reportingbugs] page 25

bull Add an option to rcsmerge so that it can use an arbitrary program to do the 3-waymerge instead of the default merge Likewise for rcsdiff and diff It should be possibleto pass arbitrary options to these programs and to the subsidiary co invocations

bull Add format options for finer control over the output of ident and rlog Eg thereshould be an easy way for rlog to output lines like lsquosrcmainc 24 wftrsquo one for

Chapter 3 Hacking 24

each locked revision rlog options should have three orthogonal types selecting filesselecting revisions and selecting rlog format

bull Add format options for finer control over the output of keyword strings Eg thereshould be some way to prepend lsquo()rsquo and there should be some way to change lsquo$rsquo tosome other character to disable further substitution These options should make theresulting files uneditable like lsquo-kvrsquo

bull Add long options eg --keyword-substitution Unfortunately RCSrsquos option syntaxis incompatible with getopt Perhaps the best way is to overload rcs eg lsquorcs diff

--keyword-substitution=old filersquo instead of lsquorcsdiff -ko filersquo

bull rlog -rMN should work even if M and N have different numbers of fields so long asM is an ancestor of N or vice versa

bull rcs should evaluate options in order this allows rcs -oS -nS

bull Be able to redo your most recent checkin with minor changes

bull co -u shouldnrsquot complain about a lsquo+wrsquo working file if contents donrsquot change

bull Add a lsquo-rsquo option to take the list of file names from standard input Perhaps the filenames should be null-terminated not newline-terminated so that those that containnewlines are handled properly

bull Permit multiple optionndashfilename pairs eg co -r14 a -r15 b

bull Add an option to break a symbolic link to an RCS file instead of breaking the hardlink that it points to

bull Add ways to specify the earliest revision the most recent revision the earliest or latestrevision on a particular branch and the parent or child of some other revision

bull If a user has multiple locks perhaps ci should fall back on the method of ci -k to figureout which revision to use

bull Add an option to rcsclean to clean directories recursively

bull Write an rcsck program that repairs corrupted RCS files much as fsck repairs corruptedfile systems For example it should remove stale lock files

bull Update the date parser to use the more modern getdatey by Bellovin Salz andBerets or the even more modern getdate by Moraes None of these getdate imple-mentations are as robust as RCSrsquos old warhorse in avoiding problems like arithmeticoverflow so theyrsquoll have to be fixed first (Perhaps we can use gnulib module getdate)

bull Break up the code into a library so that itrsquos easier to write new programs that manip-ulate RCS files and so that useless code is removed from the existing programs Forexample the rcs command contains unnecessary keyword substitution baggage andthe merge command can be greatly pruned

bull Make it easier to use your favorite text editor to edit log messages etc instead ofhaving to type them in irretrievably at the terminal

bull Let the user specify a search path for default branches eg to use L as the defaultbranch if it works and M otherwise Let the user require that at least one entry inthe search path works Let the user say that later entries in the search path are readonly ie one cannot check in changes to them This should be an option settable bylsquoRCSINITrsquo

bull Add a way for a user to see which revisions affected which lines

Chapter 3 Hacking 25

bull Have rlog -nN F print just the revision number that N translates to Eg rlog -nB

F would print the highest revision on the branch B Use this to add an option -bB torcsbranch to freeze the named branch This should interact well with default branches

bull Add a co option that prints the revision number before each line as SCCSrsquos get -m

does [I implemented this for Emacs 22 as a subroutine of vc-annotate qv mdashttn]

33 Reporting bugs

To report bugs or suggest enhancements for GNU RCS please visit its homepage (httpwwwgnuorgsoftwarercs) to find directions on how to ldquofile a bug reportrdquo online orsend electronic mail to help-rcsgnuorg (If you use the web interface you donrsquot needto also send email since that is done automatically)

For bug reports please include enough information for the maintainers to reproduce theproblem Generally speaking that means

bull The RCS version command(s) and manual section(s) involved

bull Hardware and operating system names and versions

bull The contents of any input files necessary to reproduce the bug

bull The expected behavior andor output

bull A description of the problem and samples of any erroneous output

bull Options you gave to configure other than specifying installation directories

bull Anything else that you think would be helpful

When in doubt whether something is needed or not include it Itrsquos better to include toomuch than to leave out something important

Patches are welcome if possible please make them with lsquogit format-patchrsquo and includeChangeLog entries (see Section ldquoChange Logrdquo in The GNU Emacs Manual) Please followthe existing coding style

Appendix A GNU Free Documentation License 26

Appendix A GNU Free Documentation License

Version 13 3 November 2008

Copyright ccopy 2000 2001 2002 2007 2008 Free Software Foundation Inchttpfsforg

Everyone is permitted to copy and distribute verbatim copiesof this license document but changing it is not allowed

0 PREAMBLE

The purpose of this License is to make a manual textbook or other functional anduseful document free in the sense of freedom to assure everyone the effective freedomto copy and redistribute it with or without modifying it either commercially or non-commercially Secondarily this License preserves for the author and publisher a wayto get credit for their work while not being considered responsible for modificationsmade by others

This License is a kind of ldquocopyleftrdquo which means that derivative works of the documentmust themselves be free in the same sense It complements the GNU General PublicLicense which is a copyleft license designed for free software

We have designed this License in order to use it for manuals for free software becausefree software needs free documentation a free program should come with manualsproviding the same freedoms that the software does But this License is not limited tosoftware manuals it can be used for any textual work regardless of subject matter orwhether it is published as a printed book We recommend this License principally forworks whose purpose is instruction or reference

1 APPLICABILITY AND DEFINITIONS

This License applies to any manual or other work in any medium that contains anotice placed by the copyright holder saying it can be distributed under the termsof this License Such a notice grants a world-wide royalty-free license unlimited induration to use that work under the conditions stated herein The ldquoDocumentrdquobelow refers to any such manual or work Any member of the public is a licensee andis addressed as ldquoyourdquo You accept the license if you copy modify or distribute the workin a way requiring permission under copyright law

A ldquoModified Versionrdquo of the Document means any work containing the Document ora portion of it either copied verbatim or with modifications andor translated intoanother language

A ldquoSecondary Sectionrdquo is a named appendix or a front-matter section of the Documentthat deals exclusively with the relationship of the publishers or authors of the Documentto the Documentrsquos overall subject (or to related matters) and contains nothing thatcould fall directly within that overall subject (Thus if the Document is in part atextbook of mathematics a Secondary Section may not explain any mathematics) Therelationship could be a matter of historical connection with the subject or with relatedmatters or of legal commercial philosophical ethical or political position regardingthem

The ldquoInvariant Sectionsrdquo are certain Secondary Sections whose titles are designated asbeing those of Invariant Sections in the notice that says that the Document is released

Appendix A GNU Free Documentation License 27

under this License If a section does not fit the above definition of Secondary then it isnot allowed to be designated as Invariant The Document may contain zero InvariantSections If the Document does not identify any Invariant Sections then there are none

The ldquoCover Textsrdquo are certain short passages of text that are listed as Front-CoverTexts or Back-Cover Texts in the notice that says that the Document is released underthis License A Front-Cover Text may be at most 5 words and a Back-Cover Text maybe at most 25 words

A ldquoTransparentrdquo copy of the Document means a machine-readable copy representedin a format whose specification is available to the general public that is suitable forrevising the document straightforwardly with generic text editors or (for images com-posed of pixels) generic paint programs or (for drawings) some widely available drawingeditor and that is suitable for input to text formatters or for automatic translation toa variety of formats suitable for input to text formatters A copy made in an otherwiseTransparent file format whose markup or absence of markup has been arranged tothwart or discourage subsequent modification by readers is not Transparent An imageformat is not Transparent if used for any substantial amount of text A copy that isnot ldquoTransparentrdquo is called ldquoOpaquerdquo

Examples of suitable formats for Transparent copies include plain ASCII withoutmarkup Texinfo input format LaTEX input format SGML or XML using a publiclyavailable DTD and standard-conforming simple HTML PostScript or PDF designedfor human modification Examples of transparent image formats include PNG XCFand JPG Opaque formats include proprietary formats that can be read and editedonly by proprietary word processors SGML or XML for which the DTD andor pro-cessing tools are not generally available and the machine-generated HTML PostScriptor PDF produced by some word processors for output purposes only

The ldquoTitle Pagerdquo means for a printed book the title page itself plus such followingpages as are needed to hold legibly the material this License requires to appear in thetitle page For works in formats which do not have any title page as such ldquoTitle Pagerdquomeans the text near the most prominent appearance of the workrsquos title preceding thebeginning of the body of the text

The ldquopublisherrdquo means any person or entity that distributes copies of the Documentto the public

A section ldquoEntitled XYZrdquo means a named subunit of the Document whose title eitheris precisely XYZ or contains XYZ in parentheses following text that translates XYZ inanother language (Here XYZ stands for a specific section name mentioned below suchas ldquoAcknowledgementsrdquo ldquoDedicationsrdquo ldquoEndorsementsrdquo or ldquoHistoryrdquo) To ldquoPreservethe Titlerdquo of such a section when you modify the Document means that it remains asection ldquoEntitled XYZrdquo according to this definition

The Document may include Warranty Disclaimers next to the notice which states thatthis License applies to the Document These Warranty Disclaimers are considered tobe included by reference in this License but only as regards disclaiming warrantiesany other implication that these Warranty Disclaimers may have is void and has noeffect on the meaning of this License

2 VERBATIM COPYING

Appendix A GNU Free Documentation License 28

You may copy and distribute the Document in any medium either commercially ornoncommercially provided that this License the copyright notices and the licensenotice saying this License applies to the Document are reproduced in all copies andthat you add no other conditions whatsoever to those of this License You may not usetechnical measures to obstruct or control the reading or further copying of the copiesyou make or distribute However you may accept compensation in exchange for copiesIf you distribute a large enough number of copies you must also follow the conditionsin section 3

You may also lend copies under the same conditions stated above and you may publiclydisplay copies

3 COPYING IN QUANTITY

If you publish printed copies (or copies in media that commonly have printed covers) ofthe Document numbering more than 100 and the Documentrsquos license notice requiresCover Texts you must enclose the copies in covers that carry clearly and legibly allthese Cover Texts Front-Cover Texts on the front cover and Back-Cover Texts onthe back cover Both covers must also clearly and legibly identify you as the publisherof these copies The front cover must present the full title with all words of the titleequally prominent and visible You may add other material on the covers in additionCopying with changes limited to the covers as long as they preserve the title of theDocument and satisfy these conditions can be treated as verbatim copying in otherrespects

If the required texts for either cover are too voluminous to fit legibly you should putthe first ones listed (as many as fit reasonably) on the actual cover and continue therest onto adjacent pages

If you publish or distribute Opaque copies of the Document numbering more than 100you must either include a machine-readable Transparent copy along with each Opaquecopy or state in or with each Opaque copy a computer-network location from whichthe general network-using public has access to download using public-standard networkprotocols a complete Transparent copy of the Document free of added material Ifyou use the latter option you must take reasonably prudent steps when you begindistribution of Opaque copies in quantity to ensure that this Transparent copy willremain thus accessible at the stated location until at least one year after the last timeyou distribute an Opaque copy (directly or through your agents or retailers) of thatedition to the public

It is requested but not required that you contact the authors of the Document wellbefore redistributing any large number of copies to give them a chance to provide youwith an updated version of the Document

4 MODIFICATIONS

You may copy and distribute a Modified Version of the Document under the conditionsof sections 2 and 3 above provided that you release the Modified Version under preciselythis License with the Modified Version filling the role of the Document thus licensingdistribution and modification of the Modified Version to whoever possesses a copy ofit In addition you must do these things in the Modified Version

A Use in the Title Page (and on the covers if any) a title distinct from that of theDocument and from those of previous versions (which should if there were any

Appendix A GNU Free Documentation License 29

be listed in the History section of the Document) You may use the same title asa previous version if the original publisher of that version gives permission

B List on the Title Page as authors one or more persons or entities responsible forauthorship of the modifications in the Modified Version together with at least fiveof the principal authors of the Document (all of its principal authors if it has fewerthan five) unless they release you from this requirement

C State on the Title page the name of the publisher of the Modified Version as thepublisher

D Preserve all the copyright notices of the Document

E Add an appropriate copyright notice for your modifications adjacent to the othercopyright notices

F Include immediately after the copyright notices a license notice giving the publicpermission to use the Modified Version under the terms of this License in the formshown in the Addendum below

G Preserve in that license notice the full lists of Invariant Sections and required CoverTexts given in the Documentrsquos license notice

H Include an unaltered copy of this License

I Preserve the section Entitled ldquoHistoryrdquo Preserve its Title and add to it an itemstating at least the title year new authors and publisher of the Modified Versionas given on the Title Page If there is no section Entitled ldquoHistoryrdquo in the Docu-ment create one stating the title year authors and publisher of the Documentas given on its Title Page then add an item describing the Modified Version asstated in the previous sentence

J Preserve the network location if any given in the Document for public access toa Transparent copy of the Document and likewise the network locations given inthe Document for previous versions it was based on These may be placed in theldquoHistoryrdquo section You may omit a network location for a work that was publishedat least four years before the Document itself or if the original publisher of theversion it refers to gives permission

K For any section Entitled ldquoAcknowledgementsrdquo or ldquoDedicationsrdquo Preserve the Titleof the section and preserve in the section all the substance and tone of each of thecontributor acknowledgements andor dedications given therein

L Preserve all the Invariant Sections of the Document unaltered in their text andin their titles Section numbers or the equivalent are not considered part of thesection titles

M Delete any section Entitled ldquoEndorsementsrdquo Such a section may not be includedin the Modified Version

N Do not retitle any existing section to be Entitled ldquoEndorsementsrdquo or to conflict intitle with any Invariant Section

O Preserve any Warranty Disclaimers

If the Modified Version includes new front-matter sections or appendices that qualifyas Secondary Sections and contain no material copied from the Document you may atyour option designate some or all of these sections as invariant To do this add their

Appendix A GNU Free Documentation License 30

titles to the list of Invariant Sections in the Modified Versionrsquos license notice Thesetitles must be distinct from any other section titles

You may add a section Entitled ldquoEndorsementsrdquo provided it contains nothing butendorsements of your Modified Version by various partiesmdashfor example statements ofpeer review or that the text has been approved by an organization as the authoritativedefinition of a standard

You may add a passage of up to five words as a Front-Cover Text and a passage of upto 25 words as a Back-Cover Text to the end of the list of Cover Texts in the ModifiedVersion Only one passage of Front-Cover Text and one of Back-Cover Text may beadded by (or through arrangements made by) any one entity If the Document alreadyincludes a cover text for the same cover previously added by you or by arrangementmade by the same entity you are acting on behalf of you may not add another butyou may replace the old one on explicit permission from the previous publisher thatadded the old one

The author(s) and publisher(s) of the Document do not by this License give permissionto use their names for publicity for or to assert or imply endorsement of any ModifiedVersion

5 COMBINING DOCUMENTS

You may combine the Document with other documents released under this Licenseunder the terms defined in section 4 above for modified versions provided that youinclude in the combination all of the Invariant Sections of all of the original documentsunmodified and list them all as Invariant Sections of your combined work in its licensenotice and that you preserve all their Warranty Disclaimers

The combined work need only contain one copy of this License and multiple identicalInvariant Sections may be replaced with a single copy If there are multiple InvariantSections with the same name but different contents make the title of each such sectionunique by adding at the end of it in parentheses the name of the original author orpublisher of that section if known or else a unique number Make the same adjustmentto the section titles in the list of Invariant Sections in the license notice of the combinedwork

In the combination you must combine any sections Entitled ldquoHistoryrdquo in the vari-ous original documents forming one section Entitled ldquoHistoryrdquo likewise combine anysections Entitled ldquoAcknowledgementsrdquo and any sections Entitled ldquoDedicationsrdquo Youmust delete all sections Entitled ldquoEndorsementsrdquo

6 COLLECTIONS OF DOCUMENTS

You may make a collection consisting of the Document and other documents releasedunder this License and replace the individual copies of this License in the variousdocuments with a single copy that is included in the collection provided that youfollow the rules of this License for verbatim copying of each of the documents in allother respects

You may extract a single document from such a collection and distribute it individu-ally under this License provided you insert a copy of this License into the extracteddocument and follow this License in all other respects regarding verbatim copying ofthat document

Appendix A GNU Free Documentation License 31

7 AGGREGATION WITH INDEPENDENT WORKS

A compilation of the Document or its derivatives with other separate and independentdocuments or works in or on a volume of a storage or distribution medium is calledan ldquoaggregaterdquo if the copyright resulting from the compilation is not used to limit thelegal rights of the compilationrsquos users beyond what the individual works permit Whenthe Document is included in an aggregate this License does not apply to the otherworks in the aggregate which are not themselves derivative works of the Document

If the Cover Text requirement of section 3 is applicable to these copies of the Documentthen if the Document is less than one half of the entire aggregate the Documentrsquos CoverTexts may be placed on covers that bracket the Document within the aggregate or theelectronic equivalent of covers if the Document is in electronic form Otherwise theymust appear on printed covers that bracket the whole aggregate

8 TRANSLATION

Translation is considered a kind of modification so you may distribute translationsof the Document under the terms of section 4 Replacing Invariant Sections withtranslations requires special permission from their copyright holders but you mayinclude translations of some or all Invariant Sections in addition to the original versionsof these Invariant Sections You may include a translation of this License and all thelicense notices in the Document and any Warranty Disclaimers provided that youalso include the original English version of this License and the original versions ofthose notices and disclaimers In case of a disagreement between the translation andthe original version of this License or a notice or disclaimer the original version willprevail

If a section in the Document is Entitled ldquoAcknowledgementsrdquo ldquoDedicationsrdquo or ldquoHis-toryrdquo the requirement (section 4) to Preserve its Title (section 1) will typically requirechanging the actual title

9 TERMINATION

You may not copy modify sublicense or distribute the Document except as expresslyprovided under this License Any attempt otherwise to copy modify sublicense ordistribute it is void and will automatically terminate your rights under this License

However if you cease all violation of this License then your license from a particularcopyright holder is reinstated (a) provisionally unless and until the copyright holderexplicitly and finally terminates your license and (b) permanently if the copyrightholder fails to notify you of the violation by some reasonable means prior to 60 daysafter the cessation

Moreover your license from a particular copyright holder is reinstated permanently ifthe copyright holder notifies you of the violation by some reasonable means this is thefirst time you have received notice of violation of this License (for any work) from thatcopyright holder and you cure the violation prior to 30 days after your receipt of thenotice

Termination of your rights under this section does not terminate the licenses of partieswho have received copies or rights from you under this License If your rights havebeen terminated and not permanently reinstated receipt of a copy of some or all of thesame material does not give you any rights to use it

Appendix A GNU Free Documentation License 32

10 FUTURE REVISIONS OF THIS LICENSE

The Free Software Foundation may publish new revised versions of the GNU FreeDocumentation License from time to time Such new versions will be similar in spiritto the present version but may differ in detail to address new problems or concernsSee httpwwwgnuorgcopyleft

Each version of the License is given a distinguishing version number If the Documentspecifies that a particular numbered version of this License ldquoor any later versionrdquoapplies to it you have the option of following the terms and conditions either of thatspecified version or of any later version that has been published (not as a draft) bythe Free Software Foundation If the Document does not specify a version number ofthis License you may choose any version ever published (not as a draft) by the FreeSoftware Foundation If the Document specifies that a proxy can decide which futureversions of this License can be used that proxyrsquos public statement of acceptance of aversion permanently authorizes you to choose that version for the Document

11 RELICENSING

ldquoMassive Multiauthor Collaboration Siterdquo (or ldquoMMC Siterdquo) means any World WideWeb server that publishes copyrightable works and also provides prominent facilitiesfor anybody to edit those works A public wiki that anybody can edit is an example ofsuch a server A ldquoMassive Multiauthor Collaborationrdquo (or ldquoMMCrdquo) contained in thesite means any set of copyrightable works thus published on the MMC site

ldquoCC-BY-SArdquo means the Creative Commons Attribution-Share Alike 30 license pub-lished by Creative Commons Corporation a not-for-profit corporation with a principalplace of business in San Francisco California as well as future copyleft versions of thatlicense published by that same organization

ldquoIncorporaterdquo means to publish or republish a Document in whole or in part as partof another Document

An MMC is ldquoeligible for relicensingrdquo if it is licensed under this License and if all worksthat were first published under this License somewhere other than this MMC andsubsequently incorporated in whole or in part into the MMC (1) had no cover textsor invariant sections and (2) were thus incorporated prior to November 1 2008

The operator of an MMC Site may republish an MMC contained in the site underCC-BY-SA on the same site at any time before August 1 2009 provided the MMC iseligible for relicensing

Appendix A GNU Free Documentation License 33

ADDENDUM How to use this License for your documents

To use this License in a document you have written include a copy of the License in thedocument and put the following copyright and license notices just after the title page

Copyright (C) year your name

Permission is granted to copy distribute andor modify this document

under the terms of the GNU Free Documentation License Version 13

or any later version published by the Free Software Foundation

with no Invariant Sections no Front-Cover Texts and no Back-Cover

Texts A copy of the license is included in the section entitled lsquolsquoGNU

Free Documentation Licensersquorsquo

If you have Invariant Sections Front-Cover Texts and Back-Cover Texts replace theldquowith Textsrdquo line with this

with the Invariant Sections being list their titles with

the Front-Cover Texts being list and with the Back-Cover Texts

being list

If you have Invariant Sections without Cover Texts or some other combination of thethree merge those two alternatives to suit the situation

If your document contains nontrivial examples of program code we recommend releasingthese examples in parallel under your choice of free software license such as the GNUGeneral Public License to permit their use in free software

Index 34

Index

Aaccess control policy 3Author 3author specifying 10

Bbehavior prior to version 5 10behavior version 3 10behavior version 4 10binary-old-keyword-value substitution mode 9branch growth 7branch number 2branch tip 2branch default 3bug reporting 25

Ccase sensitivity file format 21checkin 3checklist for bug reports 25checkout 3checkout implicit 5ci invocation 11co invocation 12comma-v file format 1command help 7command version 7command-line option to specify a revision 7credits 1

DDate 3date formats 8date specifying 8dates file format 21default branch 3default branch setting 15deleting revisions 15description of working file 2description text specifying 8

Eempty log message 9emulation previous RCS versions 10encoding file format 20environment variables 10

Ffeatures still missing 23

file names on the command-line 7format RCSfile 20

Ggrammar file format 20

HHeader 3history 1

IId 3ident invocation 13implicit checkout circumstance 5implicit checkout locked 12implicit checkout unlocked 12instantiating a working file 2interaction model 1interactive mode 9invocation ci 11invocation co 12invocation ident 13invocation merge 14invocation rcs 14 15invocation rcsclean 16invocation rcsdiff 17invocation rcsmerge 17invocation rlog 18

Kkeyword-only substitution mode 9keyword-value substitution mode 8keyword-value-locker substitution mode 9keywords table of 3

Llayout of nodes file format 21license 1Locker 3locking a revision 15locking on implicit checkout 12locking non-strict 5locking set non-strict 15locking set strict 15locking strict 5locks in RCS file 3Log 3log message empty 9LOGNAME 11

Index 35

Mmemory limit 11merge invocation 14model interaction 1

NName 4names symbolic 3node layout file format 21non-strict locking 5number branch 2number revision 2

Oold-keyword-value substitution mode 9order of options and file names 7outdating revisions 15overview 1

Ppairing RCS and working files 7patches contributing 25problems 25projects related 1

Qquiet mode 9

Rrange of revisions specifying 7RCS file 2rcs invocation 14 15RCS version emulation 10RCS_MEM_LIMIT 11rcsclean invocation 16rcsdiff invocation 17RCSfile 4RCSfile format 20RCSINIT 10rcsmerge invocation 17removing revisions 15reporting bugs 25Revision 4revision number 2revision range specifying 7

revision specifying 7revisions tree of 3rlog invocation 18

SSource 4specifying a date 8specifying a range of revisions 7specifying a revision 7specifying a state 9specifying a suffix list 10specifying a timedate 8specifying author 10specifying description text 8specifying substitution mode 8State 4state specifying 9strict locking 5substitution mode default 8substitution mode specifying 8suffix list specifying 10symbolic names 3

TTEMP 11third-party interop file format 21Tichy Walter F 1time zone 8timedate specifying 8tip 2tip increment 7TMP 11TMPDIR 11tree of revisions 3

Uunlocking a revision 15USER 11

Vvalue-only substitution mode 9

Wwhitespace file format 21working file description 2working file instantiation 2

  • Overview
    • Credits
    • Concepts
      • Interaction model
      • Working file
      • RCS file
      • Fundamental operations
      • Keywords
        • Quick tour
          • Usage
            • Common elements
              • Revision options
              • Date option
              • Description option
              • Substitution mode option
              • Log message option
              • Misc common options
              • Environment
                • Invoking ci
                • Invoking co
                • Invoking ident
                • Invoking merge
                • Invoking rcs
                  • modern
                  • legacy
                    • Invoking rcsclean
                    • Invoking rcsdiff
                    • Invoking rcsmerge
                    • Invoking rlog
                      • Hacking
                        • File format
                          • File format grammar
                          • Additional particulars of the file format
                            • Still missing
                            • Reporting bugs
                              • GNU Free Documentation License
                              • Index
Page 20: GNU RCS · The RCS file is also known (colloquially) as the “comma-v file”, due to its name often ending in ,v (e.g., a.c,v). A revision number is a branch number followed by

Chapter 2 Usage 17

28 Invoking rcsdiff

rcs diff [options] file

(or ldquorcsdiffrdquo instead of ldquorcs diffrdquo)

The rcsdiff command runs diff to compare two revisions in an RCS file See Section ldquoIn-voking diffrdquo in The GNU Diffutils Manaual

-rrev (zero one or two times) Name a revision If given two revisions (lsquo-rrev1-rrev2rsquo) compare those revisions If given only one revision (lsquo-rrevrsquo) comparethe working file with it If given no revisions compare the working file with thelatest revision on the default branch

-ksubst See Section 214 [Substitution mode option] page 8

-q See Section 216 [Misc common options] page 9

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

-zzone See Section 212 [Date option] page 8

These options have no effect and are included solely for consistency with other comamnds(see Section 217 [Environment] page 10) -T

Additionally the following options (and their argument if any) are passed to the underlyingdiff command

-0 -1 -2 -3 -4 -5 -6 -7 -8 -9 -B -C -D -F -H -I

-L -U -W -a -b -c -d -e -f -h -i -n -p -t -u -w -y

long options (that start with --)

(Not all of these options are meaningful)

29 Invoking rcsmerge

rcs merge [options] file

(or ldquorcsmergerdquo instead of ldquorcs mergerdquo)

The rcsmerge command incorporates the changes between two revisions of an RCS file intothe corresponding working file

-A

-E

-e Passed to the diff3 command The default if none are specified is -E With -esuppress warnings on conflict The -A style generates the most verbose outputSee Section ldquoInvoking diff3rdquo in The GNU Diffutils Manual

-p[rev] Write to stdout instead of overwriting the working file

-q[rev] See Section 216 [Misc common options] page 9

-rrev (one or two times) specify a revision

One or two revisions must be specified (using -p -q -r) If only one is specified the secondrevision defaults to the latest revision on the default branch

Chapter 2 Usage 18

-ksubst See Section 214 [Substitution mode option] page 8

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

-zzone See Section 212 [Date option] page 8

These options have no effect and are included solely for consistency with other comamnds(see Section 217 [Environment] page 10) -T

210 Invoking rlog

rcs log [options] file

(or ldquorlogrdquo instead of ldquorcs logrdquo)

The rlog command displays information about RCS files

-L Ignore RCS files with no locks set

-R Print only the name of the RCS file

-h Print only the ldquoheaderrdquo information

-t Like -h but also include the description

-N Omit symbolic names

-b Select the default branch

-ddates See Section 212 [Date option] page 8 Select revisions based on timestampin the range dates with spec

d single revision d or earlier

d1ltd2

d2gtd1 between d1 and d2 exclusive

ltd

dgt before d

gtd

dlt after d

Instead of lsquoltrsquo or lsquogtrsquo you can use lsquolt=rsquo or lsquogt=rsquo respectively to specify inclusiveranges dates may also be a list of semicolon-separated specs

-l[who] Select revisions locked by who (comma-separated list of usernames) only or byanyone if who is omitted

-r[revs] Select revisions in revs a comma-separated list of range specs one of revrev rev rev1rev2

-sstates See Section 216 [Misc common options] page 9 states can also be a comma-separated list of states Select revisions with specified state(s)

-w[who] Select revisions checked in by who (comma-separated list of usernames) or bythe user if who is omitted

Chapter 2 Usage 19

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

-zzone See Section 212 [Date option] page 8

These options have no effect and are included solely for consistency with other comamnds(see Section 217 [Environment] page 10) lsquo-qrsquo lsquo-Trsquo

Chapter 3 Hacking 20

3 Hacking

This chapter in contrast to the previous (see Chapter 2 [Usage] page 7) is introspective Itdescribes an important aspect of RCS interop with other programs and development ideasand methods

31 File format

An RCS filersquos contents are described by the grammar below1 Overall the format is freendashformat text In most environments RCS uses the ISO 88591 encoding visible graphiccharacters are (octal) codes 041ndash176 and 240ndash377 and whitespace characters are codes010ndash015 and 040TODO Discuss or point to encoding compatibility issues

311 File format grammar

The meta syntax in this section uses the following conventions lsquo|rsquo (U+7C) separates al-ternatives lsquorsquo (U+7B) and lsquorsquo (U+7D) enclose optional phrases lsquorsquo and lsquorsquo (trailing U+2A)enclose phrases that can be repeated zero or more times lsquorsquo and lsquo+rsquo (trailing U+2B) enclosephrases that must appear at least once and can be repeated terminal symbols are in lsquorsquo(two U+22)

rcstext = admin delta desc deltatext

admin = head num

branch num

access id

symbols sym num

locks id num

strict

integrity intstring

comment string

expand string

delta = num

date num

author id

state id

branches num

next num

commitid sym

desc = desc string

deltatext = num

log string

text string

1 This section is adapted from the lsquorcsfile(5)rsquo manpage written by Walter F Tichy

Chapter 3 Hacking 21

num = digit | +

digit = 0 through 9

id = idchar | +

sym = idchar+

idchar = any visible graphic character except special

special = $ | | | | |

string = any character with doubled

word = id | num | string |

intchar = any character except

thirdp = ^L intchar

intstring = intchar thirdp

312 Additional particulars of the file format

bull In releases prior to 58 (2011-08-30) the grammar included the production

newphrase = id word

and used it in the admin delta and deltatext productions This allowed third-partyprograms to interoperate with RCS by storing opaque (to RCS) data in the file

As of 58 in the name of progress (towards more systematic file integrity support) theonly area reserved for third-party interop is in the (string) value of the integrity fieldspecifically after the first formfeed (U+0C) A further restriction (for all programs) isthat the integrity value must not contain lsquorsquo

bull Whitespace has no significance except in strings However whitespace cannot appearwithin an id num or sym and an RCS file must end with newline (U+0A) Strings areenclosed by lsquorsquo (U+40) If a string contains a lsquorsquo it must be doubled otherwise stringscan contain arbitrary binary data

bull Identifiers are case sensitive Keywords are in lower case only The sets of keywordsand identifiers can overlap

bull Dates which appear after the date keyword are of the form Ymmddhhmmss whereY is the year mm the month (01ndash12) dd the day (01ndash31) hh the hour (00ndash23) mm theminute (00ndash59) and ss the second (00ndash60) Y contains just the last two digits of theyear for years from 1900 through 1999 and all the digits of years thereafter Dates usethe Gregorian calendar times use UTC

bull The delta nodes form a tree All nodes whose numbers consist of a single pair (eg 2321 13) are on the trunk and are linked through the next field in order of decreasing

Chapter 3 Hacking 22

numbers The head field in the admin node points to the head of that sequence (iecontains the highest pair) The branch node in the admin node indicates the defaultbranch (or revision) for most RCS operations If empty the default branch is thehighest branch on the trunk

All delta nodes whose numbers consist of 2n fields (n ge 2) (eg 3111 2122) arelinked as follows All nodes whose first 2nminus1 number fields are identical are linkedthrough the next field in order of increasing numbers For each such sequence thedelta node whose number is identical to the first 2nminus2 number fields of the delta

nodes on that sequence is called the branchpoint The branches field of a node containsa list of the numbers of the first nodes of all sequences for which it is a branchpointThis list is ordered in increasing numbers See Figure 31

Chapter 3 Hacking 23

Head

|

|

v

---------

| |

| 21 |

| |

1213 1311 | | 1222 122111

--------- --------- --------- --------- -------------

^ ^ | ^ ^

| | | | |

| | v | |

| --------- |

| 13 |

--------- -----------

1211 131 1221 12211

--------- ---------

^ | ^

| | |

| v |

| --------- |

| 12 |

---------------------- ---------

121 122

|

|

v

---------

11

Figure 31 The organization of an example RCS file

32 Still missing

RCS is still missing some features The following is an unordered list of ldquoto-do musingsrdquo keptby the RCS maintainers If you would like to hack on an item See Section 33 [Reportingbugs] page 25

bull Add an option to rcsmerge so that it can use an arbitrary program to do the 3-waymerge instead of the default merge Likewise for rcsdiff and diff It should be possibleto pass arbitrary options to these programs and to the subsidiary co invocations

bull Add format options for finer control over the output of ident and rlog Eg thereshould be an easy way for rlog to output lines like lsquosrcmainc 24 wftrsquo one for

Chapter 3 Hacking 24

each locked revision rlog options should have three orthogonal types selecting filesselecting revisions and selecting rlog format

bull Add format options for finer control over the output of keyword strings Eg thereshould be some way to prepend lsquo()rsquo and there should be some way to change lsquo$rsquo tosome other character to disable further substitution These options should make theresulting files uneditable like lsquo-kvrsquo

bull Add long options eg --keyword-substitution Unfortunately RCSrsquos option syntaxis incompatible with getopt Perhaps the best way is to overload rcs eg lsquorcs diff

--keyword-substitution=old filersquo instead of lsquorcsdiff -ko filersquo

bull rlog -rMN should work even if M and N have different numbers of fields so long asM is an ancestor of N or vice versa

bull rcs should evaluate options in order this allows rcs -oS -nS

bull Be able to redo your most recent checkin with minor changes

bull co -u shouldnrsquot complain about a lsquo+wrsquo working file if contents donrsquot change

bull Add a lsquo-rsquo option to take the list of file names from standard input Perhaps the filenames should be null-terminated not newline-terminated so that those that containnewlines are handled properly

bull Permit multiple optionndashfilename pairs eg co -r14 a -r15 b

bull Add an option to break a symbolic link to an RCS file instead of breaking the hardlink that it points to

bull Add ways to specify the earliest revision the most recent revision the earliest or latestrevision on a particular branch and the parent or child of some other revision

bull If a user has multiple locks perhaps ci should fall back on the method of ci -k to figureout which revision to use

bull Add an option to rcsclean to clean directories recursively

bull Write an rcsck program that repairs corrupted RCS files much as fsck repairs corruptedfile systems For example it should remove stale lock files

bull Update the date parser to use the more modern getdatey by Bellovin Salz andBerets or the even more modern getdate by Moraes None of these getdate imple-mentations are as robust as RCSrsquos old warhorse in avoiding problems like arithmeticoverflow so theyrsquoll have to be fixed first (Perhaps we can use gnulib module getdate)

bull Break up the code into a library so that itrsquos easier to write new programs that manip-ulate RCS files and so that useless code is removed from the existing programs Forexample the rcs command contains unnecessary keyword substitution baggage andthe merge command can be greatly pruned

bull Make it easier to use your favorite text editor to edit log messages etc instead ofhaving to type them in irretrievably at the terminal

bull Let the user specify a search path for default branches eg to use L as the defaultbranch if it works and M otherwise Let the user require that at least one entry inthe search path works Let the user say that later entries in the search path are readonly ie one cannot check in changes to them This should be an option settable bylsquoRCSINITrsquo

bull Add a way for a user to see which revisions affected which lines

Chapter 3 Hacking 25

bull Have rlog -nN F print just the revision number that N translates to Eg rlog -nB

F would print the highest revision on the branch B Use this to add an option -bB torcsbranch to freeze the named branch This should interact well with default branches

bull Add a co option that prints the revision number before each line as SCCSrsquos get -m

does [I implemented this for Emacs 22 as a subroutine of vc-annotate qv mdashttn]

33 Reporting bugs

To report bugs or suggest enhancements for GNU RCS please visit its homepage (httpwwwgnuorgsoftwarercs) to find directions on how to ldquofile a bug reportrdquo online orsend electronic mail to help-rcsgnuorg (If you use the web interface you donrsquot needto also send email since that is done automatically)

For bug reports please include enough information for the maintainers to reproduce theproblem Generally speaking that means

bull The RCS version command(s) and manual section(s) involved

bull Hardware and operating system names and versions

bull The contents of any input files necessary to reproduce the bug

bull The expected behavior andor output

bull A description of the problem and samples of any erroneous output

bull Options you gave to configure other than specifying installation directories

bull Anything else that you think would be helpful

When in doubt whether something is needed or not include it Itrsquos better to include toomuch than to leave out something important

Patches are welcome if possible please make them with lsquogit format-patchrsquo and includeChangeLog entries (see Section ldquoChange Logrdquo in The GNU Emacs Manual) Please followthe existing coding style

Appendix A GNU Free Documentation License 26

Appendix A GNU Free Documentation License

Version 13 3 November 2008

Copyright ccopy 2000 2001 2002 2007 2008 Free Software Foundation Inchttpfsforg

Everyone is permitted to copy and distribute verbatim copiesof this license document but changing it is not allowed

0 PREAMBLE

The purpose of this License is to make a manual textbook or other functional anduseful document free in the sense of freedom to assure everyone the effective freedomto copy and redistribute it with or without modifying it either commercially or non-commercially Secondarily this License preserves for the author and publisher a wayto get credit for their work while not being considered responsible for modificationsmade by others

This License is a kind of ldquocopyleftrdquo which means that derivative works of the documentmust themselves be free in the same sense It complements the GNU General PublicLicense which is a copyleft license designed for free software

We have designed this License in order to use it for manuals for free software becausefree software needs free documentation a free program should come with manualsproviding the same freedoms that the software does But this License is not limited tosoftware manuals it can be used for any textual work regardless of subject matter orwhether it is published as a printed book We recommend this License principally forworks whose purpose is instruction or reference

1 APPLICABILITY AND DEFINITIONS

This License applies to any manual or other work in any medium that contains anotice placed by the copyright holder saying it can be distributed under the termsof this License Such a notice grants a world-wide royalty-free license unlimited induration to use that work under the conditions stated herein The ldquoDocumentrdquobelow refers to any such manual or work Any member of the public is a licensee andis addressed as ldquoyourdquo You accept the license if you copy modify or distribute the workin a way requiring permission under copyright law

A ldquoModified Versionrdquo of the Document means any work containing the Document ora portion of it either copied verbatim or with modifications andor translated intoanother language

A ldquoSecondary Sectionrdquo is a named appendix or a front-matter section of the Documentthat deals exclusively with the relationship of the publishers or authors of the Documentto the Documentrsquos overall subject (or to related matters) and contains nothing thatcould fall directly within that overall subject (Thus if the Document is in part atextbook of mathematics a Secondary Section may not explain any mathematics) Therelationship could be a matter of historical connection with the subject or with relatedmatters or of legal commercial philosophical ethical or political position regardingthem

The ldquoInvariant Sectionsrdquo are certain Secondary Sections whose titles are designated asbeing those of Invariant Sections in the notice that says that the Document is released

Appendix A GNU Free Documentation License 27

under this License If a section does not fit the above definition of Secondary then it isnot allowed to be designated as Invariant The Document may contain zero InvariantSections If the Document does not identify any Invariant Sections then there are none

The ldquoCover Textsrdquo are certain short passages of text that are listed as Front-CoverTexts or Back-Cover Texts in the notice that says that the Document is released underthis License A Front-Cover Text may be at most 5 words and a Back-Cover Text maybe at most 25 words

A ldquoTransparentrdquo copy of the Document means a machine-readable copy representedin a format whose specification is available to the general public that is suitable forrevising the document straightforwardly with generic text editors or (for images com-posed of pixels) generic paint programs or (for drawings) some widely available drawingeditor and that is suitable for input to text formatters or for automatic translation toa variety of formats suitable for input to text formatters A copy made in an otherwiseTransparent file format whose markup or absence of markup has been arranged tothwart or discourage subsequent modification by readers is not Transparent An imageformat is not Transparent if used for any substantial amount of text A copy that isnot ldquoTransparentrdquo is called ldquoOpaquerdquo

Examples of suitable formats for Transparent copies include plain ASCII withoutmarkup Texinfo input format LaTEX input format SGML or XML using a publiclyavailable DTD and standard-conforming simple HTML PostScript or PDF designedfor human modification Examples of transparent image formats include PNG XCFand JPG Opaque formats include proprietary formats that can be read and editedonly by proprietary word processors SGML or XML for which the DTD andor pro-cessing tools are not generally available and the machine-generated HTML PostScriptor PDF produced by some word processors for output purposes only

The ldquoTitle Pagerdquo means for a printed book the title page itself plus such followingpages as are needed to hold legibly the material this License requires to appear in thetitle page For works in formats which do not have any title page as such ldquoTitle Pagerdquomeans the text near the most prominent appearance of the workrsquos title preceding thebeginning of the body of the text

The ldquopublisherrdquo means any person or entity that distributes copies of the Documentto the public

A section ldquoEntitled XYZrdquo means a named subunit of the Document whose title eitheris precisely XYZ or contains XYZ in parentheses following text that translates XYZ inanother language (Here XYZ stands for a specific section name mentioned below suchas ldquoAcknowledgementsrdquo ldquoDedicationsrdquo ldquoEndorsementsrdquo or ldquoHistoryrdquo) To ldquoPreservethe Titlerdquo of such a section when you modify the Document means that it remains asection ldquoEntitled XYZrdquo according to this definition

The Document may include Warranty Disclaimers next to the notice which states thatthis License applies to the Document These Warranty Disclaimers are considered tobe included by reference in this License but only as regards disclaiming warrantiesany other implication that these Warranty Disclaimers may have is void and has noeffect on the meaning of this License

2 VERBATIM COPYING

Appendix A GNU Free Documentation License 28

You may copy and distribute the Document in any medium either commercially ornoncommercially provided that this License the copyright notices and the licensenotice saying this License applies to the Document are reproduced in all copies andthat you add no other conditions whatsoever to those of this License You may not usetechnical measures to obstruct or control the reading or further copying of the copiesyou make or distribute However you may accept compensation in exchange for copiesIf you distribute a large enough number of copies you must also follow the conditionsin section 3

You may also lend copies under the same conditions stated above and you may publiclydisplay copies

3 COPYING IN QUANTITY

If you publish printed copies (or copies in media that commonly have printed covers) ofthe Document numbering more than 100 and the Documentrsquos license notice requiresCover Texts you must enclose the copies in covers that carry clearly and legibly allthese Cover Texts Front-Cover Texts on the front cover and Back-Cover Texts onthe back cover Both covers must also clearly and legibly identify you as the publisherof these copies The front cover must present the full title with all words of the titleequally prominent and visible You may add other material on the covers in additionCopying with changes limited to the covers as long as they preserve the title of theDocument and satisfy these conditions can be treated as verbatim copying in otherrespects

If the required texts for either cover are too voluminous to fit legibly you should putthe first ones listed (as many as fit reasonably) on the actual cover and continue therest onto adjacent pages

If you publish or distribute Opaque copies of the Document numbering more than 100you must either include a machine-readable Transparent copy along with each Opaquecopy or state in or with each Opaque copy a computer-network location from whichthe general network-using public has access to download using public-standard networkprotocols a complete Transparent copy of the Document free of added material Ifyou use the latter option you must take reasonably prudent steps when you begindistribution of Opaque copies in quantity to ensure that this Transparent copy willremain thus accessible at the stated location until at least one year after the last timeyou distribute an Opaque copy (directly or through your agents or retailers) of thatedition to the public

It is requested but not required that you contact the authors of the Document wellbefore redistributing any large number of copies to give them a chance to provide youwith an updated version of the Document

4 MODIFICATIONS

You may copy and distribute a Modified Version of the Document under the conditionsof sections 2 and 3 above provided that you release the Modified Version under preciselythis License with the Modified Version filling the role of the Document thus licensingdistribution and modification of the Modified Version to whoever possesses a copy ofit In addition you must do these things in the Modified Version

A Use in the Title Page (and on the covers if any) a title distinct from that of theDocument and from those of previous versions (which should if there were any

Appendix A GNU Free Documentation License 29

be listed in the History section of the Document) You may use the same title asa previous version if the original publisher of that version gives permission

B List on the Title Page as authors one or more persons or entities responsible forauthorship of the modifications in the Modified Version together with at least fiveof the principal authors of the Document (all of its principal authors if it has fewerthan five) unless they release you from this requirement

C State on the Title page the name of the publisher of the Modified Version as thepublisher

D Preserve all the copyright notices of the Document

E Add an appropriate copyright notice for your modifications adjacent to the othercopyright notices

F Include immediately after the copyright notices a license notice giving the publicpermission to use the Modified Version under the terms of this License in the formshown in the Addendum below

G Preserve in that license notice the full lists of Invariant Sections and required CoverTexts given in the Documentrsquos license notice

H Include an unaltered copy of this License

I Preserve the section Entitled ldquoHistoryrdquo Preserve its Title and add to it an itemstating at least the title year new authors and publisher of the Modified Versionas given on the Title Page If there is no section Entitled ldquoHistoryrdquo in the Docu-ment create one stating the title year authors and publisher of the Documentas given on its Title Page then add an item describing the Modified Version asstated in the previous sentence

J Preserve the network location if any given in the Document for public access toa Transparent copy of the Document and likewise the network locations given inthe Document for previous versions it was based on These may be placed in theldquoHistoryrdquo section You may omit a network location for a work that was publishedat least four years before the Document itself or if the original publisher of theversion it refers to gives permission

K For any section Entitled ldquoAcknowledgementsrdquo or ldquoDedicationsrdquo Preserve the Titleof the section and preserve in the section all the substance and tone of each of thecontributor acknowledgements andor dedications given therein

L Preserve all the Invariant Sections of the Document unaltered in their text andin their titles Section numbers or the equivalent are not considered part of thesection titles

M Delete any section Entitled ldquoEndorsementsrdquo Such a section may not be includedin the Modified Version

N Do not retitle any existing section to be Entitled ldquoEndorsementsrdquo or to conflict intitle with any Invariant Section

O Preserve any Warranty Disclaimers

If the Modified Version includes new front-matter sections or appendices that qualifyas Secondary Sections and contain no material copied from the Document you may atyour option designate some or all of these sections as invariant To do this add their

Appendix A GNU Free Documentation License 30

titles to the list of Invariant Sections in the Modified Versionrsquos license notice Thesetitles must be distinct from any other section titles

You may add a section Entitled ldquoEndorsementsrdquo provided it contains nothing butendorsements of your Modified Version by various partiesmdashfor example statements ofpeer review or that the text has been approved by an organization as the authoritativedefinition of a standard

You may add a passage of up to five words as a Front-Cover Text and a passage of upto 25 words as a Back-Cover Text to the end of the list of Cover Texts in the ModifiedVersion Only one passage of Front-Cover Text and one of Back-Cover Text may beadded by (or through arrangements made by) any one entity If the Document alreadyincludes a cover text for the same cover previously added by you or by arrangementmade by the same entity you are acting on behalf of you may not add another butyou may replace the old one on explicit permission from the previous publisher thatadded the old one

The author(s) and publisher(s) of the Document do not by this License give permissionto use their names for publicity for or to assert or imply endorsement of any ModifiedVersion

5 COMBINING DOCUMENTS

You may combine the Document with other documents released under this Licenseunder the terms defined in section 4 above for modified versions provided that youinclude in the combination all of the Invariant Sections of all of the original documentsunmodified and list them all as Invariant Sections of your combined work in its licensenotice and that you preserve all their Warranty Disclaimers

The combined work need only contain one copy of this License and multiple identicalInvariant Sections may be replaced with a single copy If there are multiple InvariantSections with the same name but different contents make the title of each such sectionunique by adding at the end of it in parentheses the name of the original author orpublisher of that section if known or else a unique number Make the same adjustmentto the section titles in the list of Invariant Sections in the license notice of the combinedwork

In the combination you must combine any sections Entitled ldquoHistoryrdquo in the vari-ous original documents forming one section Entitled ldquoHistoryrdquo likewise combine anysections Entitled ldquoAcknowledgementsrdquo and any sections Entitled ldquoDedicationsrdquo Youmust delete all sections Entitled ldquoEndorsementsrdquo

6 COLLECTIONS OF DOCUMENTS

You may make a collection consisting of the Document and other documents releasedunder this License and replace the individual copies of this License in the variousdocuments with a single copy that is included in the collection provided that youfollow the rules of this License for verbatim copying of each of the documents in allother respects

You may extract a single document from such a collection and distribute it individu-ally under this License provided you insert a copy of this License into the extracteddocument and follow this License in all other respects regarding verbatim copying ofthat document

Appendix A GNU Free Documentation License 31

7 AGGREGATION WITH INDEPENDENT WORKS

A compilation of the Document or its derivatives with other separate and independentdocuments or works in or on a volume of a storage or distribution medium is calledan ldquoaggregaterdquo if the copyright resulting from the compilation is not used to limit thelegal rights of the compilationrsquos users beyond what the individual works permit Whenthe Document is included in an aggregate this License does not apply to the otherworks in the aggregate which are not themselves derivative works of the Document

If the Cover Text requirement of section 3 is applicable to these copies of the Documentthen if the Document is less than one half of the entire aggregate the Documentrsquos CoverTexts may be placed on covers that bracket the Document within the aggregate or theelectronic equivalent of covers if the Document is in electronic form Otherwise theymust appear on printed covers that bracket the whole aggregate

8 TRANSLATION

Translation is considered a kind of modification so you may distribute translationsof the Document under the terms of section 4 Replacing Invariant Sections withtranslations requires special permission from their copyright holders but you mayinclude translations of some or all Invariant Sections in addition to the original versionsof these Invariant Sections You may include a translation of this License and all thelicense notices in the Document and any Warranty Disclaimers provided that youalso include the original English version of this License and the original versions ofthose notices and disclaimers In case of a disagreement between the translation andthe original version of this License or a notice or disclaimer the original version willprevail

If a section in the Document is Entitled ldquoAcknowledgementsrdquo ldquoDedicationsrdquo or ldquoHis-toryrdquo the requirement (section 4) to Preserve its Title (section 1) will typically requirechanging the actual title

9 TERMINATION

You may not copy modify sublicense or distribute the Document except as expresslyprovided under this License Any attempt otherwise to copy modify sublicense ordistribute it is void and will automatically terminate your rights under this License

However if you cease all violation of this License then your license from a particularcopyright holder is reinstated (a) provisionally unless and until the copyright holderexplicitly and finally terminates your license and (b) permanently if the copyrightholder fails to notify you of the violation by some reasonable means prior to 60 daysafter the cessation

Moreover your license from a particular copyright holder is reinstated permanently ifthe copyright holder notifies you of the violation by some reasonable means this is thefirst time you have received notice of violation of this License (for any work) from thatcopyright holder and you cure the violation prior to 30 days after your receipt of thenotice

Termination of your rights under this section does not terminate the licenses of partieswho have received copies or rights from you under this License If your rights havebeen terminated and not permanently reinstated receipt of a copy of some or all of thesame material does not give you any rights to use it

Appendix A GNU Free Documentation License 32

10 FUTURE REVISIONS OF THIS LICENSE

The Free Software Foundation may publish new revised versions of the GNU FreeDocumentation License from time to time Such new versions will be similar in spiritto the present version but may differ in detail to address new problems or concernsSee httpwwwgnuorgcopyleft

Each version of the License is given a distinguishing version number If the Documentspecifies that a particular numbered version of this License ldquoor any later versionrdquoapplies to it you have the option of following the terms and conditions either of thatspecified version or of any later version that has been published (not as a draft) bythe Free Software Foundation If the Document does not specify a version number ofthis License you may choose any version ever published (not as a draft) by the FreeSoftware Foundation If the Document specifies that a proxy can decide which futureversions of this License can be used that proxyrsquos public statement of acceptance of aversion permanently authorizes you to choose that version for the Document

11 RELICENSING

ldquoMassive Multiauthor Collaboration Siterdquo (or ldquoMMC Siterdquo) means any World WideWeb server that publishes copyrightable works and also provides prominent facilitiesfor anybody to edit those works A public wiki that anybody can edit is an example ofsuch a server A ldquoMassive Multiauthor Collaborationrdquo (or ldquoMMCrdquo) contained in thesite means any set of copyrightable works thus published on the MMC site

ldquoCC-BY-SArdquo means the Creative Commons Attribution-Share Alike 30 license pub-lished by Creative Commons Corporation a not-for-profit corporation with a principalplace of business in San Francisco California as well as future copyleft versions of thatlicense published by that same organization

ldquoIncorporaterdquo means to publish or republish a Document in whole or in part as partof another Document

An MMC is ldquoeligible for relicensingrdquo if it is licensed under this License and if all worksthat were first published under this License somewhere other than this MMC andsubsequently incorporated in whole or in part into the MMC (1) had no cover textsor invariant sections and (2) were thus incorporated prior to November 1 2008

The operator of an MMC Site may republish an MMC contained in the site underCC-BY-SA on the same site at any time before August 1 2009 provided the MMC iseligible for relicensing

Appendix A GNU Free Documentation License 33

ADDENDUM How to use this License for your documents

To use this License in a document you have written include a copy of the License in thedocument and put the following copyright and license notices just after the title page

Copyright (C) year your name

Permission is granted to copy distribute andor modify this document

under the terms of the GNU Free Documentation License Version 13

or any later version published by the Free Software Foundation

with no Invariant Sections no Front-Cover Texts and no Back-Cover

Texts A copy of the license is included in the section entitled lsquolsquoGNU

Free Documentation Licensersquorsquo

If you have Invariant Sections Front-Cover Texts and Back-Cover Texts replace theldquowith Textsrdquo line with this

with the Invariant Sections being list their titles with

the Front-Cover Texts being list and with the Back-Cover Texts

being list

If you have Invariant Sections without Cover Texts or some other combination of thethree merge those two alternatives to suit the situation

If your document contains nontrivial examples of program code we recommend releasingthese examples in parallel under your choice of free software license such as the GNUGeneral Public License to permit their use in free software

Index 34

Index

Aaccess control policy 3Author 3author specifying 10

Bbehavior prior to version 5 10behavior version 3 10behavior version 4 10binary-old-keyword-value substitution mode 9branch growth 7branch number 2branch tip 2branch default 3bug reporting 25

Ccase sensitivity file format 21checkin 3checklist for bug reports 25checkout 3checkout implicit 5ci invocation 11co invocation 12comma-v file format 1command help 7command version 7command-line option to specify a revision 7credits 1

DDate 3date formats 8date specifying 8dates file format 21default branch 3default branch setting 15deleting revisions 15description of working file 2description text specifying 8

Eempty log message 9emulation previous RCS versions 10encoding file format 20environment variables 10

Ffeatures still missing 23

file names on the command-line 7format RCSfile 20

Ggrammar file format 20

HHeader 3history 1

IId 3ident invocation 13implicit checkout circumstance 5implicit checkout locked 12implicit checkout unlocked 12instantiating a working file 2interaction model 1interactive mode 9invocation ci 11invocation co 12invocation ident 13invocation merge 14invocation rcs 14 15invocation rcsclean 16invocation rcsdiff 17invocation rcsmerge 17invocation rlog 18

Kkeyword-only substitution mode 9keyword-value substitution mode 8keyword-value-locker substitution mode 9keywords table of 3

Llayout of nodes file format 21license 1Locker 3locking a revision 15locking on implicit checkout 12locking non-strict 5locking set non-strict 15locking set strict 15locking strict 5locks in RCS file 3Log 3log message empty 9LOGNAME 11

Index 35

Mmemory limit 11merge invocation 14model interaction 1

NName 4names symbolic 3node layout file format 21non-strict locking 5number branch 2number revision 2

Oold-keyword-value substitution mode 9order of options and file names 7outdating revisions 15overview 1

Ppairing RCS and working files 7patches contributing 25problems 25projects related 1

Qquiet mode 9

Rrange of revisions specifying 7RCS file 2rcs invocation 14 15RCS version emulation 10RCS_MEM_LIMIT 11rcsclean invocation 16rcsdiff invocation 17RCSfile 4RCSfile format 20RCSINIT 10rcsmerge invocation 17removing revisions 15reporting bugs 25Revision 4revision number 2revision range specifying 7

revision specifying 7revisions tree of 3rlog invocation 18

SSource 4specifying a date 8specifying a range of revisions 7specifying a revision 7specifying a state 9specifying a suffix list 10specifying a timedate 8specifying author 10specifying description text 8specifying substitution mode 8State 4state specifying 9strict locking 5substitution mode default 8substitution mode specifying 8suffix list specifying 10symbolic names 3

TTEMP 11third-party interop file format 21Tichy Walter F 1time zone 8timedate specifying 8tip 2tip increment 7TMP 11TMPDIR 11tree of revisions 3

Uunlocking a revision 15USER 11

Vvalue-only substitution mode 9

Wwhitespace file format 21working file description 2working file instantiation 2

  • Overview
    • Credits
    • Concepts
      • Interaction model
      • Working file
      • RCS file
      • Fundamental operations
      • Keywords
        • Quick tour
          • Usage
            • Common elements
              • Revision options
              • Date option
              • Description option
              • Substitution mode option
              • Log message option
              • Misc common options
              • Environment
                • Invoking ci
                • Invoking co
                • Invoking ident
                • Invoking merge
                • Invoking rcs
                  • modern
                  • legacy
                    • Invoking rcsclean
                    • Invoking rcsdiff
                    • Invoking rcsmerge
                    • Invoking rlog
                      • Hacking
                        • File format
                          • File format grammar
                          • Additional particulars of the file format
                            • Still missing
                            • Reporting bugs
                              • GNU Free Documentation License
                              • Index
Page 21: GNU RCS · The RCS file is also known (colloquially) as the “comma-v file”, due to its name often ending in ,v (e.g., a.c,v). A revision number is a branch number followed by

Chapter 2 Usage 18

-ksubst See Section 214 [Substitution mode option] page 8

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

-zzone See Section 212 [Date option] page 8

These options have no effect and are included solely for consistency with other comamnds(see Section 217 [Environment] page 10) -T

210 Invoking rlog

rcs log [options] file

(or ldquorlogrdquo instead of ldquorcs logrdquo)

The rlog command displays information about RCS files

-L Ignore RCS files with no locks set

-R Print only the name of the RCS file

-h Print only the ldquoheaderrdquo information

-t Like -h but also include the description

-N Omit symbolic names

-b Select the default branch

-ddates See Section 212 [Date option] page 8 Select revisions based on timestampin the range dates with spec

d single revision d or earlier

d1ltd2

d2gtd1 between d1 and d2 exclusive

ltd

dgt before d

gtd

dlt after d

Instead of lsquoltrsquo or lsquogtrsquo you can use lsquolt=rsquo or lsquogt=rsquo respectively to specify inclusiveranges dates may also be a list of semicolon-separated specs

-l[who] Select revisions locked by who (comma-separated list of usernames) only or byanyone if who is omitted

-r[revs] Select revisions in revs a comma-separated list of range specs one of revrev rev rev1rev2

-sstates See Section 216 [Misc common options] page 9 states can also be a comma-separated list of states Select revisions with specified state(s)

-w[who] Select revisions checked in by who (comma-separated list of usernames) or bythe user if who is omitted

Chapter 2 Usage 19

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

-zzone See Section 212 [Date option] page 8

These options have no effect and are included solely for consistency with other comamnds(see Section 217 [Environment] page 10) lsquo-qrsquo lsquo-Trsquo

Chapter 3 Hacking 20

3 Hacking

This chapter in contrast to the previous (see Chapter 2 [Usage] page 7) is introspective Itdescribes an important aspect of RCS interop with other programs and development ideasand methods

31 File format

An RCS filersquos contents are described by the grammar below1 Overall the format is freendashformat text In most environments RCS uses the ISO 88591 encoding visible graphiccharacters are (octal) codes 041ndash176 and 240ndash377 and whitespace characters are codes010ndash015 and 040TODO Discuss or point to encoding compatibility issues

311 File format grammar

The meta syntax in this section uses the following conventions lsquo|rsquo (U+7C) separates al-ternatives lsquorsquo (U+7B) and lsquorsquo (U+7D) enclose optional phrases lsquorsquo and lsquorsquo (trailing U+2A)enclose phrases that can be repeated zero or more times lsquorsquo and lsquo+rsquo (trailing U+2B) enclosephrases that must appear at least once and can be repeated terminal symbols are in lsquorsquo(two U+22)

rcstext = admin delta desc deltatext

admin = head num

branch num

access id

symbols sym num

locks id num

strict

integrity intstring

comment string

expand string

delta = num

date num

author id

state id

branches num

next num

commitid sym

desc = desc string

deltatext = num

log string

text string

1 This section is adapted from the lsquorcsfile(5)rsquo manpage written by Walter F Tichy

Chapter 3 Hacking 21

num = digit | +

digit = 0 through 9

id = idchar | +

sym = idchar+

idchar = any visible graphic character except special

special = $ | | | | |

string = any character with doubled

word = id | num | string |

intchar = any character except

thirdp = ^L intchar

intstring = intchar thirdp

312 Additional particulars of the file format

bull In releases prior to 58 (2011-08-30) the grammar included the production

newphrase = id word

and used it in the admin delta and deltatext productions This allowed third-partyprograms to interoperate with RCS by storing opaque (to RCS) data in the file

As of 58 in the name of progress (towards more systematic file integrity support) theonly area reserved for third-party interop is in the (string) value of the integrity fieldspecifically after the first formfeed (U+0C) A further restriction (for all programs) isthat the integrity value must not contain lsquorsquo

bull Whitespace has no significance except in strings However whitespace cannot appearwithin an id num or sym and an RCS file must end with newline (U+0A) Strings areenclosed by lsquorsquo (U+40) If a string contains a lsquorsquo it must be doubled otherwise stringscan contain arbitrary binary data

bull Identifiers are case sensitive Keywords are in lower case only The sets of keywordsand identifiers can overlap

bull Dates which appear after the date keyword are of the form Ymmddhhmmss whereY is the year mm the month (01ndash12) dd the day (01ndash31) hh the hour (00ndash23) mm theminute (00ndash59) and ss the second (00ndash60) Y contains just the last two digits of theyear for years from 1900 through 1999 and all the digits of years thereafter Dates usethe Gregorian calendar times use UTC

bull The delta nodes form a tree All nodes whose numbers consist of a single pair (eg 2321 13) are on the trunk and are linked through the next field in order of decreasing

Chapter 3 Hacking 22

numbers The head field in the admin node points to the head of that sequence (iecontains the highest pair) The branch node in the admin node indicates the defaultbranch (or revision) for most RCS operations If empty the default branch is thehighest branch on the trunk

All delta nodes whose numbers consist of 2n fields (n ge 2) (eg 3111 2122) arelinked as follows All nodes whose first 2nminus1 number fields are identical are linkedthrough the next field in order of increasing numbers For each such sequence thedelta node whose number is identical to the first 2nminus2 number fields of the delta

nodes on that sequence is called the branchpoint The branches field of a node containsa list of the numbers of the first nodes of all sequences for which it is a branchpointThis list is ordered in increasing numbers See Figure 31

Chapter 3 Hacking 23

Head

|

|

v

---------

| |

| 21 |

| |

1213 1311 | | 1222 122111

--------- --------- --------- --------- -------------

^ ^ | ^ ^

| | | | |

| | v | |

| --------- |

| 13 |

--------- -----------

1211 131 1221 12211

--------- ---------

^ | ^

| | |

| v |

| --------- |

| 12 |

---------------------- ---------

121 122

|

|

v

---------

11

Figure 31 The organization of an example RCS file

32 Still missing

RCS is still missing some features The following is an unordered list of ldquoto-do musingsrdquo keptby the RCS maintainers If you would like to hack on an item See Section 33 [Reportingbugs] page 25

bull Add an option to rcsmerge so that it can use an arbitrary program to do the 3-waymerge instead of the default merge Likewise for rcsdiff and diff It should be possibleto pass arbitrary options to these programs and to the subsidiary co invocations

bull Add format options for finer control over the output of ident and rlog Eg thereshould be an easy way for rlog to output lines like lsquosrcmainc 24 wftrsquo one for

Chapter 3 Hacking 24

each locked revision rlog options should have three orthogonal types selecting filesselecting revisions and selecting rlog format

bull Add format options for finer control over the output of keyword strings Eg thereshould be some way to prepend lsquo()rsquo and there should be some way to change lsquo$rsquo tosome other character to disable further substitution These options should make theresulting files uneditable like lsquo-kvrsquo

bull Add long options eg --keyword-substitution Unfortunately RCSrsquos option syntaxis incompatible with getopt Perhaps the best way is to overload rcs eg lsquorcs diff

--keyword-substitution=old filersquo instead of lsquorcsdiff -ko filersquo

bull rlog -rMN should work even if M and N have different numbers of fields so long asM is an ancestor of N or vice versa

bull rcs should evaluate options in order this allows rcs -oS -nS

bull Be able to redo your most recent checkin with minor changes

bull co -u shouldnrsquot complain about a lsquo+wrsquo working file if contents donrsquot change

bull Add a lsquo-rsquo option to take the list of file names from standard input Perhaps the filenames should be null-terminated not newline-terminated so that those that containnewlines are handled properly

bull Permit multiple optionndashfilename pairs eg co -r14 a -r15 b

bull Add an option to break a symbolic link to an RCS file instead of breaking the hardlink that it points to

bull Add ways to specify the earliest revision the most recent revision the earliest or latestrevision on a particular branch and the parent or child of some other revision

bull If a user has multiple locks perhaps ci should fall back on the method of ci -k to figureout which revision to use

bull Add an option to rcsclean to clean directories recursively

bull Write an rcsck program that repairs corrupted RCS files much as fsck repairs corruptedfile systems For example it should remove stale lock files

bull Update the date parser to use the more modern getdatey by Bellovin Salz andBerets or the even more modern getdate by Moraes None of these getdate imple-mentations are as robust as RCSrsquos old warhorse in avoiding problems like arithmeticoverflow so theyrsquoll have to be fixed first (Perhaps we can use gnulib module getdate)

bull Break up the code into a library so that itrsquos easier to write new programs that manip-ulate RCS files and so that useless code is removed from the existing programs Forexample the rcs command contains unnecessary keyword substitution baggage andthe merge command can be greatly pruned

bull Make it easier to use your favorite text editor to edit log messages etc instead ofhaving to type them in irretrievably at the terminal

bull Let the user specify a search path for default branches eg to use L as the defaultbranch if it works and M otherwise Let the user require that at least one entry inthe search path works Let the user say that later entries in the search path are readonly ie one cannot check in changes to them This should be an option settable bylsquoRCSINITrsquo

bull Add a way for a user to see which revisions affected which lines

Chapter 3 Hacking 25

bull Have rlog -nN F print just the revision number that N translates to Eg rlog -nB

F would print the highest revision on the branch B Use this to add an option -bB torcsbranch to freeze the named branch This should interact well with default branches

bull Add a co option that prints the revision number before each line as SCCSrsquos get -m

does [I implemented this for Emacs 22 as a subroutine of vc-annotate qv mdashttn]

33 Reporting bugs

To report bugs or suggest enhancements for GNU RCS please visit its homepage (httpwwwgnuorgsoftwarercs) to find directions on how to ldquofile a bug reportrdquo online orsend electronic mail to help-rcsgnuorg (If you use the web interface you donrsquot needto also send email since that is done automatically)

For bug reports please include enough information for the maintainers to reproduce theproblem Generally speaking that means

bull The RCS version command(s) and manual section(s) involved

bull Hardware and operating system names and versions

bull The contents of any input files necessary to reproduce the bug

bull The expected behavior andor output

bull A description of the problem and samples of any erroneous output

bull Options you gave to configure other than specifying installation directories

bull Anything else that you think would be helpful

When in doubt whether something is needed or not include it Itrsquos better to include toomuch than to leave out something important

Patches are welcome if possible please make them with lsquogit format-patchrsquo and includeChangeLog entries (see Section ldquoChange Logrdquo in The GNU Emacs Manual) Please followthe existing coding style

Appendix A GNU Free Documentation License 26

Appendix A GNU Free Documentation License

Version 13 3 November 2008

Copyright ccopy 2000 2001 2002 2007 2008 Free Software Foundation Inchttpfsforg

Everyone is permitted to copy and distribute verbatim copiesof this license document but changing it is not allowed

0 PREAMBLE

The purpose of this License is to make a manual textbook or other functional anduseful document free in the sense of freedom to assure everyone the effective freedomto copy and redistribute it with or without modifying it either commercially or non-commercially Secondarily this License preserves for the author and publisher a wayto get credit for their work while not being considered responsible for modificationsmade by others

This License is a kind of ldquocopyleftrdquo which means that derivative works of the documentmust themselves be free in the same sense It complements the GNU General PublicLicense which is a copyleft license designed for free software

We have designed this License in order to use it for manuals for free software becausefree software needs free documentation a free program should come with manualsproviding the same freedoms that the software does But this License is not limited tosoftware manuals it can be used for any textual work regardless of subject matter orwhether it is published as a printed book We recommend this License principally forworks whose purpose is instruction or reference

1 APPLICABILITY AND DEFINITIONS

This License applies to any manual or other work in any medium that contains anotice placed by the copyright holder saying it can be distributed under the termsof this License Such a notice grants a world-wide royalty-free license unlimited induration to use that work under the conditions stated herein The ldquoDocumentrdquobelow refers to any such manual or work Any member of the public is a licensee andis addressed as ldquoyourdquo You accept the license if you copy modify or distribute the workin a way requiring permission under copyright law

A ldquoModified Versionrdquo of the Document means any work containing the Document ora portion of it either copied verbatim or with modifications andor translated intoanother language

A ldquoSecondary Sectionrdquo is a named appendix or a front-matter section of the Documentthat deals exclusively with the relationship of the publishers or authors of the Documentto the Documentrsquos overall subject (or to related matters) and contains nothing thatcould fall directly within that overall subject (Thus if the Document is in part atextbook of mathematics a Secondary Section may not explain any mathematics) Therelationship could be a matter of historical connection with the subject or with relatedmatters or of legal commercial philosophical ethical or political position regardingthem

The ldquoInvariant Sectionsrdquo are certain Secondary Sections whose titles are designated asbeing those of Invariant Sections in the notice that says that the Document is released

Appendix A GNU Free Documentation License 27

under this License If a section does not fit the above definition of Secondary then it isnot allowed to be designated as Invariant The Document may contain zero InvariantSections If the Document does not identify any Invariant Sections then there are none

The ldquoCover Textsrdquo are certain short passages of text that are listed as Front-CoverTexts or Back-Cover Texts in the notice that says that the Document is released underthis License A Front-Cover Text may be at most 5 words and a Back-Cover Text maybe at most 25 words

A ldquoTransparentrdquo copy of the Document means a machine-readable copy representedin a format whose specification is available to the general public that is suitable forrevising the document straightforwardly with generic text editors or (for images com-posed of pixels) generic paint programs or (for drawings) some widely available drawingeditor and that is suitable for input to text formatters or for automatic translation toa variety of formats suitable for input to text formatters A copy made in an otherwiseTransparent file format whose markup or absence of markup has been arranged tothwart or discourage subsequent modification by readers is not Transparent An imageformat is not Transparent if used for any substantial amount of text A copy that isnot ldquoTransparentrdquo is called ldquoOpaquerdquo

Examples of suitable formats for Transparent copies include plain ASCII withoutmarkup Texinfo input format LaTEX input format SGML or XML using a publiclyavailable DTD and standard-conforming simple HTML PostScript or PDF designedfor human modification Examples of transparent image formats include PNG XCFand JPG Opaque formats include proprietary formats that can be read and editedonly by proprietary word processors SGML or XML for which the DTD andor pro-cessing tools are not generally available and the machine-generated HTML PostScriptor PDF produced by some word processors for output purposes only

The ldquoTitle Pagerdquo means for a printed book the title page itself plus such followingpages as are needed to hold legibly the material this License requires to appear in thetitle page For works in formats which do not have any title page as such ldquoTitle Pagerdquomeans the text near the most prominent appearance of the workrsquos title preceding thebeginning of the body of the text

The ldquopublisherrdquo means any person or entity that distributes copies of the Documentto the public

A section ldquoEntitled XYZrdquo means a named subunit of the Document whose title eitheris precisely XYZ or contains XYZ in parentheses following text that translates XYZ inanother language (Here XYZ stands for a specific section name mentioned below suchas ldquoAcknowledgementsrdquo ldquoDedicationsrdquo ldquoEndorsementsrdquo or ldquoHistoryrdquo) To ldquoPreservethe Titlerdquo of such a section when you modify the Document means that it remains asection ldquoEntitled XYZrdquo according to this definition

The Document may include Warranty Disclaimers next to the notice which states thatthis License applies to the Document These Warranty Disclaimers are considered tobe included by reference in this License but only as regards disclaiming warrantiesany other implication that these Warranty Disclaimers may have is void and has noeffect on the meaning of this License

2 VERBATIM COPYING

Appendix A GNU Free Documentation License 28

You may copy and distribute the Document in any medium either commercially ornoncommercially provided that this License the copyright notices and the licensenotice saying this License applies to the Document are reproduced in all copies andthat you add no other conditions whatsoever to those of this License You may not usetechnical measures to obstruct or control the reading or further copying of the copiesyou make or distribute However you may accept compensation in exchange for copiesIf you distribute a large enough number of copies you must also follow the conditionsin section 3

You may also lend copies under the same conditions stated above and you may publiclydisplay copies

3 COPYING IN QUANTITY

If you publish printed copies (or copies in media that commonly have printed covers) ofthe Document numbering more than 100 and the Documentrsquos license notice requiresCover Texts you must enclose the copies in covers that carry clearly and legibly allthese Cover Texts Front-Cover Texts on the front cover and Back-Cover Texts onthe back cover Both covers must also clearly and legibly identify you as the publisherof these copies The front cover must present the full title with all words of the titleequally prominent and visible You may add other material on the covers in additionCopying with changes limited to the covers as long as they preserve the title of theDocument and satisfy these conditions can be treated as verbatim copying in otherrespects

If the required texts for either cover are too voluminous to fit legibly you should putthe first ones listed (as many as fit reasonably) on the actual cover and continue therest onto adjacent pages

If you publish or distribute Opaque copies of the Document numbering more than 100you must either include a machine-readable Transparent copy along with each Opaquecopy or state in or with each Opaque copy a computer-network location from whichthe general network-using public has access to download using public-standard networkprotocols a complete Transparent copy of the Document free of added material Ifyou use the latter option you must take reasonably prudent steps when you begindistribution of Opaque copies in quantity to ensure that this Transparent copy willremain thus accessible at the stated location until at least one year after the last timeyou distribute an Opaque copy (directly or through your agents or retailers) of thatedition to the public

It is requested but not required that you contact the authors of the Document wellbefore redistributing any large number of copies to give them a chance to provide youwith an updated version of the Document

4 MODIFICATIONS

You may copy and distribute a Modified Version of the Document under the conditionsof sections 2 and 3 above provided that you release the Modified Version under preciselythis License with the Modified Version filling the role of the Document thus licensingdistribution and modification of the Modified Version to whoever possesses a copy ofit In addition you must do these things in the Modified Version

A Use in the Title Page (and on the covers if any) a title distinct from that of theDocument and from those of previous versions (which should if there were any

Appendix A GNU Free Documentation License 29

be listed in the History section of the Document) You may use the same title asa previous version if the original publisher of that version gives permission

B List on the Title Page as authors one or more persons or entities responsible forauthorship of the modifications in the Modified Version together with at least fiveof the principal authors of the Document (all of its principal authors if it has fewerthan five) unless they release you from this requirement

C State on the Title page the name of the publisher of the Modified Version as thepublisher

D Preserve all the copyright notices of the Document

E Add an appropriate copyright notice for your modifications adjacent to the othercopyright notices

F Include immediately after the copyright notices a license notice giving the publicpermission to use the Modified Version under the terms of this License in the formshown in the Addendum below

G Preserve in that license notice the full lists of Invariant Sections and required CoverTexts given in the Documentrsquos license notice

H Include an unaltered copy of this License

I Preserve the section Entitled ldquoHistoryrdquo Preserve its Title and add to it an itemstating at least the title year new authors and publisher of the Modified Versionas given on the Title Page If there is no section Entitled ldquoHistoryrdquo in the Docu-ment create one stating the title year authors and publisher of the Documentas given on its Title Page then add an item describing the Modified Version asstated in the previous sentence

J Preserve the network location if any given in the Document for public access toa Transparent copy of the Document and likewise the network locations given inthe Document for previous versions it was based on These may be placed in theldquoHistoryrdquo section You may omit a network location for a work that was publishedat least four years before the Document itself or if the original publisher of theversion it refers to gives permission

K For any section Entitled ldquoAcknowledgementsrdquo or ldquoDedicationsrdquo Preserve the Titleof the section and preserve in the section all the substance and tone of each of thecontributor acknowledgements andor dedications given therein

L Preserve all the Invariant Sections of the Document unaltered in their text andin their titles Section numbers or the equivalent are not considered part of thesection titles

M Delete any section Entitled ldquoEndorsementsrdquo Such a section may not be includedin the Modified Version

N Do not retitle any existing section to be Entitled ldquoEndorsementsrdquo or to conflict intitle with any Invariant Section

O Preserve any Warranty Disclaimers

If the Modified Version includes new front-matter sections or appendices that qualifyas Secondary Sections and contain no material copied from the Document you may atyour option designate some or all of these sections as invariant To do this add their

Appendix A GNU Free Documentation License 30

titles to the list of Invariant Sections in the Modified Versionrsquos license notice Thesetitles must be distinct from any other section titles

You may add a section Entitled ldquoEndorsementsrdquo provided it contains nothing butendorsements of your Modified Version by various partiesmdashfor example statements ofpeer review or that the text has been approved by an organization as the authoritativedefinition of a standard

You may add a passage of up to five words as a Front-Cover Text and a passage of upto 25 words as a Back-Cover Text to the end of the list of Cover Texts in the ModifiedVersion Only one passage of Front-Cover Text and one of Back-Cover Text may beadded by (or through arrangements made by) any one entity If the Document alreadyincludes a cover text for the same cover previously added by you or by arrangementmade by the same entity you are acting on behalf of you may not add another butyou may replace the old one on explicit permission from the previous publisher thatadded the old one

The author(s) and publisher(s) of the Document do not by this License give permissionto use their names for publicity for or to assert or imply endorsement of any ModifiedVersion

5 COMBINING DOCUMENTS

You may combine the Document with other documents released under this Licenseunder the terms defined in section 4 above for modified versions provided that youinclude in the combination all of the Invariant Sections of all of the original documentsunmodified and list them all as Invariant Sections of your combined work in its licensenotice and that you preserve all their Warranty Disclaimers

The combined work need only contain one copy of this License and multiple identicalInvariant Sections may be replaced with a single copy If there are multiple InvariantSections with the same name but different contents make the title of each such sectionunique by adding at the end of it in parentheses the name of the original author orpublisher of that section if known or else a unique number Make the same adjustmentto the section titles in the list of Invariant Sections in the license notice of the combinedwork

In the combination you must combine any sections Entitled ldquoHistoryrdquo in the vari-ous original documents forming one section Entitled ldquoHistoryrdquo likewise combine anysections Entitled ldquoAcknowledgementsrdquo and any sections Entitled ldquoDedicationsrdquo Youmust delete all sections Entitled ldquoEndorsementsrdquo

6 COLLECTIONS OF DOCUMENTS

You may make a collection consisting of the Document and other documents releasedunder this License and replace the individual copies of this License in the variousdocuments with a single copy that is included in the collection provided that youfollow the rules of this License for verbatim copying of each of the documents in allother respects

You may extract a single document from such a collection and distribute it individu-ally under this License provided you insert a copy of this License into the extracteddocument and follow this License in all other respects regarding verbatim copying ofthat document

Appendix A GNU Free Documentation License 31

7 AGGREGATION WITH INDEPENDENT WORKS

A compilation of the Document or its derivatives with other separate and independentdocuments or works in or on a volume of a storage or distribution medium is calledan ldquoaggregaterdquo if the copyright resulting from the compilation is not used to limit thelegal rights of the compilationrsquos users beyond what the individual works permit Whenthe Document is included in an aggregate this License does not apply to the otherworks in the aggregate which are not themselves derivative works of the Document

If the Cover Text requirement of section 3 is applicable to these copies of the Documentthen if the Document is less than one half of the entire aggregate the Documentrsquos CoverTexts may be placed on covers that bracket the Document within the aggregate or theelectronic equivalent of covers if the Document is in electronic form Otherwise theymust appear on printed covers that bracket the whole aggregate

8 TRANSLATION

Translation is considered a kind of modification so you may distribute translationsof the Document under the terms of section 4 Replacing Invariant Sections withtranslations requires special permission from their copyright holders but you mayinclude translations of some or all Invariant Sections in addition to the original versionsof these Invariant Sections You may include a translation of this License and all thelicense notices in the Document and any Warranty Disclaimers provided that youalso include the original English version of this License and the original versions ofthose notices and disclaimers In case of a disagreement between the translation andthe original version of this License or a notice or disclaimer the original version willprevail

If a section in the Document is Entitled ldquoAcknowledgementsrdquo ldquoDedicationsrdquo or ldquoHis-toryrdquo the requirement (section 4) to Preserve its Title (section 1) will typically requirechanging the actual title

9 TERMINATION

You may not copy modify sublicense or distribute the Document except as expresslyprovided under this License Any attempt otherwise to copy modify sublicense ordistribute it is void and will automatically terminate your rights under this License

However if you cease all violation of this License then your license from a particularcopyright holder is reinstated (a) provisionally unless and until the copyright holderexplicitly and finally terminates your license and (b) permanently if the copyrightholder fails to notify you of the violation by some reasonable means prior to 60 daysafter the cessation

Moreover your license from a particular copyright holder is reinstated permanently ifthe copyright holder notifies you of the violation by some reasonable means this is thefirst time you have received notice of violation of this License (for any work) from thatcopyright holder and you cure the violation prior to 30 days after your receipt of thenotice

Termination of your rights under this section does not terminate the licenses of partieswho have received copies or rights from you under this License If your rights havebeen terminated and not permanently reinstated receipt of a copy of some or all of thesame material does not give you any rights to use it

Appendix A GNU Free Documentation License 32

10 FUTURE REVISIONS OF THIS LICENSE

The Free Software Foundation may publish new revised versions of the GNU FreeDocumentation License from time to time Such new versions will be similar in spiritto the present version but may differ in detail to address new problems or concernsSee httpwwwgnuorgcopyleft

Each version of the License is given a distinguishing version number If the Documentspecifies that a particular numbered version of this License ldquoor any later versionrdquoapplies to it you have the option of following the terms and conditions either of thatspecified version or of any later version that has been published (not as a draft) bythe Free Software Foundation If the Document does not specify a version number ofthis License you may choose any version ever published (not as a draft) by the FreeSoftware Foundation If the Document specifies that a proxy can decide which futureversions of this License can be used that proxyrsquos public statement of acceptance of aversion permanently authorizes you to choose that version for the Document

11 RELICENSING

ldquoMassive Multiauthor Collaboration Siterdquo (or ldquoMMC Siterdquo) means any World WideWeb server that publishes copyrightable works and also provides prominent facilitiesfor anybody to edit those works A public wiki that anybody can edit is an example ofsuch a server A ldquoMassive Multiauthor Collaborationrdquo (or ldquoMMCrdquo) contained in thesite means any set of copyrightable works thus published on the MMC site

ldquoCC-BY-SArdquo means the Creative Commons Attribution-Share Alike 30 license pub-lished by Creative Commons Corporation a not-for-profit corporation with a principalplace of business in San Francisco California as well as future copyleft versions of thatlicense published by that same organization

ldquoIncorporaterdquo means to publish or republish a Document in whole or in part as partof another Document

An MMC is ldquoeligible for relicensingrdquo if it is licensed under this License and if all worksthat were first published under this License somewhere other than this MMC andsubsequently incorporated in whole or in part into the MMC (1) had no cover textsor invariant sections and (2) were thus incorporated prior to November 1 2008

The operator of an MMC Site may republish an MMC contained in the site underCC-BY-SA on the same site at any time before August 1 2009 provided the MMC iseligible for relicensing

Appendix A GNU Free Documentation License 33

ADDENDUM How to use this License for your documents

To use this License in a document you have written include a copy of the License in thedocument and put the following copyright and license notices just after the title page

Copyright (C) year your name

Permission is granted to copy distribute andor modify this document

under the terms of the GNU Free Documentation License Version 13

or any later version published by the Free Software Foundation

with no Invariant Sections no Front-Cover Texts and no Back-Cover

Texts A copy of the license is included in the section entitled lsquolsquoGNU

Free Documentation Licensersquorsquo

If you have Invariant Sections Front-Cover Texts and Back-Cover Texts replace theldquowith Textsrdquo line with this

with the Invariant Sections being list their titles with

the Front-Cover Texts being list and with the Back-Cover Texts

being list

If you have Invariant Sections without Cover Texts or some other combination of thethree merge those two alternatives to suit the situation

If your document contains nontrivial examples of program code we recommend releasingthese examples in parallel under your choice of free software license such as the GNUGeneral Public License to permit their use in free software

Index 34

Index

Aaccess control policy 3Author 3author specifying 10

Bbehavior prior to version 5 10behavior version 3 10behavior version 4 10binary-old-keyword-value substitution mode 9branch growth 7branch number 2branch tip 2branch default 3bug reporting 25

Ccase sensitivity file format 21checkin 3checklist for bug reports 25checkout 3checkout implicit 5ci invocation 11co invocation 12comma-v file format 1command help 7command version 7command-line option to specify a revision 7credits 1

DDate 3date formats 8date specifying 8dates file format 21default branch 3default branch setting 15deleting revisions 15description of working file 2description text specifying 8

Eempty log message 9emulation previous RCS versions 10encoding file format 20environment variables 10

Ffeatures still missing 23

file names on the command-line 7format RCSfile 20

Ggrammar file format 20

HHeader 3history 1

IId 3ident invocation 13implicit checkout circumstance 5implicit checkout locked 12implicit checkout unlocked 12instantiating a working file 2interaction model 1interactive mode 9invocation ci 11invocation co 12invocation ident 13invocation merge 14invocation rcs 14 15invocation rcsclean 16invocation rcsdiff 17invocation rcsmerge 17invocation rlog 18

Kkeyword-only substitution mode 9keyword-value substitution mode 8keyword-value-locker substitution mode 9keywords table of 3

Llayout of nodes file format 21license 1Locker 3locking a revision 15locking on implicit checkout 12locking non-strict 5locking set non-strict 15locking set strict 15locking strict 5locks in RCS file 3Log 3log message empty 9LOGNAME 11

Index 35

Mmemory limit 11merge invocation 14model interaction 1

NName 4names symbolic 3node layout file format 21non-strict locking 5number branch 2number revision 2

Oold-keyword-value substitution mode 9order of options and file names 7outdating revisions 15overview 1

Ppairing RCS and working files 7patches contributing 25problems 25projects related 1

Qquiet mode 9

Rrange of revisions specifying 7RCS file 2rcs invocation 14 15RCS version emulation 10RCS_MEM_LIMIT 11rcsclean invocation 16rcsdiff invocation 17RCSfile 4RCSfile format 20RCSINIT 10rcsmerge invocation 17removing revisions 15reporting bugs 25Revision 4revision number 2revision range specifying 7

revision specifying 7revisions tree of 3rlog invocation 18

SSource 4specifying a date 8specifying a range of revisions 7specifying a revision 7specifying a state 9specifying a suffix list 10specifying a timedate 8specifying author 10specifying description text 8specifying substitution mode 8State 4state specifying 9strict locking 5substitution mode default 8substitution mode specifying 8suffix list specifying 10symbolic names 3

TTEMP 11third-party interop file format 21Tichy Walter F 1time zone 8timedate specifying 8tip 2tip increment 7TMP 11TMPDIR 11tree of revisions 3

Uunlocking a revision 15USER 11

Vvalue-only substitution mode 9

Wwhitespace file format 21working file description 2working file instantiation 2

  • Overview
    • Credits
    • Concepts
      • Interaction model
      • Working file
      • RCS file
      • Fundamental operations
      • Keywords
        • Quick tour
          • Usage
            • Common elements
              • Revision options
              • Date option
              • Description option
              • Substitution mode option
              • Log message option
              • Misc common options
              • Environment
                • Invoking ci
                • Invoking co
                • Invoking ident
                • Invoking merge
                • Invoking rcs
                  • modern
                  • legacy
                    • Invoking rcsclean
                    • Invoking rcsdiff
                    • Invoking rcsmerge
                    • Invoking rlog
                      • Hacking
                        • File format
                          • File format grammar
                          • Additional particulars of the file format
                            • Still missing
                            • Reporting bugs
                              • GNU Free Documentation License
                              • Index
Page 22: GNU RCS · The RCS file is also known (colloquially) as the “comma-v file”, due to its name often ending in ,v (e.g., a.c,v). A revision number is a branch number followed by

Chapter 2 Usage 19

-V

-Vn

-xsuff See Section 216 [Misc common options] page 9

-zzone See Section 212 [Date option] page 8

These options have no effect and are included solely for consistency with other comamnds(see Section 217 [Environment] page 10) lsquo-qrsquo lsquo-Trsquo

Chapter 3 Hacking 20

3 Hacking

This chapter in contrast to the previous (see Chapter 2 [Usage] page 7) is introspective Itdescribes an important aspect of RCS interop with other programs and development ideasand methods

31 File format

An RCS filersquos contents are described by the grammar below1 Overall the format is freendashformat text In most environments RCS uses the ISO 88591 encoding visible graphiccharacters are (octal) codes 041ndash176 and 240ndash377 and whitespace characters are codes010ndash015 and 040TODO Discuss or point to encoding compatibility issues

311 File format grammar

The meta syntax in this section uses the following conventions lsquo|rsquo (U+7C) separates al-ternatives lsquorsquo (U+7B) and lsquorsquo (U+7D) enclose optional phrases lsquorsquo and lsquorsquo (trailing U+2A)enclose phrases that can be repeated zero or more times lsquorsquo and lsquo+rsquo (trailing U+2B) enclosephrases that must appear at least once and can be repeated terminal symbols are in lsquorsquo(two U+22)

rcstext = admin delta desc deltatext

admin = head num

branch num

access id

symbols sym num

locks id num

strict

integrity intstring

comment string

expand string

delta = num

date num

author id

state id

branches num

next num

commitid sym

desc = desc string

deltatext = num

log string

text string

1 This section is adapted from the lsquorcsfile(5)rsquo manpage written by Walter F Tichy

Chapter 3 Hacking 21

num = digit | +

digit = 0 through 9

id = idchar | +

sym = idchar+

idchar = any visible graphic character except special

special = $ | | | | |

string = any character with doubled

word = id | num | string |

intchar = any character except

thirdp = ^L intchar

intstring = intchar thirdp

312 Additional particulars of the file format

bull In releases prior to 58 (2011-08-30) the grammar included the production

newphrase = id word

and used it in the admin delta and deltatext productions This allowed third-partyprograms to interoperate with RCS by storing opaque (to RCS) data in the file

As of 58 in the name of progress (towards more systematic file integrity support) theonly area reserved for third-party interop is in the (string) value of the integrity fieldspecifically after the first formfeed (U+0C) A further restriction (for all programs) isthat the integrity value must not contain lsquorsquo

bull Whitespace has no significance except in strings However whitespace cannot appearwithin an id num or sym and an RCS file must end with newline (U+0A) Strings areenclosed by lsquorsquo (U+40) If a string contains a lsquorsquo it must be doubled otherwise stringscan contain arbitrary binary data

bull Identifiers are case sensitive Keywords are in lower case only The sets of keywordsand identifiers can overlap

bull Dates which appear after the date keyword are of the form Ymmddhhmmss whereY is the year mm the month (01ndash12) dd the day (01ndash31) hh the hour (00ndash23) mm theminute (00ndash59) and ss the second (00ndash60) Y contains just the last two digits of theyear for years from 1900 through 1999 and all the digits of years thereafter Dates usethe Gregorian calendar times use UTC

bull The delta nodes form a tree All nodes whose numbers consist of a single pair (eg 2321 13) are on the trunk and are linked through the next field in order of decreasing

Chapter 3 Hacking 22

numbers The head field in the admin node points to the head of that sequence (iecontains the highest pair) The branch node in the admin node indicates the defaultbranch (or revision) for most RCS operations If empty the default branch is thehighest branch on the trunk

All delta nodes whose numbers consist of 2n fields (n ge 2) (eg 3111 2122) arelinked as follows All nodes whose first 2nminus1 number fields are identical are linkedthrough the next field in order of increasing numbers For each such sequence thedelta node whose number is identical to the first 2nminus2 number fields of the delta

nodes on that sequence is called the branchpoint The branches field of a node containsa list of the numbers of the first nodes of all sequences for which it is a branchpointThis list is ordered in increasing numbers See Figure 31

Chapter 3 Hacking 23

Head

|

|

v

---------

| |

| 21 |

| |

1213 1311 | | 1222 122111

--------- --------- --------- --------- -------------

^ ^ | ^ ^

| | | | |

| | v | |

| --------- |

| 13 |

--------- -----------

1211 131 1221 12211

--------- ---------

^ | ^

| | |

| v |

| --------- |

| 12 |

---------------------- ---------

121 122

|

|

v

---------

11

Figure 31 The organization of an example RCS file

32 Still missing

RCS is still missing some features The following is an unordered list of ldquoto-do musingsrdquo keptby the RCS maintainers If you would like to hack on an item See Section 33 [Reportingbugs] page 25

bull Add an option to rcsmerge so that it can use an arbitrary program to do the 3-waymerge instead of the default merge Likewise for rcsdiff and diff It should be possibleto pass arbitrary options to these programs and to the subsidiary co invocations

bull Add format options for finer control over the output of ident and rlog Eg thereshould be an easy way for rlog to output lines like lsquosrcmainc 24 wftrsquo one for

Chapter 3 Hacking 24

each locked revision rlog options should have three orthogonal types selecting filesselecting revisions and selecting rlog format

bull Add format options for finer control over the output of keyword strings Eg thereshould be some way to prepend lsquo()rsquo and there should be some way to change lsquo$rsquo tosome other character to disable further substitution These options should make theresulting files uneditable like lsquo-kvrsquo

bull Add long options eg --keyword-substitution Unfortunately RCSrsquos option syntaxis incompatible with getopt Perhaps the best way is to overload rcs eg lsquorcs diff

--keyword-substitution=old filersquo instead of lsquorcsdiff -ko filersquo

bull rlog -rMN should work even if M and N have different numbers of fields so long asM is an ancestor of N or vice versa

bull rcs should evaluate options in order this allows rcs -oS -nS

bull Be able to redo your most recent checkin with minor changes

bull co -u shouldnrsquot complain about a lsquo+wrsquo working file if contents donrsquot change

bull Add a lsquo-rsquo option to take the list of file names from standard input Perhaps the filenames should be null-terminated not newline-terminated so that those that containnewlines are handled properly

bull Permit multiple optionndashfilename pairs eg co -r14 a -r15 b

bull Add an option to break a symbolic link to an RCS file instead of breaking the hardlink that it points to

bull Add ways to specify the earliest revision the most recent revision the earliest or latestrevision on a particular branch and the parent or child of some other revision

bull If a user has multiple locks perhaps ci should fall back on the method of ci -k to figureout which revision to use

bull Add an option to rcsclean to clean directories recursively

bull Write an rcsck program that repairs corrupted RCS files much as fsck repairs corruptedfile systems For example it should remove stale lock files

bull Update the date parser to use the more modern getdatey by Bellovin Salz andBerets or the even more modern getdate by Moraes None of these getdate imple-mentations are as robust as RCSrsquos old warhorse in avoiding problems like arithmeticoverflow so theyrsquoll have to be fixed first (Perhaps we can use gnulib module getdate)

bull Break up the code into a library so that itrsquos easier to write new programs that manip-ulate RCS files and so that useless code is removed from the existing programs Forexample the rcs command contains unnecessary keyword substitution baggage andthe merge command can be greatly pruned

bull Make it easier to use your favorite text editor to edit log messages etc instead ofhaving to type them in irretrievably at the terminal

bull Let the user specify a search path for default branches eg to use L as the defaultbranch if it works and M otherwise Let the user require that at least one entry inthe search path works Let the user say that later entries in the search path are readonly ie one cannot check in changes to them This should be an option settable bylsquoRCSINITrsquo

bull Add a way for a user to see which revisions affected which lines

Chapter 3 Hacking 25

bull Have rlog -nN F print just the revision number that N translates to Eg rlog -nB

F would print the highest revision on the branch B Use this to add an option -bB torcsbranch to freeze the named branch This should interact well with default branches

bull Add a co option that prints the revision number before each line as SCCSrsquos get -m

does [I implemented this for Emacs 22 as a subroutine of vc-annotate qv mdashttn]

33 Reporting bugs

To report bugs or suggest enhancements for GNU RCS please visit its homepage (httpwwwgnuorgsoftwarercs) to find directions on how to ldquofile a bug reportrdquo online orsend electronic mail to help-rcsgnuorg (If you use the web interface you donrsquot needto also send email since that is done automatically)

For bug reports please include enough information for the maintainers to reproduce theproblem Generally speaking that means

bull The RCS version command(s) and manual section(s) involved

bull Hardware and operating system names and versions

bull The contents of any input files necessary to reproduce the bug

bull The expected behavior andor output

bull A description of the problem and samples of any erroneous output

bull Options you gave to configure other than specifying installation directories

bull Anything else that you think would be helpful

When in doubt whether something is needed or not include it Itrsquos better to include toomuch than to leave out something important

Patches are welcome if possible please make them with lsquogit format-patchrsquo and includeChangeLog entries (see Section ldquoChange Logrdquo in The GNU Emacs Manual) Please followthe existing coding style

Appendix A GNU Free Documentation License 26

Appendix A GNU Free Documentation License

Version 13 3 November 2008

Copyright ccopy 2000 2001 2002 2007 2008 Free Software Foundation Inchttpfsforg

Everyone is permitted to copy and distribute verbatim copiesof this license document but changing it is not allowed

0 PREAMBLE

The purpose of this License is to make a manual textbook or other functional anduseful document free in the sense of freedom to assure everyone the effective freedomto copy and redistribute it with or without modifying it either commercially or non-commercially Secondarily this License preserves for the author and publisher a wayto get credit for their work while not being considered responsible for modificationsmade by others

This License is a kind of ldquocopyleftrdquo which means that derivative works of the documentmust themselves be free in the same sense It complements the GNU General PublicLicense which is a copyleft license designed for free software

We have designed this License in order to use it for manuals for free software becausefree software needs free documentation a free program should come with manualsproviding the same freedoms that the software does But this License is not limited tosoftware manuals it can be used for any textual work regardless of subject matter orwhether it is published as a printed book We recommend this License principally forworks whose purpose is instruction or reference

1 APPLICABILITY AND DEFINITIONS

This License applies to any manual or other work in any medium that contains anotice placed by the copyright holder saying it can be distributed under the termsof this License Such a notice grants a world-wide royalty-free license unlimited induration to use that work under the conditions stated herein The ldquoDocumentrdquobelow refers to any such manual or work Any member of the public is a licensee andis addressed as ldquoyourdquo You accept the license if you copy modify or distribute the workin a way requiring permission under copyright law

A ldquoModified Versionrdquo of the Document means any work containing the Document ora portion of it either copied verbatim or with modifications andor translated intoanother language

A ldquoSecondary Sectionrdquo is a named appendix or a front-matter section of the Documentthat deals exclusively with the relationship of the publishers or authors of the Documentto the Documentrsquos overall subject (or to related matters) and contains nothing thatcould fall directly within that overall subject (Thus if the Document is in part atextbook of mathematics a Secondary Section may not explain any mathematics) Therelationship could be a matter of historical connection with the subject or with relatedmatters or of legal commercial philosophical ethical or political position regardingthem

The ldquoInvariant Sectionsrdquo are certain Secondary Sections whose titles are designated asbeing those of Invariant Sections in the notice that says that the Document is released

Appendix A GNU Free Documentation License 27

under this License If a section does not fit the above definition of Secondary then it isnot allowed to be designated as Invariant The Document may contain zero InvariantSections If the Document does not identify any Invariant Sections then there are none

The ldquoCover Textsrdquo are certain short passages of text that are listed as Front-CoverTexts or Back-Cover Texts in the notice that says that the Document is released underthis License A Front-Cover Text may be at most 5 words and a Back-Cover Text maybe at most 25 words

A ldquoTransparentrdquo copy of the Document means a machine-readable copy representedin a format whose specification is available to the general public that is suitable forrevising the document straightforwardly with generic text editors or (for images com-posed of pixels) generic paint programs or (for drawings) some widely available drawingeditor and that is suitable for input to text formatters or for automatic translation toa variety of formats suitable for input to text formatters A copy made in an otherwiseTransparent file format whose markup or absence of markup has been arranged tothwart or discourage subsequent modification by readers is not Transparent An imageformat is not Transparent if used for any substantial amount of text A copy that isnot ldquoTransparentrdquo is called ldquoOpaquerdquo

Examples of suitable formats for Transparent copies include plain ASCII withoutmarkup Texinfo input format LaTEX input format SGML or XML using a publiclyavailable DTD and standard-conforming simple HTML PostScript or PDF designedfor human modification Examples of transparent image formats include PNG XCFand JPG Opaque formats include proprietary formats that can be read and editedonly by proprietary word processors SGML or XML for which the DTD andor pro-cessing tools are not generally available and the machine-generated HTML PostScriptor PDF produced by some word processors for output purposes only

The ldquoTitle Pagerdquo means for a printed book the title page itself plus such followingpages as are needed to hold legibly the material this License requires to appear in thetitle page For works in formats which do not have any title page as such ldquoTitle Pagerdquomeans the text near the most prominent appearance of the workrsquos title preceding thebeginning of the body of the text

The ldquopublisherrdquo means any person or entity that distributes copies of the Documentto the public

A section ldquoEntitled XYZrdquo means a named subunit of the Document whose title eitheris precisely XYZ or contains XYZ in parentheses following text that translates XYZ inanother language (Here XYZ stands for a specific section name mentioned below suchas ldquoAcknowledgementsrdquo ldquoDedicationsrdquo ldquoEndorsementsrdquo or ldquoHistoryrdquo) To ldquoPreservethe Titlerdquo of such a section when you modify the Document means that it remains asection ldquoEntitled XYZrdquo according to this definition

The Document may include Warranty Disclaimers next to the notice which states thatthis License applies to the Document These Warranty Disclaimers are considered tobe included by reference in this License but only as regards disclaiming warrantiesany other implication that these Warranty Disclaimers may have is void and has noeffect on the meaning of this License

2 VERBATIM COPYING

Appendix A GNU Free Documentation License 28

You may copy and distribute the Document in any medium either commercially ornoncommercially provided that this License the copyright notices and the licensenotice saying this License applies to the Document are reproduced in all copies andthat you add no other conditions whatsoever to those of this License You may not usetechnical measures to obstruct or control the reading or further copying of the copiesyou make or distribute However you may accept compensation in exchange for copiesIf you distribute a large enough number of copies you must also follow the conditionsin section 3

You may also lend copies under the same conditions stated above and you may publiclydisplay copies

3 COPYING IN QUANTITY

If you publish printed copies (or copies in media that commonly have printed covers) ofthe Document numbering more than 100 and the Documentrsquos license notice requiresCover Texts you must enclose the copies in covers that carry clearly and legibly allthese Cover Texts Front-Cover Texts on the front cover and Back-Cover Texts onthe back cover Both covers must also clearly and legibly identify you as the publisherof these copies The front cover must present the full title with all words of the titleequally prominent and visible You may add other material on the covers in additionCopying with changes limited to the covers as long as they preserve the title of theDocument and satisfy these conditions can be treated as verbatim copying in otherrespects

If the required texts for either cover are too voluminous to fit legibly you should putthe first ones listed (as many as fit reasonably) on the actual cover and continue therest onto adjacent pages

If you publish or distribute Opaque copies of the Document numbering more than 100you must either include a machine-readable Transparent copy along with each Opaquecopy or state in or with each Opaque copy a computer-network location from whichthe general network-using public has access to download using public-standard networkprotocols a complete Transparent copy of the Document free of added material Ifyou use the latter option you must take reasonably prudent steps when you begindistribution of Opaque copies in quantity to ensure that this Transparent copy willremain thus accessible at the stated location until at least one year after the last timeyou distribute an Opaque copy (directly or through your agents or retailers) of thatedition to the public

It is requested but not required that you contact the authors of the Document wellbefore redistributing any large number of copies to give them a chance to provide youwith an updated version of the Document

4 MODIFICATIONS

You may copy and distribute a Modified Version of the Document under the conditionsof sections 2 and 3 above provided that you release the Modified Version under preciselythis License with the Modified Version filling the role of the Document thus licensingdistribution and modification of the Modified Version to whoever possesses a copy ofit In addition you must do these things in the Modified Version

A Use in the Title Page (and on the covers if any) a title distinct from that of theDocument and from those of previous versions (which should if there were any

Appendix A GNU Free Documentation License 29

be listed in the History section of the Document) You may use the same title asa previous version if the original publisher of that version gives permission

B List on the Title Page as authors one or more persons or entities responsible forauthorship of the modifications in the Modified Version together with at least fiveof the principal authors of the Document (all of its principal authors if it has fewerthan five) unless they release you from this requirement

C State on the Title page the name of the publisher of the Modified Version as thepublisher

D Preserve all the copyright notices of the Document

E Add an appropriate copyright notice for your modifications adjacent to the othercopyright notices

F Include immediately after the copyright notices a license notice giving the publicpermission to use the Modified Version under the terms of this License in the formshown in the Addendum below

G Preserve in that license notice the full lists of Invariant Sections and required CoverTexts given in the Documentrsquos license notice

H Include an unaltered copy of this License

I Preserve the section Entitled ldquoHistoryrdquo Preserve its Title and add to it an itemstating at least the title year new authors and publisher of the Modified Versionas given on the Title Page If there is no section Entitled ldquoHistoryrdquo in the Docu-ment create one stating the title year authors and publisher of the Documentas given on its Title Page then add an item describing the Modified Version asstated in the previous sentence

J Preserve the network location if any given in the Document for public access toa Transparent copy of the Document and likewise the network locations given inthe Document for previous versions it was based on These may be placed in theldquoHistoryrdquo section You may omit a network location for a work that was publishedat least four years before the Document itself or if the original publisher of theversion it refers to gives permission

K For any section Entitled ldquoAcknowledgementsrdquo or ldquoDedicationsrdquo Preserve the Titleof the section and preserve in the section all the substance and tone of each of thecontributor acknowledgements andor dedications given therein

L Preserve all the Invariant Sections of the Document unaltered in their text andin their titles Section numbers or the equivalent are not considered part of thesection titles

M Delete any section Entitled ldquoEndorsementsrdquo Such a section may not be includedin the Modified Version

N Do not retitle any existing section to be Entitled ldquoEndorsementsrdquo or to conflict intitle with any Invariant Section

O Preserve any Warranty Disclaimers

If the Modified Version includes new front-matter sections or appendices that qualifyas Secondary Sections and contain no material copied from the Document you may atyour option designate some or all of these sections as invariant To do this add their

Appendix A GNU Free Documentation License 30

titles to the list of Invariant Sections in the Modified Versionrsquos license notice Thesetitles must be distinct from any other section titles

You may add a section Entitled ldquoEndorsementsrdquo provided it contains nothing butendorsements of your Modified Version by various partiesmdashfor example statements ofpeer review or that the text has been approved by an organization as the authoritativedefinition of a standard

You may add a passage of up to five words as a Front-Cover Text and a passage of upto 25 words as a Back-Cover Text to the end of the list of Cover Texts in the ModifiedVersion Only one passage of Front-Cover Text and one of Back-Cover Text may beadded by (or through arrangements made by) any one entity If the Document alreadyincludes a cover text for the same cover previously added by you or by arrangementmade by the same entity you are acting on behalf of you may not add another butyou may replace the old one on explicit permission from the previous publisher thatadded the old one

The author(s) and publisher(s) of the Document do not by this License give permissionto use their names for publicity for or to assert or imply endorsement of any ModifiedVersion

5 COMBINING DOCUMENTS

You may combine the Document with other documents released under this Licenseunder the terms defined in section 4 above for modified versions provided that youinclude in the combination all of the Invariant Sections of all of the original documentsunmodified and list them all as Invariant Sections of your combined work in its licensenotice and that you preserve all their Warranty Disclaimers

The combined work need only contain one copy of this License and multiple identicalInvariant Sections may be replaced with a single copy If there are multiple InvariantSections with the same name but different contents make the title of each such sectionunique by adding at the end of it in parentheses the name of the original author orpublisher of that section if known or else a unique number Make the same adjustmentto the section titles in the list of Invariant Sections in the license notice of the combinedwork

In the combination you must combine any sections Entitled ldquoHistoryrdquo in the vari-ous original documents forming one section Entitled ldquoHistoryrdquo likewise combine anysections Entitled ldquoAcknowledgementsrdquo and any sections Entitled ldquoDedicationsrdquo Youmust delete all sections Entitled ldquoEndorsementsrdquo

6 COLLECTIONS OF DOCUMENTS

You may make a collection consisting of the Document and other documents releasedunder this License and replace the individual copies of this License in the variousdocuments with a single copy that is included in the collection provided that youfollow the rules of this License for verbatim copying of each of the documents in allother respects

You may extract a single document from such a collection and distribute it individu-ally under this License provided you insert a copy of this License into the extracteddocument and follow this License in all other respects regarding verbatim copying ofthat document

Appendix A GNU Free Documentation License 31

7 AGGREGATION WITH INDEPENDENT WORKS

A compilation of the Document or its derivatives with other separate and independentdocuments or works in or on a volume of a storage or distribution medium is calledan ldquoaggregaterdquo if the copyright resulting from the compilation is not used to limit thelegal rights of the compilationrsquos users beyond what the individual works permit Whenthe Document is included in an aggregate this License does not apply to the otherworks in the aggregate which are not themselves derivative works of the Document

If the Cover Text requirement of section 3 is applicable to these copies of the Documentthen if the Document is less than one half of the entire aggregate the Documentrsquos CoverTexts may be placed on covers that bracket the Document within the aggregate or theelectronic equivalent of covers if the Document is in electronic form Otherwise theymust appear on printed covers that bracket the whole aggregate

8 TRANSLATION

Translation is considered a kind of modification so you may distribute translationsof the Document under the terms of section 4 Replacing Invariant Sections withtranslations requires special permission from their copyright holders but you mayinclude translations of some or all Invariant Sections in addition to the original versionsof these Invariant Sections You may include a translation of this License and all thelicense notices in the Document and any Warranty Disclaimers provided that youalso include the original English version of this License and the original versions ofthose notices and disclaimers In case of a disagreement between the translation andthe original version of this License or a notice or disclaimer the original version willprevail

If a section in the Document is Entitled ldquoAcknowledgementsrdquo ldquoDedicationsrdquo or ldquoHis-toryrdquo the requirement (section 4) to Preserve its Title (section 1) will typically requirechanging the actual title

9 TERMINATION

You may not copy modify sublicense or distribute the Document except as expresslyprovided under this License Any attempt otherwise to copy modify sublicense ordistribute it is void and will automatically terminate your rights under this License

However if you cease all violation of this License then your license from a particularcopyright holder is reinstated (a) provisionally unless and until the copyright holderexplicitly and finally terminates your license and (b) permanently if the copyrightholder fails to notify you of the violation by some reasonable means prior to 60 daysafter the cessation

Moreover your license from a particular copyright holder is reinstated permanently ifthe copyright holder notifies you of the violation by some reasonable means this is thefirst time you have received notice of violation of this License (for any work) from thatcopyright holder and you cure the violation prior to 30 days after your receipt of thenotice

Termination of your rights under this section does not terminate the licenses of partieswho have received copies or rights from you under this License If your rights havebeen terminated and not permanently reinstated receipt of a copy of some or all of thesame material does not give you any rights to use it

Appendix A GNU Free Documentation License 32

10 FUTURE REVISIONS OF THIS LICENSE

The Free Software Foundation may publish new revised versions of the GNU FreeDocumentation License from time to time Such new versions will be similar in spiritto the present version but may differ in detail to address new problems or concernsSee httpwwwgnuorgcopyleft

Each version of the License is given a distinguishing version number If the Documentspecifies that a particular numbered version of this License ldquoor any later versionrdquoapplies to it you have the option of following the terms and conditions either of thatspecified version or of any later version that has been published (not as a draft) bythe Free Software Foundation If the Document does not specify a version number ofthis License you may choose any version ever published (not as a draft) by the FreeSoftware Foundation If the Document specifies that a proxy can decide which futureversions of this License can be used that proxyrsquos public statement of acceptance of aversion permanently authorizes you to choose that version for the Document

11 RELICENSING

ldquoMassive Multiauthor Collaboration Siterdquo (or ldquoMMC Siterdquo) means any World WideWeb server that publishes copyrightable works and also provides prominent facilitiesfor anybody to edit those works A public wiki that anybody can edit is an example ofsuch a server A ldquoMassive Multiauthor Collaborationrdquo (or ldquoMMCrdquo) contained in thesite means any set of copyrightable works thus published on the MMC site

ldquoCC-BY-SArdquo means the Creative Commons Attribution-Share Alike 30 license pub-lished by Creative Commons Corporation a not-for-profit corporation with a principalplace of business in San Francisco California as well as future copyleft versions of thatlicense published by that same organization

ldquoIncorporaterdquo means to publish or republish a Document in whole or in part as partof another Document

An MMC is ldquoeligible for relicensingrdquo if it is licensed under this License and if all worksthat were first published under this License somewhere other than this MMC andsubsequently incorporated in whole or in part into the MMC (1) had no cover textsor invariant sections and (2) were thus incorporated prior to November 1 2008

The operator of an MMC Site may republish an MMC contained in the site underCC-BY-SA on the same site at any time before August 1 2009 provided the MMC iseligible for relicensing

Appendix A GNU Free Documentation License 33

ADDENDUM How to use this License for your documents

To use this License in a document you have written include a copy of the License in thedocument and put the following copyright and license notices just after the title page

Copyright (C) year your name

Permission is granted to copy distribute andor modify this document

under the terms of the GNU Free Documentation License Version 13

or any later version published by the Free Software Foundation

with no Invariant Sections no Front-Cover Texts and no Back-Cover

Texts A copy of the license is included in the section entitled lsquolsquoGNU

Free Documentation Licensersquorsquo

If you have Invariant Sections Front-Cover Texts and Back-Cover Texts replace theldquowith Textsrdquo line with this

with the Invariant Sections being list their titles with

the Front-Cover Texts being list and with the Back-Cover Texts

being list

If you have Invariant Sections without Cover Texts or some other combination of thethree merge those two alternatives to suit the situation

If your document contains nontrivial examples of program code we recommend releasingthese examples in parallel under your choice of free software license such as the GNUGeneral Public License to permit their use in free software

Index 34

Index

Aaccess control policy 3Author 3author specifying 10

Bbehavior prior to version 5 10behavior version 3 10behavior version 4 10binary-old-keyword-value substitution mode 9branch growth 7branch number 2branch tip 2branch default 3bug reporting 25

Ccase sensitivity file format 21checkin 3checklist for bug reports 25checkout 3checkout implicit 5ci invocation 11co invocation 12comma-v file format 1command help 7command version 7command-line option to specify a revision 7credits 1

DDate 3date formats 8date specifying 8dates file format 21default branch 3default branch setting 15deleting revisions 15description of working file 2description text specifying 8

Eempty log message 9emulation previous RCS versions 10encoding file format 20environment variables 10

Ffeatures still missing 23

file names on the command-line 7format RCSfile 20

Ggrammar file format 20

HHeader 3history 1

IId 3ident invocation 13implicit checkout circumstance 5implicit checkout locked 12implicit checkout unlocked 12instantiating a working file 2interaction model 1interactive mode 9invocation ci 11invocation co 12invocation ident 13invocation merge 14invocation rcs 14 15invocation rcsclean 16invocation rcsdiff 17invocation rcsmerge 17invocation rlog 18

Kkeyword-only substitution mode 9keyword-value substitution mode 8keyword-value-locker substitution mode 9keywords table of 3

Llayout of nodes file format 21license 1Locker 3locking a revision 15locking on implicit checkout 12locking non-strict 5locking set non-strict 15locking set strict 15locking strict 5locks in RCS file 3Log 3log message empty 9LOGNAME 11

Index 35

Mmemory limit 11merge invocation 14model interaction 1

NName 4names symbolic 3node layout file format 21non-strict locking 5number branch 2number revision 2

Oold-keyword-value substitution mode 9order of options and file names 7outdating revisions 15overview 1

Ppairing RCS and working files 7patches contributing 25problems 25projects related 1

Qquiet mode 9

Rrange of revisions specifying 7RCS file 2rcs invocation 14 15RCS version emulation 10RCS_MEM_LIMIT 11rcsclean invocation 16rcsdiff invocation 17RCSfile 4RCSfile format 20RCSINIT 10rcsmerge invocation 17removing revisions 15reporting bugs 25Revision 4revision number 2revision range specifying 7

revision specifying 7revisions tree of 3rlog invocation 18

SSource 4specifying a date 8specifying a range of revisions 7specifying a revision 7specifying a state 9specifying a suffix list 10specifying a timedate 8specifying author 10specifying description text 8specifying substitution mode 8State 4state specifying 9strict locking 5substitution mode default 8substitution mode specifying 8suffix list specifying 10symbolic names 3

TTEMP 11third-party interop file format 21Tichy Walter F 1time zone 8timedate specifying 8tip 2tip increment 7TMP 11TMPDIR 11tree of revisions 3

Uunlocking a revision 15USER 11

Vvalue-only substitution mode 9

Wwhitespace file format 21working file description 2working file instantiation 2

  • Overview
    • Credits
    • Concepts
      • Interaction model
      • Working file
      • RCS file
      • Fundamental operations
      • Keywords
        • Quick tour
          • Usage
            • Common elements
              • Revision options
              • Date option
              • Description option
              • Substitution mode option
              • Log message option
              • Misc common options
              • Environment
                • Invoking ci
                • Invoking co
                • Invoking ident
                • Invoking merge
                • Invoking rcs
                  • modern
                  • legacy
                    • Invoking rcsclean
                    • Invoking rcsdiff
                    • Invoking rcsmerge
                    • Invoking rlog
                      • Hacking
                        • File format
                          • File format grammar
                          • Additional particulars of the file format
                            • Still missing
                            • Reporting bugs
                              • GNU Free Documentation License
                              • Index
Page 23: GNU RCS · The RCS file is also known (colloquially) as the “comma-v file”, due to its name often ending in ,v (e.g., a.c,v). A revision number is a branch number followed by

Chapter 3 Hacking 20

3 Hacking

This chapter in contrast to the previous (see Chapter 2 [Usage] page 7) is introspective Itdescribes an important aspect of RCS interop with other programs and development ideasand methods

31 File format

An RCS filersquos contents are described by the grammar below1 Overall the format is freendashformat text In most environments RCS uses the ISO 88591 encoding visible graphiccharacters are (octal) codes 041ndash176 and 240ndash377 and whitespace characters are codes010ndash015 and 040TODO Discuss or point to encoding compatibility issues

311 File format grammar

The meta syntax in this section uses the following conventions lsquo|rsquo (U+7C) separates al-ternatives lsquorsquo (U+7B) and lsquorsquo (U+7D) enclose optional phrases lsquorsquo and lsquorsquo (trailing U+2A)enclose phrases that can be repeated zero or more times lsquorsquo and lsquo+rsquo (trailing U+2B) enclosephrases that must appear at least once and can be repeated terminal symbols are in lsquorsquo(two U+22)

rcstext = admin delta desc deltatext

admin = head num

branch num

access id

symbols sym num

locks id num

strict

integrity intstring

comment string

expand string

delta = num

date num

author id

state id

branches num

next num

commitid sym

desc = desc string

deltatext = num

log string

text string

1 This section is adapted from the lsquorcsfile(5)rsquo manpage written by Walter F Tichy

Chapter 3 Hacking 21

num = digit | +

digit = 0 through 9

id = idchar | +

sym = idchar+

idchar = any visible graphic character except special

special = $ | | | | |

string = any character with doubled

word = id | num | string |

intchar = any character except

thirdp = ^L intchar

intstring = intchar thirdp

312 Additional particulars of the file format

bull In releases prior to 58 (2011-08-30) the grammar included the production

newphrase = id word

and used it in the admin delta and deltatext productions This allowed third-partyprograms to interoperate with RCS by storing opaque (to RCS) data in the file

As of 58 in the name of progress (towards more systematic file integrity support) theonly area reserved for third-party interop is in the (string) value of the integrity fieldspecifically after the first formfeed (U+0C) A further restriction (for all programs) isthat the integrity value must not contain lsquorsquo

bull Whitespace has no significance except in strings However whitespace cannot appearwithin an id num or sym and an RCS file must end with newline (U+0A) Strings areenclosed by lsquorsquo (U+40) If a string contains a lsquorsquo it must be doubled otherwise stringscan contain arbitrary binary data

bull Identifiers are case sensitive Keywords are in lower case only The sets of keywordsand identifiers can overlap

bull Dates which appear after the date keyword are of the form Ymmddhhmmss whereY is the year mm the month (01ndash12) dd the day (01ndash31) hh the hour (00ndash23) mm theminute (00ndash59) and ss the second (00ndash60) Y contains just the last two digits of theyear for years from 1900 through 1999 and all the digits of years thereafter Dates usethe Gregorian calendar times use UTC

bull The delta nodes form a tree All nodes whose numbers consist of a single pair (eg 2321 13) are on the trunk and are linked through the next field in order of decreasing

Chapter 3 Hacking 22

numbers The head field in the admin node points to the head of that sequence (iecontains the highest pair) The branch node in the admin node indicates the defaultbranch (or revision) for most RCS operations If empty the default branch is thehighest branch on the trunk

All delta nodes whose numbers consist of 2n fields (n ge 2) (eg 3111 2122) arelinked as follows All nodes whose first 2nminus1 number fields are identical are linkedthrough the next field in order of increasing numbers For each such sequence thedelta node whose number is identical to the first 2nminus2 number fields of the delta

nodes on that sequence is called the branchpoint The branches field of a node containsa list of the numbers of the first nodes of all sequences for which it is a branchpointThis list is ordered in increasing numbers See Figure 31

Chapter 3 Hacking 23

Head

|

|

v

---------

| |

| 21 |

| |

1213 1311 | | 1222 122111

--------- --------- --------- --------- -------------

^ ^ | ^ ^

| | | | |

| | v | |

| --------- |

| 13 |

--------- -----------

1211 131 1221 12211

--------- ---------

^ | ^

| | |

| v |

| --------- |

| 12 |

---------------------- ---------

121 122

|

|

v

---------

11

Figure 31 The organization of an example RCS file

32 Still missing

RCS is still missing some features The following is an unordered list of ldquoto-do musingsrdquo keptby the RCS maintainers If you would like to hack on an item See Section 33 [Reportingbugs] page 25

bull Add an option to rcsmerge so that it can use an arbitrary program to do the 3-waymerge instead of the default merge Likewise for rcsdiff and diff It should be possibleto pass arbitrary options to these programs and to the subsidiary co invocations

bull Add format options for finer control over the output of ident and rlog Eg thereshould be an easy way for rlog to output lines like lsquosrcmainc 24 wftrsquo one for

Chapter 3 Hacking 24

each locked revision rlog options should have three orthogonal types selecting filesselecting revisions and selecting rlog format

bull Add format options for finer control over the output of keyword strings Eg thereshould be some way to prepend lsquo()rsquo and there should be some way to change lsquo$rsquo tosome other character to disable further substitution These options should make theresulting files uneditable like lsquo-kvrsquo

bull Add long options eg --keyword-substitution Unfortunately RCSrsquos option syntaxis incompatible with getopt Perhaps the best way is to overload rcs eg lsquorcs diff

--keyword-substitution=old filersquo instead of lsquorcsdiff -ko filersquo

bull rlog -rMN should work even if M and N have different numbers of fields so long asM is an ancestor of N or vice versa

bull rcs should evaluate options in order this allows rcs -oS -nS

bull Be able to redo your most recent checkin with minor changes

bull co -u shouldnrsquot complain about a lsquo+wrsquo working file if contents donrsquot change

bull Add a lsquo-rsquo option to take the list of file names from standard input Perhaps the filenames should be null-terminated not newline-terminated so that those that containnewlines are handled properly

bull Permit multiple optionndashfilename pairs eg co -r14 a -r15 b

bull Add an option to break a symbolic link to an RCS file instead of breaking the hardlink that it points to

bull Add ways to specify the earliest revision the most recent revision the earliest or latestrevision on a particular branch and the parent or child of some other revision

bull If a user has multiple locks perhaps ci should fall back on the method of ci -k to figureout which revision to use

bull Add an option to rcsclean to clean directories recursively

bull Write an rcsck program that repairs corrupted RCS files much as fsck repairs corruptedfile systems For example it should remove stale lock files

bull Update the date parser to use the more modern getdatey by Bellovin Salz andBerets or the even more modern getdate by Moraes None of these getdate imple-mentations are as robust as RCSrsquos old warhorse in avoiding problems like arithmeticoverflow so theyrsquoll have to be fixed first (Perhaps we can use gnulib module getdate)

bull Break up the code into a library so that itrsquos easier to write new programs that manip-ulate RCS files and so that useless code is removed from the existing programs Forexample the rcs command contains unnecessary keyword substitution baggage andthe merge command can be greatly pruned

bull Make it easier to use your favorite text editor to edit log messages etc instead ofhaving to type them in irretrievably at the terminal

bull Let the user specify a search path for default branches eg to use L as the defaultbranch if it works and M otherwise Let the user require that at least one entry inthe search path works Let the user say that later entries in the search path are readonly ie one cannot check in changes to them This should be an option settable bylsquoRCSINITrsquo

bull Add a way for a user to see which revisions affected which lines

Chapter 3 Hacking 25

bull Have rlog -nN F print just the revision number that N translates to Eg rlog -nB

F would print the highest revision on the branch B Use this to add an option -bB torcsbranch to freeze the named branch This should interact well with default branches

bull Add a co option that prints the revision number before each line as SCCSrsquos get -m

does [I implemented this for Emacs 22 as a subroutine of vc-annotate qv mdashttn]

33 Reporting bugs

To report bugs or suggest enhancements for GNU RCS please visit its homepage (httpwwwgnuorgsoftwarercs) to find directions on how to ldquofile a bug reportrdquo online orsend electronic mail to help-rcsgnuorg (If you use the web interface you donrsquot needto also send email since that is done automatically)

For bug reports please include enough information for the maintainers to reproduce theproblem Generally speaking that means

bull The RCS version command(s) and manual section(s) involved

bull Hardware and operating system names and versions

bull The contents of any input files necessary to reproduce the bug

bull The expected behavior andor output

bull A description of the problem and samples of any erroneous output

bull Options you gave to configure other than specifying installation directories

bull Anything else that you think would be helpful

When in doubt whether something is needed or not include it Itrsquos better to include toomuch than to leave out something important

Patches are welcome if possible please make them with lsquogit format-patchrsquo and includeChangeLog entries (see Section ldquoChange Logrdquo in The GNU Emacs Manual) Please followthe existing coding style

Appendix A GNU Free Documentation License 26

Appendix A GNU Free Documentation License

Version 13 3 November 2008

Copyright ccopy 2000 2001 2002 2007 2008 Free Software Foundation Inchttpfsforg

Everyone is permitted to copy and distribute verbatim copiesof this license document but changing it is not allowed

0 PREAMBLE

The purpose of this License is to make a manual textbook or other functional anduseful document free in the sense of freedom to assure everyone the effective freedomto copy and redistribute it with or without modifying it either commercially or non-commercially Secondarily this License preserves for the author and publisher a wayto get credit for their work while not being considered responsible for modificationsmade by others

This License is a kind of ldquocopyleftrdquo which means that derivative works of the documentmust themselves be free in the same sense It complements the GNU General PublicLicense which is a copyleft license designed for free software

We have designed this License in order to use it for manuals for free software becausefree software needs free documentation a free program should come with manualsproviding the same freedoms that the software does But this License is not limited tosoftware manuals it can be used for any textual work regardless of subject matter orwhether it is published as a printed book We recommend this License principally forworks whose purpose is instruction or reference

1 APPLICABILITY AND DEFINITIONS

This License applies to any manual or other work in any medium that contains anotice placed by the copyright holder saying it can be distributed under the termsof this License Such a notice grants a world-wide royalty-free license unlimited induration to use that work under the conditions stated herein The ldquoDocumentrdquobelow refers to any such manual or work Any member of the public is a licensee andis addressed as ldquoyourdquo You accept the license if you copy modify or distribute the workin a way requiring permission under copyright law

A ldquoModified Versionrdquo of the Document means any work containing the Document ora portion of it either copied verbatim or with modifications andor translated intoanother language

A ldquoSecondary Sectionrdquo is a named appendix or a front-matter section of the Documentthat deals exclusively with the relationship of the publishers or authors of the Documentto the Documentrsquos overall subject (or to related matters) and contains nothing thatcould fall directly within that overall subject (Thus if the Document is in part atextbook of mathematics a Secondary Section may not explain any mathematics) Therelationship could be a matter of historical connection with the subject or with relatedmatters or of legal commercial philosophical ethical or political position regardingthem

The ldquoInvariant Sectionsrdquo are certain Secondary Sections whose titles are designated asbeing those of Invariant Sections in the notice that says that the Document is released

Appendix A GNU Free Documentation License 27

under this License If a section does not fit the above definition of Secondary then it isnot allowed to be designated as Invariant The Document may contain zero InvariantSections If the Document does not identify any Invariant Sections then there are none

The ldquoCover Textsrdquo are certain short passages of text that are listed as Front-CoverTexts or Back-Cover Texts in the notice that says that the Document is released underthis License A Front-Cover Text may be at most 5 words and a Back-Cover Text maybe at most 25 words

A ldquoTransparentrdquo copy of the Document means a machine-readable copy representedin a format whose specification is available to the general public that is suitable forrevising the document straightforwardly with generic text editors or (for images com-posed of pixels) generic paint programs or (for drawings) some widely available drawingeditor and that is suitable for input to text formatters or for automatic translation toa variety of formats suitable for input to text formatters A copy made in an otherwiseTransparent file format whose markup or absence of markup has been arranged tothwart or discourage subsequent modification by readers is not Transparent An imageformat is not Transparent if used for any substantial amount of text A copy that isnot ldquoTransparentrdquo is called ldquoOpaquerdquo

Examples of suitable formats for Transparent copies include plain ASCII withoutmarkup Texinfo input format LaTEX input format SGML or XML using a publiclyavailable DTD and standard-conforming simple HTML PostScript or PDF designedfor human modification Examples of transparent image formats include PNG XCFand JPG Opaque formats include proprietary formats that can be read and editedonly by proprietary word processors SGML or XML for which the DTD andor pro-cessing tools are not generally available and the machine-generated HTML PostScriptor PDF produced by some word processors for output purposes only

The ldquoTitle Pagerdquo means for a printed book the title page itself plus such followingpages as are needed to hold legibly the material this License requires to appear in thetitle page For works in formats which do not have any title page as such ldquoTitle Pagerdquomeans the text near the most prominent appearance of the workrsquos title preceding thebeginning of the body of the text

The ldquopublisherrdquo means any person or entity that distributes copies of the Documentto the public

A section ldquoEntitled XYZrdquo means a named subunit of the Document whose title eitheris precisely XYZ or contains XYZ in parentheses following text that translates XYZ inanother language (Here XYZ stands for a specific section name mentioned below suchas ldquoAcknowledgementsrdquo ldquoDedicationsrdquo ldquoEndorsementsrdquo or ldquoHistoryrdquo) To ldquoPreservethe Titlerdquo of such a section when you modify the Document means that it remains asection ldquoEntitled XYZrdquo according to this definition

The Document may include Warranty Disclaimers next to the notice which states thatthis License applies to the Document These Warranty Disclaimers are considered tobe included by reference in this License but only as regards disclaiming warrantiesany other implication that these Warranty Disclaimers may have is void and has noeffect on the meaning of this License

2 VERBATIM COPYING

Appendix A GNU Free Documentation License 28

You may copy and distribute the Document in any medium either commercially ornoncommercially provided that this License the copyright notices and the licensenotice saying this License applies to the Document are reproduced in all copies andthat you add no other conditions whatsoever to those of this License You may not usetechnical measures to obstruct or control the reading or further copying of the copiesyou make or distribute However you may accept compensation in exchange for copiesIf you distribute a large enough number of copies you must also follow the conditionsin section 3

You may also lend copies under the same conditions stated above and you may publiclydisplay copies

3 COPYING IN QUANTITY

If you publish printed copies (or copies in media that commonly have printed covers) ofthe Document numbering more than 100 and the Documentrsquos license notice requiresCover Texts you must enclose the copies in covers that carry clearly and legibly allthese Cover Texts Front-Cover Texts on the front cover and Back-Cover Texts onthe back cover Both covers must also clearly and legibly identify you as the publisherof these copies The front cover must present the full title with all words of the titleequally prominent and visible You may add other material on the covers in additionCopying with changes limited to the covers as long as they preserve the title of theDocument and satisfy these conditions can be treated as verbatim copying in otherrespects

If the required texts for either cover are too voluminous to fit legibly you should putthe first ones listed (as many as fit reasonably) on the actual cover and continue therest onto adjacent pages

If you publish or distribute Opaque copies of the Document numbering more than 100you must either include a machine-readable Transparent copy along with each Opaquecopy or state in or with each Opaque copy a computer-network location from whichthe general network-using public has access to download using public-standard networkprotocols a complete Transparent copy of the Document free of added material Ifyou use the latter option you must take reasonably prudent steps when you begindistribution of Opaque copies in quantity to ensure that this Transparent copy willremain thus accessible at the stated location until at least one year after the last timeyou distribute an Opaque copy (directly or through your agents or retailers) of thatedition to the public

It is requested but not required that you contact the authors of the Document wellbefore redistributing any large number of copies to give them a chance to provide youwith an updated version of the Document

4 MODIFICATIONS

You may copy and distribute a Modified Version of the Document under the conditionsof sections 2 and 3 above provided that you release the Modified Version under preciselythis License with the Modified Version filling the role of the Document thus licensingdistribution and modification of the Modified Version to whoever possesses a copy ofit In addition you must do these things in the Modified Version

A Use in the Title Page (and on the covers if any) a title distinct from that of theDocument and from those of previous versions (which should if there were any

Appendix A GNU Free Documentation License 29

be listed in the History section of the Document) You may use the same title asa previous version if the original publisher of that version gives permission

B List on the Title Page as authors one or more persons or entities responsible forauthorship of the modifications in the Modified Version together with at least fiveof the principal authors of the Document (all of its principal authors if it has fewerthan five) unless they release you from this requirement

C State on the Title page the name of the publisher of the Modified Version as thepublisher

D Preserve all the copyright notices of the Document

E Add an appropriate copyright notice for your modifications adjacent to the othercopyright notices

F Include immediately after the copyright notices a license notice giving the publicpermission to use the Modified Version under the terms of this License in the formshown in the Addendum below

G Preserve in that license notice the full lists of Invariant Sections and required CoverTexts given in the Documentrsquos license notice

H Include an unaltered copy of this License

I Preserve the section Entitled ldquoHistoryrdquo Preserve its Title and add to it an itemstating at least the title year new authors and publisher of the Modified Versionas given on the Title Page If there is no section Entitled ldquoHistoryrdquo in the Docu-ment create one stating the title year authors and publisher of the Documentas given on its Title Page then add an item describing the Modified Version asstated in the previous sentence

J Preserve the network location if any given in the Document for public access toa Transparent copy of the Document and likewise the network locations given inthe Document for previous versions it was based on These may be placed in theldquoHistoryrdquo section You may omit a network location for a work that was publishedat least four years before the Document itself or if the original publisher of theversion it refers to gives permission

K For any section Entitled ldquoAcknowledgementsrdquo or ldquoDedicationsrdquo Preserve the Titleof the section and preserve in the section all the substance and tone of each of thecontributor acknowledgements andor dedications given therein

L Preserve all the Invariant Sections of the Document unaltered in their text andin their titles Section numbers or the equivalent are not considered part of thesection titles

M Delete any section Entitled ldquoEndorsementsrdquo Such a section may not be includedin the Modified Version

N Do not retitle any existing section to be Entitled ldquoEndorsementsrdquo or to conflict intitle with any Invariant Section

O Preserve any Warranty Disclaimers

If the Modified Version includes new front-matter sections or appendices that qualifyas Secondary Sections and contain no material copied from the Document you may atyour option designate some or all of these sections as invariant To do this add their

Appendix A GNU Free Documentation License 30

titles to the list of Invariant Sections in the Modified Versionrsquos license notice Thesetitles must be distinct from any other section titles

You may add a section Entitled ldquoEndorsementsrdquo provided it contains nothing butendorsements of your Modified Version by various partiesmdashfor example statements ofpeer review or that the text has been approved by an organization as the authoritativedefinition of a standard

You may add a passage of up to five words as a Front-Cover Text and a passage of upto 25 words as a Back-Cover Text to the end of the list of Cover Texts in the ModifiedVersion Only one passage of Front-Cover Text and one of Back-Cover Text may beadded by (or through arrangements made by) any one entity If the Document alreadyincludes a cover text for the same cover previously added by you or by arrangementmade by the same entity you are acting on behalf of you may not add another butyou may replace the old one on explicit permission from the previous publisher thatadded the old one

The author(s) and publisher(s) of the Document do not by this License give permissionto use their names for publicity for or to assert or imply endorsement of any ModifiedVersion

5 COMBINING DOCUMENTS

You may combine the Document with other documents released under this Licenseunder the terms defined in section 4 above for modified versions provided that youinclude in the combination all of the Invariant Sections of all of the original documentsunmodified and list them all as Invariant Sections of your combined work in its licensenotice and that you preserve all their Warranty Disclaimers

The combined work need only contain one copy of this License and multiple identicalInvariant Sections may be replaced with a single copy If there are multiple InvariantSections with the same name but different contents make the title of each such sectionunique by adding at the end of it in parentheses the name of the original author orpublisher of that section if known or else a unique number Make the same adjustmentto the section titles in the list of Invariant Sections in the license notice of the combinedwork

In the combination you must combine any sections Entitled ldquoHistoryrdquo in the vari-ous original documents forming one section Entitled ldquoHistoryrdquo likewise combine anysections Entitled ldquoAcknowledgementsrdquo and any sections Entitled ldquoDedicationsrdquo Youmust delete all sections Entitled ldquoEndorsementsrdquo

6 COLLECTIONS OF DOCUMENTS

You may make a collection consisting of the Document and other documents releasedunder this License and replace the individual copies of this License in the variousdocuments with a single copy that is included in the collection provided that youfollow the rules of this License for verbatim copying of each of the documents in allother respects

You may extract a single document from such a collection and distribute it individu-ally under this License provided you insert a copy of this License into the extracteddocument and follow this License in all other respects regarding verbatim copying ofthat document

Appendix A GNU Free Documentation License 31

7 AGGREGATION WITH INDEPENDENT WORKS

A compilation of the Document or its derivatives with other separate and independentdocuments or works in or on a volume of a storage or distribution medium is calledan ldquoaggregaterdquo if the copyright resulting from the compilation is not used to limit thelegal rights of the compilationrsquos users beyond what the individual works permit Whenthe Document is included in an aggregate this License does not apply to the otherworks in the aggregate which are not themselves derivative works of the Document

If the Cover Text requirement of section 3 is applicable to these copies of the Documentthen if the Document is less than one half of the entire aggregate the Documentrsquos CoverTexts may be placed on covers that bracket the Document within the aggregate or theelectronic equivalent of covers if the Document is in electronic form Otherwise theymust appear on printed covers that bracket the whole aggregate

8 TRANSLATION

Translation is considered a kind of modification so you may distribute translationsof the Document under the terms of section 4 Replacing Invariant Sections withtranslations requires special permission from their copyright holders but you mayinclude translations of some or all Invariant Sections in addition to the original versionsof these Invariant Sections You may include a translation of this License and all thelicense notices in the Document and any Warranty Disclaimers provided that youalso include the original English version of this License and the original versions ofthose notices and disclaimers In case of a disagreement between the translation andthe original version of this License or a notice or disclaimer the original version willprevail

If a section in the Document is Entitled ldquoAcknowledgementsrdquo ldquoDedicationsrdquo or ldquoHis-toryrdquo the requirement (section 4) to Preserve its Title (section 1) will typically requirechanging the actual title

9 TERMINATION

You may not copy modify sublicense or distribute the Document except as expresslyprovided under this License Any attempt otherwise to copy modify sublicense ordistribute it is void and will automatically terminate your rights under this License

However if you cease all violation of this License then your license from a particularcopyright holder is reinstated (a) provisionally unless and until the copyright holderexplicitly and finally terminates your license and (b) permanently if the copyrightholder fails to notify you of the violation by some reasonable means prior to 60 daysafter the cessation

Moreover your license from a particular copyright holder is reinstated permanently ifthe copyright holder notifies you of the violation by some reasonable means this is thefirst time you have received notice of violation of this License (for any work) from thatcopyright holder and you cure the violation prior to 30 days after your receipt of thenotice

Termination of your rights under this section does not terminate the licenses of partieswho have received copies or rights from you under this License If your rights havebeen terminated and not permanently reinstated receipt of a copy of some or all of thesame material does not give you any rights to use it

Appendix A GNU Free Documentation License 32

10 FUTURE REVISIONS OF THIS LICENSE

The Free Software Foundation may publish new revised versions of the GNU FreeDocumentation License from time to time Such new versions will be similar in spiritto the present version but may differ in detail to address new problems or concernsSee httpwwwgnuorgcopyleft

Each version of the License is given a distinguishing version number If the Documentspecifies that a particular numbered version of this License ldquoor any later versionrdquoapplies to it you have the option of following the terms and conditions either of thatspecified version or of any later version that has been published (not as a draft) bythe Free Software Foundation If the Document does not specify a version number ofthis License you may choose any version ever published (not as a draft) by the FreeSoftware Foundation If the Document specifies that a proxy can decide which futureversions of this License can be used that proxyrsquos public statement of acceptance of aversion permanently authorizes you to choose that version for the Document

11 RELICENSING

ldquoMassive Multiauthor Collaboration Siterdquo (or ldquoMMC Siterdquo) means any World WideWeb server that publishes copyrightable works and also provides prominent facilitiesfor anybody to edit those works A public wiki that anybody can edit is an example ofsuch a server A ldquoMassive Multiauthor Collaborationrdquo (or ldquoMMCrdquo) contained in thesite means any set of copyrightable works thus published on the MMC site

ldquoCC-BY-SArdquo means the Creative Commons Attribution-Share Alike 30 license pub-lished by Creative Commons Corporation a not-for-profit corporation with a principalplace of business in San Francisco California as well as future copyleft versions of thatlicense published by that same organization

ldquoIncorporaterdquo means to publish or republish a Document in whole or in part as partof another Document

An MMC is ldquoeligible for relicensingrdquo if it is licensed under this License and if all worksthat were first published under this License somewhere other than this MMC andsubsequently incorporated in whole or in part into the MMC (1) had no cover textsor invariant sections and (2) were thus incorporated prior to November 1 2008

The operator of an MMC Site may republish an MMC contained in the site underCC-BY-SA on the same site at any time before August 1 2009 provided the MMC iseligible for relicensing

Appendix A GNU Free Documentation License 33

ADDENDUM How to use this License for your documents

To use this License in a document you have written include a copy of the License in thedocument and put the following copyright and license notices just after the title page

Copyright (C) year your name

Permission is granted to copy distribute andor modify this document

under the terms of the GNU Free Documentation License Version 13

or any later version published by the Free Software Foundation

with no Invariant Sections no Front-Cover Texts and no Back-Cover

Texts A copy of the license is included in the section entitled lsquolsquoGNU

Free Documentation Licensersquorsquo

If you have Invariant Sections Front-Cover Texts and Back-Cover Texts replace theldquowith Textsrdquo line with this

with the Invariant Sections being list their titles with

the Front-Cover Texts being list and with the Back-Cover Texts

being list

If you have Invariant Sections without Cover Texts or some other combination of thethree merge those two alternatives to suit the situation

If your document contains nontrivial examples of program code we recommend releasingthese examples in parallel under your choice of free software license such as the GNUGeneral Public License to permit their use in free software

Index 34

Index

Aaccess control policy 3Author 3author specifying 10

Bbehavior prior to version 5 10behavior version 3 10behavior version 4 10binary-old-keyword-value substitution mode 9branch growth 7branch number 2branch tip 2branch default 3bug reporting 25

Ccase sensitivity file format 21checkin 3checklist for bug reports 25checkout 3checkout implicit 5ci invocation 11co invocation 12comma-v file format 1command help 7command version 7command-line option to specify a revision 7credits 1

DDate 3date formats 8date specifying 8dates file format 21default branch 3default branch setting 15deleting revisions 15description of working file 2description text specifying 8

Eempty log message 9emulation previous RCS versions 10encoding file format 20environment variables 10

Ffeatures still missing 23

file names on the command-line 7format RCSfile 20

Ggrammar file format 20

HHeader 3history 1

IId 3ident invocation 13implicit checkout circumstance 5implicit checkout locked 12implicit checkout unlocked 12instantiating a working file 2interaction model 1interactive mode 9invocation ci 11invocation co 12invocation ident 13invocation merge 14invocation rcs 14 15invocation rcsclean 16invocation rcsdiff 17invocation rcsmerge 17invocation rlog 18

Kkeyword-only substitution mode 9keyword-value substitution mode 8keyword-value-locker substitution mode 9keywords table of 3

Llayout of nodes file format 21license 1Locker 3locking a revision 15locking on implicit checkout 12locking non-strict 5locking set non-strict 15locking set strict 15locking strict 5locks in RCS file 3Log 3log message empty 9LOGNAME 11

Index 35

Mmemory limit 11merge invocation 14model interaction 1

NName 4names symbolic 3node layout file format 21non-strict locking 5number branch 2number revision 2

Oold-keyword-value substitution mode 9order of options and file names 7outdating revisions 15overview 1

Ppairing RCS and working files 7patches contributing 25problems 25projects related 1

Qquiet mode 9

Rrange of revisions specifying 7RCS file 2rcs invocation 14 15RCS version emulation 10RCS_MEM_LIMIT 11rcsclean invocation 16rcsdiff invocation 17RCSfile 4RCSfile format 20RCSINIT 10rcsmerge invocation 17removing revisions 15reporting bugs 25Revision 4revision number 2revision range specifying 7

revision specifying 7revisions tree of 3rlog invocation 18

SSource 4specifying a date 8specifying a range of revisions 7specifying a revision 7specifying a state 9specifying a suffix list 10specifying a timedate 8specifying author 10specifying description text 8specifying substitution mode 8State 4state specifying 9strict locking 5substitution mode default 8substitution mode specifying 8suffix list specifying 10symbolic names 3

TTEMP 11third-party interop file format 21Tichy Walter F 1time zone 8timedate specifying 8tip 2tip increment 7TMP 11TMPDIR 11tree of revisions 3

Uunlocking a revision 15USER 11

Vvalue-only substitution mode 9

Wwhitespace file format 21working file description 2working file instantiation 2

  • Overview
    • Credits
    • Concepts
      • Interaction model
      • Working file
      • RCS file
      • Fundamental operations
      • Keywords
        • Quick tour
          • Usage
            • Common elements
              • Revision options
              • Date option
              • Description option
              • Substitution mode option
              • Log message option
              • Misc common options
              • Environment
                • Invoking ci
                • Invoking co
                • Invoking ident
                • Invoking merge
                • Invoking rcs
                  • modern
                  • legacy
                    • Invoking rcsclean
                    • Invoking rcsdiff
                    • Invoking rcsmerge
                    • Invoking rlog
                      • Hacking
                        • File format
                          • File format grammar
                          • Additional particulars of the file format
                            • Still missing
                            • Reporting bugs
                              • GNU Free Documentation License
                              • Index
Page 24: GNU RCS · The RCS file is also known (colloquially) as the “comma-v file”, due to its name often ending in ,v (e.g., a.c,v). A revision number is a branch number followed by

Chapter 3 Hacking 21

num = digit | +

digit = 0 through 9

id = idchar | +

sym = idchar+

idchar = any visible graphic character except special

special = $ | | | | |

string = any character with doubled

word = id | num | string |

intchar = any character except

thirdp = ^L intchar

intstring = intchar thirdp

312 Additional particulars of the file format

bull In releases prior to 58 (2011-08-30) the grammar included the production

newphrase = id word

and used it in the admin delta and deltatext productions This allowed third-partyprograms to interoperate with RCS by storing opaque (to RCS) data in the file

As of 58 in the name of progress (towards more systematic file integrity support) theonly area reserved for third-party interop is in the (string) value of the integrity fieldspecifically after the first formfeed (U+0C) A further restriction (for all programs) isthat the integrity value must not contain lsquorsquo

bull Whitespace has no significance except in strings However whitespace cannot appearwithin an id num or sym and an RCS file must end with newline (U+0A) Strings areenclosed by lsquorsquo (U+40) If a string contains a lsquorsquo it must be doubled otherwise stringscan contain arbitrary binary data

bull Identifiers are case sensitive Keywords are in lower case only The sets of keywordsand identifiers can overlap

bull Dates which appear after the date keyword are of the form Ymmddhhmmss whereY is the year mm the month (01ndash12) dd the day (01ndash31) hh the hour (00ndash23) mm theminute (00ndash59) and ss the second (00ndash60) Y contains just the last two digits of theyear for years from 1900 through 1999 and all the digits of years thereafter Dates usethe Gregorian calendar times use UTC

bull The delta nodes form a tree All nodes whose numbers consist of a single pair (eg 2321 13) are on the trunk and are linked through the next field in order of decreasing

Chapter 3 Hacking 22

numbers The head field in the admin node points to the head of that sequence (iecontains the highest pair) The branch node in the admin node indicates the defaultbranch (or revision) for most RCS operations If empty the default branch is thehighest branch on the trunk

All delta nodes whose numbers consist of 2n fields (n ge 2) (eg 3111 2122) arelinked as follows All nodes whose first 2nminus1 number fields are identical are linkedthrough the next field in order of increasing numbers For each such sequence thedelta node whose number is identical to the first 2nminus2 number fields of the delta

nodes on that sequence is called the branchpoint The branches field of a node containsa list of the numbers of the first nodes of all sequences for which it is a branchpointThis list is ordered in increasing numbers See Figure 31

Chapter 3 Hacking 23

Head

|

|

v

---------

| |

| 21 |

| |

1213 1311 | | 1222 122111

--------- --------- --------- --------- -------------

^ ^ | ^ ^

| | | | |

| | v | |

| --------- |

| 13 |

--------- -----------

1211 131 1221 12211

--------- ---------

^ | ^

| | |

| v |

| --------- |

| 12 |

---------------------- ---------

121 122

|

|

v

---------

11

Figure 31 The organization of an example RCS file

32 Still missing

RCS is still missing some features The following is an unordered list of ldquoto-do musingsrdquo keptby the RCS maintainers If you would like to hack on an item See Section 33 [Reportingbugs] page 25

bull Add an option to rcsmerge so that it can use an arbitrary program to do the 3-waymerge instead of the default merge Likewise for rcsdiff and diff It should be possibleto pass arbitrary options to these programs and to the subsidiary co invocations

bull Add format options for finer control over the output of ident and rlog Eg thereshould be an easy way for rlog to output lines like lsquosrcmainc 24 wftrsquo one for

Chapter 3 Hacking 24

each locked revision rlog options should have three orthogonal types selecting filesselecting revisions and selecting rlog format

bull Add format options for finer control over the output of keyword strings Eg thereshould be some way to prepend lsquo()rsquo and there should be some way to change lsquo$rsquo tosome other character to disable further substitution These options should make theresulting files uneditable like lsquo-kvrsquo

bull Add long options eg --keyword-substitution Unfortunately RCSrsquos option syntaxis incompatible with getopt Perhaps the best way is to overload rcs eg lsquorcs diff

--keyword-substitution=old filersquo instead of lsquorcsdiff -ko filersquo

bull rlog -rMN should work even if M and N have different numbers of fields so long asM is an ancestor of N or vice versa

bull rcs should evaluate options in order this allows rcs -oS -nS

bull Be able to redo your most recent checkin with minor changes

bull co -u shouldnrsquot complain about a lsquo+wrsquo working file if contents donrsquot change

bull Add a lsquo-rsquo option to take the list of file names from standard input Perhaps the filenames should be null-terminated not newline-terminated so that those that containnewlines are handled properly

bull Permit multiple optionndashfilename pairs eg co -r14 a -r15 b

bull Add an option to break a symbolic link to an RCS file instead of breaking the hardlink that it points to

bull Add ways to specify the earliest revision the most recent revision the earliest or latestrevision on a particular branch and the parent or child of some other revision

bull If a user has multiple locks perhaps ci should fall back on the method of ci -k to figureout which revision to use

bull Add an option to rcsclean to clean directories recursively

bull Write an rcsck program that repairs corrupted RCS files much as fsck repairs corruptedfile systems For example it should remove stale lock files

bull Update the date parser to use the more modern getdatey by Bellovin Salz andBerets or the even more modern getdate by Moraes None of these getdate imple-mentations are as robust as RCSrsquos old warhorse in avoiding problems like arithmeticoverflow so theyrsquoll have to be fixed first (Perhaps we can use gnulib module getdate)

bull Break up the code into a library so that itrsquos easier to write new programs that manip-ulate RCS files and so that useless code is removed from the existing programs Forexample the rcs command contains unnecessary keyword substitution baggage andthe merge command can be greatly pruned

bull Make it easier to use your favorite text editor to edit log messages etc instead ofhaving to type them in irretrievably at the terminal

bull Let the user specify a search path for default branches eg to use L as the defaultbranch if it works and M otherwise Let the user require that at least one entry inthe search path works Let the user say that later entries in the search path are readonly ie one cannot check in changes to them This should be an option settable bylsquoRCSINITrsquo

bull Add a way for a user to see which revisions affected which lines

Chapter 3 Hacking 25

bull Have rlog -nN F print just the revision number that N translates to Eg rlog -nB

F would print the highest revision on the branch B Use this to add an option -bB torcsbranch to freeze the named branch This should interact well with default branches

bull Add a co option that prints the revision number before each line as SCCSrsquos get -m

does [I implemented this for Emacs 22 as a subroutine of vc-annotate qv mdashttn]

33 Reporting bugs

To report bugs or suggest enhancements for GNU RCS please visit its homepage (httpwwwgnuorgsoftwarercs) to find directions on how to ldquofile a bug reportrdquo online orsend electronic mail to help-rcsgnuorg (If you use the web interface you donrsquot needto also send email since that is done automatically)

For bug reports please include enough information for the maintainers to reproduce theproblem Generally speaking that means

bull The RCS version command(s) and manual section(s) involved

bull Hardware and operating system names and versions

bull The contents of any input files necessary to reproduce the bug

bull The expected behavior andor output

bull A description of the problem and samples of any erroneous output

bull Options you gave to configure other than specifying installation directories

bull Anything else that you think would be helpful

When in doubt whether something is needed or not include it Itrsquos better to include toomuch than to leave out something important

Patches are welcome if possible please make them with lsquogit format-patchrsquo and includeChangeLog entries (see Section ldquoChange Logrdquo in The GNU Emacs Manual) Please followthe existing coding style

Appendix A GNU Free Documentation License 26

Appendix A GNU Free Documentation License

Version 13 3 November 2008

Copyright ccopy 2000 2001 2002 2007 2008 Free Software Foundation Inchttpfsforg

Everyone is permitted to copy and distribute verbatim copiesof this license document but changing it is not allowed

0 PREAMBLE

The purpose of this License is to make a manual textbook or other functional anduseful document free in the sense of freedom to assure everyone the effective freedomto copy and redistribute it with or without modifying it either commercially or non-commercially Secondarily this License preserves for the author and publisher a wayto get credit for their work while not being considered responsible for modificationsmade by others

This License is a kind of ldquocopyleftrdquo which means that derivative works of the documentmust themselves be free in the same sense It complements the GNU General PublicLicense which is a copyleft license designed for free software

We have designed this License in order to use it for manuals for free software becausefree software needs free documentation a free program should come with manualsproviding the same freedoms that the software does But this License is not limited tosoftware manuals it can be used for any textual work regardless of subject matter orwhether it is published as a printed book We recommend this License principally forworks whose purpose is instruction or reference

1 APPLICABILITY AND DEFINITIONS

This License applies to any manual or other work in any medium that contains anotice placed by the copyright holder saying it can be distributed under the termsof this License Such a notice grants a world-wide royalty-free license unlimited induration to use that work under the conditions stated herein The ldquoDocumentrdquobelow refers to any such manual or work Any member of the public is a licensee andis addressed as ldquoyourdquo You accept the license if you copy modify or distribute the workin a way requiring permission under copyright law

A ldquoModified Versionrdquo of the Document means any work containing the Document ora portion of it either copied verbatim or with modifications andor translated intoanother language

A ldquoSecondary Sectionrdquo is a named appendix or a front-matter section of the Documentthat deals exclusively with the relationship of the publishers or authors of the Documentto the Documentrsquos overall subject (or to related matters) and contains nothing thatcould fall directly within that overall subject (Thus if the Document is in part atextbook of mathematics a Secondary Section may not explain any mathematics) Therelationship could be a matter of historical connection with the subject or with relatedmatters or of legal commercial philosophical ethical or political position regardingthem

The ldquoInvariant Sectionsrdquo are certain Secondary Sections whose titles are designated asbeing those of Invariant Sections in the notice that says that the Document is released

Appendix A GNU Free Documentation License 27

under this License If a section does not fit the above definition of Secondary then it isnot allowed to be designated as Invariant The Document may contain zero InvariantSections If the Document does not identify any Invariant Sections then there are none

The ldquoCover Textsrdquo are certain short passages of text that are listed as Front-CoverTexts or Back-Cover Texts in the notice that says that the Document is released underthis License A Front-Cover Text may be at most 5 words and a Back-Cover Text maybe at most 25 words

A ldquoTransparentrdquo copy of the Document means a machine-readable copy representedin a format whose specification is available to the general public that is suitable forrevising the document straightforwardly with generic text editors or (for images com-posed of pixels) generic paint programs or (for drawings) some widely available drawingeditor and that is suitable for input to text formatters or for automatic translation toa variety of formats suitable for input to text formatters A copy made in an otherwiseTransparent file format whose markup or absence of markup has been arranged tothwart or discourage subsequent modification by readers is not Transparent An imageformat is not Transparent if used for any substantial amount of text A copy that isnot ldquoTransparentrdquo is called ldquoOpaquerdquo

Examples of suitable formats for Transparent copies include plain ASCII withoutmarkup Texinfo input format LaTEX input format SGML or XML using a publiclyavailable DTD and standard-conforming simple HTML PostScript or PDF designedfor human modification Examples of transparent image formats include PNG XCFand JPG Opaque formats include proprietary formats that can be read and editedonly by proprietary word processors SGML or XML for which the DTD andor pro-cessing tools are not generally available and the machine-generated HTML PostScriptor PDF produced by some word processors for output purposes only

The ldquoTitle Pagerdquo means for a printed book the title page itself plus such followingpages as are needed to hold legibly the material this License requires to appear in thetitle page For works in formats which do not have any title page as such ldquoTitle Pagerdquomeans the text near the most prominent appearance of the workrsquos title preceding thebeginning of the body of the text

The ldquopublisherrdquo means any person or entity that distributes copies of the Documentto the public

A section ldquoEntitled XYZrdquo means a named subunit of the Document whose title eitheris precisely XYZ or contains XYZ in parentheses following text that translates XYZ inanother language (Here XYZ stands for a specific section name mentioned below suchas ldquoAcknowledgementsrdquo ldquoDedicationsrdquo ldquoEndorsementsrdquo or ldquoHistoryrdquo) To ldquoPreservethe Titlerdquo of such a section when you modify the Document means that it remains asection ldquoEntitled XYZrdquo according to this definition

The Document may include Warranty Disclaimers next to the notice which states thatthis License applies to the Document These Warranty Disclaimers are considered tobe included by reference in this License but only as regards disclaiming warrantiesany other implication that these Warranty Disclaimers may have is void and has noeffect on the meaning of this License

2 VERBATIM COPYING

Appendix A GNU Free Documentation License 28

You may copy and distribute the Document in any medium either commercially ornoncommercially provided that this License the copyright notices and the licensenotice saying this License applies to the Document are reproduced in all copies andthat you add no other conditions whatsoever to those of this License You may not usetechnical measures to obstruct or control the reading or further copying of the copiesyou make or distribute However you may accept compensation in exchange for copiesIf you distribute a large enough number of copies you must also follow the conditionsin section 3

You may also lend copies under the same conditions stated above and you may publiclydisplay copies

3 COPYING IN QUANTITY

If you publish printed copies (or copies in media that commonly have printed covers) ofthe Document numbering more than 100 and the Documentrsquos license notice requiresCover Texts you must enclose the copies in covers that carry clearly and legibly allthese Cover Texts Front-Cover Texts on the front cover and Back-Cover Texts onthe back cover Both covers must also clearly and legibly identify you as the publisherof these copies The front cover must present the full title with all words of the titleequally prominent and visible You may add other material on the covers in additionCopying with changes limited to the covers as long as they preserve the title of theDocument and satisfy these conditions can be treated as verbatim copying in otherrespects

If the required texts for either cover are too voluminous to fit legibly you should putthe first ones listed (as many as fit reasonably) on the actual cover and continue therest onto adjacent pages

If you publish or distribute Opaque copies of the Document numbering more than 100you must either include a machine-readable Transparent copy along with each Opaquecopy or state in or with each Opaque copy a computer-network location from whichthe general network-using public has access to download using public-standard networkprotocols a complete Transparent copy of the Document free of added material Ifyou use the latter option you must take reasonably prudent steps when you begindistribution of Opaque copies in quantity to ensure that this Transparent copy willremain thus accessible at the stated location until at least one year after the last timeyou distribute an Opaque copy (directly or through your agents or retailers) of thatedition to the public

It is requested but not required that you contact the authors of the Document wellbefore redistributing any large number of copies to give them a chance to provide youwith an updated version of the Document

4 MODIFICATIONS

You may copy and distribute a Modified Version of the Document under the conditionsof sections 2 and 3 above provided that you release the Modified Version under preciselythis License with the Modified Version filling the role of the Document thus licensingdistribution and modification of the Modified Version to whoever possesses a copy ofit In addition you must do these things in the Modified Version

A Use in the Title Page (and on the covers if any) a title distinct from that of theDocument and from those of previous versions (which should if there were any

Appendix A GNU Free Documentation License 29

be listed in the History section of the Document) You may use the same title asa previous version if the original publisher of that version gives permission

B List on the Title Page as authors one or more persons or entities responsible forauthorship of the modifications in the Modified Version together with at least fiveof the principal authors of the Document (all of its principal authors if it has fewerthan five) unless they release you from this requirement

C State on the Title page the name of the publisher of the Modified Version as thepublisher

D Preserve all the copyright notices of the Document

E Add an appropriate copyright notice for your modifications adjacent to the othercopyright notices

F Include immediately after the copyright notices a license notice giving the publicpermission to use the Modified Version under the terms of this License in the formshown in the Addendum below

G Preserve in that license notice the full lists of Invariant Sections and required CoverTexts given in the Documentrsquos license notice

H Include an unaltered copy of this License

I Preserve the section Entitled ldquoHistoryrdquo Preserve its Title and add to it an itemstating at least the title year new authors and publisher of the Modified Versionas given on the Title Page If there is no section Entitled ldquoHistoryrdquo in the Docu-ment create one stating the title year authors and publisher of the Documentas given on its Title Page then add an item describing the Modified Version asstated in the previous sentence

J Preserve the network location if any given in the Document for public access toa Transparent copy of the Document and likewise the network locations given inthe Document for previous versions it was based on These may be placed in theldquoHistoryrdquo section You may omit a network location for a work that was publishedat least four years before the Document itself or if the original publisher of theversion it refers to gives permission

K For any section Entitled ldquoAcknowledgementsrdquo or ldquoDedicationsrdquo Preserve the Titleof the section and preserve in the section all the substance and tone of each of thecontributor acknowledgements andor dedications given therein

L Preserve all the Invariant Sections of the Document unaltered in their text andin their titles Section numbers or the equivalent are not considered part of thesection titles

M Delete any section Entitled ldquoEndorsementsrdquo Such a section may not be includedin the Modified Version

N Do not retitle any existing section to be Entitled ldquoEndorsementsrdquo or to conflict intitle with any Invariant Section

O Preserve any Warranty Disclaimers

If the Modified Version includes new front-matter sections or appendices that qualifyas Secondary Sections and contain no material copied from the Document you may atyour option designate some or all of these sections as invariant To do this add their

Appendix A GNU Free Documentation License 30

titles to the list of Invariant Sections in the Modified Versionrsquos license notice Thesetitles must be distinct from any other section titles

You may add a section Entitled ldquoEndorsementsrdquo provided it contains nothing butendorsements of your Modified Version by various partiesmdashfor example statements ofpeer review or that the text has been approved by an organization as the authoritativedefinition of a standard

You may add a passage of up to five words as a Front-Cover Text and a passage of upto 25 words as a Back-Cover Text to the end of the list of Cover Texts in the ModifiedVersion Only one passage of Front-Cover Text and one of Back-Cover Text may beadded by (or through arrangements made by) any one entity If the Document alreadyincludes a cover text for the same cover previously added by you or by arrangementmade by the same entity you are acting on behalf of you may not add another butyou may replace the old one on explicit permission from the previous publisher thatadded the old one

The author(s) and publisher(s) of the Document do not by this License give permissionto use their names for publicity for or to assert or imply endorsement of any ModifiedVersion

5 COMBINING DOCUMENTS

You may combine the Document with other documents released under this Licenseunder the terms defined in section 4 above for modified versions provided that youinclude in the combination all of the Invariant Sections of all of the original documentsunmodified and list them all as Invariant Sections of your combined work in its licensenotice and that you preserve all their Warranty Disclaimers

The combined work need only contain one copy of this License and multiple identicalInvariant Sections may be replaced with a single copy If there are multiple InvariantSections with the same name but different contents make the title of each such sectionunique by adding at the end of it in parentheses the name of the original author orpublisher of that section if known or else a unique number Make the same adjustmentto the section titles in the list of Invariant Sections in the license notice of the combinedwork

In the combination you must combine any sections Entitled ldquoHistoryrdquo in the vari-ous original documents forming one section Entitled ldquoHistoryrdquo likewise combine anysections Entitled ldquoAcknowledgementsrdquo and any sections Entitled ldquoDedicationsrdquo Youmust delete all sections Entitled ldquoEndorsementsrdquo

6 COLLECTIONS OF DOCUMENTS

You may make a collection consisting of the Document and other documents releasedunder this License and replace the individual copies of this License in the variousdocuments with a single copy that is included in the collection provided that youfollow the rules of this License for verbatim copying of each of the documents in allother respects

You may extract a single document from such a collection and distribute it individu-ally under this License provided you insert a copy of this License into the extracteddocument and follow this License in all other respects regarding verbatim copying ofthat document

Appendix A GNU Free Documentation License 31

7 AGGREGATION WITH INDEPENDENT WORKS

A compilation of the Document or its derivatives with other separate and independentdocuments or works in or on a volume of a storage or distribution medium is calledan ldquoaggregaterdquo if the copyright resulting from the compilation is not used to limit thelegal rights of the compilationrsquos users beyond what the individual works permit Whenthe Document is included in an aggregate this License does not apply to the otherworks in the aggregate which are not themselves derivative works of the Document

If the Cover Text requirement of section 3 is applicable to these copies of the Documentthen if the Document is less than one half of the entire aggregate the Documentrsquos CoverTexts may be placed on covers that bracket the Document within the aggregate or theelectronic equivalent of covers if the Document is in electronic form Otherwise theymust appear on printed covers that bracket the whole aggregate

8 TRANSLATION

Translation is considered a kind of modification so you may distribute translationsof the Document under the terms of section 4 Replacing Invariant Sections withtranslations requires special permission from their copyright holders but you mayinclude translations of some or all Invariant Sections in addition to the original versionsof these Invariant Sections You may include a translation of this License and all thelicense notices in the Document and any Warranty Disclaimers provided that youalso include the original English version of this License and the original versions ofthose notices and disclaimers In case of a disagreement between the translation andthe original version of this License or a notice or disclaimer the original version willprevail

If a section in the Document is Entitled ldquoAcknowledgementsrdquo ldquoDedicationsrdquo or ldquoHis-toryrdquo the requirement (section 4) to Preserve its Title (section 1) will typically requirechanging the actual title

9 TERMINATION

You may not copy modify sublicense or distribute the Document except as expresslyprovided under this License Any attempt otherwise to copy modify sublicense ordistribute it is void and will automatically terminate your rights under this License

However if you cease all violation of this License then your license from a particularcopyright holder is reinstated (a) provisionally unless and until the copyright holderexplicitly and finally terminates your license and (b) permanently if the copyrightholder fails to notify you of the violation by some reasonable means prior to 60 daysafter the cessation

Moreover your license from a particular copyright holder is reinstated permanently ifthe copyright holder notifies you of the violation by some reasonable means this is thefirst time you have received notice of violation of this License (for any work) from thatcopyright holder and you cure the violation prior to 30 days after your receipt of thenotice

Termination of your rights under this section does not terminate the licenses of partieswho have received copies or rights from you under this License If your rights havebeen terminated and not permanently reinstated receipt of a copy of some or all of thesame material does not give you any rights to use it

Appendix A GNU Free Documentation License 32

10 FUTURE REVISIONS OF THIS LICENSE

The Free Software Foundation may publish new revised versions of the GNU FreeDocumentation License from time to time Such new versions will be similar in spiritto the present version but may differ in detail to address new problems or concernsSee httpwwwgnuorgcopyleft

Each version of the License is given a distinguishing version number If the Documentspecifies that a particular numbered version of this License ldquoor any later versionrdquoapplies to it you have the option of following the terms and conditions either of thatspecified version or of any later version that has been published (not as a draft) bythe Free Software Foundation If the Document does not specify a version number ofthis License you may choose any version ever published (not as a draft) by the FreeSoftware Foundation If the Document specifies that a proxy can decide which futureversions of this License can be used that proxyrsquos public statement of acceptance of aversion permanently authorizes you to choose that version for the Document

11 RELICENSING

ldquoMassive Multiauthor Collaboration Siterdquo (or ldquoMMC Siterdquo) means any World WideWeb server that publishes copyrightable works and also provides prominent facilitiesfor anybody to edit those works A public wiki that anybody can edit is an example ofsuch a server A ldquoMassive Multiauthor Collaborationrdquo (or ldquoMMCrdquo) contained in thesite means any set of copyrightable works thus published on the MMC site

ldquoCC-BY-SArdquo means the Creative Commons Attribution-Share Alike 30 license pub-lished by Creative Commons Corporation a not-for-profit corporation with a principalplace of business in San Francisco California as well as future copyleft versions of thatlicense published by that same organization

ldquoIncorporaterdquo means to publish or republish a Document in whole or in part as partof another Document

An MMC is ldquoeligible for relicensingrdquo if it is licensed under this License and if all worksthat were first published under this License somewhere other than this MMC andsubsequently incorporated in whole or in part into the MMC (1) had no cover textsor invariant sections and (2) were thus incorporated prior to November 1 2008

The operator of an MMC Site may republish an MMC contained in the site underCC-BY-SA on the same site at any time before August 1 2009 provided the MMC iseligible for relicensing

Appendix A GNU Free Documentation License 33

ADDENDUM How to use this License for your documents

To use this License in a document you have written include a copy of the License in thedocument and put the following copyright and license notices just after the title page

Copyright (C) year your name

Permission is granted to copy distribute andor modify this document

under the terms of the GNU Free Documentation License Version 13

or any later version published by the Free Software Foundation

with no Invariant Sections no Front-Cover Texts and no Back-Cover

Texts A copy of the license is included in the section entitled lsquolsquoGNU

Free Documentation Licensersquorsquo

If you have Invariant Sections Front-Cover Texts and Back-Cover Texts replace theldquowith Textsrdquo line with this

with the Invariant Sections being list their titles with

the Front-Cover Texts being list and with the Back-Cover Texts

being list

If you have Invariant Sections without Cover Texts or some other combination of thethree merge those two alternatives to suit the situation

If your document contains nontrivial examples of program code we recommend releasingthese examples in parallel under your choice of free software license such as the GNUGeneral Public License to permit their use in free software

Index 34

Index

Aaccess control policy 3Author 3author specifying 10

Bbehavior prior to version 5 10behavior version 3 10behavior version 4 10binary-old-keyword-value substitution mode 9branch growth 7branch number 2branch tip 2branch default 3bug reporting 25

Ccase sensitivity file format 21checkin 3checklist for bug reports 25checkout 3checkout implicit 5ci invocation 11co invocation 12comma-v file format 1command help 7command version 7command-line option to specify a revision 7credits 1

DDate 3date formats 8date specifying 8dates file format 21default branch 3default branch setting 15deleting revisions 15description of working file 2description text specifying 8

Eempty log message 9emulation previous RCS versions 10encoding file format 20environment variables 10

Ffeatures still missing 23

file names on the command-line 7format RCSfile 20

Ggrammar file format 20

HHeader 3history 1

IId 3ident invocation 13implicit checkout circumstance 5implicit checkout locked 12implicit checkout unlocked 12instantiating a working file 2interaction model 1interactive mode 9invocation ci 11invocation co 12invocation ident 13invocation merge 14invocation rcs 14 15invocation rcsclean 16invocation rcsdiff 17invocation rcsmerge 17invocation rlog 18

Kkeyword-only substitution mode 9keyword-value substitution mode 8keyword-value-locker substitution mode 9keywords table of 3

Llayout of nodes file format 21license 1Locker 3locking a revision 15locking on implicit checkout 12locking non-strict 5locking set non-strict 15locking set strict 15locking strict 5locks in RCS file 3Log 3log message empty 9LOGNAME 11

Index 35

Mmemory limit 11merge invocation 14model interaction 1

NName 4names symbolic 3node layout file format 21non-strict locking 5number branch 2number revision 2

Oold-keyword-value substitution mode 9order of options and file names 7outdating revisions 15overview 1

Ppairing RCS and working files 7patches contributing 25problems 25projects related 1

Qquiet mode 9

Rrange of revisions specifying 7RCS file 2rcs invocation 14 15RCS version emulation 10RCS_MEM_LIMIT 11rcsclean invocation 16rcsdiff invocation 17RCSfile 4RCSfile format 20RCSINIT 10rcsmerge invocation 17removing revisions 15reporting bugs 25Revision 4revision number 2revision range specifying 7

revision specifying 7revisions tree of 3rlog invocation 18

SSource 4specifying a date 8specifying a range of revisions 7specifying a revision 7specifying a state 9specifying a suffix list 10specifying a timedate 8specifying author 10specifying description text 8specifying substitution mode 8State 4state specifying 9strict locking 5substitution mode default 8substitution mode specifying 8suffix list specifying 10symbolic names 3

TTEMP 11third-party interop file format 21Tichy Walter F 1time zone 8timedate specifying 8tip 2tip increment 7TMP 11TMPDIR 11tree of revisions 3

Uunlocking a revision 15USER 11

Vvalue-only substitution mode 9

Wwhitespace file format 21working file description 2working file instantiation 2

  • Overview
    • Credits
    • Concepts
      • Interaction model
      • Working file
      • RCS file
      • Fundamental operations
      • Keywords
        • Quick tour
          • Usage
            • Common elements
              • Revision options
              • Date option
              • Description option
              • Substitution mode option
              • Log message option
              • Misc common options
              • Environment
                • Invoking ci
                • Invoking co
                • Invoking ident
                • Invoking merge
                • Invoking rcs
                  • modern
                  • legacy
                    • Invoking rcsclean
                    • Invoking rcsdiff
                    • Invoking rcsmerge
                    • Invoking rlog
                      • Hacking
                        • File format
                          • File format grammar
                          • Additional particulars of the file format
                            • Still missing
                            • Reporting bugs
                              • GNU Free Documentation License
                              • Index
Page 25: GNU RCS · The RCS file is also known (colloquially) as the “comma-v file”, due to its name often ending in ,v (e.g., a.c,v). A revision number is a branch number followed by

Chapter 3 Hacking 22

numbers The head field in the admin node points to the head of that sequence (iecontains the highest pair) The branch node in the admin node indicates the defaultbranch (or revision) for most RCS operations If empty the default branch is thehighest branch on the trunk

All delta nodes whose numbers consist of 2n fields (n ge 2) (eg 3111 2122) arelinked as follows All nodes whose first 2nminus1 number fields are identical are linkedthrough the next field in order of increasing numbers For each such sequence thedelta node whose number is identical to the first 2nminus2 number fields of the delta

nodes on that sequence is called the branchpoint The branches field of a node containsa list of the numbers of the first nodes of all sequences for which it is a branchpointThis list is ordered in increasing numbers See Figure 31

Chapter 3 Hacking 23

Head

|

|

v

---------

| |

| 21 |

| |

1213 1311 | | 1222 122111

--------- --------- --------- --------- -------------

^ ^ | ^ ^

| | | | |

| | v | |

| --------- |

| 13 |

--------- -----------

1211 131 1221 12211

--------- ---------

^ | ^

| | |

| v |

| --------- |

| 12 |

---------------------- ---------

121 122

|

|

v

---------

11

Figure 31 The organization of an example RCS file

32 Still missing

RCS is still missing some features The following is an unordered list of ldquoto-do musingsrdquo keptby the RCS maintainers If you would like to hack on an item See Section 33 [Reportingbugs] page 25

bull Add an option to rcsmerge so that it can use an arbitrary program to do the 3-waymerge instead of the default merge Likewise for rcsdiff and diff It should be possibleto pass arbitrary options to these programs and to the subsidiary co invocations

bull Add format options for finer control over the output of ident and rlog Eg thereshould be an easy way for rlog to output lines like lsquosrcmainc 24 wftrsquo one for

Chapter 3 Hacking 24

each locked revision rlog options should have three orthogonal types selecting filesselecting revisions and selecting rlog format

bull Add format options for finer control over the output of keyword strings Eg thereshould be some way to prepend lsquo()rsquo and there should be some way to change lsquo$rsquo tosome other character to disable further substitution These options should make theresulting files uneditable like lsquo-kvrsquo

bull Add long options eg --keyword-substitution Unfortunately RCSrsquos option syntaxis incompatible with getopt Perhaps the best way is to overload rcs eg lsquorcs diff

--keyword-substitution=old filersquo instead of lsquorcsdiff -ko filersquo

bull rlog -rMN should work even if M and N have different numbers of fields so long asM is an ancestor of N or vice versa

bull rcs should evaluate options in order this allows rcs -oS -nS

bull Be able to redo your most recent checkin with minor changes

bull co -u shouldnrsquot complain about a lsquo+wrsquo working file if contents donrsquot change

bull Add a lsquo-rsquo option to take the list of file names from standard input Perhaps the filenames should be null-terminated not newline-terminated so that those that containnewlines are handled properly

bull Permit multiple optionndashfilename pairs eg co -r14 a -r15 b

bull Add an option to break a symbolic link to an RCS file instead of breaking the hardlink that it points to

bull Add ways to specify the earliest revision the most recent revision the earliest or latestrevision on a particular branch and the parent or child of some other revision

bull If a user has multiple locks perhaps ci should fall back on the method of ci -k to figureout which revision to use

bull Add an option to rcsclean to clean directories recursively

bull Write an rcsck program that repairs corrupted RCS files much as fsck repairs corruptedfile systems For example it should remove stale lock files

bull Update the date parser to use the more modern getdatey by Bellovin Salz andBerets or the even more modern getdate by Moraes None of these getdate imple-mentations are as robust as RCSrsquos old warhorse in avoiding problems like arithmeticoverflow so theyrsquoll have to be fixed first (Perhaps we can use gnulib module getdate)

bull Break up the code into a library so that itrsquos easier to write new programs that manip-ulate RCS files and so that useless code is removed from the existing programs Forexample the rcs command contains unnecessary keyword substitution baggage andthe merge command can be greatly pruned

bull Make it easier to use your favorite text editor to edit log messages etc instead ofhaving to type them in irretrievably at the terminal

bull Let the user specify a search path for default branches eg to use L as the defaultbranch if it works and M otherwise Let the user require that at least one entry inthe search path works Let the user say that later entries in the search path are readonly ie one cannot check in changes to them This should be an option settable bylsquoRCSINITrsquo

bull Add a way for a user to see which revisions affected which lines

Chapter 3 Hacking 25

bull Have rlog -nN F print just the revision number that N translates to Eg rlog -nB

F would print the highest revision on the branch B Use this to add an option -bB torcsbranch to freeze the named branch This should interact well with default branches

bull Add a co option that prints the revision number before each line as SCCSrsquos get -m

does [I implemented this for Emacs 22 as a subroutine of vc-annotate qv mdashttn]

33 Reporting bugs

To report bugs or suggest enhancements for GNU RCS please visit its homepage (httpwwwgnuorgsoftwarercs) to find directions on how to ldquofile a bug reportrdquo online orsend electronic mail to help-rcsgnuorg (If you use the web interface you donrsquot needto also send email since that is done automatically)

For bug reports please include enough information for the maintainers to reproduce theproblem Generally speaking that means

bull The RCS version command(s) and manual section(s) involved

bull Hardware and operating system names and versions

bull The contents of any input files necessary to reproduce the bug

bull The expected behavior andor output

bull A description of the problem and samples of any erroneous output

bull Options you gave to configure other than specifying installation directories

bull Anything else that you think would be helpful

When in doubt whether something is needed or not include it Itrsquos better to include toomuch than to leave out something important

Patches are welcome if possible please make them with lsquogit format-patchrsquo and includeChangeLog entries (see Section ldquoChange Logrdquo in The GNU Emacs Manual) Please followthe existing coding style

Appendix A GNU Free Documentation License 26

Appendix A GNU Free Documentation License

Version 13 3 November 2008

Copyright ccopy 2000 2001 2002 2007 2008 Free Software Foundation Inchttpfsforg

Everyone is permitted to copy and distribute verbatim copiesof this license document but changing it is not allowed

0 PREAMBLE

The purpose of this License is to make a manual textbook or other functional anduseful document free in the sense of freedom to assure everyone the effective freedomto copy and redistribute it with or without modifying it either commercially or non-commercially Secondarily this License preserves for the author and publisher a wayto get credit for their work while not being considered responsible for modificationsmade by others

This License is a kind of ldquocopyleftrdquo which means that derivative works of the documentmust themselves be free in the same sense It complements the GNU General PublicLicense which is a copyleft license designed for free software

We have designed this License in order to use it for manuals for free software becausefree software needs free documentation a free program should come with manualsproviding the same freedoms that the software does But this License is not limited tosoftware manuals it can be used for any textual work regardless of subject matter orwhether it is published as a printed book We recommend this License principally forworks whose purpose is instruction or reference

1 APPLICABILITY AND DEFINITIONS

This License applies to any manual or other work in any medium that contains anotice placed by the copyright holder saying it can be distributed under the termsof this License Such a notice grants a world-wide royalty-free license unlimited induration to use that work under the conditions stated herein The ldquoDocumentrdquobelow refers to any such manual or work Any member of the public is a licensee andis addressed as ldquoyourdquo You accept the license if you copy modify or distribute the workin a way requiring permission under copyright law

A ldquoModified Versionrdquo of the Document means any work containing the Document ora portion of it either copied verbatim or with modifications andor translated intoanother language

A ldquoSecondary Sectionrdquo is a named appendix or a front-matter section of the Documentthat deals exclusively with the relationship of the publishers or authors of the Documentto the Documentrsquos overall subject (or to related matters) and contains nothing thatcould fall directly within that overall subject (Thus if the Document is in part atextbook of mathematics a Secondary Section may not explain any mathematics) Therelationship could be a matter of historical connection with the subject or with relatedmatters or of legal commercial philosophical ethical or political position regardingthem

The ldquoInvariant Sectionsrdquo are certain Secondary Sections whose titles are designated asbeing those of Invariant Sections in the notice that says that the Document is released

Appendix A GNU Free Documentation License 27

under this License If a section does not fit the above definition of Secondary then it isnot allowed to be designated as Invariant The Document may contain zero InvariantSections If the Document does not identify any Invariant Sections then there are none

The ldquoCover Textsrdquo are certain short passages of text that are listed as Front-CoverTexts or Back-Cover Texts in the notice that says that the Document is released underthis License A Front-Cover Text may be at most 5 words and a Back-Cover Text maybe at most 25 words

A ldquoTransparentrdquo copy of the Document means a machine-readable copy representedin a format whose specification is available to the general public that is suitable forrevising the document straightforwardly with generic text editors or (for images com-posed of pixels) generic paint programs or (for drawings) some widely available drawingeditor and that is suitable for input to text formatters or for automatic translation toa variety of formats suitable for input to text formatters A copy made in an otherwiseTransparent file format whose markup or absence of markup has been arranged tothwart or discourage subsequent modification by readers is not Transparent An imageformat is not Transparent if used for any substantial amount of text A copy that isnot ldquoTransparentrdquo is called ldquoOpaquerdquo

Examples of suitable formats for Transparent copies include plain ASCII withoutmarkup Texinfo input format LaTEX input format SGML or XML using a publiclyavailable DTD and standard-conforming simple HTML PostScript or PDF designedfor human modification Examples of transparent image formats include PNG XCFand JPG Opaque formats include proprietary formats that can be read and editedonly by proprietary word processors SGML or XML for which the DTD andor pro-cessing tools are not generally available and the machine-generated HTML PostScriptor PDF produced by some word processors for output purposes only

The ldquoTitle Pagerdquo means for a printed book the title page itself plus such followingpages as are needed to hold legibly the material this License requires to appear in thetitle page For works in formats which do not have any title page as such ldquoTitle Pagerdquomeans the text near the most prominent appearance of the workrsquos title preceding thebeginning of the body of the text

The ldquopublisherrdquo means any person or entity that distributes copies of the Documentto the public

A section ldquoEntitled XYZrdquo means a named subunit of the Document whose title eitheris precisely XYZ or contains XYZ in parentheses following text that translates XYZ inanother language (Here XYZ stands for a specific section name mentioned below suchas ldquoAcknowledgementsrdquo ldquoDedicationsrdquo ldquoEndorsementsrdquo or ldquoHistoryrdquo) To ldquoPreservethe Titlerdquo of such a section when you modify the Document means that it remains asection ldquoEntitled XYZrdquo according to this definition

The Document may include Warranty Disclaimers next to the notice which states thatthis License applies to the Document These Warranty Disclaimers are considered tobe included by reference in this License but only as regards disclaiming warrantiesany other implication that these Warranty Disclaimers may have is void and has noeffect on the meaning of this License

2 VERBATIM COPYING

Appendix A GNU Free Documentation License 28

You may copy and distribute the Document in any medium either commercially ornoncommercially provided that this License the copyright notices and the licensenotice saying this License applies to the Document are reproduced in all copies andthat you add no other conditions whatsoever to those of this License You may not usetechnical measures to obstruct or control the reading or further copying of the copiesyou make or distribute However you may accept compensation in exchange for copiesIf you distribute a large enough number of copies you must also follow the conditionsin section 3

You may also lend copies under the same conditions stated above and you may publiclydisplay copies

3 COPYING IN QUANTITY

If you publish printed copies (or copies in media that commonly have printed covers) ofthe Document numbering more than 100 and the Documentrsquos license notice requiresCover Texts you must enclose the copies in covers that carry clearly and legibly allthese Cover Texts Front-Cover Texts on the front cover and Back-Cover Texts onthe back cover Both covers must also clearly and legibly identify you as the publisherof these copies The front cover must present the full title with all words of the titleequally prominent and visible You may add other material on the covers in additionCopying with changes limited to the covers as long as they preserve the title of theDocument and satisfy these conditions can be treated as verbatim copying in otherrespects

If the required texts for either cover are too voluminous to fit legibly you should putthe first ones listed (as many as fit reasonably) on the actual cover and continue therest onto adjacent pages

If you publish or distribute Opaque copies of the Document numbering more than 100you must either include a machine-readable Transparent copy along with each Opaquecopy or state in or with each Opaque copy a computer-network location from whichthe general network-using public has access to download using public-standard networkprotocols a complete Transparent copy of the Document free of added material Ifyou use the latter option you must take reasonably prudent steps when you begindistribution of Opaque copies in quantity to ensure that this Transparent copy willremain thus accessible at the stated location until at least one year after the last timeyou distribute an Opaque copy (directly or through your agents or retailers) of thatedition to the public

It is requested but not required that you contact the authors of the Document wellbefore redistributing any large number of copies to give them a chance to provide youwith an updated version of the Document

4 MODIFICATIONS

You may copy and distribute a Modified Version of the Document under the conditionsof sections 2 and 3 above provided that you release the Modified Version under preciselythis License with the Modified Version filling the role of the Document thus licensingdistribution and modification of the Modified Version to whoever possesses a copy ofit In addition you must do these things in the Modified Version

A Use in the Title Page (and on the covers if any) a title distinct from that of theDocument and from those of previous versions (which should if there were any

Appendix A GNU Free Documentation License 29

be listed in the History section of the Document) You may use the same title asa previous version if the original publisher of that version gives permission

B List on the Title Page as authors one or more persons or entities responsible forauthorship of the modifications in the Modified Version together with at least fiveof the principal authors of the Document (all of its principal authors if it has fewerthan five) unless they release you from this requirement

C State on the Title page the name of the publisher of the Modified Version as thepublisher

D Preserve all the copyright notices of the Document

E Add an appropriate copyright notice for your modifications adjacent to the othercopyright notices

F Include immediately after the copyright notices a license notice giving the publicpermission to use the Modified Version under the terms of this License in the formshown in the Addendum below

G Preserve in that license notice the full lists of Invariant Sections and required CoverTexts given in the Documentrsquos license notice

H Include an unaltered copy of this License

I Preserve the section Entitled ldquoHistoryrdquo Preserve its Title and add to it an itemstating at least the title year new authors and publisher of the Modified Versionas given on the Title Page If there is no section Entitled ldquoHistoryrdquo in the Docu-ment create one stating the title year authors and publisher of the Documentas given on its Title Page then add an item describing the Modified Version asstated in the previous sentence

J Preserve the network location if any given in the Document for public access toa Transparent copy of the Document and likewise the network locations given inthe Document for previous versions it was based on These may be placed in theldquoHistoryrdquo section You may omit a network location for a work that was publishedat least four years before the Document itself or if the original publisher of theversion it refers to gives permission

K For any section Entitled ldquoAcknowledgementsrdquo or ldquoDedicationsrdquo Preserve the Titleof the section and preserve in the section all the substance and tone of each of thecontributor acknowledgements andor dedications given therein

L Preserve all the Invariant Sections of the Document unaltered in their text andin their titles Section numbers or the equivalent are not considered part of thesection titles

M Delete any section Entitled ldquoEndorsementsrdquo Such a section may not be includedin the Modified Version

N Do not retitle any existing section to be Entitled ldquoEndorsementsrdquo or to conflict intitle with any Invariant Section

O Preserve any Warranty Disclaimers

If the Modified Version includes new front-matter sections or appendices that qualifyas Secondary Sections and contain no material copied from the Document you may atyour option designate some or all of these sections as invariant To do this add their

Appendix A GNU Free Documentation License 30

titles to the list of Invariant Sections in the Modified Versionrsquos license notice Thesetitles must be distinct from any other section titles

You may add a section Entitled ldquoEndorsementsrdquo provided it contains nothing butendorsements of your Modified Version by various partiesmdashfor example statements ofpeer review or that the text has been approved by an organization as the authoritativedefinition of a standard

You may add a passage of up to five words as a Front-Cover Text and a passage of upto 25 words as a Back-Cover Text to the end of the list of Cover Texts in the ModifiedVersion Only one passage of Front-Cover Text and one of Back-Cover Text may beadded by (or through arrangements made by) any one entity If the Document alreadyincludes a cover text for the same cover previously added by you or by arrangementmade by the same entity you are acting on behalf of you may not add another butyou may replace the old one on explicit permission from the previous publisher thatadded the old one

The author(s) and publisher(s) of the Document do not by this License give permissionto use their names for publicity for or to assert or imply endorsement of any ModifiedVersion

5 COMBINING DOCUMENTS

You may combine the Document with other documents released under this Licenseunder the terms defined in section 4 above for modified versions provided that youinclude in the combination all of the Invariant Sections of all of the original documentsunmodified and list them all as Invariant Sections of your combined work in its licensenotice and that you preserve all their Warranty Disclaimers

The combined work need only contain one copy of this License and multiple identicalInvariant Sections may be replaced with a single copy If there are multiple InvariantSections with the same name but different contents make the title of each such sectionunique by adding at the end of it in parentheses the name of the original author orpublisher of that section if known or else a unique number Make the same adjustmentto the section titles in the list of Invariant Sections in the license notice of the combinedwork

In the combination you must combine any sections Entitled ldquoHistoryrdquo in the vari-ous original documents forming one section Entitled ldquoHistoryrdquo likewise combine anysections Entitled ldquoAcknowledgementsrdquo and any sections Entitled ldquoDedicationsrdquo Youmust delete all sections Entitled ldquoEndorsementsrdquo

6 COLLECTIONS OF DOCUMENTS

You may make a collection consisting of the Document and other documents releasedunder this License and replace the individual copies of this License in the variousdocuments with a single copy that is included in the collection provided that youfollow the rules of this License for verbatim copying of each of the documents in allother respects

You may extract a single document from such a collection and distribute it individu-ally under this License provided you insert a copy of this License into the extracteddocument and follow this License in all other respects regarding verbatim copying ofthat document

Appendix A GNU Free Documentation License 31

7 AGGREGATION WITH INDEPENDENT WORKS

A compilation of the Document or its derivatives with other separate and independentdocuments or works in or on a volume of a storage or distribution medium is calledan ldquoaggregaterdquo if the copyright resulting from the compilation is not used to limit thelegal rights of the compilationrsquos users beyond what the individual works permit Whenthe Document is included in an aggregate this License does not apply to the otherworks in the aggregate which are not themselves derivative works of the Document

If the Cover Text requirement of section 3 is applicable to these copies of the Documentthen if the Document is less than one half of the entire aggregate the Documentrsquos CoverTexts may be placed on covers that bracket the Document within the aggregate or theelectronic equivalent of covers if the Document is in electronic form Otherwise theymust appear on printed covers that bracket the whole aggregate

8 TRANSLATION

Translation is considered a kind of modification so you may distribute translationsof the Document under the terms of section 4 Replacing Invariant Sections withtranslations requires special permission from their copyright holders but you mayinclude translations of some or all Invariant Sections in addition to the original versionsof these Invariant Sections You may include a translation of this License and all thelicense notices in the Document and any Warranty Disclaimers provided that youalso include the original English version of this License and the original versions ofthose notices and disclaimers In case of a disagreement between the translation andthe original version of this License or a notice or disclaimer the original version willprevail

If a section in the Document is Entitled ldquoAcknowledgementsrdquo ldquoDedicationsrdquo or ldquoHis-toryrdquo the requirement (section 4) to Preserve its Title (section 1) will typically requirechanging the actual title

9 TERMINATION

You may not copy modify sublicense or distribute the Document except as expresslyprovided under this License Any attempt otherwise to copy modify sublicense ordistribute it is void and will automatically terminate your rights under this License

However if you cease all violation of this License then your license from a particularcopyright holder is reinstated (a) provisionally unless and until the copyright holderexplicitly and finally terminates your license and (b) permanently if the copyrightholder fails to notify you of the violation by some reasonable means prior to 60 daysafter the cessation

Moreover your license from a particular copyright holder is reinstated permanently ifthe copyright holder notifies you of the violation by some reasonable means this is thefirst time you have received notice of violation of this License (for any work) from thatcopyright holder and you cure the violation prior to 30 days after your receipt of thenotice

Termination of your rights under this section does not terminate the licenses of partieswho have received copies or rights from you under this License If your rights havebeen terminated and not permanently reinstated receipt of a copy of some or all of thesame material does not give you any rights to use it

Appendix A GNU Free Documentation License 32

10 FUTURE REVISIONS OF THIS LICENSE

The Free Software Foundation may publish new revised versions of the GNU FreeDocumentation License from time to time Such new versions will be similar in spiritto the present version but may differ in detail to address new problems or concernsSee httpwwwgnuorgcopyleft

Each version of the License is given a distinguishing version number If the Documentspecifies that a particular numbered version of this License ldquoor any later versionrdquoapplies to it you have the option of following the terms and conditions either of thatspecified version or of any later version that has been published (not as a draft) bythe Free Software Foundation If the Document does not specify a version number ofthis License you may choose any version ever published (not as a draft) by the FreeSoftware Foundation If the Document specifies that a proxy can decide which futureversions of this License can be used that proxyrsquos public statement of acceptance of aversion permanently authorizes you to choose that version for the Document

11 RELICENSING

ldquoMassive Multiauthor Collaboration Siterdquo (or ldquoMMC Siterdquo) means any World WideWeb server that publishes copyrightable works and also provides prominent facilitiesfor anybody to edit those works A public wiki that anybody can edit is an example ofsuch a server A ldquoMassive Multiauthor Collaborationrdquo (or ldquoMMCrdquo) contained in thesite means any set of copyrightable works thus published on the MMC site

ldquoCC-BY-SArdquo means the Creative Commons Attribution-Share Alike 30 license pub-lished by Creative Commons Corporation a not-for-profit corporation with a principalplace of business in San Francisco California as well as future copyleft versions of thatlicense published by that same organization

ldquoIncorporaterdquo means to publish or republish a Document in whole or in part as partof another Document

An MMC is ldquoeligible for relicensingrdquo if it is licensed under this License and if all worksthat were first published under this License somewhere other than this MMC andsubsequently incorporated in whole or in part into the MMC (1) had no cover textsor invariant sections and (2) were thus incorporated prior to November 1 2008

The operator of an MMC Site may republish an MMC contained in the site underCC-BY-SA on the same site at any time before August 1 2009 provided the MMC iseligible for relicensing

Appendix A GNU Free Documentation License 33

ADDENDUM How to use this License for your documents

To use this License in a document you have written include a copy of the License in thedocument and put the following copyright and license notices just after the title page

Copyright (C) year your name

Permission is granted to copy distribute andor modify this document

under the terms of the GNU Free Documentation License Version 13

or any later version published by the Free Software Foundation

with no Invariant Sections no Front-Cover Texts and no Back-Cover

Texts A copy of the license is included in the section entitled lsquolsquoGNU

Free Documentation Licensersquorsquo

If you have Invariant Sections Front-Cover Texts and Back-Cover Texts replace theldquowith Textsrdquo line with this

with the Invariant Sections being list their titles with

the Front-Cover Texts being list and with the Back-Cover Texts

being list

If you have Invariant Sections without Cover Texts or some other combination of thethree merge those two alternatives to suit the situation

If your document contains nontrivial examples of program code we recommend releasingthese examples in parallel under your choice of free software license such as the GNUGeneral Public License to permit their use in free software

Index 34

Index

Aaccess control policy 3Author 3author specifying 10

Bbehavior prior to version 5 10behavior version 3 10behavior version 4 10binary-old-keyword-value substitution mode 9branch growth 7branch number 2branch tip 2branch default 3bug reporting 25

Ccase sensitivity file format 21checkin 3checklist for bug reports 25checkout 3checkout implicit 5ci invocation 11co invocation 12comma-v file format 1command help 7command version 7command-line option to specify a revision 7credits 1

DDate 3date formats 8date specifying 8dates file format 21default branch 3default branch setting 15deleting revisions 15description of working file 2description text specifying 8

Eempty log message 9emulation previous RCS versions 10encoding file format 20environment variables 10

Ffeatures still missing 23

file names on the command-line 7format RCSfile 20

Ggrammar file format 20

HHeader 3history 1

IId 3ident invocation 13implicit checkout circumstance 5implicit checkout locked 12implicit checkout unlocked 12instantiating a working file 2interaction model 1interactive mode 9invocation ci 11invocation co 12invocation ident 13invocation merge 14invocation rcs 14 15invocation rcsclean 16invocation rcsdiff 17invocation rcsmerge 17invocation rlog 18

Kkeyword-only substitution mode 9keyword-value substitution mode 8keyword-value-locker substitution mode 9keywords table of 3

Llayout of nodes file format 21license 1Locker 3locking a revision 15locking on implicit checkout 12locking non-strict 5locking set non-strict 15locking set strict 15locking strict 5locks in RCS file 3Log 3log message empty 9LOGNAME 11

Index 35

Mmemory limit 11merge invocation 14model interaction 1

NName 4names symbolic 3node layout file format 21non-strict locking 5number branch 2number revision 2

Oold-keyword-value substitution mode 9order of options and file names 7outdating revisions 15overview 1

Ppairing RCS and working files 7patches contributing 25problems 25projects related 1

Qquiet mode 9

Rrange of revisions specifying 7RCS file 2rcs invocation 14 15RCS version emulation 10RCS_MEM_LIMIT 11rcsclean invocation 16rcsdiff invocation 17RCSfile 4RCSfile format 20RCSINIT 10rcsmerge invocation 17removing revisions 15reporting bugs 25Revision 4revision number 2revision range specifying 7

revision specifying 7revisions tree of 3rlog invocation 18

SSource 4specifying a date 8specifying a range of revisions 7specifying a revision 7specifying a state 9specifying a suffix list 10specifying a timedate 8specifying author 10specifying description text 8specifying substitution mode 8State 4state specifying 9strict locking 5substitution mode default 8substitution mode specifying 8suffix list specifying 10symbolic names 3

TTEMP 11third-party interop file format 21Tichy Walter F 1time zone 8timedate specifying 8tip 2tip increment 7TMP 11TMPDIR 11tree of revisions 3

Uunlocking a revision 15USER 11

Vvalue-only substitution mode 9

Wwhitespace file format 21working file description 2working file instantiation 2

  • Overview
    • Credits
    • Concepts
      • Interaction model
      • Working file
      • RCS file
      • Fundamental operations
      • Keywords
        • Quick tour
          • Usage
            • Common elements
              • Revision options
              • Date option
              • Description option
              • Substitution mode option
              • Log message option
              • Misc common options
              • Environment
                • Invoking ci
                • Invoking co
                • Invoking ident
                • Invoking merge
                • Invoking rcs
                  • modern
                  • legacy
                    • Invoking rcsclean
                    • Invoking rcsdiff
                    • Invoking rcsmerge
                    • Invoking rlog
                      • Hacking
                        • File format
                          • File format grammar
                          • Additional particulars of the file format
                            • Still missing
                            • Reporting bugs
                              • GNU Free Documentation License
                              • Index
Page 26: GNU RCS · The RCS file is also known (colloquially) as the “comma-v file”, due to its name often ending in ,v (e.g., a.c,v). A revision number is a branch number followed by

Chapter 3 Hacking 23

Head

|

|

v

---------

| |

| 21 |

| |

1213 1311 | | 1222 122111

--------- --------- --------- --------- -------------

^ ^ | ^ ^

| | | | |

| | v | |

| --------- |

| 13 |

--------- -----------

1211 131 1221 12211

--------- ---------

^ | ^

| | |

| v |

| --------- |

| 12 |

---------------------- ---------

121 122

|

|

v

---------

11

Figure 31 The organization of an example RCS file

32 Still missing

RCS is still missing some features The following is an unordered list of ldquoto-do musingsrdquo keptby the RCS maintainers If you would like to hack on an item See Section 33 [Reportingbugs] page 25

bull Add an option to rcsmerge so that it can use an arbitrary program to do the 3-waymerge instead of the default merge Likewise for rcsdiff and diff It should be possibleto pass arbitrary options to these programs and to the subsidiary co invocations

bull Add format options for finer control over the output of ident and rlog Eg thereshould be an easy way for rlog to output lines like lsquosrcmainc 24 wftrsquo one for

Chapter 3 Hacking 24

each locked revision rlog options should have three orthogonal types selecting filesselecting revisions and selecting rlog format

bull Add format options for finer control over the output of keyword strings Eg thereshould be some way to prepend lsquo()rsquo and there should be some way to change lsquo$rsquo tosome other character to disable further substitution These options should make theresulting files uneditable like lsquo-kvrsquo

bull Add long options eg --keyword-substitution Unfortunately RCSrsquos option syntaxis incompatible with getopt Perhaps the best way is to overload rcs eg lsquorcs diff

--keyword-substitution=old filersquo instead of lsquorcsdiff -ko filersquo

bull rlog -rMN should work even if M and N have different numbers of fields so long asM is an ancestor of N or vice versa

bull rcs should evaluate options in order this allows rcs -oS -nS

bull Be able to redo your most recent checkin with minor changes

bull co -u shouldnrsquot complain about a lsquo+wrsquo working file if contents donrsquot change

bull Add a lsquo-rsquo option to take the list of file names from standard input Perhaps the filenames should be null-terminated not newline-terminated so that those that containnewlines are handled properly

bull Permit multiple optionndashfilename pairs eg co -r14 a -r15 b

bull Add an option to break a symbolic link to an RCS file instead of breaking the hardlink that it points to

bull Add ways to specify the earliest revision the most recent revision the earliest or latestrevision on a particular branch and the parent or child of some other revision

bull If a user has multiple locks perhaps ci should fall back on the method of ci -k to figureout which revision to use

bull Add an option to rcsclean to clean directories recursively

bull Write an rcsck program that repairs corrupted RCS files much as fsck repairs corruptedfile systems For example it should remove stale lock files

bull Update the date parser to use the more modern getdatey by Bellovin Salz andBerets or the even more modern getdate by Moraes None of these getdate imple-mentations are as robust as RCSrsquos old warhorse in avoiding problems like arithmeticoverflow so theyrsquoll have to be fixed first (Perhaps we can use gnulib module getdate)

bull Break up the code into a library so that itrsquos easier to write new programs that manip-ulate RCS files and so that useless code is removed from the existing programs Forexample the rcs command contains unnecessary keyword substitution baggage andthe merge command can be greatly pruned

bull Make it easier to use your favorite text editor to edit log messages etc instead ofhaving to type them in irretrievably at the terminal

bull Let the user specify a search path for default branches eg to use L as the defaultbranch if it works and M otherwise Let the user require that at least one entry inthe search path works Let the user say that later entries in the search path are readonly ie one cannot check in changes to them This should be an option settable bylsquoRCSINITrsquo

bull Add a way for a user to see which revisions affected which lines

Chapter 3 Hacking 25

bull Have rlog -nN F print just the revision number that N translates to Eg rlog -nB

F would print the highest revision on the branch B Use this to add an option -bB torcsbranch to freeze the named branch This should interact well with default branches

bull Add a co option that prints the revision number before each line as SCCSrsquos get -m

does [I implemented this for Emacs 22 as a subroutine of vc-annotate qv mdashttn]

33 Reporting bugs

To report bugs or suggest enhancements for GNU RCS please visit its homepage (httpwwwgnuorgsoftwarercs) to find directions on how to ldquofile a bug reportrdquo online orsend electronic mail to help-rcsgnuorg (If you use the web interface you donrsquot needto also send email since that is done automatically)

For bug reports please include enough information for the maintainers to reproduce theproblem Generally speaking that means

bull The RCS version command(s) and manual section(s) involved

bull Hardware and operating system names and versions

bull The contents of any input files necessary to reproduce the bug

bull The expected behavior andor output

bull A description of the problem and samples of any erroneous output

bull Options you gave to configure other than specifying installation directories

bull Anything else that you think would be helpful

When in doubt whether something is needed or not include it Itrsquos better to include toomuch than to leave out something important

Patches are welcome if possible please make them with lsquogit format-patchrsquo and includeChangeLog entries (see Section ldquoChange Logrdquo in The GNU Emacs Manual) Please followthe existing coding style

Appendix A GNU Free Documentation License 26

Appendix A GNU Free Documentation License

Version 13 3 November 2008

Copyright ccopy 2000 2001 2002 2007 2008 Free Software Foundation Inchttpfsforg

Everyone is permitted to copy and distribute verbatim copiesof this license document but changing it is not allowed

0 PREAMBLE

The purpose of this License is to make a manual textbook or other functional anduseful document free in the sense of freedom to assure everyone the effective freedomto copy and redistribute it with or without modifying it either commercially or non-commercially Secondarily this License preserves for the author and publisher a wayto get credit for their work while not being considered responsible for modificationsmade by others

This License is a kind of ldquocopyleftrdquo which means that derivative works of the documentmust themselves be free in the same sense It complements the GNU General PublicLicense which is a copyleft license designed for free software

We have designed this License in order to use it for manuals for free software becausefree software needs free documentation a free program should come with manualsproviding the same freedoms that the software does But this License is not limited tosoftware manuals it can be used for any textual work regardless of subject matter orwhether it is published as a printed book We recommend this License principally forworks whose purpose is instruction or reference

1 APPLICABILITY AND DEFINITIONS

This License applies to any manual or other work in any medium that contains anotice placed by the copyright holder saying it can be distributed under the termsof this License Such a notice grants a world-wide royalty-free license unlimited induration to use that work under the conditions stated herein The ldquoDocumentrdquobelow refers to any such manual or work Any member of the public is a licensee andis addressed as ldquoyourdquo You accept the license if you copy modify or distribute the workin a way requiring permission under copyright law

A ldquoModified Versionrdquo of the Document means any work containing the Document ora portion of it either copied verbatim or with modifications andor translated intoanother language

A ldquoSecondary Sectionrdquo is a named appendix or a front-matter section of the Documentthat deals exclusively with the relationship of the publishers or authors of the Documentto the Documentrsquos overall subject (or to related matters) and contains nothing thatcould fall directly within that overall subject (Thus if the Document is in part atextbook of mathematics a Secondary Section may not explain any mathematics) Therelationship could be a matter of historical connection with the subject or with relatedmatters or of legal commercial philosophical ethical or political position regardingthem

The ldquoInvariant Sectionsrdquo are certain Secondary Sections whose titles are designated asbeing those of Invariant Sections in the notice that says that the Document is released

Appendix A GNU Free Documentation License 27

under this License If a section does not fit the above definition of Secondary then it isnot allowed to be designated as Invariant The Document may contain zero InvariantSections If the Document does not identify any Invariant Sections then there are none

The ldquoCover Textsrdquo are certain short passages of text that are listed as Front-CoverTexts or Back-Cover Texts in the notice that says that the Document is released underthis License A Front-Cover Text may be at most 5 words and a Back-Cover Text maybe at most 25 words

A ldquoTransparentrdquo copy of the Document means a machine-readable copy representedin a format whose specification is available to the general public that is suitable forrevising the document straightforwardly with generic text editors or (for images com-posed of pixels) generic paint programs or (for drawings) some widely available drawingeditor and that is suitable for input to text formatters or for automatic translation toa variety of formats suitable for input to text formatters A copy made in an otherwiseTransparent file format whose markup or absence of markup has been arranged tothwart or discourage subsequent modification by readers is not Transparent An imageformat is not Transparent if used for any substantial amount of text A copy that isnot ldquoTransparentrdquo is called ldquoOpaquerdquo

Examples of suitable formats for Transparent copies include plain ASCII withoutmarkup Texinfo input format LaTEX input format SGML or XML using a publiclyavailable DTD and standard-conforming simple HTML PostScript or PDF designedfor human modification Examples of transparent image formats include PNG XCFand JPG Opaque formats include proprietary formats that can be read and editedonly by proprietary word processors SGML or XML for which the DTD andor pro-cessing tools are not generally available and the machine-generated HTML PostScriptor PDF produced by some word processors for output purposes only

The ldquoTitle Pagerdquo means for a printed book the title page itself plus such followingpages as are needed to hold legibly the material this License requires to appear in thetitle page For works in formats which do not have any title page as such ldquoTitle Pagerdquomeans the text near the most prominent appearance of the workrsquos title preceding thebeginning of the body of the text

The ldquopublisherrdquo means any person or entity that distributes copies of the Documentto the public

A section ldquoEntitled XYZrdquo means a named subunit of the Document whose title eitheris precisely XYZ or contains XYZ in parentheses following text that translates XYZ inanother language (Here XYZ stands for a specific section name mentioned below suchas ldquoAcknowledgementsrdquo ldquoDedicationsrdquo ldquoEndorsementsrdquo or ldquoHistoryrdquo) To ldquoPreservethe Titlerdquo of such a section when you modify the Document means that it remains asection ldquoEntitled XYZrdquo according to this definition

The Document may include Warranty Disclaimers next to the notice which states thatthis License applies to the Document These Warranty Disclaimers are considered tobe included by reference in this License but only as regards disclaiming warrantiesany other implication that these Warranty Disclaimers may have is void and has noeffect on the meaning of this License

2 VERBATIM COPYING

Appendix A GNU Free Documentation License 28

You may copy and distribute the Document in any medium either commercially ornoncommercially provided that this License the copyright notices and the licensenotice saying this License applies to the Document are reproduced in all copies andthat you add no other conditions whatsoever to those of this License You may not usetechnical measures to obstruct or control the reading or further copying of the copiesyou make or distribute However you may accept compensation in exchange for copiesIf you distribute a large enough number of copies you must also follow the conditionsin section 3

You may also lend copies under the same conditions stated above and you may publiclydisplay copies

3 COPYING IN QUANTITY

If you publish printed copies (or copies in media that commonly have printed covers) ofthe Document numbering more than 100 and the Documentrsquos license notice requiresCover Texts you must enclose the copies in covers that carry clearly and legibly allthese Cover Texts Front-Cover Texts on the front cover and Back-Cover Texts onthe back cover Both covers must also clearly and legibly identify you as the publisherof these copies The front cover must present the full title with all words of the titleequally prominent and visible You may add other material on the covers in additionCopying with changes limited to the covers as long as they preserve the title of theDocument and satisfy these conditions can be treated as verbatim copying in otherrespects

If the required texts for either cover are too voluminous to fit legibly you should putthe first ones listed (as many as fit reasonably) on the actual cover and continue therest onto adjacent pages

If you publish or distribute Opaque copies of the Document numbering more than 100you must either include a machine-readable Transparent copy along with each Opaquecopy or state in or with each Opaque copy a computer-network location from whichthe general network-using public has access to download using public-standard networkprotocols a complete Transparent copy of the Document free of added material Ifyou use the latter option you must take reasonably prudent steps when you begindistribution of Opaque copies in quantity to ensure that this Transparent copy willremain thus accessible at the stated location until at least one year after the last timeyou distribute an Opaque copy (directly or through your agents or retailers) of thatedition to the public

It is requested but not required that you contact the authors of the Document wellbefore redistributing any large number of copies to give them a chance to provide youwith an updated version of the Document

4 MODIFICATIONS

You may copy and distribute a Modified Version of the Document under the conditionsof sections 2 and 3 above provided that you release the Modified Version under preciselythis License with the Modified Version filling the role of the Document thus licensingdistribution and modification of the Modified Version to whoever possesses a copy ofit In addition you must do these things in the Modified Version

A Use in the Title Page (and on the covers if any) a title distinct from that of theDocument and from those of previous versions (which should if there were any

Appendix A GNU Free Documentation License 29

be listed in the History section of the Document) You may use the same title asa previous version if the original publisher of that version gives permission

B List on the Title Page as authors one or more persons or entities responsible forauthorship of the modifications in the Modified Version together with at least fiveof the principal authors of the Document (all of its principal authors if it has fewerthan five) unless they release you from this requirement

C State on the Title page the name of the publisher of the Modified Version as thepublisher

D Preserve all the copyright notices of the Document

E Add an appropriate copyright notice for your modifications adjacent to the othercopyright notices

F Include immediately after the copyright notices a license notice giving the publicpermission to use the Modified Version under the terms of this License in the formshown in the Addendum below

G Preserve in that license notice the full lists of Invariant Sections and required CoverTexts given in the Documentrsquos license notice

H Include an unaltered copy of this License

I Preserve the section Entitled ldquoHistoryrdquo Preserve its Title and add to it an itemstating at least the title year new authors and publisher of the Modified Versionas given on the Title Page If there is no section Entitled ldquoHistoryrdquo in the Docu-ment create one stating the title year authors and publisher of the Documentas given on its Title Page then add an item describing the Modified Version asstated in the previous sentence

J Preserve the network location if any given in the Document for public access toa Transparent copy of the Document and likewise the network locations given inthe Document for previous versions it was based on These may be placed in theldquoHistoryrdquo section You may omit a network location for a work that was publishedat least four years before the Document itself or if the original publisher of theversion it refers to gives permission

K For any section Entitled ldquoAcknowledgementsrdquo or ldquoDedicationsrdquo Preserve the Titleof the section and preserve in the section all the substance and tone of each of thecontributor acknowledgements andor dedications given therein

L Preserve all the Invariant Sections of the Document unaltered in their text andin their titles Section numbers or the equivalent are not considered part of thesection titles

M Delete any section Entitled ldquoEndorsementsrdquo Such a section may not be includedin the Modified Version

N Do not retitle any existing section to be Entitled ldquoEndorsementsrdquo or to conflict intitle with any Invariant Section

O Preserve any Warranty Disclaimers

If the Modified Version includes new front-matter sections or appendices that qualifyas Secondary Sections and contain no material copied from the Document you may atyour option designate some or all of these sections as invariant To do this add their

Appendix A GNU Free Documentation License 30

titles to the list of Invariant Sections in the Modified Versionrsquos license notice Thesetitles must be distinct from any other section titles

You may add a section Entitled ldquoEndorsementsrdquo provided it contains nothing butendorsements of your Modified Version by various partiesmdashfor example statements ofpeer review or that the text has been approved by an organization as the authoritativedefinition of a standard

You may add a passage of up to five words as a Front-Cover Text and a passage of upto 25 words as a Back-Cover Text to the end of the list of Cover Texts in the ModifiedVersion Only one passage of Front-Cover Text and one of Back-Cover Text may beadded by (or through arrangements made by) any one entity If the Document alreadyincludes a cover text for the same cover previously added by you or by arrangementmade by the same entity you are acting on behalf of you may not add another butyou may replace the old one on explicit permission from the previous publisher thatadded the old one

The author(s) and publisher(s) of the Document do not by this License give permissionto use their names for publicity for or to assert or imply endorsement of any ModifiedVersion

5 COMBINING DOCUMENTS

You may combine the Document with other documents released under this Licenseunder the terms defined in section 4 above for modified versions provided that youinclude in the combination all of the Invariant Sections of all of the original documentsunmodified and list them all as Invariant Sections of your combined work in its licensenotice and that you preserve all their Warranty Disclaimers

The combined work need only contain one copy of this License and multiple identicalInvariant Sections may be replaced with a single copy If there are multiple InvariantSections with the same name but different contents make the title of each such sectionunique by adding at the end of it in parentheses the name of the original author orpublisher of that section if known or else a unique number Make the same adjustmentto the section titles in the list of Invariant Sections in the license notice of the combinedwork

In the combination you must combine any sections Entitled ldquoHistoryrdquo in the vari-ous original documents forming one section Entitled ldquoHistoryrdquo likewise combine anysections Entitled ldquoAcknowledgementsrdquo and any sections Entitled ldquoDedicationsrdquo Youmust delete all sections Entitled ldquoEndorsementsrdquo

6 COLLECTIONS OF DOCUMENTS

You may make a collection consisting of the Document and other documents releasedunder this License and replace the individual copies of this License in the variousdocuments with a single copy that is included in the collection provided that youfollow the rules of this License for verbatim copying of each of the documents in allother respects

You may extract a single document from such a collection and distribute it individu-ally under this License provided you insert a copy of this License into the extracteddocument and follow this License in all other respects regarding verbatim copying ofthat document

Appendix A GNU Free Documentation License 31

7 AGGREGATION WITH INDEPENDENT WORKS

A compilation of the Document or its derivatives with other separate and independentdocuments or works in or on a volume of a storage or distribution medium is calledan ldquoaggregaterdquo if the copyright resulting from the compilation is not used to limit thelegal rights of the compilationrsquos users beyond what the individual works permit Whenthe Document is included in an aggregate this License does not apply to the otherworks in the aggregate which are not themselves derivative works of the Document

If the Cover Text requirement of section 3 is applicable to these copies of the Documentthen if the Document is less than one half of the entire aggregate the Documentrsquos CoverTexts may be placed on covers that bracket the Document within the aggregate or theelectronic equivalent of covers if the Document is in electronic form Otherwise theymust appear on printed covers that bracket the whole aggregate

8 TRANSLATION

Translation is considered a kind of modification so you may distribute translationsof the Document under the terms of section 4 Replacing Invariant Sections withtranslations requires special permission from their copyright holders but you mayinclude translations of some or all Invariant Sections in addition to the original versionsof these Invariant Sections You may include a translation of this License and all thelicense notices in the Document and any Warranty Disclaimers provided that youalso include the original English version of this License and the original versions ofthose notices and disclaimers In case of a disagreement between the translation andthe original version of this License or a notice or disclaimer the original version willprevail

If a section in the Document is Entitled ldquoAcknowledgementsrdquo ldquoDedicationsrdquo or ldquoHis-toryrdquo the requirement (section 4) to Preserve its Title (section 1) will typically requirechanging the actual title

9 TERMINATION

You may not copy modify sublicense or distribute the Document except as expresslyprovided under this License Any attempt otherwise to copy modify sublicense ordistribute it is void and will automatically terminate your rights under this License

However if you cease all violation of this License then your license from a particularcopyright holder is reinstated (a) provisionally unless and until the copyright holderexplicitly and finally terminates your license and (b) permanently if the copyrightholder fails to notify you of the violation by some reasonable means prior to 60 daysafter the cessation

Moreover your license from a particular copyright holder is reinstated permanently ifthe copyright holder notifies you of the violation by some reasonable means this is thefirst time you have received notice of violation of this License (for any work) from thatcopyright holder and you cure the violation prior to 30 days after your receipt of thenotice

Termination of your rights under this section does not terminate the licenses of partieswho have received copies or rights from you under this License If your rights havebeen terminated and not permanently reinstated receipt of a copy of some or all of thesame material does not give you any rights to use it

Appendix A GNU Free Documentation License 32

10 FUTURE REVISIONS OF THIS LICENSE

The Free Software Foundation may publish new revised versions of the GNU FreeDocumentation License from time to time Such new versions will be similar in spiritto the present version but may differ in detail to address new problems or concernsSee httpwwwgnuorgcopyleft

Each version of the License is given a distinguishing version number If the Documentspecifies that a particular numbered version of this License ldquoor any later versionrdquoapplies to it you have the option of following the terms and conditions either of thatspecified version or of any later version that has been published (not as a draft) bythe Free Software Foundation If the Document does not specify a version number ofthis License you may choose any version ever published (not as a draft) by the FreeSoftware Foundation If the Document specifies that a proxy can decide which futureversions of this License can be used that proxyrsquos public statement of acceptance of aversion permanently authorizes you to choose that version for the Document

11 RELICENSING

ldquoMassive Multiauthor Collaboration Siterdquo (or ldquoMMC Siterdquo) means any World WideWeb server that publishes copyrightable works and also provides prominent facilitiesfor anybody to edit those works A public wiki that anybody can edit is an example ofsuch a server A ldquoMassive Multiauthor Collaborationrdquo (or ldquoMMCrdquo) contained in thesite means any set of copyrightable works thus published on the MMC site

ldquoCC-BY-SArdquo means the Creative Commons Attribution-Share Alike 30 license pub-lished by Creative Commons Corporation a not-for-profit corporation with a principalplace of business in San Francisco California as well as future copyleft versions of thatlicense published by that same organization

ldquoIncorporaterdquo means to publish or republish a Document in whole or in part as partof another Document

An MMC is ldquoeligible for relicensingrdquo if it is licensed under this License and if all worksthat were first published under this License somewhere other than this MMC andsubsequently incorporated in whole or in part into the MMC (1) had no cover textsor invariant sections and (2) were thus incorporated prior to November 1 2008

The operator of an MMC Site may republish an MMC contained in the site underCC-BY-SA on the same site at any time before August 1 2009 provided the MMC iseligible for relicensing

Appendix A GNU Free Documentation License 33

ADDENDUM How to use this License for your documents

To use this License in a document you have written include a copy of the License in thedocument and put the following copyright and license notices just after the title page

Copyright (C) year your name

Permission is granted to copy distribute andor modify this document

under the terms of the GNU Free Documentation License Version 13

or any later version published by the Free Software Foundation

with no Invariant Sections no Front-Cover Texts and no Back-Cover

Texts A copy of the license is included in the section entitled lsquolsquoGNU

Free Documentation Licensersquorsquo

If you have Invariant Sections Front-Cover Texts and Back-Cover Texts replace theldquowith Textsrdquo line with this

with the Invariant Sections being list their titles with

the Front-Cover Texts being list and with the Back-Cover Texts

being list

If you have Invariant Sections without Cover Texts or some other combination of thethree merge those two alternatives to suit the situation

If your document contains nontrivial examples of program code we recommend releasingthese examples in parallel under your choice of free software license such as the GNUGeneral Public License to permit their use in free software

Index 34

Index

Aaccess control policy 3Author 3author specifying 10

Bbehavior prior to version 5 10behavior version 3 10behavior version 4 10binary-old-keyword-value substitution mode 9branch growth 7branch number 2branch tip 2branch default 3bug reporting 25

Ccase sensitivity file format 21checkin 3checklist for bug reports 25checkout 3checkout implicit 5ci invocation 11co invocation 12comma-v file format 1command help 7command version 7command-line option to specify a revision 7credits 1

DDate 3date formats 8date specifying 8dates file format 21default branch 3default branch setting 15deleting revisions 15description of working file 2description text specifying 8

Eempty log message 9emulation previous RCS versions 10encoding file format 20environment variables 10

Ffeatures still missing 23

file names on the command-line 7format RCSfile 20

Ggrammar file format 20

HHeader 3history 1

IId 3ident invocation 13implicit checkout circumstance 5implicit checkout locked 12implicit checkout unlocked 12instantiating a working file 2interaction model 1interactive mode 9invocation ci 11invocation co 12invocation ident 13invocation merge 14invocation rcs 14 15invocation rcsclean 16invocation rcsdiff 17invocation rcsmerge 17invocation rlog 18

Kkeyword-only substitution mode 9keyword-value substitution mode 8keyword-value-locker substitution mode 9keywords table of 3

Llayout of nodes file format 21license 1Locker 3locking a revision 15locking on implicit checkout 12locking non-strict 5locking set non-strict 15locking set strict 15locking strict 5locks in RCS file 3Log 3log message empty 9LOGNAME 11

Index 35

Mmemory limit 11merge invocation 14model interaction 1

NName 4names symbolic 3node layout file format 21non-strict locking 5number branch 2number revision 2

Oold-keyword-value substitution mode 9order of options and file names 7outdating revisions 15overview 1

Ppairing RCS and working files 7patches contributing 25problems 25projects related 1

Qquiet mode 9

Rrange of revisions specifying 7RCS file 2rcs invocation 14 15RCS version emulation 10RCS_MEM_LIMIT 11rcsclean invocation 16rcsdiff invocation 17RCSfile 4RCSfile format 20RCSINIT 10rcsmerge invocation 17removing revisions 15reporting bugs 25Revision 4revision number 2revision range specifying 7

revision specifying 7revisions tree of 3rlog invocation 18

SSource 4specifying a date 8specifying a range of revisions 7specifying a revision 7specifying a state 9specifying a suffix list 10specifying a timedate 8specifying author 10specifying description text 8specifying substitution mode 8State 4state specifying 9strict locking 5substitution mode default 8substitution mode specifying 8suffix list specifying 10symbolic names 3

TTEMP 11third-party interop file format 21Tichy Walter F 1time zone 8timedate specifying 8tip 2tip increment 7TMP 11TMPDIR 11tree of revisions 3

Uunlocking a revision 15USER 11

Vvalue-only substitution mode 9

Wwhitespace file format 21working file description 2working file instantiation 2

  • Overview
    • Credits
    • Concepts
      • Interaction model
      • Working file
      • RCS file
      • Fundamental operations
      • Keywords
        • Quick tour
          • Usage
            • Common elements
              • Revision options
              • Date option
              • Description option
              • Substitution mode option
              • Log message option
              • Misc common options
              • Environment
                • Invoking ci
                • Invoking co
                • Invoking ident
                • Invoking merge
                • Invoking rcs
                  • modern
                  • legacy
                    • Invoking rcsclean
                    • Invoking rcsdiff
                    • Invoking rcsmerge
                    • Invoking rlog
                      • Hacking
                        • File format
                          • File format grammar
                          • Additional particulars of the file format
                            • Still missing
                            • Reporting bugs
                              • GNU Free Documentation License
                              • Index
Page 27: GNU RCS · The RCS file is also known (colloquially) as the “comma-v file”, due to its name often ending in ,v (e.g., a.c,v). A revision number is a branch number followed by

Chapter 3 Hacking 24

each locked revision rlog options should have three orthogonal types selecting filesselecting revisions and selecting rlog format

bull Add format options for finer control over the output of keyword strings Eg thereshould be some way to prepend lsquo()rsquo and there should be some way to change lsquo$rsquo tosome other character to disable further substitution These options should make theresulting files uneditable like lsquo-kvrsquo

bull Add long options eg --keyword-substitution Unfortunately RCSrsquos option syntaxis incompatible with getopt Perhaps the best way is to overload rcs eg lsquorcs diff

--keyword-substitution=old filersquo instead of lsquorcsdiff -ko filersquo

bull rlog -rMN should work even if M and N have different numbers of fields so long asM is an ancestor of N or vice versa

bull rcs should evaluate options in order this allows rcs -oS -nS

bull Be able to redo your most recent checkin with minor changes

bull co -u shouldnrsquot complain about a lsquo+wrsquo working file if contents donrsquot change

bull Add a lsquo-rsquo option to take the list of file names from standard input Perhaps the filenames should be null-terminated not newline-terminated so that those that containnewlines are handled properly

bull Permit multiple optionndashfilename pairs eg co -r14 a -r15 b

bull Add an option to break a symbolic link to an RCS file instead of breaking the hardlink that it points to

bull Add ways to specify the earliest revision the most recent revision the earliest or latestrevision on a particular branch and the parent or child of some other revision

bull If a user has multiple locks perhaps ci should fall back on the method of ci -k to figureout which revision to use

bull Add an option to rcsclean to clean directories recursively

bull Write an rcsck program that repairs corrupted RCS files much as fsck repairs corruptedfile systems For example it should remove stale lock files

bull Update the date parser to use the more modern getdatey by Bellovin Salz andBerets or the even more modern getdate by Moraes None of these getdate imple-mentations are as robust as RCSrsquos old warhorse in avoiding problems like arithmeticoverflow so theyrsquoll have to be fixed first (Perhaps we can use gnulib module getdate)

bull Break up the code into a library so that itrsquos easier to write new programs that manip-ulate RCS files and so that useless code is removed from the existing programs Forexample the rcs command contains unnecessary keyword substitution baggage andthe merge command can be greatly pruned

bull Make it easier to use your favorite text editor to edit log messages etc instead ofhaving to type them in irretrievably at the terminal

bull Let the user specify a search path for default branches eg to use L as the defaultbranch if it works and M otherwise Let the user require that at least one entry inthe search path works Let the user say that later entries in the search path are readonly ie one cannot check in changes to them This should be an option settable bylsquoRCSINITrsquo

bull Add a way for a user to see which revisions affected which lines

Chapter 3 Hacking 25

bull Have rlog -nN F print just the revision number that N translates to Eg rlog -nB

F would print the highest revision on the branch B Use this to add an option -bB torcsbranch to freeze the named branch This should interact well with default branches

bull Add a co option that prints the revision number before each line as SCCSrsquos get -m

does [I implemented this for Emacs 22 as a subroutine of vc-annotate qv mdashttn]

33 Reporting bugs

To report bugs or suggest enhancements for GNU RCS please visit its homepage (httpwwwgnuorgsoftwarercs) to find directions on how to ldquofile a bug reportrdquo online orsend electronic mail to help-rcsgnuorg (If you use the web interface you donrsquot needto also send email since that is done automatically)

For bug reports please include enough information for the maintainers to reproduce theproblem Generally speaking that means

bull The RCS version command(s) and manual section(s) involved

bull Hardware and operating system names and versions

bull The contents of any input files necessary to reproduce the bug

bull The expected behavior andor output

bull A description of the problem and samples of any erroneous output

bull Options you gave to configure other than specifying installation directories

bull Anything else that you think would be helpful

When in doubt whether something is needed or not include it Itrsquos better to include toomuch than to leave out something important

Patches are welcome if possible please make them with lsquogit format-patchrsquo and includeChangeLog entries (see Section ldquoChange Logrdquo in The GNU Emacs Manual) Please followthe existing coding style

Appendix A GNU Free Documentation License 26

Appendix A GNU Free Documentation License

Version 13 3 November 2008

Copyright ccopy 2000 2001 2002 2007 2008 Free Software Foundation Inchttpfsforg

Everyone is permitted to copy and distribute verbatim copiesof this license document but changing it is not allowed

0 PREAMBLE

The purpose of this License is to make a manual textbook or other functional anduseful document free in the sense of freedom to assure everyone the effective freedomto copy and redistribute it with or without modifying it either commercially or non-commercially Secondarily this License preserves for the author and publisher a wayto get credit for their work while not being considered responsible for modificationsmade by others

This License is a kind of ldquocopyleftrdquo which means that derivative works of the documentmust themselves be free in the same sense It complements the GNU General PublicLicense which is a copyleft license designed for free software

We have designed this License in order to use it for manuals for free software becausefree software needs free documentation a free program should come with manualsproviding the same freedoms that the software does But this License is not limited tosoftware manuals it can be used for any textual work regardless of subject matter orwhether it is published as a printed book We recommend this License principally forworks whose purpose is instruction or reference

1 APPLICABILITY AND DEFINITIONS

This License applies to any manual or other work in any medium that contains anotice placed by the copyright holder saying it can be distributed under the termsof this License Such a notice grants a world-wide royalty-free license unlimited induration to use that work under the conditions stated herein The ldquoDocumentrdquobelow refers to any such manual or work Any member of the public is a licensee andis addressed as ldquoyourdquo You accept the license if you copy modify or distribute the workin a way requiring permission under copyright law

A ldquoModified Versionrdquo of the Document means any work containing the Document ora portion of it either copied verbatim or with modifications andor translated intoanother language

A ldquoSecondary Sectionrdquo is a named appendix or a front-matter section of the Documentthat deals exclusively with the relationship of the publishers or authors of the Documentto the Documentrsquos overall subject (or to related matters) and contains nothing thatcould fall directly within that overall subject (Thus if the Document is in part atextbook of mathematics a Secondary Section may not explain any mathematics) Therelationship could be a matter of historical connection with the subject or with relatedmatters or of legal commercial philosophical ethical or political position regardingthem

The ldquoInvariant Sectionsrdquo are certain Secondary Sections whose titles are designated asbeing those of Invariant Sections in the notice that says that the Document is released

Appendix A GNU Free Documentation License 27

under this License If a section does not fit the above definition of Secondary then it isnot allowed to be designated as Invariant The Document may contain zero InvariantSections If the Document does not identify any Invariant Sections then there are none

The ldquoCover Textsrdquo are certain short passages of text that are listed as Front-CoverTexts or Back-Cover Texts in the notice that says that the Document is released underthis License A Front-Cover Text may be at most 5 words and a Back-Cover Text maybe at most 25 words

A ldquoTransparentrdquo copy of the Document means a machine-readable copy representedin a format whose specification is available to the general public that is suitable forrevising the document straightforwardly with generic text editors or (for images com-posed of pixels) generic paint programs or (for drawings) some widely available drawingeditor and that is suitable for input to text formatters or for automatic translation toa variety of formats suitable for input to text formatters A copy made in an otherwiseTransparent file format whose markup or absence of markup has been arranged tothwart or discourage subsequent modification by readers is not Transparent An imageformat is not Transparent if used for any substantial amount of text A copy that isnot ldquoTransparentrdquo is called ldquoOpaquerdquo

Examples of suitable formats for Transparent copies include plain ASCII withoutmarkup Texinfo input format LaTEX input format SGML or XML using a publiclyavailable DTD and standard-conforming simple HTML PostScript or PDF designedfor human modification Examples of transparent image formats include PNG XCFand JPG Opaque formats include proprietary formats that can be read and editedonly by proprietary word processors SGML or XML for which the DTD andor pro-cessing tools are not generally available and the machine-generated HTML PostScriptor PDF produced by some word processors for output purposes only

The ldquoTitle Pagerdquo means for a printed book the title page itself plus such followingpages as are needed to hold legibly the material this License requires to appear in thetitle page For works in formats which do not have any title page as such ldquoTitle Pagerdquomeans the text near the most prominent appearance of the workrsquos title preceding thebeginning of the body of the text

The ldquopublisherrdquo means any person or entity that distributes copies of the Documentto the public

A section ldquoEntitled XYZrdquo means a named subunit of the Document whose title eitheris precisely XYZ or contains XYZ in parentheses following text that translates XYZ inanother language (Here XYZ stands for a specific section name mentioned below suchas ldquoAcknowledgementsrdquo ldquoDedicationsrdquo ldquoEndorsementsrdquo or ldquoHistoryrdquo) To ldquoPreservethe Titlerdquo of such a section when you modify the Document means that it remains asection ldquoEntitled XYZrdquo according to this definition

The Document may include Warranty Disclaimers next to the notice which states thatthis License applies to the Document These Warranty Disclaimers are considered tobe included by reference in this License but only as regards disclaiming warrantiesany other implication that these Warranty Disclaimers may have is void and has noeffect on the meaning of this License

2 VERBATIM COPYING

Appendix A GNU Free Documentation License 28

You may copy and distribute the Document in any medium either commercially ornoncommercially provided that this License the copyright notices and the licensenotice saying this License applies to the Document are reproduced in all copies andthat you add no other conditions whatsoever to those of this License You may not usetechnical measures to obstruct or control the reading or further copying of the copiesyou make or distribute However you may accept compensation in exchange for copiesIf you distribute a large enough number of copies you must also follow the conditionsin section 3

You may also lend copies under the same conditions stated above and you may publiclydisplay copies

3 COPYING IN QUANTITY

If you publish printed copies (or copies in media that commonly have printed covers) ofthe Document numbering more than 100 and the Documentrsquos license notice requiresCover Texts you must enclose the copies in covers that carry clearly and legibly allthese Cover Texts Front-Cover Texts on the front cover and Back-Cover Texts onthe back cover Both covers must also clearly and legibly identify you as the publisherof these copies The front cover must present the full title with all words of the titleequally prominent and visible You may add other material on the covers in additionCopying with changes limited to the covers as long as they preserve the title of theDocument and satisfy these conditions can be treated as verbatim copying in otherrespects

If the required texts for either cover are too voluminous to fit legibly you should putthe first ones listed (as many as fit reasonably) on the actual cover and continue therest onto adjacent pages

If you publish or distribute Opaque copies of the Document numbering more than 100you must either include a machine-readable Transparent copy along with each Opaquecopy or state in or with each Opaque copy a computer-network location from whichthe general network-using public has access to download using public-standard networkprotocols a complete Transparent copy of the Document free of added material Ifyou use the latter option you must take reasonably prudent steps when you begindistribution of Opaque copies in quantity to ensure that this Transparent copy willremain thus accessible at the stated location until at least one year after the last timeyou distribute an Opaque copy (directly or through your agents or retailers) of thatedition to the public

It is requested but not required that you contact the authors of the Document wellbefore redistributing any large number of copies to give them a chance to provide youwith an updated version of the Document

4 MODIFICATIONS

You may copy and distribute a Modified Version of the Document under the conditionsof sections 2 and 3 above provided that you release the Modified Version under preciselythis License with the Modified Version filling the role of the Document thus licensingdistribution and modification of the Modified Version to whoever possesses a copy ofit In addition you must do these things in the Modified Version

A Use in the Title Page (and on the covers if any) a title distinct from that of theDocument and from those of previous versions (which should if there were any

Appendix A GNU Free Documentation License 29

be listed in the History section of the Document) You may use the same title asa previous version if the original publisher of that version gives permission

B List on the Title Page as authors one or more persons or entities responsible forauthorship of the modifications in the Modified Version together with at least fiveof the principal authors of the Document (all of its principal authors if it has fewerthan five) unless they release you from this requirement

C State on the Title page the name of the publisher of the Modified Version as thepublisher

D Preserve all the copyright notices of the Document

E Add an appropriate copyright notice for your modifications adjacent to the othercopyright notices

F Include immediately after the copyright notices a license notice giving the publicpermission to use the Modified Version under the terms of this License in the formshown in the Addendum below

G Preserve in that license notice the full lists of Invariant Sections and required CoverTexts given in the Documentrsquos license notice

H Include an unaltered copy of this License

I Preserve the section Entitled ldquoHistoryrdquo Preserve its Title and add to it an itemstating at least the title year new authors and publisher of the Modified Versionas given on the Title Page If there is no section Entitled ldquoHistoryrdquo in the Docu-ment create one stating the title year authors and publisher of the Documentas given on its Title Page then add an item describing the Modified Version asstated in the previous sentence

J Preserve the network location if any given in the Document for public access toa Transparent copy of the Document and likewise the network locations given inthe Document for previous versions it was based on These may be placed in theldquoHistoryrdquo section You may omit a network location for a work that was publishedat least four years before the Document itself or if the original publisher of theversion it refers to gives permission

K For any section Entitled ldquoAcknowledgementsrdquo or ldquoDedicationsrdquo Preserve the Titleof the section and preserve in the section all the substance and tone of each of thecontributor acknowledgements andor dedications given therein

L Preserve all the Invariant Sections of the Document unaltered in their text andin their titles Section numbers or the equivalent are not considered part of thesection titles

M Delete any section Entitled ldquoEndorsementsrdquo Such a section may not be includedin the Modified Version

N Do not retitle any existing section to be Entitled ldquoEndorsementsrdquo or to conflict intitle with any Invariant Section

O Preserve any Warranty Disclaimers

If the Modified Version includes new front-matter sections or appendices that qualifyas Secondary Sections and contain no material copied from the Document you may atyour option designate some or all of these sections as invariant To do this add their

Appendix A GNU Free Documentation License 30

titles to the list of Invariant Sections in the Modified Versionrsquos license notice Thesetitles must be distinct from any other section titles

You may add a section Entitled ldquoEndorsementsrdquo provided it contains nothing butendorsements of your Modified Version by various partiesmdashfor example statements ofpeer review or that the text has been approved by an organization as the authoritativedefinition of a standard

You may add a passage of up to five words as a Front-Cover Text and a passage of upto 25 words as a Back-Cover Text to the end of the list of Cover Texts in the ModifiedVersion Only one passage of Front-Cover Text and one of Back-Cover Text may beadded by (or through arrangements made by) any one entity If the Document alreadyincludes a cover text for the same cover previously added by you or by arrangementmade by the same entity you are acting on behalf of you may not add another butyou may replace the old one on explicit permission from the previous publisher thatadded the old one

The author(s) and publisher(s) of the Document do not by this License give permissionto use their names for publicity for or to assert or imply endorsement of any ModifiedVersion

5 COMBINING DOCUMENTS

You may combine the Document with other documents released under this Licenseunder the terms defined in section 4 above for modified versions provided that youinclude in the combination all of the Invariant Sections of all of the original documentsunmodified and list them all as Invariant Sections of your combined work in its licensenotice and that you preserve all their Warranty Disclaimers

The combined work need only contain one copy of this License and multiple identicalInvariant Sections may be replaced with a single copy If there are multiple InvariantSections with the same name but different contents make the title of each such sectionunique by adding at the end of it in parentheses the name of the original author orpublisher of that section if known or else a unique number Make the same adjustmentto the section titles in the list of Invariant Sections in the license notice of the combinedwork

In the combination you must combine any sections Entitled ldquoHistoryrdquo in the vari-ous original documents forming one section Entitled ldquoHistoryrdquo likewise combine anysections Entitled ldquoAcknowledgementsrdquo and any sections Entitled ldquoDedicationsrdquo Youmust delete all sections Entitled ldquoEndorsementsrdquo

6 COLLECTIONS OF DOCUMENTS

You may make a collection consisting of the Document and other documents releasedunder this License and replace the individual copies of this License in the variousdocuments with a single copy that is included in the collection provided that youfollow the rules of this License for verbatim copying of each of the documents in allother respects

You may extract a single document from such a collection and distribute it individu-ally under this License provided you insert a copy of this License into the extracteddocument and follow this License in all other respects regarding verbatim copying ofthat document

Appendix A GNU Free Documentation License 31

7 AGGREGATION WITH INDEPENDENT WORKS

A compilation of the Document or its derivatives with other separate and independentdocuments or works in or on a volume of a storage or distribution medium is calledan ldquoaggregaterdquo if the copyright resulting from the compilation is not used to limit thelegal rights of the compilationrsquos users beyond what the individual works permit Whenthe Document is included in an aggregate this License does not apply to the otherworks in the aggregate which are not themselves derivative works of the Document

If the Cover Text requirement of section 3 is applicable to these copies of the Documentthen if the Document is less than one half of the entire aggregate the Documentrsquos CoverTexts may be placed on covers that bracket the Document within the aggregate or theelectronic equivalent of covers if the Document is in electronic form Otherwise theymust appear on printed covers that bracket the whole aggregate

8 TRANSLATION

Translation is considered a kind of modification so you may distribute translationsof the Document under the terms of section 4 Replacing Invariant Sections withtranslations requires special permission from their copyright holders but you mayinclude translations of some or all Invariant Sections in addition to the original versionsof these Invariant Sections You may include a translation of this License and all thelicense notices in the Document and any Warranty Disclaimers provided that youalso include the original English version of this License and the original versions ofthose notices and disclaimers In case of a disagreement between the translation andthe original version of this License or a notice or disclaimer the original version willprevail

If a section in the Document is Entitled ldquoAcknowledgementsrdquo ldquoDedicationsrdquo or ldquoHis-toryrdquo the requirement (section 4) to Preserve its Title (section 1) will typically requirechanging the actual title

9 TERMINATION

You may not copy modify sublicense or distribute the Document except as expresslyprovided under this License Any attempt otherwise to copy modify sublicense ordistribute it is void and will automatically terminate your rights under this License

However if you cease all violation of this License then your license from a particularcopyright holder is reinstated (a) provisionally unless and until the copyright holderexplicitly and finally terminates your license and (b) permanently if the copyrightholder fails to notify you of the violation by some reasonable means prior to 60 daysafter the cessation

Moreover your license from a particular copyright holder is reinstated permanently ifthe copyright holder notifies you of the violation by some reasonable means this is thefirst time you have received notice of violation of this License (for any work) from thatcopyright holder and you cure the violation prior to 30 days after your receipt of thenotice

Termination of your rights under this section does not terminate the licenses of partieswho have received copies or rights from you under this License If your rights havebeen terminated and not permanently reinstated receipt of a copy of some or all of thesame material does not give you any rights to use it

Appendix A GNU Free Documentation License 32

10 FUTURE REVISIONS OF THIS LICENSE

The Free Software Foundation may publish new revised versions of the GNU FreeDocumentation License from time to time Such new versions will be similar in spiritto the present version but may differ in detail to address new problems or concernsSee httpwwwgnuorgcopyleft

Each version of the License is given a distinguishing version number If the Documentspecifies that a particular numbered version of this License ldquoor any later versionrdquoapplies to it you have the option of following the terms and conditions either of thatspecified version or of any later version that has been published (not as a draft) bythe Free Software Foundation If the Document does not specify a version number ofthis License you may choose any version ever published (not as a draft) by the FreeSoftware Foundation If the Document specifies that a proxy can decide which futureversions of this License can be used that proxyrsquos public statement of acceptance of aversion permanently authorizes you to choose that version for the Document

11 RELICENSING

ldquoMassive Multiauthor Collaboration Siterdquo (or ldquoMMC Siterdquo) means any World WideWeb server that publishes copyrightable works and also provides prominent facilitiesfor anybody to edit those works A public wiki that anybody can edit is an example ofsuch a server A ldquoMassive Multiauthor Collaborationrdquo (or ldquoMMCrdquo) contained in thesite means any set of copyrightable works thus published on the MMC site

ldquoCC-BY-SArdquo means the Creative Commons Attribution-Share Alike 30 license pub-lished by Creative Commons Corporation a not-for-profit corporation with a principalplace of business in San Francisco California as well as future copyleft versions of thatlicense published by that same organization

ldquoIncorporaterdquo means to publish or republish a Document in whole or in part as partof another Document

An MMC is ldquoeligible for relicensingrdquo if it is licensed under this License and if all worksthat were first published under this License somewhere other than this MMC andsubsequently incorporated in whole or in part into the MMC (1) had no cover textsor invariant sections and (2) were thus incorporated prior to November 1 2008

The operator of an MMC Site may republish an MMC contained in the site underCC-BY-SA on the same site at any time before August 1 2009 provided the MMC iseligible for relicensing

Appendix A GNU Free Documentation License 33

ADDENDUM How to use this License for your documents

To use this License in a document you have written include a copy of the License in thedocument and put the following copyright and license notices just after the title page

Copyright (C) year your name

Permission is granted to copy distribute andor modify this document

under the terms of the GNU Free Documentation License Version 13

or any later version published by the Free Software Foundation

with no Invariant Sections no Front-Cover Texts and no Back-Cover

Texts A copy of the license is included in the section entitled lsquolsquoGNU

Free Documentation Licensersquorsquo

If you have Invariant Sections Front-Cover Texts and Back-Cover Texts replace theldquowith Textsrdquo line with this

with the Invariant Sections being list their titles with

the Front-Cover Texts being list and with the Back-Cover Texts

being list

If you have Invariant Sections without Cover Texts or some other combination of thethree merge those two alternatives to suit the situation

If your document contains nontrivial examples of program code we recommend releasingthese examples in parallel under your choice of free software license such as the GNUGeneral Public License to permit their use in free software

Index 34

Index

Aaccess control policy 3Author 3author specifying 10

Bbehavior prior to version 5 10behavior version 3 10behavior version 4 10binary-old-keyword-value substitution mode 9branch growth 7branch number 2branch tip 2branch default 3bug reporting 25

Ccase sensitivity file format 21checkin 3checklist for bug reports 25checkout 3checkout implicit 5ci invocation 11co invocation 12comma-v file format 1command help 7command version 7command-line option to specify a revision 7credits 1

DDate 3date formats 8date specifying 8dates file format 21default branch 3default branch setting 15deleting revisions 15description of working file 2description text specifying 8

Eempty log message 9emulation previous RCS versions 10encoding file format 20environment variables 10

Ffeatures still missing 23

file names on the command-line 7format RCSfile 20

Ggrammar file format 20

HHeader 3history 1

IId 3ident invocation 13implicit checkout circumstance 5implicit checkout locked 12implicit checkout unlocked 12instantiating a working file 2interaction model 1interactive mode 9invocation ci 11invocation co 12invocation ident 13invocation merge 14invocation rcs 14 15invocation rcsclean 16invocation rcsdiff 17invocation rcsmerge 17invocation rlog 18

Kkeyword-only substitution mode 9keyword-value substitution mode 8keyword-value-locker substitution mode 9keywords table of 3

Llayout of nodes file format 21license 1Locker 3locking a revision 15locking on implicit checkout 12locking non-strict 5locking set non-strict 15locking set strict 15locking strict 5locks in RCS file 3Log 3log message empty 9LOGNAME 11

Index 35

Mmemory limit 11merge invocation 14model interaction 1

NName 4names symbolic 3node layout file format 21non-strict locking 5number branch 2number revision 2

Oold-keyword-value substitution mode 9order of options and file names 7outdating revisions 15overview 1

Ppairing RCS and working files 7patches contributing 25problems 25projects related 1

Qquiet mode 9

Rrange of revisions specifying 7RCS file 2rcs invocation 14 15RCS version emulation 10RCS_MEM_LIMIT 11rcsclean invocation 16rcsdiff invocation 17RCSfile 4RCSfile format 20RCSINIT 10rcsmerge invocation 17removing revisions 15reporting bugs 25Revision 4revision number 2revision range specifying 7

revision specifying 7revisions tree of 3rlog invocation 18

SSource 4specifying a date 8specifying a range of revisions 7specifying a revision 7specifying a state 9specifying a suffix list 10specifying a timedate 8specifying author 10specifying description text 8specifying substitution mode 8State 4state specifying 9strict locking 5substitution mode default 8substitution mode specifying 8suffix list specifying 10symbolic names 3

TTEMP 11third-party interop file format 21Tichy Walter F 1time zone 8timedate specifying 8tip 2tip increment 7TMP 11TMPDIR 11tree of revisions 3

Uunlocking a revision 15USER 11

Vvalue-only substitution mode 9

Wwhitespace file format 21working file description 2working file instantiation 2

  • Overview
    • Credits
    • Concepts
      • Interaction model
      • Working file
      • RCS file
      • Fundamental operations
      • Keywords
        • Quick tour
          • Usage
            • Common elements
              • Revision options
              • Date option
              • Description option
              • Substitution mode option
              • Log message option
              • Misc common options
              • Environment
                • Invoking ci
                • Invoking co
                • Invoking ident
                • Invoking merge
                • Invoking rcs
                  • modern
                  • legacy
                    • Invoking rcsclean
                    • Invoking rcsdiff
                    • Invoking rcsmerge
                    • Invoking rlog
                      • Hacking
                        • File format
                          • File format grammar
                          • Additional particulars of the file format
                            • Still missing
                            • Reporting bugs
                              • GNU Free Documentation License
                              • Index
Page 28: GNU RCS · The RCS file is also known (colloquially) as the “comma-v file”, due to its name often ending in ,v (e.g., a.c,v). A revision number is a branch number followed by

Chapter 3 Hacking 25

bull Have rlog -nN F print just the revision number that N translates to Eg rlog -nB

F would print the highest revision on the branch B Use this to add an option -bB torcsbranch to freeze the named branch This should interact well with default branches

bull Add a co option that prints the revision number before each line as SCCSrsquos get -m

does [I implemented this for Emacs 22 as a subroutine of vc-annotate qv mdashttn]

33 Reporting bugs

To report bugs or suggest enhancements for GNU RCS please visit its homepage (httpwwwgnuorgsoftwarercs) to find directions on how to ldquofile a bug reportrdquo online orsend electronic mail to help-rcsgnuorg (If you use the web interface you donrsquot needto also send email since that is done automatically)

For bug reports please include enough information for the maintainers to reproduce theproblem Generally speaking that means

bull The RCS version command(s) and manual section(s) involved

bull Hardware and operating system names and versions

bull The contents of any input files necessary to reproduce the bug

bull The expected behavior andor output

bull A description of the problem and samples of any erroneous output

bull Options you gave to configure other than specifying installation directories

bull Anything else that you think would be helpful

When in doubt whether something is needed or not include it Itrsquos better to include toomuch than to leave out something important

Patches are welcome if possible please make them with lsquogit format-patchrsquo and includeChangeLog entries (see Section ldquoChange Logrdquo in The GNU Emacs Manual) Please followthe existing coding style

Appendix A GNU Free Documentation License 26

Appendix A GNU Free Documentation License

Version 13 3 November 2008

Copyright ccopy 2000 2001 2002 2007 2008 Free Software Foundation Inchttpfsforg

Everyone is permitted to copy and distribute verbatim copiesof this license document but changing it is not allowed

0 PREAMBLE

The purpose of this License is to make a manual textbook or other functional anduseful document free in the sense of freedom to assure everyone the effective freedomto copy and redistribute it with or without modifying it either commercially or non-commercially Secondarily this License preserves for the author and publisher a wayto get credit for their work while not being considered responsible for modificationsmade by others

This License is a kind of ldquocopyleftrdquo which means that derivative works of the documentmust themselves be free in the same sense It complements the GNU General PublicLicense which is a copyleft license designed for free software

We have designed this License in order to use it for manuals for free software becausefree software needs free documentation a free program should come with manualsproviding the same freedoms that the software does But this License is not limited tosoftware manuals it can be used for any textual work regardless of subject matter orwhether it is published as a printed book We recommend this License principally forworks whose purpose is instruction or reference

1 APPLICABILITY AND DEFINITIONS

This License applies to any manual or other work in any medium that contains anotice placed by the copyright holder saying it can be distributed under the termsof this License Such a notice grants a world-wide royalty-free license unlimited induration to use that work under the conditions stated herein The ldquoDocumentrdquobelow refers to any such manual or work Any member of the public is a licensee andis addressed as ldquoyourdquo You accept the license if you copy modify or distribute the workin a way requiring permission under copyright law

A ldquoModified Versionrdquo of the Document means any work containing the Document ora portion of it either copied verbatim or with modifications andor translated intoanother language

A ldquoSecondary Sectionrdquo is a named appendix or a front-matter section of the Documentthat deals exclusively with the relationship of the publishers or authors of the Documentto the Documentrsquos overall subject (or to related matters) and contains nothing thatcould fall directly within that overall subject (Thus if the Document is in part atextbook of mathematics a Secondary Section may not explain any mathematics) Therelationship could be a matter of historical connection with the subject or with relatedmatters or of legal commercial philosophical ethical or political position regardingthem

The ldquoInvariant Sectionsrdquo are certain Secondary Sections whose titles are designated asbeing those of Invariant Sections in the notice that says that the Document is released

Appendix A GNU Free Documentation License 27

under this License If a section does not fit the above definition of Secondary then it isnot allowed to be designated as Invariant The Document may contain zero InvariantSections If the Document does not identify any Invariant Sections then there are none

The ldquoCover Textsrdquo are certain short passages of text that are listed as Front-CoverTexts or Back-Cover Texts in the notice that says that the Document is released underthis License A Front-Cover Text may be at most 5 words and a Back-Cover Text maybe at most 25 words

A ldquoTransparentrdquo copy of the Document means a machine-readable copy representedin a format whose specification is available to the general public that is suitable forrevising the document straightforwardly with generic text editors or (for images com-posed of pixels) generic paint programs or (for drawings) some widely available drawingeditor and that is suitable for input to text formatters or for automatic translation toa variety of formats suitable for input to text formatters A copy made in an otherwiseTransparent file format whose markup or absence of markup has been arranged tothwart or discourage subsequent modification by readers is not Transparent An imageformat is not Transparent if used for any substantial amount of text A copy that isnot ldquoTransparentrdquo is called ldquoOpaquerdquo

Examples of suitable formats for Transparent copies include plain ASCII withoutmarkup Texinfo input format LaTEX input format SGML or XML using a publiclyavailable DTD and standard-conforming simple HTML PostScript or PDF designedfor human modification Examples of transparent image formats include PNG XCFand JPG Opaque formats include proprietary formats that can be read and editedonly by proprietary word processors SGML or XML for which the DTD andor pro-cessing tools are not generally available and the machine-generated HTML PostScriptor PDF produced by some word processors for output purposes only

The ldquoTitle Pagerdquo means for a printed book the title page itself plus such followingpages as are needed to hold legibly the material this License requires to appear in thetitle page For works in formats which do not have any title page as such ldquoTitle Pagerdquomeans the text near the most prominent appearance of the workrsquos title preceding thebeginning of the body of the text

The ldquopublisherrdquo means any person or entity that distributes copies of the Documentto the public

A section ldquoEntitled XYZrdquo means a named subunit of the Document whose title eitheris precisely XYZ or contains XYZ in parentheses following text that translates XYZ inanother language (Here XYZ stands for a specific section name mentioned below suchas ldquoAcknowledgementsrdquo ldquoDedicationsrdquo ldquoEndorsementsrdquo or ldquoHistoryrdquo) To ldquoPreservethe Titlerdquo of such a section when you modify the Document means that it remains asection ldquoEntitled XYZrdquo according to this definition

The Document may include Warranty Disclaimers next to the notice which states thatthis License applies to the Document These Warranty Disclaimers are considered tobe included by reference in this License but only as regards disclaiming warrantiesany other implication that these Warranty Disclaimers may have is void and has noeffect on the meaning of this License

2 VERBATIM COPYING

Appendix A GNU Free Documentation License 28

You may copy and distribute the Document in any medium either commercially ornoncommercially provided that this License the copyright notices and the licensenotice saying this License applies to the Document are reproduced in all copies andthat you add no other conditions whatsoever to those of this License You may not usetechnical measures to obstruct or control the reading or further copying of the copiesyou make or distribute However you may accept compensation in exchange for copiesIf you distribute a large enough number of copies you must also follow the conditionsin section 3

You may also lend copies under the same conditions stated above and you may publiclydisplay copies

3 COPYING IN QUANTITY

If you publish printed copies (or copies in media that commonly have printed covers) ofthe Document numbering more than 100 and the Documentrsquos license notice requiresCover Texts you must enclose the copies in covers that carry clearly and legibly allthese Cover Texts Front-Cover Texts on the front cover and Back-Cover Texts onthe back cover Both covers must also clearly and legibly identify you as the publisherof these copies The front cover must present the full title with all words of the titleequally prominent and visible You may add other material on the covers in additionCopying with changes limited to the covers as long as they preserve the title of theDocument and satisfy these conditions can be treated as verbatim copying in otherrespects

If the required texts for either cover are too voluminous to fit legibly you should putthe first ones listed (as many as fit reasonably) on the actual cover and continue therest onto adjacent pages

If you publish or distribute Opaque copies of the Document numbering more than 100you must either include a machine-readable Transparent copy along with each Opaquecopy or state in or with each Opaque copy a computer-network location from whichthe general network-using public has access to download using public-standard networkprotocols a complete Transparent copy of the Document free of added material Ifyou use the latter option you must take reasonably prudent steps when you begindistribution of Opaque copies in quantity to ensure that this Transparent copy willremain thus accessible at the stated location until at least one year after the last timeyou distribute an Opaque copy (directly or through your agents or retailers) of thatedition to the public

It is requested but not required that you contact the authors of the Document wellbefore redistributing any large number of copies to give them a chance to provide youwith an updated version of the Document

4 MODIFICATIONS

You may copy and distribute a Modified Version of the Document under the conditionsof sections 2 and 3 above provided that you release the Modified Version under preciselythis License with the Modified Version filling the role of the Document thus licensingdistribution and modification of the Modified Version to whoever possesses a copy ofit In addition you must do these things in the Modified Version

A Use in the Title Page (and on the covers if any) a title distinct from that of theDocument and from those of previous versions (which should if there were any

Appendix A GNU Free Documentation License 29

be listed in the History section of the Document) You may use the same title asa previous version if the original publisher of that version gives permission

B List on the Title Page as authors one or more persons or entities responsible forauthorship of the modifications in the Modified Version together with at least fiveof the principal authors of the Document (all of its principal authors if it has fewerthan five) unless they release you from this requirement

C State on the Title page the name of the publisher of the Modified Version as thepublisher

D Preserve all the copyright notices of the Document

E Add an appropriate copyright notice for your modifications adjacent to the othercopyright notices

F Include immediately after the copyright notices a license notice giving the publicpermission to use the Modified Version under the terms of this License in the formshown in the Addendum below

G Preserve in that license notice the full lists of Invariant Sections and required CoverTexts given in the Documentrsquos license notice

H Include an unaltered copy of this License

I Preserve the section Entitled ldquoHistoryrdquo Preserve its Title and add to it an itemstating at least the title year new authors and publisher of the Modified Versionas given on the Title Page If there is no section Entitled ldquoHistoryrdquo in the Docu-ment create one stating the title year authors and publisher of the Documentas given on its Title Page then add an item describing the Modified Version asstated in the previous sentence

J Preserve the network location if any given in the Document for public access toa Transparent copy of the Document and likewise the network locations given inthe Document for previous versions it was based on These may be placed in theldquoHistoryrdquo section You may omit a network location for a work that was publishedat least four years before the Document itself or if the original publisher of theversion it refers to gives permission

K For any section Entitled ldquoAcknowledgementsrdquo or ldquoDedicationsrdquo Preserve the Titleof the section and preserve in the section all the substance and tone of each of thecontributor acknowledgements andor dedications given therein

L Preserve all the Invariant Sections of the Document unaltered in their text andin their titles Section numbers or the equivalent are not considered part of thesection titles

M Delete any section Entitled ldquoEndorsementsrdquo Such a section may not be includedin the Modified Version

N Do not retitle any existing section to be Entitled ldquoEndorsementsrdquo or to conflict intitle with any Invariant Section

O Preserve any Warranty Disclaimers

If the Modified Version includes new front-matter sections or appendices that qualifyas Secondary Sections and contain no material copied from the Document you may atyour option designate some or all of these sections as invariant To do this add their

Appendix A GNU Free Documentation License 30

titles to the list of Invariant Sections in the Modified Versionrsquos license notice Thesetitles must be distinct from any other section titles

You may add a section Entitled ldquoEndorsementsrdquo provided it contains nothing butendorsements of your Modified Version by various partiesmdashfor example statements ofpeer review or that the text has been approved by an organization as the authoritativedefinition of a standard

You may add a passage of up to five words as a Front-Cover Text and a passage of upto 25 words as a Back-Cover Text to the end of the list of Cover Texts in the ModifiedVersion Only one passage of Front-Cover Text and one of Back-Cover Text may beadded by (or through arrangements made by) any one entity If the Document alreadyincludes a cover text for the same cover previously added by you or by arrangementmade by the same entity you are acting on behalf of you may not add another butyou may replace the old one on explicit permission from the previous publisher thatadded the old one

The author(s) and publisher(s) of the Document do not by this License give permissionto use their names for publicity for or to assert or imply endorsement of any ModifiedVersion

5 COMBINING DOCUMENTS

You may combine the Document with other documents released under this Licenseunder the terms defined in section 4 above for modified versions provided that youinclude in the combination all of the Invariant Sections of all of the original documentsunmodified and list them all as Invariant Sections of your combined work in its licensenotice and that you preserve all their Warranty Disclaimers

The combined work need only contain one copy of this License and multiple identicalInvariant Sections may be replaced with a single copy If there are multiple InvariantSections with the same name but different contents make the title of each such sectionunique by adding at the end of it in parentheses the name of the original author orpublisher of that section if known or else a unique number Make the same adjustmentto the section titles in the list of Invariant Sections in the license notice of the combinedwork

In the combination you must combine any sections Entitled ldquoHistoryrdquo in the vari-ous original documents forming one section Entitled ldquoHistoryrdquo likewise combine anysections Entitled ldquoAcknowledgementsrdquo and any sections Entitled ldquoDedicationsrdquo Youmust delete all sections Entitled ldquoEndorsementsrdquo

6 COLLECTIONS OF DOCUMENTS

You may make a collection consisting of the Document and other documents releasedunder this License and replace the individual copies of this License in the variousdocuments with a single copy that is included in the collection provided that youfollow the rules of this License for verbatim copying of each of the documents in allother respects

You may extract a single document from such a collection and distribute it individu-ally under this License provided you insert a copy of this License into the extracteddocument and follow this License in all other respects regarding verbatim copying ofthat document

Appendix A GNU Free Documentation License 31

7 AGGREGATION WITH INDEPENDENT WORKS

A compilation of the Document or its derivatives with other separate and independentdocuments or works in or on a volume of a storage or distribution medium is calledan ldquoaggregaterdquo if the copyright resulting from the compilation is not used to limit thelegal rights of the compilationrsquos users beyond what the individual works permit Whenthe Document is included in an aggregate this License does not apply to the otherworks in the aggregate which are not themselves derivative works of the Document

If the Cover Text requirement of section 3 is applicable to these copies of the Documentthen if the Document is less than one half of the entire aggregate the Documentrsquos CoverTexts may be placed on covers that bracket the Document within the aggregate or theelectronic equivalent of covers if the Document is in electronic form Otherwise theymust appear on printed covers that bracket the whole aggregate

8 TRANSLATION

Translation is considered a kind of modification so you may distribute translationsof the Document under the terms of section 4 Replacing Invariant Sections withtranslations requires special permission from their copyright holders but you mayinclude translations of some or all Invariant Sections in addition to the original versionsof these Invariant Sections You may include a translation of this License and all thelicense notices in the Document and any Warranty Disclaimers provided that youalso include the original English version of this License and the original versions ofthose notices and disclaimers In case of a disagreement between the translation andthe original version of this License or a notice or disclaimer the original version willprevail

If a section in the Document is Entitled ldquoAcknowledgementsrdquo ldquoDedicationsrdquo or ldquoHis-toryrdquo the requirement (section 4) to Preserve its Title (section 1) will typically requirechanging the actual title

9 TERMINATION

You may not copy modify sublicense or distribute the Document except as expresslyprovided under this License Any attempt otherwise to copy modify sublicense ordistribute it is void and will automatically terminate your rights under this License

However if you cease all violation of this License then your license from a particularcopyright holder is reinstated (a) provisionally unless and until the copyright holderexplicitly and finally terminates your license and (b) permanently if the copyrightholder fails to notify you of the violation by some reasonable means prior to 60 daysafter the cessation

Moreover your license from a particular copyright holder is reinstated permanently ifthe copyright holder notifies you of the violation by some reasonable means this is thefirst time you have received notice of violation of this License (for any work) from thatcopyright holder and you cure the violation prior to 30 days after your receipt of thenotice

Termination of your rights under this section does not terminate the licenses of partieswho have received copies or rights from you under this License If your rights havebeen terminated and not permanently reinstated receipt of a copy of some or all of thesame material does not give you any rights to use it

Appendix A GNU Free Documentation License 32

10 FUTURE REVISIONS OF THIS LICENSE

The Free Software Foundation may publish new revised versions of the GNU FreeDocumentation License from time to time Such new versions will be similar in spiritto the present version but may differ in detail to address new problems or concernsSee httpwwwgnuorgcopyleft

Each version of the License is given a distinguishing version number If the Documentspecifies that a particular numbered version of this License ldquoor any later versionrdquoapplies to it you have the option of following the terms and conditions either of thatspecified version or of any later version that has been published (not as a draft) bythe Free Software Foundation If the Document does not specify a version number ofthis License you may choose any version ever published (not as a draft) by the FreeSoftware Foundation If the Document specifies that a proxy can decide which futureversions of this License can be used that proxyrsquos public statement of acceptance of aversion permanently authorizes you to choose that version for the Document

11 RELICENSING

ldquoMassive Multiauthor Collaboration Siterdquo (or ldquoMMC Siterdquo) means any World WideWeb server that publishes copyrightable works and also provides prominent facilitiesfor anybody to edit those works A public wiki that anybody can edit is an example ofsuch a server A ldquoMassive Multiauthor Collaborationrdquo (or ldquoMMCrdquo) contained in thesite means any set of copyrightable works thus published on the MMC site

ldquoCC-BY-SArdquo means the Creative Commons Attribution-Share Alike 30 license pub-lished by Creative Commons Corporation a not-for-profit corporation with a principalplace of business in San Francisco California as well as future copyleft versions of thatlicense published by that same organization

ldquoIncorporaterdquo means to publish or republish a Document in whole or in part as partof another Document

An MMC is ldquoeligible for relicensingrdquo if it is licensed under this License and if all worksthat were first published under this License somewhere other than this MMC andsubsequently incorporated in whole or in part into the MMC (1) had no cover textsor invariant sections and (2) were thus incorporated prior to November 1 2008

The operator of an MMC Site may republish an MMC contained in the site underCC-BY-SA on the same site at any time before August 1 2009 provided the MMC iseligible for relicensing

Appendix A GNU Free Documentation License 33

ADDENDUM How to use this License for your documents

To use this License in a document you have written include a copy of the License in thedocument and put the following copyright and license notices just after the title page

Copyright (C) year your name

Permission is granted to copy distribute andor modify this document

under the terms of the GNU Free Documentation License Version 13

or any later version published by the Free Software Foundation

with no Invariant Sections no Front-Cover Texts and no Back-Cover

Texts A copy of the license is included in the section entitled lsquolsquoGNU

Free Documentation Licensersquorsquo

If you have Invariant Sections Front-Cover Texts and Back-Cover Texts replace theldquowith Textsrdquo line with this

with the Invariant Sections being list their titles with

the Front-Cover Texts being list and with the Back-Cover Texts

being list

If you have Invariant Sections without Cover Texts or some other combination of thethree merge those two alternatives to suit the situation

If your document contains nontrivial examples of program code we recommend releasingthese examples in parallel under your choice of free software license such as the GNUGeneral Public License to permit their use in free software

Index 34

Index

Aaccess control policy 3Author 3author specifying 10

Bbehavior prior to version 5 10behavior version 3 10behavior version 4 10binary-old-keyword-value substitution mode 9branch growth 7branch number 2branch tip 2branch default 3bug reporting 25

Ccase sensitivity file format 21checkin 3checklist for bug reports 25checkout 3checkout implicit 5ci invocation 11co invocation 12comma-v file format 1command help 7command version 7command-line option to specify a revision 7credits 1

DDate 3date formats 8date specifying 8dates file format 21default branch 3default branch setting 15deleting revisions 15description of working file 2description text specifying 8

Eempty log message 9emulation previous RCS versions 10encoding file format 20environment variables 10

Ffeatures still missing 23

file names on the command-line 7format RCSfile 20

Ggrammar file format 20

HHeader 3history 1

IId 3ident invocation 13implicit checkout circumstance 5implicit checkout locked 12implicit checkout unlocked 12instantiating a working file 2interaction model 1interactive mode 9invocation ci 11invocation co 12invocation ident 13invocation merge 14invocation rcs 14 15invocation rcsclean 16invocation rcsdiff 17invocation rcsmerge 17invocation rlog 18

Kkeyword-only substitution mode 9keyword-value substitution mode 8keyword-value-locker substitution mode 9keywords table of 3

Llayout of nodes file format 21license 1Locker 3locking a revision 15locking on implicit checkout 12locking non-strict 5locking set non-strict 15locking set strict 15locking strict 5locks in RCS file 3Log 3log message empty 9LOGNAME 11

Index 35

Mmemory limit 11merge invocation 14model interaction 1

NName 4names symbolic 3node layout file format 21non-strict locking 5number branch 2number revision 2

Oold-keyword-value substitution mode 9order of options and file names 7outdating revisions 15overview 1

Ppairing RCS and working files 7patches contributing 25problems 25projects related 1

Qquiet mode 9

Rrange of revisions specifying 7RCS file 2rcs invocation 14 15RCS version emulation 10RCS_MEM_LIMIT 11rcsclean invocation 16rcsdiff invocation 17RCSfile 4RCSfile format 20RCSINIT 10rcsmerge invocation 17removing revisions 15reporting bugs 25Revision 4revision number 2revision range specifying 7

revision specifying 7revisions tree of 3rlog invocation 18

SSource 4specifying a date 8specifying a range of revisions 7specifying a revision 7specifying a state 9specifying a suffix list 10specifying a timedate 8specifying author 10specifying description text 8specifying substitution mode 8State 4state specifying 9strict locking 5substitution mode default 8substitution mode specifying 8suffix list specifying 10symbolic names 3

TTEMP 11third-party interop file format 21Tichy Walter F 1time zone 8timedate specifying 8tip 2tip increment 7TMP 11TMPDIR 11tree of revisions 3

Uunlocking a revision 15USER 11

Vvalue-only substitution mode 9

Wwhitespace file format 21working file description 2working file instantiation 2

  • Overview
    • Credits
    • Concepts
      • Interaction model
      • Working file
      • RCS file
      • Fundamental operations
      • Keywords
        • Quick tour
          • Usage
            • Common elements
              • Revision options
              • Date option
              • Description option
              • Substitution mode option
              • Log message option
              • Misc common options
              • Environment
                • Invoking ci
                • Invoking co
                • Invoking ident
                • Invoking merge
                • Invoking rcs
                  • modern
                  • legacy
                    • Invoking rcsclean
                    • Invoking rcsdiff
                    • Invoking rcsmerge
                    • Invoking rlog
                      • Hacking
                        • File format
                          • File format grammar
                          • Additional particulars of the file format
                            • Still missing
                            • Reporting bugs
                              • GNU Free Documentation License
                              • Index
Page 29: GNU RCS · The RCS file is also known (colloquially) as the “comma-v file”, due to its name often ending in ,v (e.g., a.c,v). A revision number is a branch number followed by

Appendix A GNU Free Documentation License 26

Appendix A GNU Free Documentation License

Version 13 3 November 2008

Copyright ccopy 2000 2001 2002 2007 2008 Free Software Foundation Inchttpfsforg

Everyone is permitted to copy and distribute verbatim copiesof this license document but changing it is not allowed

0 PREAMBLE

The purpose of this License is to make a manual textbook or other functional anduseful document free in the sense of freedom to assure everyone the effective freedomto copy and redistribute it with or without modifying it either commercially or non-commercially Secondarily this License preserves for the author and publisher a wayto get credit for their work while not being considered responsible for modificationsmade by others

This License is a kind of ldquocopyleftrdquo which means that derivative works of the documentmust themselves be free in the same sense It complements the GNU General PublicLicense which is a copyleft license designed for free software

We have designed this License in order to use it for manuals for free software becausefree software needs free documentation a free program should come with manualsproviding the same freedoms that the software does But this License is not limited tosoftware manuals it can be used for any textual work regardless of subject matter orwhether it is published as a printed book We recommend this License principally forworks whose purpose is instruction or reference

1 APPLICABILITY AND DEFINITIONS

This License applies to any manual or other work in any medium that contains anotice placed by the copyright holder saying it can be distributed under the termsof this License Such a notice grants a world-wide royalty-free license unlimited induration to use that work under the conditions stated herein The ldquoDocumentrdquobelow refers to any such manual or work Any member of the public is a licensee andis addressed as ldquoyourdquo You accept the license if you copy modify or distribute the workin a way requiring permission under copyright law

A ldquoModified Versionrdquo of the Document means any work containing the Document ora portion of it either copied verbatim or with modifications andor translated intoanother language

A ldquoSecondary Sectionrdquo is a named appendix or a front-matter section of the Documentthat deals exclusively with the relationship of the publishers or authors of the Documentto the Documentrsquos overall subject (or to related matters) and contains nothing thatcould fall directly within that overall subject (Thus if the Document is in part atextbook of mathematics a Secondary Section may not explain any mathematics) Therelationship could be a matter of historical connection with the subject or with relatedmatters or of legal commercial philosophical ethical or political position regardingthem

The ldquoInvariant Sectionsrdquo are certain Secondary Sections whose titles are designated asbeing those of Invariant Sections in the notice that says that the Document is released

Appendix A GNU Free Documentation License 27

under this License If a section does not fit the above definition of Secondary then it isnot allowed to be designated as Invariant The Document may contain zero InvariantSections If the Document does not identify any Invariant Sections then there are none

The ldquoCover Textsrdquo are certain short passages of text that are listed as Front-CoverTexts or Back-Cover Texts in the notice that says that the Document is released underthis License A Front-Cover Text may be at most 5 words and a Back-Cover Text maybe at most 25 words

A ldquoTransparentrdquo copy of the Document means a machine-readable copy representedin a format whose specification is available to the general public that is suitable forrevising the document straightforwardly with generic text editors or (for images com-posed of pixels) generic paint programs or (for drawings) some widely available drawingeditor and that is suitable for input to text formatters or for automatic translation toa variety of formats suitable for input to text formatters A copy made in an otherwiseTransparent file format whose markup or absence of markup has been arranged tothwart or discourage subsequent modification by readers is not Transparent An imageformat is not Transparent if used for any substantial amount of text A copy that isnot ldquoTransparentrdquo is called ldquoOpaquerdquo

Examples of suitable formats for Transparent copies include plain ASCII withoutmarkup Texinfo input format LaTEX input format SGML or XML using a publiclyavailable DTD and standard-conforming simple HTML PostScript or PDF designedfor human modification Examples of transparent image formats include PNG XCFand JPG Opaque formats include proprietary formats that can be read and editedonly by proprietary word processors SGML or XML for which the DTD andor pro-cessing tools are not generally available and the machine-generated HTML PostScriptor PDF produced by some word processors for output purposes only

The ldquoTitle Pagerdquo means for a printed book the title page itself plus such followingpages as are needed to hold legibly the material this License requires to appear in thetitle page For works in formats which do not have any title page as such ldquoTitle Pagerdquomeans the text near the most prominent appearance of the workrsquos title preceding thebeginning of the body of the text

The ldquopublisherrdquo means any person or entity that distributes copies of the Documentto the public

A section ldquoEntitled XYZrdquo means a named subunit of the Document whose title eitheris precisely XYZ or contains XYZ in parentheses following text that translates XYZ inanother language (Here XYZ stands for a specific section name mentioned below suchas ldquoAcknowledgementsrdquo ldquoDedicationsrdquo ldquoEndorsementsrdquo or ldquoHistoryrdquo) To ldquoPreservethe Titlerdquo of such a section when you modify the Document means that it remains asection ldquoEntitled XYZrdquo according to this definition

The Document may include Warranty Disclaimers next to the notice which states thatthis License applies to the Document These Warranty Disclaimers are considered tobe included by reference in this License but only as regards disclaiming warrantiesany other implication that these Warranty Disclaimers may have is void and has noeffect on the meaning of this License

2 VERBATIM COPYING

Appendix A GNU Free Documentation License 28

You may copy and distribute the Document in any medium either commercially ornoncommercially provided that this License the copyright notices and the licensenotice saying this License applies to the Document are reproduced in all copies andthat you add no other conditions whatsoever to those of this License You may not usetechnical measures to obstruct or control the reading or further copying of the copiesyou make or distribute However you may accept compensation in exchange for copiesIf you distribute a large enough number of copies you must also follow the conditionsin section 3

You may also lend copies under the same conditions stated above and you may publiclydisplay copies

3 COPYING IN QUANTITY

If you publish printed copies (or copies in media that commonly have printed covers) ofthe Document numbering more than 100 and the Documentrsquos license notice requiresCover Texts you must enclose the copies in covers that carry clearly and legibly allthese Cover Texts Front-Cover Texts on the front cover and Back-Cover Texts onthe back cover Both covers must also clearly and legibly identify you as the publisherof these copies The front cover must present the full title with all words of the titleequally prominent and visible You may add other material on the covers in additionCopying with changes limited to the covers as long as they preserve the title of theDocument and satisfy these conditions can be treated as verbatim copying in otherrespects

If the required texts for either cover are too voluminous to fit legibly you should putthe first ones listed (as many as fit reasonably) on the actual cover and continue therest onto adjacent pages

If you publish or distribute Opaque copies of the Document numbering more than 100you must either include a machine-readable Transparent copy along with each Opaquecopy or state in or with each Opaque copy a computer-network location from whichthe general network-using public has access to download using public-standard networkprotocols a complete Transparent copy of the Document free of added material Ifyou use the latter option you must take reasonably prudent steps when you begindistribution of Opaque copies in quantity to ensure that this Transparent copy willremain thus accessible at the stated location until at least one year after the last timeyou distribute an Opaque copy (directly or through your agents or retailers) of thatedition to the public

It is requested but not required that you contact the authors of the Document wellbefore redistributing any large number of copies to give them a chance to provide youwith an updated version of the Document

4 MODIFICATIONS

You may copy and distribute a Modified Version of the Document under the conditionsof sections 2 and 3 above provided that you release the Modified Version under preciselythis License with the Modified Version filling the role of the Document thus licensingdistribution and modification of the Modified Version to whoever possesses a copy ofit In addition you must do these things in the Modified Version

A Use in the Title Page (and on the covers if any) a title distinct from that of theDocument and from those of previous versions (which should if there were any

Appendix A GNU Free Documentation License 29

be listed in the History section of the Document) You may use the same title asa previous version if the original publisher of that version gives permission

B List on the Title Page as authors one or more persons or entities responsible forauthorship of the modifications in the Modified Version together with at least fiveof the principal authors of the Document (all of its principal authors if it has fewerthan five) unless they release you from this requirement

C State on the Title page the name of the publisher of the Modified Version as thepublisher

D Preserve all the copyright notices of the Document

E Add an appropriate copyright notice for your modifications adjacent to the othercopyright notices

F Include immediately after the copyright notices a license notice giving the publicpermission to use the Modified Version under the terms of this License in the formshown in the Addendum below

G Preserve in that license notice the full lists of Invariant Sections and required CoverTexts given in the Documentrsquos license notice

H Include an unaltered copy of this License

I Preserve the section Entitled ldquoHistoryrdquo Preserve its Title and add to it an itemstating at least the title year new authors and publisher of the Modified Versionas given on the Title Page If there is no section Entitled ldquoHistoryrdquo in the Docu-ment create one stating the title year authors and publisher of the Documentas given on its Title Page then add an item describing the Modified Version asstated in the previous sentence

J Preserve the network location if any given in the Document for public access toa Transparent copy of the Document and likewise the network locations given inthe Document for previous versions it was based on These may be placed in theldquoHistoryrdquo section You may omit a network location for a work that was publishedat least four years before the Document itself or if the original publisher of theversion it refers to gives permission

K For any section Entitled ldquoAcknowledgementsrdquo or ldquoDedicationsrdquo Preserve the Titleof the section and preserve in the section all the substance and tone of each of thecontributor acknowledgements andor dedications given therein

L Preserve all the Invariant Sections of the Document unaltered in their text andin their titles Section numbers or the equivalent are not considered part of thesection titles

M Delete any section Entitled ldquoEndorsementsrdquo Such a section may not be includedin the Modified Version

N Do not retitle any existing section to be Entitled ldquoEndorsementsrdquo or to conflict intitle with any Invariant Section

O Preserve any Warranty Disclaimers

If the Modified Version includes new front-matter sections or appendices that qualifyas Secondary Sections and contain no material copied from the Document you may atyour option designate some or all of these sections as invariant To do this add their

Appendix A GNU Free Documentation License 30

titles to the list of Invariant Sections in the Modified Versionrsquos license notice Thesetitles must be distinct from any other section titles

You may add a section Entitled ldquoEndorsementsrdquo provided it contains nothing butendorsements of your Modified Version by various partiesmdashfor example statements ofpeer review or that the text has been approved by an organization as the authoritativedefinition of a standard

You may add a passage of up to five words as a Front-Cover Text and a passage of upto 25 words as a Back-Cover Text to the end of the list of Cover Texts in the ModifiedVersion Only one passage of Front-Cover Text and one of Back-Cover Text may beadded by (or through arrangements made by) any one entity If the Document alreadyincludes a cover text for the same cover previously added by you or by arrangementmade by the same entity you are acting on behalf of you may not add another butyou may replace the old one on explicit permission from the previous publisher thatadded the old one

The author(s) and publisher(s) of the Document do not by this License give permissionto use their names for publicity for or to assert or imply endorsement of any ModifiedVersion

5 COMBINING DOCUMENTS

You may combine the Document with other documents released under this Licenseunder the terms defined in section 4 above for modified versions provided that youinclude in the combination all of the Invariant Sections of all of the original documentsunmodified and list them all as Invariant Sections of your combined work in its licensenotice and that you preserve all their Warranty Disclaimers

The combined work need only contain one copy of this License and multiple identicalInvariant Sections may be replaced with a single copy If there are multiple InvariantSections with the same name but different contents make the title of each such sectionunique by adding at the end of it in parentheses the name of the original author orpublisher of that section if known or else a unique number Make the same adjustmentto the section titles in the list of Invariant Sections in the license notice of the combinedwork

In the combination you must combine any sections Entitled ldquoHistoryrdquo in the vari-ous original documents forming one section Entitled ldquoHistoryrdquo likewise combine anysections Entitled ldquoAcknowledgementsrdquo and any sections Entitled ldquoDedicationsrdquo Youmust delete all sections Entitled ldquoEndorsementsrdquo

6 COLLECTIONS OF DOCUMENTS

You may make a collection consisting of the Document and other documents releasedunder this License and replace the individual copies of this License in the variousdocuments with a single copy that is included in the collection provided that youfollow the rules of this License for verbatim copying of each of the documents in allother respects

You may extract a single document from such a collection and distribute it individu-ally under this License provided you insert a copy of this License into the extracteddocument and follow this License in all other respects regarding verbatim copying ofthat document

Appendix A GNU Free Documentation License 31

7 AGGREGATION WITH INDEPENDENT WORKS

A compilation of the Document or its derivatives with other separate and independentdocuments or works in or on a volume of a storage or distribution medium is calledan ldquoaggregaterdquo if the copyright resulting from the compilation is not used to limit thelegal rights of the compilationrsquos users beyond what the individual works permit Whenthe Document is included in an aggregate this License does not apply to the otherworks in the aggregate which are not themselves derivative works of the Document

If the Cover Text requirement of section 3 is applicable to these copies of the Documentthen if the Document is less than one half of the entire aggregate the Documentrsquos CoverTexts may be placed on covers that bracket the Document within the aggregate or theelectronic equivalent of covers if the Document is in electronic form Otherwise theymust appear on printed covers that bracket the whole aggregate

8 TRANSLATION

Translation is considered a kind of modification so you may distribute translationsof the Document under the terms of section 4 Replacing Invariant Sections withtranslations requires special permission from their copyright holders but you mayinclude translations of some or all Invariant Sections in addition to the original versionsof these Invariant Sections You may include a translation of this License and all thelicense notices in the Document and any Warranty Disclaimers provided that youalso include the original English version of this License and the original versions ofthose notices and disclaimers In case of a disagreement between the translation andthe original version of this License or a notice or disclaimer the original version willprevail

If a section in the Document is Entitled ldquoAcknowledgementsrdquo ldquoDedicationsrdquo or ldquoHis-toryrdquo the requirement (section 4) to Preserve its Title (section 1) will typically requirechanging the actual title

9 TERMINATION

You may not copy modify sublicense or distribute the Document except as expresslyprovided under this License Any attempt otherwise to copy modify sublicense ordistribute it is void and will automatically terminate your rights under this License

However if you cease all violation of this License then your license from a particularcopyright holder is reinstated (a) provisionally unless and until the copyright holderexplicitly and finally terminates your license and (b) permanently if the copyrightholder fails to notify you of the violation by some reasonable means prior to 60 daysafter the cessation

Moreover your license from a particular copyright holder is reinstated permanently ifthe copyright holder notifies you of the violation by some reasonable means this is thefirst time you have received notice of violation of this License (for any work) from thatcopyright holder and you cure the violation prior to 30 days after your receipt of thenotice

Termination of your rights under this section does not terminate the licenses of partieswho have received copies or rights from you under this License If your rights havebeen terminated and not permanently reinstated receipt of a copy of some or all of thesame material does not give you any rights to use it

Appendix A GNU Free Documentation License 32

10 FUTURE REVISIONS OF THIS LICENSE

The Free Software Foundation may publish new revised versions of the GNU FreeDocumentation License from time to time Such new versions will be similar in spiritto the present version but may differ in detail to address new problems or concernsSee httpwwwgnuorgcopyleft

Each version of the License is given a distinguishing version number If the Documentspecifies that a particular numbered version of this License ldquoor any later versionrdquoapplies to it you have the option of following the terms and conditions either of thatspecified version or of any later version that has been published (not as a draft) bythe Free Software Foundation If the Document does not specify a version number ofthis License you may choose any version ever published (not as a draft) by the FreeSoftware Foundation If the Document specifies that a proxy can decide which futureversions of this License can be used that proxyrsquos public statement of acceptance of aversion permanently authorizes you to choose that version for the Document

11 RELICENSING

ldquoMassive Multiauthor Collaboration Siterdquo (or ldquoMMC Siterdquo) means any World WideWeb server that publishes copyrightable works and also provides prominent facilitiesfor anybody to edit those works A public wiki that anybody can edit is an example ofsuch a server A ldquoMassive Multiauthor Collaborationrdquo (or ldquoMMCrdquo) contained in thesite means any set of copyrightable works thus published on the MMC site

ldquoCC-BY-SArdquo means the Creative Commons Attribution-Share Alike 30 license pub-lished by Creative Commons Corporation a not-for-profit corporation with a principalplace of business in San Francisco California as well as future copyleft versions of thatlicense published by that same organization

ldquoIncorporaterdquo means to publish or republish a Document in whole or in part as partof another Document

An MMC is ldquoeligible for relicensingrdquo if it is licensed under this License and if all worksthat were first published under this License somewhere other than this MMC andsubsequently incorporated in whole or in part into the MMC (1) had no cover textsor invariant sections and (2) were thus incorporated prior to November 1 2008

The operator of an MMC Site may republish an MMC contained in the site underCC-BY-SA on the same site at any time before August 1 2009 provided the MMC iseligible for relicensing

Appendix A GNU Free Documentation License 33

ADDENDUM How to use this License for your documents

To use this License in a document you have written include a copy of the License in thedocument and put the following copyright and license notices just after the title page

Copyright (C) year your name

Permission is granted to copy distribute andor modify this document

under the terms of the GNU Free Documentation License Version 13

or any later version published by the Free Software Foundation

with no Invariant Sections no Front-Cover Texts and no Back-Cover

Texts A copy of the license is included in the section entitled lsquolsquoGNU

Free Documentation Licensersquorsquo

If you have Invariant Sections Front-Cover Texts and Back-Cover Texts replace theldquowith Textsrdquo line with this

with the Invariant Sections being list their titles with

the Front-Cover Texts being list and with the Back-Cover Texts

being list

If you have Invariant Sections without Cover Texts or some other combination of thethree merge those two alternatives to suit the situation

If your document contains nontrivial examples of program code we recommend releasingthese examples in parallel under your choice of free software license such as the GNUGeneral Public License to permit their use in free software

Index 34

Index

Aaccess control policy 3Author 3author specifying 10

Bbehavior prior to version 5 10behavior version 3 10behavior version 4 10binary-old-keyword-value substitution mode 9branch growth 7branch number 2branch tip 2branch default 3bug reporting 25

Ccase sensitivity file format 21checkin 3checklist for bug reports 25checkout 3checkout implicit 5ci invocation 11co invocation 12comma-v file format 1command help 7command version 7command-line option to specify a revision 7credits 1

DDate 3date formats 8date specifying 8dates file format 21default branch 3default branch setting 15deleting revisions 15description of working file 2description text specifying 8

Eempty log message 9emulation previous RCS versions 10encoding file format 20environment variables 10

Ffeatures still missing 23

file names on the command-line 7format RCSfile 20

Ggrammar file format 20

HHeader 3history 1

IId 3ident invocation 13implicit checkout circumstance 5implicit checkout locked 12implicit checkout unlocked 12instantiating a working file 2interaction model 1interactive mode 9invocation ci 11invocation co 12invocation ident 13invocation merge 14invocation rcs 14 15invocation rcsclean 16invocation rcsdiff 17invocation rcsmerge 17invocation rlog 18

Kkeyword-only substitution mode 9keyword-value substitution mode 8keyword-value-locker substitution mode 9keywords table of 3

Llayout of nodes file format 21license 1Locker 3locking a revision 15locking on implicit checkout 12locking non-strict 5locking set non-strict 15locking set strict 15locking strict 5locks in RCS file 3Log 3log message empty 9LOGNAME 11

Index 35

Mmemory limit 11merge invocation 14model interaction 1

NName 4names symbolic 3node layout file format 21non-strict locking 5number branch 2number revision 2

Oold-keyword-value substitution mode 9order of options and file names 7outdating revisions 15overview 1

Ppairing RCS and working files 7patches contributing 25problems 25projects related 1

Qquiet mode 9

Rrange of revisions specifying 7RCS file 2rcs invocation 14 15RCS version emulation 10RCS_MEM_LIMIT 11rcsclean invocation 16rcsdiff invocation 17RCSfile 4RCSfile format 20RCSINIT 10rcsmerge invocation 17removing revisions 15reporting bugs 25Revision 4revision number 2revision range specifying 7

revision specifying 7revisions tree of 3rlog invocation 18

SSource 4specifying a date 8specifying a range of revisions 7specifying a revision 7specifying a state 9specifying a suffix list 10specifying a timedate 8specifying author 10specifying description text 8specifying substitution mode 8State 4state specifying 9strict locking 5substitution mode default 8substitution mode specifying 8suffix list specifying 10symbolic names 3

TTEMP 11third-party interop file format 21Tichy Walter F 1time zone 8timedate specifying 8tip 2tip increment 7TMP 11TMPDIR 11tree of revisions 3

Uunlocking a revision 15USER 11

Vvalue-only substitution mode 9

Wwhitespace file format 21working file description 2working file instantiation 2

  • Overview
    • Credits
    • Concepts
      • Interaction model
      • Working file
      • RCS file
      • Fundamental operations
      • Keywords
        • Quick tour
          • Usage
            • Common elements
              • Revision options
              • Date option
              • Description option
              • Substitution mode option
              • Log message option
              • Misc common options
              • Environment
                • Invoking ci
                • Invoking co
                • Invoking ident
                • Invoking merge
                • Invoking rcs
                  • modern
                  • legacy
                    • Invoking rcsclean
                    • Invoking rcsdiff
                    • Invoking rcsmerge
                    • Invoking rlog
                      • Hacking
                        • File format
                          • File format grammar
                          • Additional particulars of the file format
                            • Still missing
                            • Reporting bugs
                              • GNU Free Documentation License
                              • Index
Page 30: GNU RCS · The RCS file is also known (colloquially) as the “comma-v file”, due to its name often ending in ,v (e.g., a.c,v). A revision number is a branch number followed by

Appendix A GNU Free Documentation License 27

under this License If a section does not fit the above definition of Secondary then it isnot allowed to be designated as Invariant The Document may contain zero InvariantSections If the Document does not identify any Invariant Sections then there are none

The ldquoCover Textsrdquo are certain short passages of text that are listed as Front-CoverTexts or Back-Cover Texts in the notice that says that the Document is released underthis License A Front-Cover Text may be at most 5 words and a Back-Cover Text maybe at most 25 words

A ldquoTransparentrdquo copy of the Document means a machine-readable copy representedin a format whose specification is available to the general public that is suitable forrevising the document straightforwardly with generic text editors or (for images com-posed of pixels) generic paint programs or (for drawings) some widely available drawingeditor and that is suitable for input to text formatters or for automatic translation toa variety of formats suitable for input to text formatters A copy made in an otherwiseTransparent file format whose markup or absence of markup has been arranged tothwart or discourage subsequent modification by readers is not Transparent An imageformat is not Transparent if used for any substantial amount of text A copy that isnot ldquoTransparentrdquo is called ldquoOpaquerdquo

Examples of suitable formats for Transparent copies include plain ASCII withoutmarkup Texinfo input format LaTEX input format SGML or XML using a publiclyavailable DTD and standard-conforming simple HTML PostScript or PDF designedfor human modification Examples of transparent image formats include PNG XCFand JPG Opaque formats include proprietary formats that can be read and editedonly by proprietary word processors SGML or XML for which the DTD andor pro-cessing tools are not generally available and the machine-generated HTML PostScriptor PDF produced by some word processors for output purposes only

The ldquoTitle Pagerdquo means for a printed book the title page itself plus such followingpages as are needed to hold legibly the material this License requires to appear in thetitle page For works in formats which do not have any title page as such ldquoTitle Pagerdquomeans the text near the most prominent appearance of the workrsquos title preceding thebeginning of the body of the text

The ldquopublisherrdquo means any person or entity that distributes copies of the Documentto the public

A section ldquoEntitled XYZrdquo means a named subunit of the Document whose title eitheris precisely XYZ or contains XYZ in parentheses following text that translates XYZ inanother language (Here XYZ stands for a specific section name mentioned below suchas ldquoAcknowledgementsrdquo ldquoDedicationsrdquo ldquoEndorsementsrdquo or ldquoHistoryrdquo) To ldquoPreservethe Titlerdquo of such a section when you modify the Document means that it remains asection ldquoEntitled XYZrdquo according to this definition

The Document may include Warranty Disclaimers next to the notice which states thatthis License applies to the Document These Warranty Disclaimers are considered tobe included by reference in this License but only as regards disclaiming warrantiesany other implication that these Warranty Disclaimers may have is void and has noeffect on the meaning of this License

2 VERBATIM COPYING

Appendix A GNU Free Documentation License 28

You may copy and distribute the Document in any medium either commercially ornoncommercially provided that this License the copyright notices and the licensenotice saying this License applies to the Document are reproduced in all copies andthat you add no other conditions whatsoever to those of this License You may not usetechnical measures to obstruct or control the reading or further copying of the copiesyou make or distribute However you may accept compensation in exchange for copiesIf you distribute a large enough number of copies you must also follow the conditionsin section 3

You may also lend copies under the same conditions stated above and you may publiclydisplay copies

3 COPYING IN QUANTITY

If you publish printed copies (or copies in media that commonly have printed covers) ofthe Document numbering more than 100 and the Documentrsquos license notice requiresCover Texts you must enclose the copies in covers that carry clearly and legibly allthese Cover Texts Front-Cover Texts on the front cover and Back-Cover Texts onthe back cover Both covers must also clearly and legibly identify you as the publisherof these copies The front cover must present the full title with all words of the titleequally prominent and visible You may add other material on the covers in additionCopying with changes limited to the covers as long as they preserve the title of theDocument and satisfy these conditions can be treated as verbatim copying in otherrespects

If the required texts for either cover are too voluminous to fit legibly you should putthe first ones listed (as many as fit reasonably) on the actual cover and continue therest onto adjacent pages

If you publish or distribute Opaque copies of the Document numbering more than 100you must either include a machine-readable Transparent copy along with each Opaquecopy or state in or with each Opaque copy a computer-network location from whichthe general network-using public has access to download using public-standard networkprotocols a complete Transparent copy of the Document free of added material Ifyou use the latter option you must take reasonably prudent steps when you begindistribution of Opaque copies in quantity to ensure that this Transparent copy willremain thus accessible at the stated location until at least one year after the last timeyou distribute an Opaque copy (directly or through your agents or retailers) of thatedition to the public

It is requested but not required that you contact the authors of the Document wellbefore redistributing any large number of copies to give them a chance to provide youwith an updated version of the Document

4 MODIFICATIONS

You may copy and distribute a Modified Version of the Document under the conditionsof sections 2 and 3 above provided that you release the Modified Version under preciselythis License with the Modified Version filling the role of the Document thus licensingdistribution and modification of the Modified Version to whoever possesses a copy ofit In addition you must do these things in the Modified Version

A Use in the Title Page (and on the covers if any) a title distinct from that of theDocument and from those of previous versions (which should if there were any

Appendix A GNU Free Documentation License 29

be listed in the History section of the Document) You may use the same title asa previous version if the original publisher of that version gives permission

B List on the Title Page as authors one or more persons or entities responsible forauthorship of the modifications in the Modified Version together with at least fiveof the principal authors of the Document (all of its principal authors if it has fewerthan five) unless they release you from this requirement

C State on the Title page the name of the publisher of the Modified Version as thepublisher

D Preserve all the copyright notices of the Document

E Add an appropriate copyright notice for your modifications adjacent to the othercopyright notices

F Include immediately after the copyright notices a license notice giving the publicpermission to use the Modified Version under the terms of this License in the formshown in the Addendum below

G Preserve in that license notice the full lists of Invariant Sections and required CoverTexts given in the Documentrsquos license notice

H Include an unaltered copy of this License

I Preserve the section Entitled ldquoHistoryrdquo Preserve its Title and add to it an itemstating at least the title year new authors and publisher of the Modified Versionas given on the Title Page If there is no section Entitled ldquoHistoryrdquo in the Docu-ment create one stating the title year authors and publisher of the Documentas given on its Title Page then add an item describing the Modified Version asstated in the previous sentence

J Preserve the network location if any given in the Document for public access toa Transparent copy of the Document and likewise the network locations given inthe Document for previous versions it was based on These may be placed in theldquoHistoryrdquo section You may omit a network location for a work that was publishedat least four years before the Document itself or if the original publisher of theversion it refers to gives permission

K For any section Entitled ldquoAcknowledgementsrdquo or ldquoDedicationsrdquo Preserve the Titleof the section and preserve in the section all the substance and tone of each of thecontributor acknowledgements andor dedications given therein

L Preserve all the Invariant Sections of the Document unaltered in their text andin their titles Section numbers or the equivalent are not considered part of thesection titles

M Delete any section Entitled ldquoEndorsementsrdquo Such a section may not be includedin the Modified Version

N Do not retitle any existing section to be Entitled ldquoEndorsementsrdquo or to conflict intitle with any Invariant Section

O Preserve any Warranty Disclaimers

If the Modified Version includes new front-matter sections or appendices that qualifyas Secondary Sections and contain no material copied from the Document you may atyour option designate some or all of these sections as invariant To do this add their

Appendix A GNU Free Documentation License 30

titles to the list of Invariant Sections in the Modified Versionrsquos license notice Thesetitles must be distinct from any other section titles

You may add a section Entitled ldquoEndorsementsrdquo provided it contains nothing butendorsements of your Modified Version by various partiesmdashfor example statements ofpeer review or that the text has been approved by an organization as the authoritativedefinition of a standard

You may add a passage of up to five words as a Front-Cover Text and a passage of upto 25 words as a Back-Cover Text to the end of the list of Cover Texts in the ModifiedVersion Only one passage of Front-Cover Text and one of Back-Cover Text may beadded by (or through arrangements made by) any one entity If the Document alreadyincludes a cover text for the same cover previously added by you or by arrangementmade by the same entity you are acting on behalf of you may not add another butyou may replace the old one on explicit permission from the previous publisher thatadded the old one

The author(s) and publisher(s) of the Document do not by this License give permissionto use their names for publicity for or to assert or imply endorsement of any ModifiedVersion

5 COMBINING DOCUMENTS

You may combine the Document with other documents released under this Licenseunder the terms defined in section 4 above for modified versions provided that youinclude in the combination all of the Invariant Sections of all of the original documentsunmodified and list them all as Invariant Sections of your combined work in its licensenotice and that you preserve all their Warranty Disclaimers

The combined work need only contain one copy of this License and multiple identicalInvariant Sections may be replaced with a single copy If there are multiple InvariantSections with the same name but different contents make the title of each such sectionunique by adding at the end of it in parentheses the name of the original author orpublisher of that section if known or else a unique number Make the same adjustmentto the section titles in the list of Invariant Sections in the license notice of the combinedwork

In the combination you must combine any sections Entitled ldquoHistoryrdquo in the vari-ous original documents forming one section Entitled ldquoHistoryrdquo likewise combine anysections Entitled ldquoAcknowledgementsrdquo and any sections Entitled ldquoDedicationsrdquo Youmust delete all sections Entitled ldquoEndorsementsrdquo

6 COLLECTIONS OF DOCUMENTS

You may make a collection consisting of the Document and other documents releasedunder this License and replace the individual copies of this License in the variousdocuments with a single copy that is included in the collection provided that youfollow the rules of this License for verbatim copying of each of the documents in allother respects

You may extract a single document from such a collection and distribute it individu-ally under this License provided you insert a copy of this License into the extracteddocument and follow this License in all other respects regarding verbatim copying ofthat document

Appendix A GNU Free Documentation License 31

7 AGGREGATION WITH INDEPENDENT WORKS

A compilation of the Document or its derivatives with other separate and independentdocuments or works in or on a volume of a storage or distribution medium is calledan ldquoaggregaterdquo if the copyright resulting from the compilation is not used to limit thelegal rights of the compilationrsquos users beyond what the individual works permit Whenthe Document is included in an aggregate this License does not apply to the otherworks in the aggregate which are not themselves derivative works of the Document

If the Cover Text requirement of section 3 is applicable to these copies of the Documentthen if the Document is less than one half of the entire aggregate the Documentrsquos CoverTexts may be placed on covers that bracket the Document within the aggregate or theelectronic equivalent of covers if the Document is in electronic form Otherwise theymust appear on printed covers that bracket the whole aggregate

8 TRANSLATION

Translation is considered a kind of modification so you may distribute translationsof the Document under the terms of section 4 Replacing Invariant Sections withtranslations requires special permission from their copyright holders but you mayinclude translations of some or all Invariant Sections in addition to the original versionsof these Invariant Sections You may include a translation of this License and all thelicense notices in the Document and any Warranty Disclaimers provided that youalso include the original English version of this License and the original versions ofthose notices and disclaimers In case of a disagreement between the translation andthe original version of this License or a notice or disclaimer the original version willprevail

If a section in the Document is Entitled ldquoAcknowledgementsrdquo ldquoDedicationsrdquo or ldquoHis-toryrdquo the requirement (section 4) to Preserve its Title (section 1) will typically requirechanging the actual title

9 TERMINATION

You may not copy modify sublicense or distribute the Document except as expresslyprovided under this License Any attempt otherwise to copy modify sublicense ordistribute it is void and will automatically terminate your rights under this License

However if you cease all violation of this License then your license from a particularcopyright holder is reinstated (a) provisionally unless and until the copyright holderexplicitly and finally terminates your license and (b) permanently if the copyrightholder fails to notify you of the violation by some reasonable means prior to 60 daysafter the cessation

Moreover your license from a particular copyright holder is reinstated permanently ifthe copyright holder notifies you of the violation by some reasonable means this is thefirst time you have received notice of violation of this License (for any work) from thatcopyright holder and you cure the violation prior to 30 days after your receipt of thenotice

Termination of your rights under this section does not terminate the licenses of partieswho have received copies or rights from you under this License If your rights havebeen terminated and not permanently reinstated receipt of a copy of some or all of thesame material does not give you any rights to use it

Appendix A GNU Free Documentation License 32

10 FUTURE REVISIONS OF THIS LICENSE

The Free Software Foundation may publish new revised versions of the GNU FreeDocumentation License from time to time Such new versions will be similar in spiritto the present version but may differ in detail to address new problems or concernsSee httpwwwgnuorgcopyleft

Each version of the License is given a distinguishing version number If the Documentspecifies that a particular numbered version of this License ldquoor any later versionrdquoapplies to it you have the option of following the terms and conditions either of thatspecified version or of any later version that has been published (not as a draft) bythe Free Software Foundation If the Document does not specify a version number ofthis License you may choose any version ever published (not as a draft) by the FreeSoftware Foundation If the Document specifies that a proxy can decide which futureversions of this License can be used that proxyrsquos public statement of acceptance of aversion permanently authorizes you to choose that version for the Document

11 RELICENSING

ldquoMassive Multiauthor Collaboration Siterdquo (or ldquoMMC Siterdquo) means any World WideWeb server that publishes copyrightable works and also provides prominent facilitiesfor anybody to edit those works A public wiki that anybody can edit is an example ofsuch a server A ldquoMassive Multiauthor Collaborationrdquo (or ldquoMMCrdquo) contained in thesite means any set of copyrightable works thus published on the MMC site

ldquoCC-BY-SArdquo means the Creative Commons Attribution-Share Alike 30 license pub-lished by Creative Commons Corporation a not-for-profit corporation with a principalplace of business in San Francisco California as well as future copyleft versions of thatlicense published by that same organization

ldquoIncorporaterdquo means to publish or republish a Document in whole or in part as partof another Document

An MMC is ldquoeligible for relicensingrdquo if it is licensed under this License and if all worksthat were first published under this License somewhere other than this MMC andsubsequently incorporated in whole or in part into the MMC (1) had no cover textsor invariant sections and (2) were thus incorporated prior to November 1 2008

The operator of an MMC Site may republish an MMC contained in the site underCC-BY-SA on the same site at any time before August 1 2009 provided the MMC iseligible for relicensing

Appendix A GNU Free Documentation License 33

ADDENDUM How to use this License for your documents

To use this License in a document you have written include a copy of the License in thedocument and put the following copyright and license notices just after the title page

Copyright (C) year your name

Permission is granted to copy distribute andor modify this document

under the terms of the GNU Free Documentation License Version 13

or any later version published by the Free Software Foundation

with no Invariant Sections no Front-Cover Texts and no Back-Cover

Texts A copy of the license is included in the section entitled lsquolsquoGNU

Free Documentation Licensersquorsquo

If you have Invariant Sections Front-Cover Texts and Back-Cover Texts replace theldquowith Textsrdquo line with this

with the Invariant Sections being list their titles with

the Front-Cover Texts being list and with the Back-Cover Texts

being list

If you have Invariant Sections without Cover Texts or some other combination of thethree merge those two alternatives to suit the situation

If your document contains nontrivial examples of program code we recommend releasingthese examples in parallel under your choice of free software license such as the GNUGeneral Public License to permit their use in free software

Index 34

Index

Aaccess control policy 3Author 3author specifying 10

Bbehavior prior to version 5 10behavior version 3 10behavior version 4 10binary-old-keyword-value substitution mode 9branch growth 7branch number 2branch tip 2branch default 3bug reporting 25

Ccase sensitivity file format 21checkin 3checklist for bug reports 25checkout 3checkout implicit 5ci invocation 11co invocation 12comma-v file format 1command help 7command version 7command-line option to specify a revision 7credits 1

DDate 3date formats 8date specifying 8dates file format 21default branch 3default branch setting 15deleting revisions 15description of working file 2description text specifying 8

Eempty log message 9emulation previous RCS versions 10encoding file format 20environment variables 10

Ffeatures still missing 23

file names on the command-line 7format RCSfile 20

Ggrammar file format 20

HHeader 3history 1

IId 3ident invocation 13implicit checkout circumstance 5implicit checkout locked 12implicit checkout unlocked 12instantiating a working file 2interaction model 1interactive mode 9invocation ci 11invocation co 12invocation ident 13invocation merge 14invocation rcs 14 15invocation rcsclean 16invocation rcsdiff 17invocation rcsmerge 17invocation rlog 18

Kkeyword-only substitution mode 9keyword-value substitution mode 8keyword-value-locker substitution mode 9keywords table of 3

Llayout of nodes file format 21license 1Locker 3locking a revision 15locking on implicit checkout 12locking non-strict 5locking set non-strict 15locking set strict 15locking strict 5locks in RCS file 3Log 3log message empty 9LOGNAME 11

Index 35

Mmemory limit 11merge invocation 14model interaction 1

NName 4names symbolic 3node layout file format 21non-strict locking 5number branch 2number revision 2

Oold-keyword-value substitution mode 9order of options and file names 7outdating revisions 15overview 1

Ppairing RCS and working files 7patches contributing 25problems 25projects related 1

Qquiet mode 9

Rrange of revisions specifying 7RCS file 2rcs invocation 14 15RCS version emulation 10RCS_MEM_LIMIT 11rcsclean invocation 16rcsdiff invocation 17RCSfile 4RCSfile format 20RCSINIT 10rcsmerge invocation 17removing revisions 15reporting bugs 25Revision 4revision number 2revision range specifying 7

revision specifying 7revisions tree of 3rlog invocation 18

SSource 4specifying a date 8specifying a range of revisions 7specifying a revision 7specifying a state 9specifying a suffix list 10specifying a timedate 8specifying author 10specifying description text 8specifying substitution mode 8State 4state specifying 9strict locking 5substitution mode default 8substitution mode specifying 8suffix list specifying 10symbolic names 3

TTEMP 11third-party interop file format 21Tichy Walter F 1time zone 8timedate specifying 8tip 2tip increment 7TMP 11TMPDIR 11tree of revisions 3

Uunlocking a revision 15USER 11

Vvalue-only substitution mode 9

Wwhitespace file format 21working file description 2working file instantiation 2

  • Overview
    • Credits
    • Concepts
      • Interaction model
      • Working file
      • RCS file
      • Fundamental operations
      • Keywords
        • Quick tour
          • Usage
            • Common elements
              • Revision options
              • Date option
              • Description option
              • Substitution mode option
              • Log message option
              • Misc common options
              • Environment
                • Invoking ci
                • Invoking co
                • Invoking ident
                • Invoking merge
                • Invoking rcs
                  • modern
                  • legacy
                    • Invoking rcsclean
                    • Invoking rcsdiff
                    • Invoking rcsmerge
                    • Invoking rlog
                      • Hacking
                        • File format
                          • File format grammar
                          • Additional particulars of the file format
                            • Still missing
                            • Reporting bugs
                              • GNU Free Documentation License
                              • Index
Page 31: GNU RCS · The RCS file is also known (colloquially) as the “comma-v file”, due to its name often ending in ,v (e.g., a.c,v). A revision number is a branch number followed by

Appendix A GNU Free Documentation License 28

You may copy and distribute the Document in any medium either commercially ornoncommercially provided that this License the copyright notices and the licensenotice saying this License applies to the Document are reproduced in all copies andthat you add no other conditions whatsoever to those of this License You may not usetechnical measures to obstruct or control the reading or further copying of the copiesyou make or distribute However you may accept compensation in exchange for copiesIf you distribute a large enough number of copies you must also follow the conditionsin section 3

You may also lend copies under the same conditions stated above and you may publiclydisplay copies

3 COPYING IN QUANTITY

If you publish printed copies (or copies in media that commonly have printed covers) ofthe Document numbering more than 100 and the Documentrsquos license notice requiresCover Texts you must enclose the copies in covers that carry clearly and legibly allthese Cover Texts Front-Cover Texts on the front cover and Back-Cover Texts onthe back cover Both covers must also clearly and legibly identify you as the publisherof these copies The front cover must present the full title with all words of the titleequally prominent and visible You may add other material on the covers in additionCopying with changes limited to the covers as long as they preserve the title of theDocument and satisfy these conditions can be treated as verbatim copying in otherrespects

If the required texts for either cover are too voluminous to fit legibly you should putthe first ones listed (as many as fit reasonably) on the actual cover and continue therest onto adjacent pages

If you publish or distribute Opaque copies of the Document numbering more than 100you must either include a machine-readable Transparent copy along with each Opaquecopy or state in or with each Opaque copy a computer-network location from whichthe general network-using public has access to download using public-standard networkprotocols a complete Transparent copy of the Document free of added material Ifyou use the latter option you must take reasonably prudent steps when you begindistribution of Opaque copies in quantity to ensure that this Transparent copy willremain thus accessible at the stated location until at least one year after the last timeyou distribute an Opaque copy (directly or through your agents or retailers) of thatedition to the public

It is requested but not required that you contact the authors of the Document wellbefore redistributing any large number of copies to give them a chance to provide youwith an updated version of the Document

4 MODIFICATIONS

You may copy and distribute a Modified Version of the Document under the conditionsof sections 2 and 3 above provided that you release the Modified Version under preciselythis License with the Modified Version filling the role of the Document thus licensingdistribution and modification of the Modified Version to whoever possesses a copy ofit In addition you must do these things in the Modified Version

A Use in the Title Page (and on the covers if any) a title distinct from that of theDocument and from those of previous versions (which should if there were any

Appendix A GNU Free Documentation License 29

be listed in the History section of the Document) You may use the same title asa previous version if the original publisher of that version gives permission

B List on the Title Page as authors one or more persons or entities responsible forauthorship of the modifications in the Modified Version together with at least fiveof the principal authors of the Document (all of its principal authors if it has fewerthan five) unless they release you from this requirement

C State on the Title page the name of the publisher of the Modified Version as thepublisher

D Preserve all the copyright notices of the Document

E Add an appropriate copyright notice for your modifications adjacent to the othercopyright notices

F Include immediately after the copyright notices a license notice giving the publicpermission to use the Modified Version under the terms of this License in the formshown in the Addendum below

G Preserve in that license notice the full lists of Invariant Sections and required CoverTexts given in the Documentrsquos license notice

H Include an unaltered copy of this License

I Preserve the section Entitled ldquoHistoryrdquo Preserve its Title and add to it an itemstating at least the title year new authors and publisher of the Modified Versionas given on the Title Page If there is no section Entitled ldquoHistoryrdquo in the Docu-ment create one stating the title year authors and publisher of the Documentas given on its Title Page then add an item describing the Modified Version asstated in the previous sentence

J Preserve the network location if any given in the Document for public access toa Transparent copy of the Document and likewise the network locations given inthe Document for previous versions it was based on These may be placed in theldquoHistoryrdquo section You may omit a network location for a work that was publishedat least four years before the Document itself or if the original publisher of theversion it refers to gives permission

K For any section Entitled ldquoAcknowledgementsrdquo or ldquoDedicationsrdquo Preserve the Titleof the section and preserve in the section all the substance and tone of each of thecontributor acknowledgements andor dedications given therein

L Preserve all the Invariant Sections of the Document unaltered in their text andin their titles Section numbers or the equivalent are not considered part of thesection titles

M Delete any section Entitled ldquoEndorsementsrdquo Such a section may not be includedin the Modified Version

N Do not retitle any existing section to be Entitled ldquoEndorsementsrdquo or to conflict intitle with any Invariant Section

O Preserve any Warranty Disclaimers

If the Modified Version includes new front-matter sections or appendices that qualifyas Secondary Sections and contain no material copied from the Document you may atyour option designate some or all of these sections as invariant To do this add their

Appendix A GNU Free Documentation License 30

titles to the list of Invariant Sections in the Modified Versionrsquos license notice Thesetitles must be distinct from any other section titles

You may add a section Entitled ldquoEndorsementsrdquo provided it contains nothing butendorsements of your Modified Version by various partiesmdashfor example statements ofpeer review or that the text has been approved by an organization as the authoritativedefinition of a standard

You may add a passage of up to five words as a Front-Cover Text and a passage of upto 25 words as a Back-Cover Text to the end of the list of Cover Texts in the ModifiedVersion Only one passage of Front-Cover Text and one of Back-Cover Text may beadded by (or through arrangements made by) any one entity If the Document alreadyincludes a cover text for the same cover previously added by you or by arrangementmade by the same entity you are acting on behalf of you may not add another butyou may replace the old one on explicit permission from the previous publisher thatadded the old one

The author(s) and publisher(s) of the Document do not by this License give permissionto use their names for publicity for or to assert or imply endorsement of any ModifiedVersion

5 COMBINING DOCUMENTS

You may combine the Document with other documents released under this Licenseunder the terms defined in section 4 above for modified versions provided that youinclude in the combination all of the Invariant Sections of all of the original documentsunmodified and list them all as Invariant Sections of your combined work in its licensenotice and that you preserve all their Warranty Disclaimers

The combined work need only contain one copy of this License and multiple identicalInvariant Sections may be replaced with a single copy If there are multiple InvariantSections with the same name but different contents make the title of each such sectionunique by adding at the end of it in parentheses the name of the original author orpublisher of that section if known or else a unique number Make the same adjustmentto the section titles in the list of Invariant Sections in the license notice of the combinedwork

In the combination you must combine any sections Entitled ldquoHistoryrdquo in the vari-ous original documents forming one section Entitled ldquoHistoryrdquo likewise combine anysections Entitled ldquoAcknowledgementsrdquo and any sections Entitled ldquoDedicationsrdquo Youmust delete all sections Entitled ldquoEndorsementsrdquo

6 COLLECTIONS OF DOCUMENTS

You may make a collection consisting of the Document and other documents releasedunder this License and replace the individual copies of this License in the variousdocuments with a single copy that is included in the collection provided that youfollow the rules of this License for verbatim copying of each of the documents in allother respects

You may extract a single document from such a collection and distribute it individu-ally under this License provided you insert a copy of this License into the extracteddocument and follow this License in all other respects regarding verbatim copying ofthat document

Appendix A GNU Free Documentation License 31

7 AGGREGATION WITH INDEPENDENT WORKS

A compilation of the Document or its derivatives with other separate and independentdocuments or works in or on a volume of a storage or distribution medium is calledan ldquoaggregaterdquo if the copyright resulting from the compilation is not used to limit thelegal rights of the compilationrsquos users beyond what the individual works permit Whenthe Document is included in an aggregate this License does not apply to the otherworks in the aggregate which are not themselves derivative works of the Document

If the Cover Text requirement of section 3 is applicable to these copies of the Documentthen if the Document is less than one half of the entire aggregate the Documentrsquos CoverTexts may be placed on covers that bracket the Document within the aggregate or theelectronic equivalent of covers if the Document is in electronic form Otherwise theymust appear on printed covers that bracket the whole aggregate

8 TRANSLATION

Translation is considered a kind of modification so you may distribute translationsof the Document under the terms of section 4 Replacing Invariant Sections withtranslations requires special permission from their copyright holders but you mayinclude translations of some or all Invariant Sections in addition to the original versionsof these Invariant Sections You may include a translation of this License and all thelicense notices in the Document and any Warranty Disclaimers provided that youalso include the original English version of this License and the original versions ofthose notices and disclaimers In case of a disagreement between the translation andthe original version of this License or a notice or disclaimer the original version willprevail

If a section in the Document is Entitled ldquoAcknowledgementsrdquo ldquoDedicationsrdquo or ldquoHis-toryrdquo the requirement (section 4) to Preserve its Title (section 1) will typically requirechanging the actual title

9 TERMINATION

You may not copy modify sublicense or distribute the Document except as expresslyprovided under this License Any attempt otherwise to copy modify sublicense ordistribute it is void and will automatically terminate your rights under this License

However if you cease all violation of this License then your license from a particularcopyright holder is reinstated (a) provisionally unless and until the copyright holderexplicitly and finally terminates your license and (b) permanently if the copyrightholder fails to notify you of the violation by some reasonable means prior to 60 daysafter the cessation

Moreover your license from a particular copyright holder is reinstated permanently ifthe copyright holder notifies you of the violation by some reasonable means this is thefirst time you have received notice of violation of this License (for any work) from thatcopyright holder and you cure the violation prior to 30 days after your receipt of thenotice

Termination of your rights under this section does not terminate the licenses of partieswho have received copies or rights from you under this License If your rights havebeen terminated and not permanently reinstated receipt of a copy of some or all of thesame material does not give you any rights to use it

Appendix A GNU Free Documentation License 32

10 FUTURE REVISIONS OF THIS LICENSE

The Free Software Foundation may publish new revised versions of the GNU FreeDocumentation License from time to time Such new versions will be similar in spiritto the present version but may differ in detail to address new problems or concernsSee httpwwwgnuorgcopyleft

Each version of the License is given a distinguishing version number If the Documentspecifies that a particular numbered version of this License ldquoor any later versionrdquoapplies to it you have the option of following the terms and conditions either of thatspecified version or of any later version that has been published (not as a draft) bythe Free Software Foundation If the Document does not specify a version number ofthis License you may choose any version ever published (not as a draft) by the FreeSoftware Foundation If the Document specifies that a proxy can decide which futureversions of this License can be used that proxyrsquos public statement of acceptance of aversion permanently authorizes you to choose that version for the Document

11 RELICENSING

ldquoMassive Multiauthor Collaboration Siterdquo (or ldquoMMC Siterdquo) means any World WideWeb server that publishes copyrightable works and also provides prominent facilitiesfor anybody to edit those works A public wiki that anybody can edit is an example ofsuch a server A ldquoMassive Multiauthor Collaborationrdquo (or ldquoMMCrdquo) contained in thesite means any set of copyrightable works thus published on the MMC site

ldquoCC-BY-SArdquo means the Creative Commons Attribution-Share Alike 30 license pub-lished by Creative Commons Corporation a not-for-profit corporation with a principalplace of business in San Francisco California as well as future copyleft versions of thatlicense published by that same organization

ldquoIncorporaterdquo means to publish or republish a Document in whole or in part as partof another Document

An MMC is ldquoeligible for relicensingrdquo if it is licensed under this License and if all worksthat were first published under this License somewhere other than this MMC andsubsequently incorporated in whole or in part into the MMC (1) had no cover textsor invariant sections and (2) were thus incorporated prior to November 1 2008

The operator of an MMC Site may republish an MMC contained in the site underCC-BY-SA on the same site at any time before August 1 2009 provided the MMC iseligible for relicensing

Appendix A GNU Free Documentation License 33

ADDENDUM How to use this License for your documents

To use this License in a document you have written include a copy of the License in thedocument and put the following copyright and license notices just after the title page

Copyright (C) year your name

Permission is granted to copy distribute andor modify this document

under the terms of the GNU Free Documentation License Version 13

or any later version published by the Free Software Foundation

with no Invariant Sections no Front-Cover Texts and no Back-Cover

Texts A copy of the license is included in the section entitled lsquolsquoGNU

Free Documentation Licensersquorsquo

If you have Invariant Sections Front-Cover Texts and Back-Cover Texts replace theldquowith Textsrdquo line with this

with the Invariant Sections being list their titles with

the Front-Cover Texts being list and with the Back-Cover Texts

being list

If you have Invariant Sections without Cover Texts or some other combination of thethree merge those two alternatives to suit the situation

If your document contains nontrivial examples of program code we recommend releasingthese examples in parallel under your choice of free software license such as the GNUGeneral Public License to permit their use in free software

Index 34

Index

Aaccess control policy 3Author 3author specifying 10

Bbehavior prior to version 5 10behavior version 3 10behavior version 4 10binary-old-keyword-value substitution mode 9branch growth 7branch number 2branch tip 2branch default 3bug reporting 25

Ccase sensitivity file format 21checkin 3checklist for bug reports 25checkout 3checkout implicit 5ci invocation 11co invocation 12comma-v file format 1command help 7command version 7command-line option to specify a revision 7credits 1

DDate 3date formats 8date specifying 8dates file format 21default branch 3default branch setting 15deleting revisions 15description of working file 2description text specifying 8

Eempty log message 9emulation previous RCS versions 10encoding file format 20environment variables 10

Ffeatures still missing 23

file names on the command-line 7format RCSfile 20

Ggrammar file format 20

HHeader 3history 1

IId 3ident invocation 13implicit checkout circumstance 5implicit checkout locked 12implicit checkout unlocked 12instantiating a working file 2interaction model 1interactive mode 9invocation ci 11invocation co 12invocation ident 13invocation merge 14invocation rcs 14 15invocation rcsclean 16invocation rcsdiff 17invocation rcsmerge 17invocation rlog 18

Kkeyword-only substitution mode 9keyword-value substitution mode 8keyword-value-locker substitution mode 9keywords table of 3

Llayout of nodes file format 21license 1Locker 3locking a revision 15locking on implicit checkout 12locking non-strict 5locking set non-strict 15locking set strict 15locking strict 5locks in RCS file 3Log 3log message empty 9LOGNAME 11

Index 35

Mmemory limit 11merge invocation 14model interaction 1

NName 4names symbolic 3node layout file format 21non-strict locking 5number branch 2number revision 2

Oold-keyword-value substitution mode 9order of options and file names 7outdating revisions 15overview 1

Ppairing RCS and working files 7patches contributing 25problems 25projects related 1

Qquiet mode 9

Rrange of revisions specifying 7RCS file 2rcs invocation 14 15RCS version emulation 10RCS_MEM_LIMIT 11rcsclean invocation 16rcsdiff invocation 17RCSfile 4RCSfile format 20RCSINIT 10rcsmerge invocation 17removing revisions 15reporting bugs 25Revision 4revision number 2revision range specifying 7

revision specifying 7revisions tree of 3rlog invocation 18

SSource 4specifying a date 8specifying a range of revisions 7specifying a revision 7specifying a state 9specifying a suffix list 10specifying a timedate 8specifying author 10specifying description text 8specifying substitution mode 8State 4state specifying 9strict locking 5substitution mode default 8substitution mode specifying 8suffix list specifying 10symbolic names 3

TTEMP 11third-party interop file format 21Tichy Walter F 1time zone 8timedate specifying 8tip 2tip increment 7TMP 11TMPDIR 11tree of revisions 3

Uunlocking a revision 15USER 11

Vvalue-only substitution mode 9

Wwhitespace file format 21working file description 2working file instantiation 2

  • Overview
    • Credits
    • Concepts
      • Interaction model
      • Working file
      • RCS file
      • Fundamental operations
      • Keywords
        • Quick tour
          • Usage
            • Common elements
              • Revision options
              • Date option
              • Description option
              • Substitution mode option
              • Log message option
              • Misc common options
              • Environment
                • Invoking ci
                • Invoking co
                • Invoking ident
                • Invoking merge
                • Invoking rcs
                  • modern
                  • legacy
                    • Invoking rcsclean
                    • Invoking rcsdiff
                    • Invoking rcsmerge
                    • Invoking rlog
                      • Hacking
                        • File format
                          • File format grammar
                          • Additional particulars of the file format
                            • Still missing
                            • Reporting bugs
                              • GNU Free Documentation License
                              • Index
Page 32: GNU RCS · The RCS file is also known (colloquially) as the “comma-v file”, due to its name often ending in ,v (e.g., a.c,v). A revision number is a branch number followed by

Appendix A GNU Free Documentation License 29

be listed in the History section of the Document) You may use the same title asa previous version if the original publisher of that version gives permission

B List on the Title Page as authors one or more persons or entities responsible forauthorship of the modifications in the Modified Version together with at least fiveof the principal authors of the Document (all of its principal authors if it has fewerthan five) unless they release you from this requirement

C State on the Title page the name of the publisher of the Modified Version as thepublisher

D Preserve all the copyright notices of the Document

E Add an appropriate copyright notice for your modifications adjacent to the othercopyright notices

F Include immediately after the copyright notices a license notice giving the publicpermission to use the Modified Version under the terms of this License in the formshown in the Addendum below

G Preserve in that license notice the full lists of Invariant Sections and required CoverTexts given in the Documentrsquos license notice

H Include an unaltered copy of this License

I Preserve the section Entitled ldquoHistoryrdquo Preserve its Title and add to it an itemstating at least the title year new authors and publisher of the Modified Versionas given on the Title Page If there is no section Entitled ldquoHistoryrdquo in the Docu-ment create one stating the title year authors and publisher of the Documentas given on its Title Page then add an item describing the Modified Version asstated in the previous sentence

J Preserve the network location if any given in the Document for public access toa Transparent copy of the Document and likewise the network locations given inthe Document for previous versions it was based on These may be placed in theldquoHistoryrdquo section You may omit a network location for a work that was publishedat least four years before the Document itself or if the original publisher of theversion it refers to gives permission

K For any section Entitled ldquoAcknowledgementsrdquo or ldquoDedicationsrdquo Preserve the Titleof the section and preserve in the section all the substance and tone of each of thecontributor acknowledgements andor dedications given therein

L Preserve all the Invariant Sections of the Document unaltered in their text andin their titles Section numbers or the equivalent are not considered part of thesection titles

M Delete any section Entitled ldquoEndorsementsrdquo Such a section may not be includedin the Modified Version

N Do not retitle any existing section to be Entitled ldquoEndorsementsrdquo or to conflict intitle with any Invariant Section

O Preserve any Warranty Disclaimers

If the Modified Version includes new front-matter sections or appendices that qualifyas Secondary Sections and contain no material copied from the Document you may atyour option designate some or all of these sections as invariant To do this add their

Appendix A GNU Free Documentation License 30

titles to the list of Invariant Sections in the Modified Versionrsquos license notice Thesetitles must be distinct from any other section titles

You may add a section Entitled ldquoEndorsementsrdquo provided it contains nothing butendorsements of your Modified Version by various partiesmdashfor example statements ofpeer review or that the text has been approved by an organization as the authoritativedefinition of a standard

You may add a passage of up to five words as a Front-Cover Text and a passage of upto 25 words as a Back-Cover Text to the end of the list of Cover Texts in the ModifiedVersion Only one passage of Front-Cover Text and one of Back-Cover Text may beadded by (or through arrangements made by) any one entity If the Document alreadyincludes a cover text for the same cover previously added by you or by arrangementmade by the same entity you are acting on behalf of you may not add another butyou may replace the old one on explicit permission from the previous publisher thatadded the old one

The author(s) and publisher(s) of the Document do not by this License give permissionto use their names for publicity for or to assert or imply endorsement of any ModifiedVersion

5 COMBINING DOCUMENTS

You may combine the Document with other documents released under this Licenseunder the terms defined in section 4 above for modified versions provided that youinclude in the combination all of the Invariant Sections of all of the original documentsunmodified and list them all as Invariant Sections of your combined work in its licensenotice and that you preserve all their Warranty Disclaimers

The combined work need only contain one copy of this License and multiple identicalInvariant Sections may be replaced with a single copy If there are multiple InvariantSections with the same name but different contents make the title of each such sectionunique by adding at the end of it in parentheses the name of the original author orpublisher of that section if known or else a unique number Make the same adjustmentto the section titles in the list of Invariant Sections in the license notice of the combinedwork

In the combination you must combine any sections Entitled ldquoHistoryrdquo in the vari-ous original documents forming one section Entitled ldquoHistoryrdquo likewise combine anysections Entitled ldquoAcknowledgementsrdquo and any sections Entitled ldquoDedicationsrdquo Youmust delete all sections Entitled ldquoEndorsementsrdquo

6 COLLECTIONS OF DOCUMENTS

You may make a collection consisting of the Document and other documents releasedunder this License and replace the individual copies of this License in the variousdocuments with a single copy that is included in the collection provided that youfollow the rules of this License for verbatim copying of each of the documents in allother respects

You may extract a single document from such a collection and distribute it individu-ally under this License provided you insert a copy of this License into the extracteddocument and follow this License in all other respects regarding verbatim copying ofthat document

Appendix A GNU Free Documentation License 31

7 AGGREGATION WITH INDEPENDENT WORKS

A compilation of the Document or its derivatives with other separate and independentdocuments or works in or on a volume of a storage or distribution medium is calledan ldquoaggregaterdquo if the copyright resulting from the compilation is not used to limit thelegal rights of the compilationrsquos users beyond what the individual works permit Whenthe Document is included in an aggregate this License does not apply to the otherworks in the aggregate which are not themselves derivative works of the Document

If the Cover Text requirement of section 3 is applicable to these copies of the Documentthen if the Document is less than one half of the entire aggregate the Documentrsquos CoverTexts may be placed on covers that bracket the Document within the aggregate or theelectronic equivalent of covers if the Document is in electronic form Otherwise theymust appear on printed covers that bracket the whole aggregate

8 TRANSLATION

Translation is considered a kind of modification so you may distribute translationsof the Document under the terms of section 4 Replacing Invariant Sections withtranslations requires special permission from their copyright holders but you mayinclude translations of some or all Invariant Sections in addition to the original versionsof these Invariant Sections You may include a translation of this License and all thelicense notices in the Document and any Warranty Disclaimers provided that youalso include the original English version of this License and the original versions ofthose notices and disclaimers In case of a disagreement between the translation andthe original version of this License or a notice or disclaimer the original version willprevail

If a section in the Document is Entitled ldquoAcknowledgementsrdquo ldquoDedicationsrdquo or ldquoHis-toryrdquo the requirement (section 4) to Preserve its Title (section 1) will typically requirechanging the actual title

9 TERMINATION

You may not copy modify sublicense or distribute the Document except as expresslyprovided under this License Any attempt otherwise to copy modify sublicense ordistribute it is void and will automatically terminate your rights under this License

However if you cease all violation of this License then your license from a particularcopyright holder is reinstated (a) provisionally unless and until the copyright holderexplicitly and finally terminates your license and (b) permanently if the copyrightholder fails to notify you of the violation by some reasonable means prior to 60 daysafter the cessation

Moreover your license from a particular copyright holder is reinstated permanently ifthe copyright holder notifies you of the violation by some reasonable means this is thefirst time you have received notice of violation of this License (for any work) from thatcopyright holder and you cure the violation prior to 30 days after your receipt of thenotice

Termination of your rights under this section does not terminate the licenses of partieswho have received copies or rights from you under this License If your rights havebeen terminated and not permanently reinstated receipt of a copy of some or all of thesame material does not give you any rights to use it

Appendix A GNU Free Documentation License 32

10 FUTURE REVISIONS OF THIS LICENSE

The Free Software Foundation may publish new revised versions of the GNU FreeDocumentation License from time to time Such new versions will be similar in spiritto the present version but may differ in detail to address new problems or concernsSee httpwwwgnuorgcopyleft

Each version of the License is given a distinguishing version number If the Documentspecifies that a particular numbered version of this License ldquoor any later versionrdquoapplies to it you have the option of following the terms and conditions either of thatspecified version or of any later version that has been published (not as a draft) bythe Free Software Foundation If the Document does not specify a version number ofthis License you may choose any version ever published (not as a draft) by the FreeSoftware Foundation If the Document specifies that a proxy can decide which futureversions of this License can be used that proxyrsquos public statement of acceptance of aversion permanently authorizes you to choose that version for the Document

11 RELICENSING

ldquoMassive Multiauthor Collaboration Siterdquo (or ldquoMMC Siterdquo) means any World WideWeb server that publishes copyrightable works and also provides prominent facilitiesfor anybody to edit those works A public wiki that anybody can edit is an example ofsuch a server A ldquoMassive Multiauthor Collaborationrdquo (or ldquoMMCrdquo) contained in thesite means any set of copyrightable works thus published on the MMC site

ldquoCC-BY-SArdquo means the Creative Commons Attribution-Share Alike 30 license pub-lished by Creative Commons Corporation a not-for-profit corporation with a principalplace of business in San Francisco California as well as future copyleft versions of thatlicense published by that same organization

ldquoIncorporaterdquo means to publish or republish a Document in whole or in part as partof another Document

An MMC is ldquoeligible for relicensingrdquo if it is licensed under this License and if all worksthat were first published under this License somewhere other than this MMC andsubsequently incorporated in whole or in part into the MMC (1) had no cover textsor invariant sections and (2) were thus incorporated prior to November 1 2008

The operator of an MMC Site may republish an MMC contained in the site underCC-BY-SA on the same site at any time before August 1 2009 provided the MMC iseligible for relicensing

Appendix A GNU Free Documentation License 33

ADDENDUM How to use this License for your documents

To use this License in a document you have written include a copy of the License in thedocument and put the following copyright and license notices just after the title page

Copyright (C) year your name

Permission is granted to copy distribute andor modify this document

under the terms of the GNU Free Documentation License Version 13

or any later version published by the Free Software Foundation

with no Invariant Sections no Front-Cover Texts and no Back-Cover

Texts A copy of the license is included in the section entitled lsquolsquoGNU

Free Documentation Licensersquorsquo

If you have Invariant Sections Front-Cover Texts and Back-Cover Texts replace theldquowith Textsrdquo line with this

with the Invariant Sections being list their titles with

the Front-Cover Texts being list and with the Back-Cover Texts

being list

If you have Invariant Sections without Cover Texts or some other combination of thethree merge those two alternatives to suit the situation

If your document contains nontrivial examples of program code we recommend releasingthese examples in parallel under your choice of free software license such as the GNUGeneral Public License to permit their use in free software

Index 34

Index

Aaccess control policy 3Author 3author specifying 10

Bbehavior prior to version 5 10behavior version 3 10behavior version 4 10binary-old-keyword-value substitution mode 9branch growth 7branch number 2branch tip 2branch default 3bug reporting 25

Ccase sensitivity file format 21checkin 3checklist for bug reports 25checkout 3checkout implicit 5ci invocation 11co invocation 12comma-v file format 1command help 7command version 7command-line option to specify a revision 7credits 1

DDate 3date formats 8date specifying 8dates file format 21default branch 3default branch setting 15deleting revisions 15description of working file 2description text specifying 8

Eempty log message 9emulation previous RCS versions 10encoding file format 20environment variables 10

Ffeatures still missing 23

file names on the command-line 7format RCSfile 20

Ggrammar file format 20

HHeader 3history 1

IId 3ident invocation 13implicit checkout circumstance 5implicit checkout locked 12implicit checkout unlocked 12instantiating a working file 2interaction model 1interactive mode 9invocation ci 11invocation co 12invocation ident 13invocation merge 14invocation rcs 14 15invocation rcsclean 16invocation rcsdiff 17invocation rcsmerge 17invocation rlog 18

Kkeyword-only substitution mode 9keyword-value substitution mode 8keyword-value-locker substitution mode 9keywords table of 3

Llayout of nodes file format 21license 1Locker 3locking a revision 15locking on implicit checkout 12locking non-strict 5locking set non-strict 15locking set strict 15locking strict 5locks in RCS file 3Log 3log message empty 9LOGNAME 11

Index 35

Mmemory limit 11merge invocation 14model interaction 1

NName 4names symbolic 3node layout file format 21non-strict locking 5number branch 2number revision 2

Oold-keyword-value substitution mode 9order of options and file names 7outdating revisions 15overview 1

Ppairing RCS and working files 7patches contributing 25problems 25projects related 1

Qquiet mode 9

Rrange of revisions specifying 7RCS file 2rcs invocation 14 15RCS version emulation 10RCS_MEM_LIMIT 11rcsclean invocation 16rcsdiff invocation 17RCSfile 4RCSfile format 20RCSINIT 10rcsmerge invocation 17removing revisions 15reporting bugs 25Revision 4revision number 2revision range specifying 7

revision specifying 7revisions tree of 3rlog invocation 18

SSource 4specifying a date 8specifying a range of revisions 7specifying a revision 7specifying a state 9specifying a suffix list 10specifying a timedate 8specifying author 10specifying description text 8specifying substitution mode 8State 4state specifying 9strict locking 5substitution mode default 8substitution mode specifying 8suffix list specifying 10symbolic names 3

TTEMP 11third-party interop file format 21Tichy Walter F 1time zone 8timedate specifying 8tip 2tip increment 7TMP 11TMPDIR 11tree of revisions 3

Uunlocking a revision 15USER 11

Vvalue-only substitution mode 9

Wwhitespace file format 21working file description 2working file instantiation 2

  • Overview
    • Credits
    • Concepts
      • Interaction model
      • Working file
      • RCS file
      • Fundamental operations
      • Keywords
        • Quick tour
          • Usage
            • Common elements
              • Revision options
              • Date option
              • Description option
              • Substitution mode option
              • Log message option
              • Misc common options
              • Environment
                • Invoking ci
                • Invoking co
                • Invoking ident
                • Invoking merge
                • Invoking rcs
                  • modern
                  • legacy
                    • Invoking rcsclean
                    • Invoking rcsdiff
                    • Invoking rcsmerge
                    • Invoking rlog
                      • Hacking
                        • File format
                          • File format grammar
                          • Additional particulars of the file format
                            • Still missing
                            • Reporting bugs
                              • GNU Free Documentation License
                              • Index
Page 33: GNU RCS · The RCS file is also known (colloquially) as the “comma-v file”, due to its name often ending in ,v (e.g., a.c,v). A revision number is a branch number followed by

Appendix A GNU Free Documentation License 30

titles to the list of Invariant Sections in the Modified Versionrsquos license notice Thesetitles must be distinct from any other section titles

You may add a section Entitled ldquoEndorsementsrdquo provided it contains nothing butendorsements of your Modified Version by various partiesmdashfor example statements ofpeer review or that the text has been approved by an organization as the authoritativedefinition of a standard

You may add a passage of up to five words as a Front-Cover Text and a passage of upto 25 words as a Back-Cover Text to the end of the list of Cover Texts in the ModifiedVersion Only one passage of Front-Cover Text and one of Back-Cover Text may beadded by (or through arrangements made by) any one entity If the Document alreadyincludes a cover text for the same cover previously added by you or by arrangementmade by the same entity you are acting on behalf of you may not add another butyou may replace the old one on explicit permission from the previous publisher thatadded the old one

The author(s) and publisher(s) of the Document do not by this License give permissionto use their names for publicity for or to assert or imply endorsement of any ModifiedVersion

5 COMBINING DOCUMENTS

You may combine the Document with other documents released under this Licenseunder the terms defined in section 4 above for modified versions provided that youinclude in the combination all of the Invariant Sections of all of the original documentsunmodified and list them all as Invariant Sections of your combined work in its licensenotice and that you preserve all their Warranty Disclaimers

The combined work need only contain one copy of this License and multiple identicalInvariant Sections may be replaced with a single copy If there are multiple InvariantSections with the same name but different contents make the title of each such sectionunique by adding at the end of it in parentheses the name of the original author orpublisher of that section if known or else a unique number Make the same adjustmentto the section titles in the list of Invariant Sections in the license notice of the combinedwork

In the combination you must combine any sections Entitled ldquoHistoryrdquo in the vari-ous original documents forming one section Entitled ldquoHistoryrdquo likewise combine anysections Entitled ldquoAcknowledgementsrdquo and any sections Entitled ldquoDedicationsrdquo Youmust delete all sections Entitled ldquoEndorsementsrdquo

6 COLLECTIONS OF DOCUMENTS

You may make a collection consisting of the Document and other documents releasedunder this License and replace the individual copies of this License in the variousdocuments with a single copy that is included in the collection provided that youfollow the rules of this License for verbatim copying of each of the documents in allother respects

You may extract a single document from such a collection and distribute it individu-ally under this License provided you insert a copy of this License into the extracteddocument and follow this License in all other respects regarding verbatim copying ofthat document

Appendix A GNU Free Documentation License 31

7 AGGREGATION WITH INDEPENDENT WORKS

A compilation of the Document or its derivatives with other separate and independentdocuments or works in or on a volume of a storage or distribution medium is calledan ldquoaggregaterdquo if the copyright resulting from the compilation is not used to limit thelegal rights of the compilationrsquos users beyond what the individual works permit Whenthe Document is included in an aggregate this License does not apply to the otherworks in the aggregate which are not themselves derivative works of the Document

If the Cover Text requirement of section 3 is applicable to these copies of the Documentthen if the Document is less than one half of the entire aggregate the Documentrsquos CoverTexts may be placed on covers that bracket the Document within the aggregate or theelectronic equivalent of covers if the Document is in electronic form Otherwise theymust appear on printed covers that bracket the whole aggregate

8 TRANSLATION

Translation is considered a kind of modification so you may distribute translationsof the Document under the terms of section 4 Replacing Invariant Sections withtranslations requires special permission from their copyright holders but you mayinclude translations of some or all Invariant Sections in addition to the original versionsof these Invariant Sections You may include a translation of this License and all thelicense notices in the Document and any Warranty Disclaimers provided that youalso include the original English version of this License and the original versions ofthose notices and disclaimers In case of a disagreement between the translation andthe original version of this License or a notice or disclaimer the original version willprevail

If a section in the Document is Entitled ldquoAcknowledgementsrdquo ldquoDedicationsrdquo or ldquoHis-toryrdquo the requirement (section 4) to Preserve its Title (section 1) will typically requirechanging the actual title

9 TERMINATION

You may not copy modify sublicense or distribute the Document except as expresslyprovided under this License Any attempt otherwise to copy modify sublicense ordistribute it is void and will automatically terminate your rights under this License

However if you cease all violation of this License then your license from a particularcopyright holder is reinstated (a) provisionally unless and until the copyright holderexplicitly and finally terminates your license and (b) permanently if the copyrightholder fails to notify you of the violation by some reasonable means prior to 60 daysafter the cessation

Moreover your license from a particular copyright holder is reinstated permanently ifthe copyright holder notifies you of the violation by some reasonable means this is thefirst time you have received notice of violation of this License (for any work) from thatcopyright holder and you cure the violation prior to 30 days after your receipt of thenotice

Termination of your rights under this section does not terminate the licenses of partieswho have received copies or rights from you under this License If your rights havebeen terminated and not permanently reinstated receipt of a copy of some or all of thesame material does not give you any rights to use it

Appendix A GNU Free Documentation License 32

10 FUTURE REVISIONS OF THIS LICENSE

The Free Software Foundation may publish new revised versions of the GNU FreeDocumentation License from time to time Such new versions will be similar in spiritto the present version but may differ in detail to address new problems or concernsSee httpwwwgnuorgcopyleft

Each version of the License is given a distinguishing version number If the Documentspecifies that a particular numbered version of this License ldquoor any later versionrdquoapplies to it you have the option of following the terms and conditions either of thatspecified version or of any later version that has been published (not as a draft) bythe Free Software Foundation If the Document does not specify a version number ofthis License you may choose any version ever published (not as a draft) by the FreeSoftware Foundation If the Document specifies that a proxy can decide which futureversions of this License can be used that proxyrsquos public statement of acceptance of aversion permanently authorizes you to choose that version for the Document

11 RELICENSING

ldquoMassive Multiauthor Collaboration Siterdquo (or ldquoMMC Siterdquo) means any World WideWeb server that publishes copyrightable works and also provides prominent facilitiesfor anybody to edit those works A public wiki that anybody can edit is an example ofsuch a server A ldquoMassive Multiauthor Collaborationrdquo (or ldquoMMCrdquo) contained in thesite means any set of copyrightable works thus published on the MMC site

ldquoCC-BY-SArdquo means the Creative Commons Attribution-Share Alike 30 license pub-lished by Creative Commons Corporation a not-for-profit corporation with a principalplace of business in San Francisco California as well as future copyleft versions of thatlicense published by that same organization

ldquoIncorporaterdquo means to publish or republish a Document in whole or in part as partof another Document

An MMC is ldquoeligible for relicensingrdquo if it is licensed under this License and if all worksthat were first published under this License somewhere other than this MMC andsubsequently incorporated in whole or in part into the MMC (1) had no cover textsor invariant sections and (2) were thus incorporated prior to November 1 2008

The operator of an MMC Site may republish an MMC contained in the site underCC-BY-SA on the same site at any time before August 1 2009 provided the MMC iseligible for relicensing

Appendix A GNU Free Documentation License 33

ADDENDUM How to use this License for your documents

To use this License in a document you have written include a copy of the License in thedocument and put the following copyright and license notices just after the title page

Copyright (C) year your name

Permission is granted to copy distribute andor modify this document

under the terms of the GNU Free Documentation License Version 13

or any later version published by the Free Software Foundation

with no Invariant Sections no Front-Cover Texts and no Back-Cover

Texts A copy of the license is included in the section entitled lsquolsquoGNU

Free Documentation Licensersquorsquo

If you have Invariant Sections Front-Cover Texts and Back-Cover Texts replace theldquowith Textsrdquo line with this

with the Invariant Sections being list their titles with

the Front-Cover Texts being list and with the Back-Cover Texts

being list

If you have Invariant Sections without Cover Texts or some other combination of thethree merge those two alternatives to suit the situation

If your document contains nontrivial examples of program code we recommend releasingthese examples in parallel under your choice of free software license such as the GNUGeneral Public License to permit their use in free software

Index 34

Index

Aaccess control policy 3Author 3author specifying 10

Bbehavior prior to version 5 10behavior version 3 10behavior version 4 10binary-old-keyword-value substitution mode 9branch growth 7branch number 2branch tip 2branch default 3bug reporting 25

Ccase sensitivity file format 21checkin 3checklist for bug reports 25checkout 3checkout implicit 5ci invocation 11co invocation 12comma-v file format 1command help 7command version 7command-line option to specify a revision 7credits 1

DDate 3date formats 8date specifying 8dates file format 21default branch 3default branch setting 15deleting revisions 15description of working file 2description text specifying 8

Eempty log message 9emulation previous RCS versions 10encoding file format 20environment variables 10

Ffeatures still missing 23

file names on the command-line 7format RCSfile 20

Ggrammar file format 20

HHeader 3history 1

IId 3ident invocation 13implicit checkout circumstance 5implicit checkout locked 12implicit checkout unlocked 12instantiating a working file 2interaction model 1interactive mode 9invocation ci 11invocation co 12invocation ident 13invocation merge 14invocation rcs 14 15invocation rcsclean 16invocation rcsdiff 17invocation rcsmerge 17invocation rlog 18

Kkeyword-only substitution mode 9keyword-value substitution mode 8keyword-value-locker substitution mode 9keywords table of 3

Llayout of nodes file format 21license 1Locker 3locking a revision 15locking on implicit checkout 12locking non-strict 5locking set non-strict 15locking set strict 15locking strict 5locks in RCS file 3Log 3log message empty 9LOGNAME 11

Index 35

Mmemory limit 11merge invocation 14model interaction 1

NName 4names symbolic 3node layout file format 21non-strict locking 5number branch 2number revision 2

Oold-keyword-value substitution mode 9order of options and file names 7outdating revisions 15overview 1

Ppairing RCS and working files 7patches contributing 25problems 25projects related 1

Qquiet mode 9

Rrange of revisions specifying 7RCS file 2rcs invocation 14 15RCS version emulation 10RCS_MEM_LIMIT 11rcsclean invocation 16rcsdiff invocation 17RCSfile 4RCSfile format 20RCSINIT 10rcsmerge invocation 17removing revisions 15reporting bugs 25Revision 4revision number 2revision range specifying 7

revision specifying 7revisions tree of 3rlog invocation 18

SSource 4specifying a date 8specifying a range of revisions 7specifying a revision 7specifying a state 9specifying a suffix list 10specifying a timedate 8specifying author 10specifying description text 8specifying substitution mode 8State 4state specifying 9strict locking 5substitution mode default 8substitution mode specifying 8suffix list specifying 10symbolic names 3

TTEMP 11third-party interop file format 21Tichy Walter F 1time zone 8timedate specifying 8tip 2tip increment 7TMP 11TMPDIR 11tree of revisions 3

Uunlocking a revision 15USER 11

Vvalue-only substitution mode 9

Wwhitespace file format 21working file description 2working file instantiation 2

  • Overview
    • Credits
    • Concepts
      • Interaction model
      • Working file
      • RCS file
      • Fundamental operations
      • Keywords
        • Quick tour
          • Usage
            • Common elements
              • Revision options
              • Date option
              • Description option
              • Substitution mode option
              • Log message option
              • Misc common options
              • Environment
                • Invoking ci
                • Invoking co
                • Invoking ident
                • Invoking merge
                • Invoking rcs
                  • modern
                  • legacy
                    • Invoking rcsclean
                    • Invoking rcsdiff
                    • Invoking rcsmerge
                    • Invoking rlog
                      • Hacking
                        • File format
                          • File format grammar
                          • Additional particulars of the file format
                            • Still missing
                            • Reporting bugs
                              • GNU Free Documentation License
                              • Index
Page 34: GNU RCS · The RCS file is also known (colloquially) as the “comma-v file”, due to its name often ending in ,v (e.g., a.c,v). A revision number is a branch number followed by

Appendix A GNU Free Documentation License 31

7 AGGREGATION WITH INDEPENDENT WORKS

A compilation of the Document or its derivatives with other separate and independentdocuments or works in or on a volume of a storage or distribution medium is calledan ldquoaggregaterdquo if the copyright resulting from the compilation is not used to limit thelegal rights of the compilationrsquos users beyond what the individual works permit Whenthe Document is included in an aggregate this License does not apply to the otherworks in the aggregate which are not themselves derivative works of the Document

If the Cover Text requirement of section 3 is applicable to these copies of the Documentthen if the Document is less than one half of the entire aggregate the Documentrsquos CoverTexts may be placed on covers that bracket the Document within the aggregate or theelectronic equivalent of covers if the Document is in electronic form Otherwise theymust appear on printed covers that bracket the whole aggregate

8 TRANSLATION

Translation is considered a kind of modification so you may distribute translationsof the Document under the terms of section 4 Replacing Invariant Sections withtranslations requires special permission from their copyright holders but you mayinclude translations of some or all Invariant Sections in addition to the original versionsof these Invariant Sections You may include a translation of this License and all thelicense notices in the Document and any Warranty Disclaimers provided that youalso include the original English version of this License and the original versions ofthose notices and disclaimers In case of a disagreement between the translation andthe original version of this License or a notice or disclaimer the original version willprevail

If a section in the Document is Entitled ldquoAcknowledgementsrdquo ldquoDedicationsrdquo or ldquoHis-toryrdquo the requirement (section 4) to Preserve its Title (section 1) will typically requirechanging the actual title

9 TERMINATION

You may not copy modify sublicense or distribute the Document except as expresslyprovided under this License Any attempt otherwise to copy modify sublicense ordistribute it is void and will automatically terminate your rights under this License

However if you cease all violation of this License then your license from a particularcopyright holder is reinstated (a) provisionally unless and until the copyright holderexplicitly and finally terminates your license and (b) permanently if the copyrightholder fails to notify you of the violation by some reasonable means prior to 60 daysafter the cessation

Moreover your license from a particular copyright holder is reinstated permanently ifthe copyright holder notifies you of the violation by some reasonable means this is thefirst time you have received notice of violation of this License (for any work) from thatcopyright holder and you cure the violation prior to 30 days after your receipt of thenotice

Termination of your rights under this section does not terminate the licenses of partieswho have received copies or rights from you under this License If your rights havebeen terminated and not permanently reinstated receipt of a copy of some or all of thesame material does not give you any rights to use it

Appendix A GNU Free Documentation License 32

10 FUTURE REVISIONS OF THIS LICENSE

The Free Software Foundation may publish new revised versions of the GNU FreeDocumentation License from time to time Such new versions will be similar in spiritto the present version but may differ in detail to address new problems or concernsSee httpwwwgnuorgcopyleft

Each version of the License is given a distinguishing version number If the Documentspecifies that a particular numbered version of this License ldquoor any later versionrdquoapplies to it you have the option of following the terms and conditions either of thatspecified version or of any later version that has been published (not as a draft) bythe Free Software Foundation If the Document does not specify a version number ofthis License you may choose any version ever published (not as a draft) by the FreeSoftware Foundation If the Document specifies that a proxy can decide which futureversions of this License can be used that proxyrsquos public statement of acceptance of aversion permanently authorizes you to choose that version for the Document

11 RELICENSING

ldquoMassive Multiauthor Collaboration Siterdquo (or ldquoMMC Siterdquo) means any World WideWeb server that publishes copyrightable works and also provides prominent facilitiesfor anybody to edit those works A public wiki that anybody can edit is an example ofsuch a server A ldquoMassive Multiauthor Collaborationrdquo (or ldquoMMCrdquo) contained in thesite means any set of copyrightable works thus published on the MMC site

ldquoCC-BY-SArdquo means the Creative Commons Attribution-Share Alike 30 license pub-lished by Creative Commons Corporation a not-for-profit corporation with a principalplace of business in San Francisco California as well as future copyleft versions of thatlicense published by that same organization

ldquoIncorporaterdquo means to publish or republish a Document in whole or in part as partof another Document

An MMC is ldquoeligible for relicensingrdquo if it is licensed under this License and if all worksthat were first published under this License somewhere other than this MMC andsubsequently incorporated in whole or in part into the MMC (1) had no cover textsor invariant sections and (2) were thus incorporated prior to November 1 2008

The operator of an MMC Site may republish an MMC contained in the site underCC-BY-SA on the same site at any time before August 1 2009 provided the MMC iseligible for relicensing

Appendix A GNU Free Documentation License 33

ADDENDUM How to use this License for your documents

To use this License in a document you have written include a copy of the License in thedocument and put the following copyright and license notices just after the title page

Copyright (C) year your name

Permission is granted to copy distribute andor modify this document

under the terms of the GNU Free Documentation License Version 13

or any later version published by the Free Software Foundation

with no Invariant Sections no Front-Cover Texts and no Back-Cover

Texts A copy of the license is included in the section entitled lsquolsquoGNU

Free Documentation Licensersquorsquo

If you have Invariant Sections Front-Cover Texts and Back-Cover Texts replace theldquowith Textsrdquo line with this

with the Invariant Sections being list their titles with

the Front-Cover Texts being list and with the Back-Cover Texts

being list

If you have Invariant Sections without Cover Texts or some other combination of thethree merge those two alternatives to suit the situation

If your document contains nontrivial examples of program code we recommend releasingthese examples in parallel under your choice of free software license such as the GNUGeneral Public License to permit their use in free software

Index 34

Index

Aaccess control policy 3Author 3author specifying 10

Bbehavior prior to version 5 10behavior version 3 10behavior version 4 10binary-old-keyword-value substitution mode 9branch growth 7branch number 2branch tip 2branch default 3bug reporting 25

Ccase sensitivity file format 21checkin 3checklist for bug reports 25checkout 3checkout implicit 5ci invocation 11co invocation 12comma-v file format 1command help 7command version 7command-line option to specify a revision 7credits 1

DDate 3date formats 8date specifying 8dates file format 21default branch 3default branch setting 15deleting revisions 15description of working file 2description text specifying 8

Eempty log message 9emulation previous RCS versions 10encoding file format 20environment variables 10

Ffeatures still missing 23

file names on the command-line 7format RCSfile 20

Ggrammar file format 20

HHeader 3history 1

IId 3ident invocation 13implicit checkout circumstance 5implicit checkout locked 12implicit checkout unlocked 12instantiating a working file 2interaction model 1interactive mode 9invocation ci 11invocation co 12invocation ident 13invocation merge 14invocation rcs 14 15invocation rcsclean 16invocation rcsdiff 17invocation rcsmerge 17invocation rlog 18

Kkeyword-only substitution mode 9keyword-value substitution mode 8keyword-value-locker substitution mode 9keywords table of 3

Llayout of nodes file format 21license 1Locker 3locking a revision 15locking on implicit checkout 12locking non-strict 5locking set non-strict 15locking set strict 15locking strict 5locks in RCS file 3Log 3log message empty 9LOGNAME 11

Index 35

Mmemory limit 11merge invocation 14model interaction 1

NName 4names symbolic 3node layout file format 21non-strict locking 5number branch 2number revision 2

Oold-keyword-value substitution mode 9order of options and file names 7outdating revisions 15overview 1

Ppairing RCS and working files 7patches contributing 25problems 25projects related 1

Qquiet mode 9

Rrange of revisions specifying 7RCS file 2rcs invocation 14 15RCS version emulation 10RCS_MEM_LIMIT 11rcsclean invocation 16rcsdiff invocation 17RCSfile 4RCSfile format 20RCSINIT 10rcsmerge invocation 17removing revisions 15reporting bugs 25Revision 4revision number 2revision range specifying 7

revision specifying 7revisions tree of 3rlog invocation 18

SSource 4specifying a date 8specifying a range of revisions 7specifying a revision 7specifying a state 9specifying a suffix list 10specifying a timedate 8specifying author 10specifying description text 8specifying substitution mode 8State 4state specifying 9strict locking 5substitution mode default 8substitution mode specifying 8suffix list specifying 10symbolic names 3

TTEMP 11third-party interop file format 21Tichy Walter F 1time zone 8timedate specifying 8tip 2tip increment 7TMP 11TMPDIR 11tree of revisions 3

Uunlocking a revision 15USER 11

Vvalue-only substitution mode 9

Wwhitespace file format 21working file description 2working file instantiation 2

  • Overview
    • Credits
    • Concepts
      • Interaction model
      • Working file
      • RCS file
      • Fundamental operations
      • Keywords
        • Quick tour
          • Usage
            • Common elements
              • Revision options
              • Date option
              • Description option
              • Substitution mode option
              • Log message option
              • Misc common options
              • Environment
                • Invoking ci
                • Invoking co
                • Invoking ident
                • Invoking merge
                • Invoking rcs
                  • modern
                  • legacy
                    • Invoking rcsclean
                    • Invoking rcsdiff
                    • Invoking rcsmerge
                    • Invoking rlog
                      • Hacking
                        • File format
                          • File format grammar
                          • Additional particulars of the file format
                            • Still missing
                            • Reporting bugs
                              • GNU Free Documentation License
                              • Index
Page 35: GNU RCS · The RCS file is also known (colloquially) as the “comma-v file”, due to its name often ending in ,v (e.g., a.c,v). A revision number is a branch number followed by

Appendix A GNU Free Documentation License 32

10 FUTURE REVISIONS OF THIS LICENSE

The Free Software Foundation may publish new revised versions of the GNU FreeDocumentation License from time to time Such new versions will be similar in spiritto the present version but may differ in detail to address new problems or concernsSee httpwwwgnuorgcopyleft

Each version of the License is given a distinguishing version number If the Documentspecifies that a particular numbered version of this License ldquoor any later versionrdquoapplies to it you have the option of following the terms and conditions either of thatspecified version or of any later version that has been published (not as a draft) bythe Free Software Foundation If the Document does not specify a version number ofthis License you may choose any version ever published (not as a draft) by the FreeSoftware Foundation If the Document specifies that a proxy can decide which futureversions of this License can be used that proxyrsquos public statement of acceptance of aversion permanently authorizes you to choose that version for the Document

11 RELICENSING

ldquoMassive Multiauthor Collaboration Siterdquo (or ldquoMMC Siterdquo) means any World WideWeb server that publishes copyrightable works and also provides prominent facilitiesfor anybody to edit those works A public wiki that anybody can edit is an example ofsuch a server A ldquoMassive Multiauthor Collaborationrdquo (or ldquoMMCrdquo) contained in thesite means any set of copyrightable works thus published on the MMC site

ldquoCC-BY-SArdquo means the Creative Commons Attribution-Share Alike 30 license pub-lished by Creative Commons Corporation a not-for-profit corporation with a principalplace of business in San Francisco California as well as future copyleft versions of thatlicense published by that same organization

ldquoIncorporaterdquo means to publish or republish a Document in whole or in part as partof another Document

An MMC is ldquoeligible for relicensingrdquo if it is licensed under this License and if all worksthat were first published under this License somewhere other than this MMC andsubsequently incorporated in whole or in part into the MMC (1) had no cover textsor invariant sections and (2) were thus incorporated prior to November 1 2008

The operator of an MMC Site may republish an MMC contained in the site underCC-BY-SA on the same site at any time before August 1 2009 provided the MMC iseligible for relicensing

Appendix A GNU Free Documentation License 33

ADDENDUM How to use this License for your documents

To use this License in a document you have written include a copy of the License in thedocument and put the following copyright and license notices just after the title page

Copyright (C) year your name

Permission is granted to copy distribute andor modify this document

under the terms of the GNU Free Documentation License Version 13

or any later version published by the Free Software Foundation

with no Invariant Sections no Front-Cover Texts and no Back-Cover

Texts A copy of the license is included in the section entitled lsquolsquoGNU

Free Documentation Licensersquorsquo

If you have Invariant Sections Front-Cover Texts and Back-Cover Texts replace theldquowith Textsrdquo line with this

with the Invariant Sections being list their titles with

the Front-Cover Texts being list and with the Back-Cover Texts

being list

If you have Invariant Sections without Cover Texts or some other combination of thethree merge those two alternatives to suit the situation

If your document contains nontrivial examples of program code we recommend releasingthese examples in parallel under your choice of free software license such as the GNUGeneral Public License to permit their use in free software

Index 34

Index

Aaccess control policy 3Author 3author specifying 10

Bbehavior prior to version 5 10behavior version 3 10behavior version 4 10binary-old-keyword-value substitution mode 9branch growth 7branch number 2branch tip 2branch default 3bug reporting 25

Ccase sensitivity file format 21checkin 3checklist for bug reports 25checkout 3checkout implicit 5ci invocation 11co invocation 12comma-v file format 1command help 7command version 7command-line option to specify a revision 7credits 1

DDate 3date formats 8date specifying 8dates file format 21default branch 3default branch setting 15deleting revisions 15description of working file 2description text specifying 8

Eempty log message 9emulation previous RCS versions 10encoding file format 20environment variables 10

Ffeatures still missing 23

file names on the command-line 7format RCSfile 20

Ggrammar file format 20

HHeader 3history 1

IId 3ident invocation 13implicit checkout circumstance 5implicit checkout locked 12implicit checkout unlocked 12instantiating a working file 2interaction model 1interactive mode 9invocation ci 11invocation co 12invocation ident 13invocation merge 14invocation rcs 14 15invocation rcsclean 16invocation rcsdiff 17invocation rcsmerge 17invocation rlog 18

Kkeyword-only substitution mode 9keyword-value substitution mode 8keyword-value-locker substitution mode 9keywords table of 3

Llayout of nodes file format 21license 1Locker 3locking a revision 15locking on implicit checkout 12locking non-strict 5locking set non-strict 15locking set strict 15locking strict 5locks in RCS file 3Log 3log message empty 9LOGNAME 11

Index 35

Mmemory limit 11merge invocation 14model interaction 1

NName 4names symbolic 3node layout file format 21non-strict locking 5number branch 2number revision 2

Oold-keyword-value substitution mode 9order of options and file names 7outdating revisions 15overview 1

Ppairing RCS and working files 7patches contributing 25problems 25projects related 1

Qquiet mode 9

Rrange of revisions specifying 7RCS file 2rcs invocation 14 15RCS version emulation 10RCS_MEM_LIMIT 11rcsclean invocation 16rcsdiff invocation 17RCSfile 4RCSfile format 20RCSINIT 10rcsmerge invocation 17removing revisions 15reporting bugs 25Revision 4revision number 2revision range specifying 7

revision specifying 7revisions tree of 3rlog invocation 18

SSource 4specifying a date 8specifying a range of revisions 7specifying a revision 7specifying a state 9specifying a suffix list 10specifying a timedate 8specifying author 10specifying description text 8specifying substitution mode 8State 4state specifying 9strict locking 5substitution mode default 8substitution mode specifying 8suffix list specifying 10symbolic names 3

TTEMP 11third-party interop file format 21Tichy Walter F 1time zone 8timedate specifying 8tip 2tip increment 7TMP 11TMPDIR 11tree of revisions 3

Uunlocking a revision 15USER 11

Vvalue-only substitution mode 9

Wwhitespace file format 21working file description 2working file instantiation 2

  • Overview
    • Credits
    • Concepts
      • Interaction model
      • Working file
      • RCS file
      • Fundamental operations
      • Keywords
        • Quick tour
          • Usage
            • Common elements
              • Revision options
              • Date option
              • Description option
              • Substitution mode option
              • Log message option
              • Misc common options
              • Environment
                • Invoking ci
                • Invoking co
                • Invoking ident
                • Invoking merge
                • Invoking rcs
                  • modern
                  • legacy
                    • Invoking rcsclean
                    • Invoking rcsdiff
                    • Invoking rcsmerge
                    • Invoking rlog
                      • Hacking
                        • File format
                          • File format grammar
                          • Additional particulars of the file format
                            • Still missing
                            • Reporting bugs
                              • GNU Free Documentation License
                              • Index
Page 36: GNU RCS · The RCS file is also known (colloquially) as the “comma-v file”, due to its name often ending in ,v (e.g., a.c,v). A revision number is a branch number followed by

Appendix A GNU Free Documentation License 33

ADDENDUM How to use this License for your documents

To use this License in a document you have written include a copy of the License in thedocument and put the following copyright and license notices just after the title page

Copyright (C) year your name

Permission is granted to copy distribute andor modify this document

under the terms of the GNU Free Documentation License Version 13

or any later version published by the Free Software Foundation

with no Invariant Sections no Front-Cover Texts and no Back-Cover

Texts A copy of the license is included in the section entitled lsquolsquoGNU

Free Documentation Licensersquorsquo

If you have Invariant Sections Front-Cover Texts and Back-Cover Texts replace theldquowith Textsrdquo line with this

with the Invariant Sections being list their titles with

the Front-Cover Texts being list and with the Back-Cover Texts

being list

If you have Invariant Sections without Cover Texts or some other combination of thethree merge those two alternatives to suit the situation

If your document contains nontrivial examples of program code we recommend releasingthese examples in parallel under your choice of free software license such as the GNUGeneral Public License to permit their use in free software

Index 34

Index

Aaccess control policy 3Author 3author specifying 10

Bbehavior prior to version 5 10behavior version 3 10behavior version 4 10binary-old-keyword-value substitution mode 9branch growth 7branch number 2branch tip 2branch default 3bug reporting 25

Ccase sensitivity file format 21checkin 3checklist for bug reports 25checkout 3checkout implicit 5ci invocation 11co invocation 12comma-v file format 1command help 7command version 7command-line option to specify a revision 7credits 1

DDate 3date formats 8date specifying 8dates file format 21default branch 3default branch setting 15deleting revisions 15description of working file 2description text specifying 8

Eempty log message 9emulation previous RCS versions 10encoding file format 20environment variables 10

Ffeatures still missing 23

file names on the command-line 7format RCSfile 20

Ggrammar file format 20

HHeader 3history 1

IId 3ident invocation 13implicit checkout circumstance 5implicit checkout locked 12implicit checkout unlocked 12instantiating a working file 2interaction model 1interactive mode 9invocation ci 11invocation co 12invocation ident 13invocation merge 14invocation rcs 14 15invocation rcsclean 16invocation rcsdiff 17invocation rcsmerge 17invocation rlog 18

Kkeyword-only substitution mode 9keyword-value substitution mode 8keyword-value-locker substitution mode 9keywords table of 3

Llayout of nodes file format 21license 1Locker 3locking a revision 15locking on implicit checkout 12locking non-strict 5locking set non-strict 15locking set strict 15locking strict 5locks in RCS file 3Log 3log message empty 9LOGNAME 11

Index 35

Mmemory limit 11merge invocation 14model interaction 1

NName 4names symbolic 3node layout file format 21non-strict locking 5number branch 2number revision 2

Oold-keyword-value substitution mode 9order of options and file names 7outdating revisions 15overview 1

Ppairing RCS and working files 7patches contributing 25problems 25projects related 1

Qquiet mode 9

Rrange of revisions specifying 7RCS file 2rcs invocation 14 15RCS version emulation 10RCS_MEM_LIMIT 11rcsclean invocation 16rcsdiff invocation 17RCSfile 4RCSfile format 20RCSINIT 10rcsmerge invocation 17removing revisions 15reporting bugs 25Revision 4revision number 2revision range specifying 7

revision specifying 7revisions tree of 3rlog invocation 18

SSource 4specifying a date 8specifying a range of revisions 7specifying a revision 7specifying a state 9specifying a suffix list 10specifying a timedate 8specifying author 10specifying description text 8specifying substitution mode 8State 4state specifying 9strict locking 5substitution mode default 8substitution mode specifying 8suffix list specifying 10symbolic names 3

TTEMP 11third-party interop file format 21Tichy Walter F 1time zone 8timedate specifying 8tip 2tip increment 7TMP 11TMPDIR 11tree of revisions 3

Uunlocking a revision 15USER 11

Vvalue-only substitution mode 9

Wwhitespace file format 21working file description 2working file instantiation 2

  • Overview
    • Credits
    • Concepts
      • Interaction model
      • Working file
      • RCS file
      • Fundamental operations
      • Keywords
        • Quick tour
          • Usage
            • Common elements
              • Revision options
              • Date option
              • Description option
              • Substitution mode option
              • Log message option
              • Misc common options
              • Environment
                • Invoking ci
                • Invoking co
                • Invoking ident
                • Invoking merge
                • Invoking rcs
                  • modern
                  • legacy
                    • Invoking rcsclean
                    • Invoking rcsdiff
                    • Invoking rcsmerge
                    • Invoking rlog
                      • Hacking
                        • File format
                          • File format grammar
                          • Additional particulars of the file format
                            • Still missing
                            • Reporting bugs
                              • GNU Free Documentation License
                              • Index
Page 37: GNU RCS · The RCS file is also known (colloquially) as the “comma-v file”, due to its name often ending in ,v (e.g., a.c,v). A revision number is a branch number followed by

Index 34

Index

Aaccess control policy 3Author 3author specifying 10

Bbehavior prior to version 5 10behavior version 3 10behavior version 4 10binary-old-keyword-value substitution mode 9branch growth 7branch number 2branch tip 2branch default 3bug reporting 25

Ccase sensitivity file format 21checkin 3checklist for bug reports 25checkout 3checkout implicit 5ci invocation 11co invocation 12comma-v file format 1command help 7command version 7command-line option to specify a revision 7credits 1

DDate 3date formats 8date specifying 8dates file format 21default branch 3default branch setting 15deleting revisions 15description of working file 2description text specifying 8

Eempty log message 9emulation previous RCS versions 10encoding file format 20environment variables 10

Ffeatures still missing 23

file names on the command-line 7format RCSfile 20

Ggrammar file format 20

HHeader 3history 1

IId 3ident invocation 13implicit checkout circumstance 5implicit checkout locked 12implicit checkout unlocked 12instantiating a working file 2interaction model 1interactive mode 9invocation ci 11invocation co 12invocation ident 13invocation merge 14invocation rcs 14 15invocation rcsclean 16invocation rcsdiff 17invocation rcsmerge 17invocation rlog 18

Kkeyword-only substitution mode 9keyword-value substitution mode 8keyword-value-locker substitution mode 9keywords table of 3

Llayout of nodes file format 21license 1Locker 3locking a revision 15locking on implicit checkout 12locking non-strict 5locking set non-strict 15locking set strict 15locking strict 5locks in RCS file 3Log 3log message empty 9LOGNAME 11

Index 35

Mmemory limit 11merge invocation 14model interaction 1

NName 4names symbolic 3node layout file format 21non-strict locking 5number branch 2number revision 2

Oold-keyword-value substitution mode 9order of options and file names 7outdating revisions 15overview 1

Ppairing RCS and working files 7patches contributing 25problems 25projects related 1

Qquiet mode 9

Rrange of revisions specifying 7RCS file 2rcs invocation 14 15RCS version emulation 10RCS_MEM_LIMIT 11rcsclean invocation 16rcsdiff invocation 17RCSfile 4RCSfile format 20RCSINIT 10rcsmerge invocation 17removing revisions 15reporting bugs 25Revision 4revision number 2revision range specifying 7

revision specifying 7revisions tree of 3rlog invocation 18

SSource 4specifying a date 8specifying a range of revisions 7specifying a revision 7specifying a state 9specifying a suffix list 10specifying a timedate 8specifying author 10specifying description text 8specifying substitution mode 8State 4state specifying 9strict locking 5substitution mode default 8substitution mode specifying 8suffix list specifying 10symbolic names 3

TTEMP 11third-party interop file format 21Tichy Walter F 1time zone 8timedate specifying 8tip 2tip increment 7TMP 11TMPDIR 11tree of revisions 3

Uunlocking a revision 15USER 11

Vvalue-only substitution mode 9

Wwhitespace file format 21working file description 2working file instantiation 2

  • Overview
    • Credits
    • Concepts
      • Interaction model
      • Working file
      • RCS file
      • Fundamental operations
      • Keywords
        • Quick tour
          • Usage
            • Common elements
              • Revision options
              • Date option
              • Description option
              • Substitution mode option
              • Log message option
              • Misc common options
              • Environment
                • Invoking ci
                • Invoking co
                • Invoking ident
                • Invoking merge
                • Invoking rcs
                  • modern
                  • legacy
                    • Invoking rcsclean
                    • Invoking rcsdiff
                    • Invoking rcsmerge
                    • Invoking rlog
                      • Hacking
                        • File format
                          • File format grammar
                          • Additional particulars of the file format
                            • Still missing
                            • Reporting bugs
                              • GNU Free Documentation License
                              • Index
Page 38: GNU RCS · The RCS file is also known (colloquially) as the “comma-v file”, due to its name often ending in ,v (e.g., a.c,v). A revision number is a branch number followed by

Index 35

Mmemory limit 11merge invocation 14model interaction 1

NName 4names symbolic 3node layout file format 21non-strict locking 5number branch 2number revision 2

Oold-keyword-value substitution mode 9order of options and file names 7outdating revisions 15overview 1

Ppairing RCS and working files 7patches contributing 25problems 25projects related 1

Qquiet mode 9

Rrange of revisions specifying 7RCS file 2rcs invocation 14 15RCS version emulation 10RCS_MEM_LIMIT 11rcsclean invocation 16rcsdiff invocation 17RCSfile 4RCSfile format 20RCSINIT 10rcsmerge invocation 17removing revisions 15reporting bugs 25Revision 4revision number 2revision range specifying 7

revision specifying 7revisions tree of 3rlog invocation 18

SSource 4specifying a date 8specifying a range of revisions 7specifying a revision 7specifying a state 9specifying a suffix list 10specifying a timedate 8specifying author 10specifying description text 8specifying substitution mode 8State 4state specifying 9strict locking 5substitution mode default 8substitution mode specifying 8suffix list specifying 10symbolic names 3

TTEMP 11third-party interop file format 21Tichy Walter F 1time zone 8timedate specifying 8tip 2tip increment 7TMP 11TMPDIR 11tree of revisions 3

Uunlocking a revision 15USER 11

Vvalue-only substitution mode 9

Wwhitespace file format 21working file description 2working file instantiation 2

  • Overview
    • Credits
    • Concepts
      • Interaction model
      • Working file
      • RCS file
      • Fundamental operations
      • Keywords
        • Quick tour
          • Usage
            • Common elements
              • Revision options
              • Date option
              • Description option
              • Substitution mode option
              • Log message option
              • Misc common options
              • Environment
                • Invoking ci
                • Invoking co
                • Invoking ident
                • Invoking merge
                • Invoking rcs
                  • modern
                  • legacy
                    • Invoking rcsclean
                    • Invoking rcsdiff
                    • Invoking rcsmerge
                    • Invoking rlog
                      • Hacking
                        • File format
                          • File format grammar
                          • Additional particulars of the file format
                            • Still missing
                            • Reporting bugs
                              • GNU Free Documentation License
                              • Index