[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

repository replication idea (was RE: New email address)

From: Cameron, Steve
Subject: repository replication idea (was RE: New email address)
Date: Mon, 29 Oct 2001 13:36:25 -0600

Riley Williams wrote:
> Hi Derek.
> > 
> > Brian Behlendorf tells me that Collab Net will be supporting the
> > bandwidth and hardware for for an indefinite period.
> Are you sure of this? As of yesterday morning, I've been unable to get
> to either by web or cvs pserver, so as far as I can tell,
> it's already dead...

Same here... I can't get pserver to work either, 
"Connection refused"

Whether it's "already dead", or if this is just a temporary glitch,
these interesting times we live in bring to mind an idea I had 
awhile back, and which I'll mention now in case somebody wants 
to take the ball and run with it. (or maybe somebody already did?)

It occurred to me that lots of GPL-ish licensed software is 
hosted in CVS servers run by companies which might someday 
cease to be.  For example, what would happen if VA Linux
(or whatever it's called now), and thus Sourceforge, suddenly 
disappeared?  For any project of interest, somebody would 
probably have done a recent checkout, so what's really at 
risk is not so much the current state of the source code 
as the history, the tags, the branches, and all the CVS-ish 
information that is not included in a source tarball.

It would be nice if there ware a simple way to replicate
a repository.  It occurs to me that it is almost possible
to write a program to do this requiring no special setup 
on the server side.  The only piece missing (I think) is a way to 
find all the files which are, or ever were, present in the

Assuming you had such a list of files, you could replicate
a remote CVS repository in the following way:

For every file on the list, do a "cvs log"  This would
give you a list of revisions, and all the tags.

Then you could, one by one, check out (or diff) each rev of each
file from the remote repository, and check it into a local 
repository. First do the trunk then create branch tags off 
the trunk, then do each branch, then create any branch tags 
off those branches, etc.  Finally apply all the static tags.  
You'd have to worry about sticky options, and log messages too,
of course, but, it is possible to write a script to do all 

The piece that's missing is the list of all files in the 
repository.  "cvs rdiff -s -r 0" almost gets it, but not quite.
I guess you could do something vaguely like

for tag = every tag found by cvs log
        "cvs rdiff -s -r 0 -r tag" >> filelist
little_awk_script < filelist | sort | uniq > newfilelist

And get pretty close, reasoning that every file of importance
would have been tagged with a static tag at one time or another,
But that's pretty brute-forceful.

Just an idea for anybody that's paranoid about their
voodoo-economcially funded remote CVS repository 
suddenly disappearing.

-- steve

reply via email to

[Prev in Thread] Current Thread [Next in Thread]