GNU RCS
The Revision Control System (RCS) manages multiple revisions of files. RCS automates the storing, retrieval, logging, identification, and merging of revisions. RCS is useful for text that is revised frequently, including source code, programs, documentation, graphics, papers, and form letters.
RCS was first developed by Walter F. Tichy at Purdue University in the early 1980s -- paper: RCS: A System for Version Control (1991) (troff, PostScript, PDF). See also the Purdue RCS Homepage.
RCS design is an improvement from its predecessor Source Code Control System (SCCS) (see GNU CSSC). The improvements include an easier user interface and improved storage of versions for faster retrieval. RCS improves performance by storing an entire copy of the most recent version and then stores reverse differences (called "deltas"). RCS uses GNU Diffutils to find the differences between versions.
Download / News
Latest release: 5.10.0 (2020-10-20)
- bug fixes
RCS file search skipped RCS/FILENAME by default
The default set of candidate filenames for the RCS file is:
RCS/FILENAME,v RCS/FILENAME FILENAME,v
RCS 5.8 (released 2011-08-30) introduced a bug which caused the default RCS file search to skip RCS/FILENAME. Regression fixed.
‘
rlog -w
’ behaved like ‘rlog
’ (sans ‘-w
’)RCS 5.8 (released 2011-08-30) introduced a bug which caused ‘
rlog -w
’ (without any logins specified) to fail to default to the user login. Instead it behaved as if option ‘-w
’ were omitted entirely.The cases where logins are specified (e.g., ‘
rlog -wjrhacker
’) were not affected.missing string in comma-v detected, diagnosed
Previously, if foo,v contained fragment:
1.1 log text @@
i.e., there was no string value following the ‘
log
’ keyword, then rlog (et al) would interpret that as an"empty log message"
instead of as a violation of the RCS file format grammar, which stipulates that a string value must follow the keywords ‘desc
’, ‘log
’ and ‘text
’ -- (info"(rcs) comma-v grammar"
).Now, such a situation causes rlog (et al) to abort w/ message
"missing string after KEYWORD"
(KEYWORD ∈ {desc, log, text}).subsecond resolution maintained for ‘
-d
’, ‘-T
’An RCS ‘
delta
’ includes a ‘date
’ component w/ second (whole number) resolution. Previously, on filesystems that support subsecond (fractional) resolution for the file modification time (aka"mtime"
), RCS commands given the ‘-d
’ and/or ‘-T
’ options would disregard, on read, and specify 0 (zero), on write, the fractional mtime.Now, RCS preserves subsecond mtime in those cases. More details in new manual section -- (info
"(rcs) Stamp resolution"
).
- portability fixes
now buildable under ‘
gcc -std=c11
’ (default for GCC 5)RCS previously failed to build under ‘
-std=c11
’, which happens to be the default mode of GCC 5. In particular, ‘-std=c11
’ is more strict about function attributes syntax than ‘-std=c99
’.Now, the offending code has been rectified. (Specifically, attribute ‘
_Noreturn
’ now is at the start of a func decl.)threads support
RCS itself is clueless about threads, but it uses gnulib, which may or may not require threads support. This manifests as the configure script options ‘
--enable-threads=MODEL
’ as well as ‘--disable-threads
’.Previously,
"make"
would ignore MODEL (even implicitly), acting as if ‘--disable-threads
’ were specified. Now, it takes into account MODEL by propagating makefile var ‘LIBTHREAD
’.consult ‘
USER
’ first if ‘LOGNAME
’ read-onlyTo determine the user (login) name in the absence of a specific command-line option, RCS normally checks first the env var ‘
LOGNAME
’ and second, ‘USER
’. Alas, this is unworkable under AIX, where ‘LOGNAME
’ is read-only. So now, if the configure script finds ‘LOGNAME
’ to be read-only, it arranges to build RCS to check ‘USER
’ first and then ‘LOGNAME
’. See README.configure script avoids ‘
date -r
’Unfortunately ‘
date -r
’ is not POSIX. This made AIX unhappy.other AIX accomodation
The AIX compiler complains about the implicit casting that occurs when returning a pointer from a function whose return type is ‘
bool
’. So, we are now explicit.
- documentation improvements
docfix: add
"Log message option"
to Detailed Node ListingProbably Emacs by now has some automagic way to sync the ‘
@detailmenu
’ section w/ the text body... hmmm.style change due to ‘
-zZONE
’ optionSpecifying option ‘
-zZONE
’ to ‘rcs log
’ changes the date output style to use hyphens (ISO) instead of slashes (YYYY/MM/DD).rlog, use with CVS
Since RCS 5.8 (released 2011-08-30), there have been sporadic reports of rlog (aka
"rcs log"
) failing with CVS files. The manual now addresses this -- (info"(rcs) comma-v particulars"
).delim-separated list
GNU RCS has always supported comma to separate items in a list (e.g., ‘
rcs frob -o1.1,2.2
’ to remove (or"outdate"
) revisions 1.1 and 2.2). But did you know that most places a comma is welcome and you can use other delimiter characters as well? Read all about it -- (info"(rcs) Delim-separated list"
).(style) pargraphs no longer indented
This looks nicer (IMHO) for Info and Text output formats.
testing improvements
Many new tests and test cases for existing tests were added, to catch regressions and exercise infrequent code paths. For "make check
" (locally), function coverage is 97.3% (considered "
high") and line coverage is 84.9% (considered"medium"
), per lcov.bootstrap/maintenance tools
upgraded:
GNU gnulib 2020-10-19 23:37:09 GNU texinfo 6.7 GNU Automake 1.16.2 GNU Autoconf 2.69c
as before:
(none)
Documentation
Documentation for RCS is available online, as is documentation for most GNU software. You may also find more information about RCS by running info rcs or by looking at /usr/share/doc/rcs/, /usr/local/doc/rcs/, or similar directories on your system.
Mailing Lists
RCS has the following mailing lists:
Announcements about RCS and most other GNU software are made on info-gnu (archive).
Security reports that should not be made immediately public can be sent directly to the maintainer. If there is no response to an urgent issue, you can escalate to the general security mailing list for advice.
Getting involved
Development of RCS, and GNU in general, is a volunteer effort, and you can contribute. For information, please read How to help GNU. If you'd like to get involved, it's a good idea to join the discussion mailing list (see above).
- Development
- For development sources, issue trackers, and other information, please see the RCS project page at savannah.gnu.org.
- Maintainer
- RCS is currently being maintained by Thien-Thi Nguyen (tip jar). Please use the mailing lists for contact.
Licensing
RCS is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version.