Copyright © 2015-2019,2022 by Thomas E. Dickey
Here is a slightly cleaned up version of rcshist written by Ian Dowse.
I happened to notice this program because I had written a different program by the same name (see comments in diffstat, as well as my discussion of old programs). As it turns out, there are programs with the same name which are unrelated, and related programs with different names. Here are a few notes on both:
Subject: Re: Does anyone have tools for use with RCS that
they can share?,
posting by Steve Summit on comp.software-eng (18 Aug 89 07:41:29 GMT)
This is the earliest use which I have found for the name. The posting shows a simple program whose purpose is like rcs2log (to summarize rlog information for a set of files).
A 1997 conference paper A Change Process Model in an SCM Tool mentions an "rcshist" program as an example for which change requests (CRs) are tracked.
A copy of the paper may be accessible here, depending on your affliation.
Subject: Re: rcsplot - graphical RCS/CVS archive
my posting to comp.software.config-mgmt (Apr 23 18:23:13 2001), mentioning diffstat as well as the rcshist program which I had written. The rcsplot program mentioned in the newsgroup has moved here (the old site is archived). It provides graphical plots (while my earlier program had displayed using character-cell histograms, like diffstat).
A puzzling report here: Cron <fsddist <at> gnudist> ~fsddist/bin/nightly in (9 Sep 12:29 2002) which may refer to my diffstat webpage. On that, I mentioned my rcshist program starting with its initial revision in December 1996.
Ian Dowse's program does not seem to be well known. Here are the mentions which I have found:
> This is not helpful; someone coming along later with only CVS > for reference must do a diff to even guess what the change does. Good commit > msgs give a reader an understanding of the reason and content of a change. Ian Dowse has written a great tool (rcshist) for looking at RCS/CVS files and getting the diffs inline. I often use it when trying to diagnose problems or understand bits of code. The source is at: http://www.maths.tcd.ie/~iedowse/FreeBSD/rcshist-1.02.tgz Mind you, that doesn't give me an excuse to write bad commit messages ;-)
Because no suitable tool was available to study the history of rcs files, I wrote a script in 1998 which would extract all of the versions of a file. That done, I could use grep:
for name in $*
REVS=`rlog $name |egrep '^revision' |sed -e 's/^revision//'`
if test -n "$REVS" ; then
for rev in $REVS ; do
pco -r$rev $name && mv $name $name-$rev
However, given a large number of revisions, there is a risk of running out of diskspace. I did not notice Ian's tool until sometime in 2007, as I first commented on it then:
[vile] vile-9.5s.patch.gz (Sun, 25 Nov 2007 20:42:02 -0500), noting that I had added a pattern in vile to recognize the output format as a variant of diff.
Re: [vile] Question about regions, (Fri, 11 Jun 2010 15:20:48 EDT), mentioning that I use it:
(not that my memory is that good - I used rcshist to show all of the changes to cmdtbl, and searched for the first occurrence)
Reply in Red Hat #866989 (2012-10-17 05:35:56 EDT):
> By the way, how did you get that interesting diff? :-) The "interesting diff" is a chunk from rcshist.
Subject: Re: [PATCH] Correct singular form in diff summary line for human interaction, my reply on git mailing list (Wed, 01 Feb 2012 04:40:06 -0500)
> I was wondering if you remember what the behaviour of older versions of > "diffstat" was, and if it was changed to be more human friendly over > time. It is very possible that I am misremembering this and "diffstat" has > always done the singular/plural correctly and omitted useless "0 lines". I have back to 1.3 in my archive. I use rcshist to look for things like this. (also, for small things like this, I have a script that pulls all versions, with proper timestamps to make it simpler to sort the files by date).
Like the RCS "blame" tool, this is used for analyzing changes using the RCS history of a file. It differs from blame, however:
The changes are shown as a unified diff. Here is an example:
Rcshist reads the RCS archive file into memory (which has reverse diff's) and reorders things so that it shows the changes as forward diff's.
REV:1.346 aclocal.m4 2012/09/03 17:21:43 tom
tags: xterm-281s, xterm-281r, xterm-281q, xterm-281p, xterm-281o,
xterm-281n, xterm-281m, xterm-281l, xterm-281k, xterm-281j,
xterm-281i, xterm-281h, xterm-281g, xterm-281f, xterm-281e
change default for --with-xpm
--- aclocal.m4 2012/08/25 23:05:32 1.345
+++ aclocal.m4 2012/09/03 17:21:43 1.346
@@ -1,4 +1,4 @@
-dnl $XTermId: rcshist.html,v 1.16 2015/03/01 20:34:33 tom Exp $
+dnl $XTermId: rcshist.html,v 1.16 2015/03/01 20:34:33 tom Exp $
@@ -3554,7 +3554,7 @@
-dnl CF_WITH_XPM version: 1 updated: 2012/07/22 09:18:02
+dnl CF_WITH_XPM version: 2 updated: 2012/09/03 05:42:04
dnl Test for Xpm library, update compiler/loader flags if it is wanted and
@@ -3571,7 +3571,7 @@
[ --with-xpm=DIR use Xpm library for colored icon, may specify path],
if test "$cf_Xpm_library" != no ; then
Although the tool can work on multiple files, I use it on one at a time, reading the output into a buffer within vile. Even the largest of my RCS files takes less than a second. That is because it reads the file only once. Once in the editor, unlike blame, I can search for a given line and follow it back through whitespace changes rapidly.
There are some GUI tools (IDEs, and standalone tools such as ViewVC and gitk) which let you go back in a blame-style interface, but as a rule, going forward is awkward.
See the changelog for details: