throbber
DROPBOX EX. 1019
`
`DROPBOX EX. 1019
`
`
`
`

`
`It would be nice if the RCS file format (which is implemented by a
`great many tools, both free and non-free, both by calling GNU RCS and
`by reimplementing access to RCS files) were documented in some
`standard separate from any one tool. But as far as I know no such
`standard exists. Hence this file.
`
`The place to start is the rcsfile.5 manpage in the GNU RCS 5.7
`distribution. Then look at the diff at the end of this file (which
`contains a few fixes and clarifications to that manpage).
`
`If you are interested in MKS RCS, src/ci.c in GNU RCS 5.7 has a
`comment about their date format. However, as far as we know there
`isn't really any document describing MKS's changes to the RCS file
`format.
`
`The rcsfile.5 manpage does not document what goes in the "text" field
`for each revision. The answer is that the head revision contains the
`contents of that revision and every other revision contain a bunch of
`edits to produce that revision ("a" and "d" lines). The GNU diff
`manual (the version I looked at was for GNU diff 2.4) documents this
`format somewhat (as the "RCS output format"), but the presentation is
`a bit confusing as it is all tangled up with the documentation of
`several other output formats. If you just want some source code to
`look at, the part of CVS which applies these is RCS_deltas in
`src/rcs.c.
`
`The rcsfile.5 documentation only _very_ briefly touches on the order
`of the revisions. The order _is_ important and CVS relies on it.
`Here is an example of what I was able to find, based on the join3
`sanity.sh testcase (and the behavior I am documenting here seems to be
`the same for RCS 5.7 and CVS 1.9.27):
`
` 1.1 -----------------> 1.2
` \---> 1.1.2.1 \---> 1.2.2.1
`
`Here is how this shows up in the RCS file (omitting irrelevant parts):
`
` admin: head 1.2;
` deltas:
` 1.2 branches 1.2.2.1; next 1.1;
` 1.1 branches 1.1.2.1; next;
` 1.1.2.1 branches; next;
` 1.2.2.1 branches; next;
` deltatexts:
` 1.2
` 1.2.2.1
` 1.1
` 1.1.2.1
`
`Yes, the order seems to differ between the deltas and the deltatexts.
`
`Dropbox Ex. 1019
`Page 1
`
`

`
`I have no idea how much of this should actually be considered part of
`the RCS file format, and how much programs reading it should expect to
`encounter any order.
`
`The rcsfile.5 grammar shows the {num} after "next" as optional; if it
`is omitted then there is no next delta node (for example 1.1 or the
`head of a branch will typically have no next).
`
`There is one case where CVS uses CVS-specific, non-compatible changes
`to the RCS file format, and this is magic branches. See cvs.texinfo
`for more information on them. CVS also sets the RCS state to "dead"
`to indicate that a file does not exist in a given revision (this is
`stored just as any other RCS state is).
`
`The RCS file format allows quite a variety of extensions to be added
`in a compatible manner by use of the "newphrase" feature documented in
`rcsfile.5. We won't try to document extensions not used by CVS in any
`detail, but we will briefly list them. Each occurrence of a newphrase
`begins with an identifier, which is what we list here. Future
`designers of extensions are strongly encouraged to pick
`non-conflicting identifiers. Note that newphrase occurs several
`places in the RCS grammar, and a given extension may not be legal in
`all locations. However, it seems better to reserve a particular
`identifier for all locations, to avoid confusion and complicated
`rules.
`
` Identifier Used by
` ---------- -------
` namespace RCS library done at Silicon Graphics Inc. (SGI) in
`1996
` (a modified RCS 5.7--not sure it has any other name).
` dead A set of RCS patches developed by Rich Pixley at
` Cygnus about 1992. These were for CVS, and predated
` the current CVS death support, which uses a state
`"dead"
` rather than a "dead" newphrase.
`
`CVS does use newphrases to implement the `PreservePermissions'
`extension introduced in CVS 1.9.26. The following new keywords are
`defined when PreservePermissions=yes:
`
` owner
` group
` permissions
` special
` symlink
` hardlinks
`
`The contents of the `owner' and `group' field should be a numeric uid
`and a numeric gid, respectively, representing the user and group who
`
`Dropbox Ex. 1019
`Page 2
`
`

