You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@subversion.apache.org by Bruce Atherton <br...@hagbard.flair.law.ubc.ca> on 2001/02/14 17:59:00 UTC

My Introduction to Subversion!

My first introduction to the CVS community was just after I had introduced 
it into my workplace. I had used several other Versioning tools and wanted 
to add a feature I really liked from them, using a GUI to browse the 
repository before doing a checkout. What was missing was a "LIST" command 
in the protocol, and perhaps a reliable way to indicate the top level 
directory ("." apparently didn't always work). So I started looking at the 
source code and was instantly terrified! That code is a mess.

I decided to set my sights on a simpler task, to add a URI naming scheme 
for CVS. I thought it would be great to modify programs to work with CVS as 
a versioning file system. So, you might tell your Java compiler to compile 
cvs:bruce@my.machine.org/my/repos//this/file?tagname. Changing the compiler 
would be a big job, but adding the scheme itself to CVS was simple. I 
submitted the patch but it was never accepted.

About that time, Cyclic software was sold and Karl Fogel started the CVS 
Continuity Project to decide what should be done. Eventually Eric Sink, the 
new owner, opted to continue maintaining it. The CCP was dropped, but not 
before (partly due to my obnoxiousness) people agreed that the ability to 
check in should be opened up.

Encouraged, I rewrote the hashing code to be much more efficient and object 
oriented in the same way as is happening here, using namespace prefixes and 
virtual functions through function pointers. That patch too was never 
accepted, though I could understand why it filled people with trepidation, 
since the hash touched most parts of CVS.

I also started a discussion on the CVS list about what people would like to 
see in a new version of CVS. It generated a lot of discussion and I am glad 
to see many of the ideas reflected here.

I decided to give code changes one last try. I wrote a patch that did 
nothing more than add comments to the hideously convoluted main.c file. 
That patch was not accepted either. At 0 for 3, I decided to give up.

Then I improperly configured my mailing software for a few days, and it 
bounced email. This got me kicked off the CVS list as well as the DeltaV 
list. Because I was preparing to undergo Chemotherapy for my Leukemia, it 
seemed like a good time to bow out of the CVS community anyway.

Since then, I've had a Bone Marrow Transplant. If you know anyone who is 
looking at going through one, BTW, you may want to point them to 
http://read.regi.ubc.ca:8080/cll, which is a weblog of my experience going 
through it. Anyway, as my brain has slowly come back into service, I've 
looked around to see what activities were going on in the source code 
management world that I could add to.

First, I tried to join Renegade CVS, but got no response to emails. Next, I 
stumbled upon the Apache Avalon project. This seemed tailor-made to the 
problem of developing a new server that is compatible with CVS. The concept 
is that a server fulfills a particular function, sometimes through many 
different protocols which in Avalon are called "blocks". So I envisioned 
writing a Versioning server with a CVS block and a WebDAV/DeltaV block.

So I signed up once again to the DeltaV mailing list and what should I find 
but a reference to Subversion. Thus here I am, trailing this history behind me.

How can I contribute? That is a good question, and one I'd like to leave 
for another email because I'd like to start a discussion on it, hopefully 
one that hasn't already occurred ad infinitum.

My thanks to everyone for starting this project, and the good work you've 
all done so far.

Re: My Introduction to Subversion!

Posted by Karl Fogel <kf...@galois.collab.net>.
Welcome, Bruce!  The code should check out and build (for some
definition of "build" anyway); good luck with it.

-K

Bruce Atherton <br...@hagbard.flair.law.ubc.ca> writes:
> My first introduction to the CVS community was just after I had introduced 
> it into my workplace. I had used several other Versioning tools and wanted 
> to add a feature I really liked from them, using a GUI to browse the 
> repository before doing a checkout. What was missing was a "LIST" command 
> in the protocol, and perhaps a reliable way to indicate the top level 
> directory ("." apparently didn't always work). So I started looking at the 
> source code and was instantly terrified! That code is a mess.
> 
> I decided to set my sights on a simpler task, to add a URI naming scheme 
> for CVS. I thought it would be great to modify programs to work with CVS as 
> a versioning file system. So, you might tell your Java compiler to compile 
> cvs:bruce@my.machine.org/my/repos//this/file?tagname. Changing the compiler 
> would be a big job, but adding the scheme itself to CVS was simple. I 
> submitted the patch but it was never accepted.
> 
> About that time, Cyclic software was sold and Karl Fogel started the CVS 
> Continuity Project to decide what should be done. Eventually Eric Sink, the 
> new owner, opted to continue maintaining it. The CCP was dropped, but not 
> before (partly due to my obnoxiousness) people agreed that the ability to 
> check in should be opened up.
> 
> Encouraged, I rewrote the hashing code to be much more efficient and object 
> oriented in the same way as is happening here, using namespace prefixes and 
> virtual functions through function pointers. That patch too was never 
> accepted, though I could understand why it filled people with trepidation, 
> since the hash touched most parts of CVS.
> 
> I also started a discussion on the CVS list about what people would like to 
> see in a new version of CVS. It generated a lot of discussion and I am glad 
> to see many of the ideas reflected here.
> 
> I decided to give code changes one last try. I wrote a patch that did 
> nothing more than add comments to the hideously convoluted main.c file. 
> That patch was not accepted either. At 0 for 3, I decided to give up.
> 
> Then I improperly configured my mailing software for a few days, and it 
> bounced email. This got me kicked off the CVS list as well as the DeltaV 
> list. Because I was preparing to undergo Chemotherapy for my Leukemia, it 
> seemed like a good time to bow out of the CVS community anyway.
> 
> Since then, I've had a Bone Marrow Transplant. If you know anyone who is 
> looking at going through one, BTW, you may want to point them to 
> http://read.regi.ubc.ca:8080/cll, which is a weblog of my experience going 
> through it. Anyway, as my brain has slowly come back into service, I've 
> looked around to see what activities were going on in the source code 
> management world that I could add to.
> 
> First, I tried to join Renegade CVS, but got no response to emails. Next, I 
> stumbled upon the Apache Avalon project. This seemed tailor-made to the 
> problem of developing a new server that is compatible with CVS. The concept 
> is that a server fulfills a particular function, sometimes through many 
> different protocols which in Avalon are called "blocks". So I envisioned 
> writing a Versioning server with a CVS block and a WebDAV/DeltaV block.
> 
> So I signed up once again to the DeltaV mailing list and what should I find 
> but a reference to Subversion. Thus here I am, trailing this history behind me.
> 
> How can I contribute? That is a good question, and one I'd like to leave 
> for another email because I'd like to start a discussion on it, hopefully 
> one that hasn't already occurred ad infinitum.
> 
> My thanks to everyone for starting this project, and the good work you've 
> all done so far.

Re: My Introduction to Subversion!

Posted by Greg Stein <gs...@lyra.org>.
Welcome!

On Wed, Feb 14, 2001 at 09:59:00AM -0800, Bruce Atherton wrote:
>...
> I decided to give code changes one last try. I wrote a patch that did 
> nothing more than add comments to the hideously convoluted main.c file. 
> That patch was not accepted either. At 0 for 3, I decided to give up.

Ouch.

We are well-intentioned, but do miss or delay incorporating patches. I'll
warn you up front. Just ask Mo DeJong :-( (I owe him a few patch checkins)

>...
> different protocols which in Avalon are called "blocks". So I envisioned 
> writing a Versioning server with a CVS block and a WebDAV/DeltaV block.

Well, well... now you're talking. Just got the wrong codebase to start
from... :-)

> So I signed up once again to the DeltaV mailing list and what should I find 
> but a reference to Subversion.

Oops! My fault! :-)

>...
> How can I contribute? That is a good question, and one I'd like to leave 
> for another email because I'd like to start a discussion on it, hopefully 
> one that hasn't already occurred ad infinitum.

Well, if you're interested in focusing on the network (DeltaV) aspects, then
there are four things that I can point you at:

1) www/webdav-usage.html
2) subversion/libsvn_ra_dav
3) subversion/mod_dav_svn
4) Apache 2.0: modules/dav/main/

The first is the design document, kept reasonably up to date. I don't think
it is fully up-to-date with respect to our baseline usage, but the thing is
darned close. Some variations in the DeltaV spec have caused a bit of flux
(e.g. where do you get the activity collection set), but all the basic
concepts are sane.
[ it is also being served at http://subversion.tigris.org/webdav-usage.html ]

libsvn_ra_dav is the client-side of the code. Note that it builds on Neon.

mod_dav_svn is a mod_dav backend. mod_dav defines a bunch of hooks and
interfaces for a backend module to plug into. SVN does just that :-)
[ in fact, the default filesystem backend uses the same plugin mechanism;
  Oracle uses it; Rational uses it for ClearCase; etc ]

And you'll want to stay current with the Apache 2.0 CVS tree. I tend to make
changes in both mod_dav and mod_dav_svn to "make it all work better" :-).

Any patches for SVN would go to this list, and any for mod_dav (or Apache
2.0, for that matter) would go to new-httpd@apache.org.

Cheers,
-g

-- 
Greg Stein, http://www.lyra.org/