Subject: Re: CVS Tree
To: Assar Westerlund <assar@sics.se>
From: Curt Sampson <cjs@portal.ca>
List: current-users
Date: 03/29/1997 08:49:44
On 29 Mar 1997, Assar Westerlund wrote:

> It sure does.  You can have local tags and branches and it will
> `merge' the RCS files.

Ah, I see. I couldn't get to ftp.freebsd.org last night, so I just
went by what I read in the FreeBSD handbook, which doesn't mention
this feature at all.

> The differences as to running sup + cvs import is that you maintain
> the history from the original repository and you just transfer diffs.
> So, it's not `really different' but sure is more convenient.

It is quite different, and a lot less convenient, as far as I can
tell. The steps of my import are:

   1. Import the latest source tree into my personal CVS repository
      (on the vendor branch, of course).
   2. Checkout or update a checkout of the head revisions of my
      personal repository.
   3. Merge the diffs between the most recent and the previous import
      on the vendor branch into this checkout.
   4. Resolve conflicts in this checkout.
   5. Commit the checkout into my personal repository.

Using cvsup, you do basically the same thing but with added
complexity.  When you decide you want to start making local changes,
you can't put your changes on the main branch, because these will
conflict with new changes coming in updates. So you create a branch
called LOCAL or something like that, and make your changes to that.

Now, when you want to do your update, you do the following:

   1. Cvsup your repository.
   2. Checkout or update a checkout of the head revisions of the
      LOCAL branch.
   3. Merge the diffs between the most recent and the previous import
      on the main branch into this checkout.
   4. Resolve conflicts in this checkout.
   5. Commit the checkout onto the LOCAL branch.

Exactly the same, hmm? But there are some further difficulties that
we don't encounter with the local repository.

As far as I can tell, cvsup does not move rcs revision numbers when
necessary.  So, after you've created your LOCAL branch, if anyone
else creates a branch at that revision where your LOCAL branch
started on *any* file of the 25,000 or so in the main tree, you're
in trouble. Cvsup could be modified to change and keep track of
changed revision numbers to avoid branch conflicts, but now you're
going to be generating RCS IDs identical to ones in the master
repository but for different files, and a checkout from your
repository can produce different RCS IDs for identical files.

As well, you also have the possibility of tag conflicts. You're at
the mercy of anyone creating a tag in the master repository that
happens to be the same as one of your own tags. Again, cvsup could
be modified to change tag names, if you don't mind that sort of
chaos going on in your repository.

I don't see where the added convenience comes from. You still have
to go through all the same steps, either way, you just have to do
all your checkouts of local work with a tag and run the risk of
major problems in your repository, all for no perceivable gain.

cjs

Curt Sampson    cjs@portal.ca		Info at http://www.portal.ca/
Internet Portal Services, Inc.		`And malt does more than Milton can
Vancouver, BC   (604) 257-9400		 To justify God's ways to man.'