`
`own the file. The `permissions' field contains an octal integer,
`representing the permissions that should be applied to the file. The
``special' field contains two words; the first must be either `block'
`or `character', and the second is the file's device number. The
``symlink' field should be present only in files which are symbolic
`links to other files, and absent on all regular files. The
``hardlinks' field contains a list of filenames to which the current
`file is linked, in alphabetical order. Because files often contain
`characters special to RCS, like `.' and sometimes even contain spaces
`or eight-bit characters, the filenames in the hardlinks field will
`usually be enclosed in RCS strings. For example:
`
`hardlinks
`
`README @install.txt@ @Installation Notes@;
`
`The hardlinks field should always include the name of the current
`file. That is, in the repository file README,v, any hardlinks fields
`in the delta nodes should include `README'; CVS will not operate
`properly if this is not done.
`
`The rules regarding keyword expansion are not documented along with
`the rest of the RCS file format; they are documented in the co(1)
`manpage in the RCS 5.7 distribution. See also the "Keyword
`substitution" chapter of cvs.texinfo. The co(1) manpage refers to
`special behavior if the log prefix for the $Log keyword is /* or (*.
`RCS 5.7 produces a warning whenever it behaves that way, and current
`versions of CVS do not handle this case in a special way (CVS 1.9 and
`earlier invoke RCS to perform keyword expansion).
`
`Note that if the "expand" keyword is omitted from the RCS file, the
`default is "kv".
`
`Note that the "comment {string};" syntax from rcsfile.5 specifies a
`comment leader, which affects expansion of the $Log keyword for old
`versions of RCS. The comment leader is not used by RCS 5.7 or current
`versions of CVS.
`
`Both RCS 5.7 and current versions of CVS handle the $Log keyword in a
`different way if the log message starts with "checked in with -k by ".
`I don't think this behavior is documented anywhere.
`
`One common concern about the RCS file format is the fact that to get
`the head of a branch, one must apply deltas from the head of the trunk
`to the branchpoint, and then from the branchpoint to the head of the
`branch. While more detailed analyses might be worth doing, we will
`note:
`
` * The performance bottleneck for CVS generally is figuring out
`which
` files to operate on and that sort of thing, not applying deltas.
`
`Dropbox Ex. 1019
`Page 3
`
`

`
` * Here is one quick test (probably not a very good test; a better
`test
` would use a normally sized file (say 50-200K) instead of a small
`one):
`
`I just did a quick test with a small file (on a Sun Ultra
`
`running Solaris 5.5.1), with 1000 revisions on the main branch
`
`1/170E
`
`and
`
`1000 revisions on branch that forked at the root (i.e., RCS
`revisions
`1.1, 1.2, ..., 1.1000, and branch revisions 1.1.1.1,
`1.1.1.2, ...,
`1.1.1.1000). It took about 0.15 seconds real time to check in
`
`the
`
`first revision, and about 0.6 seconds to check in and 0.3
`seconds to
`retrieve revision 1.1.1.1000 (the worst case).
`
` * Any attempt to "fix" this problem should be careful not to
`interfere
` with other features, such as lightweight creation of branches
` (particularly using CVS magic branches).
`
`Diff follows:
`
`(Note that in the following diff the old value for the Id keyword was:
` Id: rcsfile.5in,v 5.6 1995/06/05 08:28:35 eggert Exp
`and the new one was:
` Id: rcsfile.5in,v 5.7 1996/12/09 17:31:44 eggert Exp
`but since this file itself might be subject to keyword expansion I
`haven't included a diff for that fact).
`
`5.6
`5.7
`
`===================================================================
`RCS file: RCS/rcsfile.5in,v
`retrieving revision 5.6
`retrieving revision 5.7
`diff -u -r5.6 -r5.7
`--- rcsfile.5in 1995/06/05 08:28:35
`+++ rcsfile.5in 1996/12/09 17:31:44
`@@ -85,7 +85,8 @@
` .LP
` \f2sym\fP
`\f2digit\fP}*
` .LP
`-\f2idchar\fP
`\f2special\fP
`+\f2idchar\fP
`+
` .LP
`
`::=
`
`::=
`
`{\f2digit\fP}* \f2idchar\fP {\f2idchar\fP |
`
`any visible graphic character except
`
`any visible graphic character,
`::=
`except \f2digit\fP or \f2special\fP
`
`Dropbox Ex. 1019
`Page 4
`
`

`
`\f3$\fP | \f3,\fP | \f3.\fP | \f3:\fP |
`
`::=
` \f2special\fP
`\f3;\fP | \f3@\fP
` .LP
`@@ -119,12 +120,23 @@
` the minute (00\-59),
` and
` .I ss
`-the second (00\-60).
`+the second (00\-59).
`+If
` .I Y
`-contains just the last two digits of the year
`-for years from 1900 through 1999,
`-and all the digits of years thereafter.
`-Dates use the Gregorian calendar; times use UTC.
`+contains exactly two digits,
`+they are the last two digits of a year from 1900 through 1999;
`+otherwise,
`+.I Y
`+contains all the digits of the year.
`+Dates use the Gregorian calendar.
`+Times use UTC, except that for portability's sake leap seconds are
`not allowed;
`+implementations that support leap seconds should output
`+.B 59
`+for
`+.I ss
`+during an inserted leap second, and should accept
`+.B 59
`+for a deleted leap second.
` .PP
` The
` .I newphrase
`@@ -144,16 +156,23 @@
` field in order of decreasing numbers.
` The
` .B head
`-field in the
`-.I admin
`-node points to the head of that sequence (i.e., contains
`+field points to the head of that sequence (i.e., contains
` the highest pair).
` The
` .B branch
`-node in the admin node indicates the default
`+field indicates the default
` branch (or revision) for most \*r operations.
` If empty, the default
` branch is the highest branch on the trunk.
`+The
`
`Dropbox Ex. 1019
`Page 5
`
`

`
`+.B symbols
`+field associates symbolic names with revisions.
`+For example, if the file contains
`+.B "symbols rr:1.1;"
`+then
`+.B rr
`+is a name for revision
`+.BR 1.1 .
` .PP
` All
` .I delta
`
`Dropbox Ex. 1019
`Page 6

This document is available on Docket Alarm but you must sign up to view it.


Or .

Accessing this document will incur an additional charge of $.

After purchase, you can access this document again without charge.

Accept $ Charge
throbber

Still Working On It

This document is taking longer than usual to download. This can happen if we need to contact the court directly to obtain the document and their servers are running slowly.

Give it another minute or two to complete, and then try the refresh button.

throbber

A few More Minutes ... Still Working

It can take up to 5 minutes for us to download a document if the court servers are running slowly.

Thank you for your continued patience.

This document could not be displayed.

We could not find this document within its docket. Please go back to the docket page and check the link. If that does not work, go back to the docket and refresh it to pull the newest information.

Your account does not support viewing this document.

You need a Paid Account to view this document. Click here to change your account type.

Your account does not support viewing this document.

Set your membership status to view this document.

With a Docket Alarm membership, you'll get a whole lot more, including:

  • Up-to-date information for this case.
  • Email alerts whenever there is an update.
  • Full text search for other cases.
  • Get email alerts whenever a new case matches your search.

Become a Member

One Moment Please

The filing “” is large (MB) and is being downloaded.

Please refresh this page in a few minutes to see if the filing has been downloaded. The filing will also be emailed to you when the download completes.

Your document is on its way!

If you do not receive the document in five minutes, contact support at support@docketalarm.com.

Sealed Document

We are unable to display this document, it may be under a court ordered seal.

If you have proper credentials to access the file, you may proceed directly to the court's system using your government issued username and password.


Access Government Site

We are redirecting you
to a mobile optimized page.





Document Unreadable or Corrupt

Refresh this Document
Go to the Docket

We are unable to display this document.

Refresh this Document
Go to the Docket