[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Multiple sources in a vendor branch
From: |
Kaz Kylheku |
Subject: |
Re: Multiple sources in a vendor branch |
Date: |
10 Feb 2004 09:44:42 -0800 |
Rohan Nandode <address@hidden> wrote in message news:<address@hidden>...
> Hi,
>
> The problem descriptions goes like this:
>
> I have a vendor branch(1.1.3) for 3rd party library - say "library1"
> along with my project source in my CVS. I have done some modifications
> to the sources in library1.
> Now I there is a latest release of the library1 and I would like to
> upgrade it. But the problem is that I am not sure of how much stable
> will be the upgraded version.
Vendor branching is a braindamaged feature of CVS. There are a number
of problems with it.
- Each vendor branch shoots from version 1.1 of every file. If you
suddenly develop a relationship with a vendor who wants to make
patches based on some some other baseline---for instance, a release
that you made---you can't use the vendor branch.
- When you import to a branch, some files that are unmodified in your
main trunk are superseded by way of setting the RCS head revision to
the branch. So a check out of the branch produces a mixture of true
main trunk files and vendor branch files, a kind of half-baked merge.
This game playing with the head revision is an optimization, like the
Attic directories.
In Meta-CVS, I have implemented sane vendor branching. A command
called ``grab'' checks out the material, compares it against the
snapshot you are importing and then produces a sandbox which you can
commit to complete the import. Nothing happens in the repository until
you are happy with the diffs and do a commit. Files and symbolic links
are analyzed to automatically detect renames and moves. If you aren't
happy with the results, just scrap the MCVS/ directory and try again.
You can grab to any branch or main trunk. Branching and merging is
easy in Meta-CVS, because it does all the underlying CVS tagology
(taggery? tagistry?)
cd vendor-foo-drop
mcvs grab -r vendor-bar-branch my-project
# oops made a mistake, selected wrong branch
rm -rf MCVS # no problem
mcvs grab -r vendor-foo-branch my-project
mcvs commit
mcvs sw # no args, switch to main trunk
mcvs merge vendor-foo-branch
mcvs commit