gabriel rosenkoetter on Thu, 27 Sep 2001 21:00:23 +0200


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

Re: [PLUG] Backup Options


On Thu, Sep 27, 2001 at 11:25:42AM -0400, Chris Beggy  wrote:
> Doesn't the anoncvs host have most of the information it needs
> when it sees the post?  You (or some other project member) have
> already written a client to parse the nntp traffic on each of the
> anoncvs hosts.  Can the client also do a local cvs commit of the
> patch in the post, rather than some kind of cvs update or remote
> sync?

I've written all that's written, and it's not quite functional just
yet (I actually need to get in touch with Wasabi about this, which
is the reason I'm even reading email at the moment ;^>). It's all
kind of hackery, and involves using both commitinfo and loginfo from
CVS in ways distinctly other than they were intended and using a
channel feed in INND to do kibo-istic stuff (that's where the
patching of the anoncvs repository happens), so it's not something
you want to try using unless you understand all of how CVS's CVSROOT
control files work, how INND works, and a lot about how CVS stores
its repository.

You've misunderstood the mechanism just a touch, but only because I
didn't explain clearly. The posted diff is a diff of the RCS ,v
file. (Yes, this can run into some nastiness in which diff just
loses; there is a planned and soon-to-exist bail-out mechanism for
that situation involving another newsgroup in which anoncvs machines
can request a repost of the whole ,v file, probably tagged with a
unique ID to avoid the wrong repository replacing its ,v file
inappropriately. There'll also have to be some smarts not to apply a
higher sequence number patch to a given file until the repost.)

The post contains not just the diff, but also an md5 checksum both
before and after the commit that just happened and a gpg signature
from the central CVS server. (All for obvious reasons. Even if we do
use SSL-enabled nntp, which INN can only do awkwardly at the moment,
or even construct an SSH tunnel between each of the servers for this
traffic, all of those assurances of non-tampering will have to
remain.)

It's precisely the point that the client can update its local
version without having to do a cvs update or remote sync request,
though it does it just by running regular old patch on the diff in
the post.

What this *doesn't* allow is having more than one CVS server to
which one can send commits but it is *really* easy to add this just
by generalizing the mechanism and having a "commit-from" newsgroup
for each host which every other host watches. This would complicate
sequence numbering (you don't want to apply patches out of order,
and if a commit is performed on one host before that host's tree has
been updated from the remote ones, you want to know that the patches
clash and that a--probably manual--merge needs to be done between
those two repositories and the resulting diffs sent out to everyone...
but this is a pathological situation that only happens when two
people are working on the same block of code and commit at esxactly
the same time: even if they're in the same file but at different
places, chances are good that an intelligently issued diff will
win.)

And that's probably on the way.

Other things that have really been pissing the NetBSD/Wasabi crew
off about CVS include its completely moronic behavior regarding
directories. Which Perry Metzger (W's CEO) and I both agreed
couldn't be that hard to fix (though getting them by Greg A. Woods,
Change Nothing in CVS Nazi could be difficult). So if you're bored
and want to hack CVS to be better without duplicating effort, I'd
be willing to expound on how we think that *should* work. (If not,
I'll probably get to this after I finish classes this semester.)

-- 
       ~ g r @ eclipsed.net

Attachment: pgp3iRxI3R4Yd.pgp
Description: PGP signature