Subject: Re: CVS vendor branches (was Re: BIND8 upgrade?)
To: NetBSD Networking Technical Discussion List <tech-net@NetBSD.org>
From: Greg A. Woods <woods@weird.com>
List: tech-net
Date: 01/29/2004 19:40:12
[ On Thursday, January 29, 2004 at 10:40:57 (+0200), Alan Barrett wrote: ]
> Subject: CVS vendor branches (was Re: BIND8 upgrade?)
>
> The worst problem with "cvs import" is that some things appear on the
> trunk before you want them to.  This is caused by the way CVS treats
> branch number 1.1.1 as a magic special case.

Indeed -- that's the way "cvs import" was designed to work.  The whole
idea of the "cvs import"-style ``vendor'' branch in CVS is a quick and
dirty hack to help a small shop to manage _minor_ changes to third party
code.  The primary advantage of "cvs import" is its conflict detection
support, and that can only work if there's just one "trunk" and no local
branches.

> If you avoid using branch 1.1.1, and instead use a vendor branch with
> a different number, then you can use something like "cvs import -b
> 1.1.3" without that problem.

That just doesn't work very well in practice, especially not after the
first import.

You really need a ``normal'' CVS branch, and because of limitations in
the implemenation of "cvs import" you need to manualy commit vendor
releases to that normal branch.  Doing such commits really isn't very
difficult after the first one -- especially if you use a front-end like
PCL-CVS (in emacs) to assist.

>  You can also have more than one vendor
> branch (use "cvs import -b 1.1.5" for the second one).

Multiple "cvs import"-style vendor branches do not work (as expected) at all.

This part of CVS-II was a highly experimental proposal and was _never_
fully implemented (at least not in any public code).  The support for
multiple branch imports is there, but it probably doesn't do what you
think it might (or should).

>  Then you can
> manually merge the pieces that you want onto the trunk (via "cvs update
> -j $OLDVENDORTAG -j $NEWVENDORTAG").

That does work (because it's just effectively a "diff|patch" operation),
but everything else involved in maintaining the structure of the
repository in this type of scenario and making it possible to easily
understand what's been done works a _lot_ better if the branch used for
the vendor releases is a ``normal'' CVS branch.

-- 
						Greg A. Woods

+1 416 218-0098                  VE3TCP            RoboHack <woods@robohack.ca>
Planix, Inc. <woods@planix.com>          Secrets of the Weird <woods@weird.com>