Subject: duplicate files inside and outside CVS Attic
To: None <tech-misc@netbsd.org>
From: Alan Barrett <apb@cequrux.com>
List: tech-misc
Date: 08/08/2001 11:08:19
I use rsync to keep a local mirror of the NetBSD CVS repository.
While trying to track down an unrelated problem, I noticed that
syssrc/sys/arch/i386/conf/INSTALL existed both inside and outside the
Attic.  This seems wrong to me, and I fear that the history recorded in
the file that's now in the Attic could be deleted accidentally if the
file that's now not in the Attic ever gets deleted (and thus moved into
the Attic, probably overwriting the file that's now in the Attic).

It appears that a repository copy is responsible for the problem.

As far as I can tell, the history of syssrc/sys/arch/i386/conf/INSTALL
goes something like this:

    INSTALL revision 1.1 created (1995/05/12 03:19:51)
                The underlying RCS file would have been
                syssrc/sys/arch/i386/conf/INSTALL,v (except that this
                was in the days before the {basesrc,syssrc,foosrc}
                split).
    INSTALL revision 1.6 deleted (1995/10/28 03:55:10)
                This deletion moved the underlying RCS file
                into the Attic, where it remains today, as
                syssrc/sys/arch/i386/conf/Attic/INSTALL,v

    INSTOTHER revision 1.1 created on branch netbsd-1-1 (1995/10/28 04:05:07)
                Since this file was created on a branch, the
                underlying RCS file started life in the Attic, as
                syssrc/sys/arch/i386/conf/Attic/INSTOTHER,v
    INSTOTHER revision 1.2 updated (1995/10/28 04:06:25)
		This update would have moved it out of the Attic,
		to syssrc/sys/arch/i386/conf/INSTOTHER,v
    INSTOTHER revision 1.28 updated (1996/12/07 00:26:12)

    INSTOTHER revision 1.28 copied to INSTALL via repository copy, and
    INSTALL revision 1.29 checked in (1996/12/20 06:45:15).
                This would have created
                syssrc/sys/arch/i386/conf/INSTALL,v,
                even though the Attic already contained
                syssrc/sys/arch/i386/conf/Attic/INSTALL,v.

Prior to the repository copy, if you used -r<revision> or -D<date> flags
to check out an old version of INSTALL, you would have got the version
from the Attic.  After the repository copy, you would actually get old
versions of INSTOTHER masquerading as old versions of INSTALL, and
there's no way (using normal CVS commands) to get any history from the
oldest versions of INSTALL (before 1995/10/28).  That's perhaps not too
bad, since we can at least use RCS commands (instead of CVS commands) to
examine the file in the Attic.

The more serious problem, as I see it, is that at some future time
somebody might again decide to "cvs rm INSTALL".  When and if
that happens, the file that is currently stored outside the Attic
(as syssrc/sys/arch/i386/conf/INSTALL,v) will be moved into the
Attic, and the file that's currently stored inside the Attic (as
syssrc/sys/arch/i386/conf/Attic/INSTALL,v) will probably disappear
without a trace.  (Or perhaps if we are lucky the "cvs rm" command will
fail, and somebody will repeat the analysis that I have made and do
something sensible.)

I have searched the repository for other files that exhibit the same
sort of problem.  Here's the list:

	basesrc/usr.bin/sed/Makefile,v
	basesrc/usr.bin/sed/Attic/Makefile,v

	gnusrc/gnu/usr.bin/gdb/version.c,v
	gnusrc/gnu/usr.bin/gdb/Attic/version.c,v

	htdocs/images/NetBSD-banner.gif,v
	htdocs/images/Attic/NetBSD-banner.gif,v

	syssrc/sys/arch/amiga/conf/files.amiga,v
	syssrc/sys/arch/amiga/conf/Attic/files.amiga,v

	syssrc/sys/arch/i386/conf/INSTALL,v
	syssrc/sys/arch/i386/conf/Attic/INSTALL,v

	syssrc/sys/arch/powerpc/powerpc/ofw_machdep.c,v
	syssrc/sys/arch/powerpc/powerpc/Attic/ofw_machdep.c,v

	syssrc/sys/arch/powerpc/powerpc/ofwmagic.S,v
	syssrc/sys/arch/powerpc/powerpc/Attic/ofwmagic.S,v

	syssrc/sys/arch/powerpc/powerpc/ofwreal.S,v
	syssrc/sys/arch/powerpc/powerpc/Attic/ofwreal.S,v

	syssrc/sys/arch/powerpc/powerpc/openfirm.c,v
	syssrc/sys/arch/powerpc/powerpc/Attic/openfirm.c,v

I suggest that, in each case, we rename the file that's currently in the
Attic, adding an extra prefix or suffix to prevent it from clashing with
the file that's currently outside the Attic.  I suggest that we should
also modify the repository copy procedure to detect this condition in
future and do something sensible about it.

--apb (Alan Barrett)