On Sun, May 23, 2010 at 10:57 PM, J.C. Roberts <[email protected]>
wrote:
...
> I found the problem. The 'xorg' vendor branch was treated as 'HEAD'
> for a while, but subsequently moving 'HEAD' back over to the 'MAIN'
> branch has broken date limited checkouts of 'HEAD'.  Instead of
> getting what was HEAD at the specified time (i.e. the 'xorg' vendor
> branch), you get HEAD of the MAIN branch at the specified time, which
> results in about 200 ancient files, and of course, a xenocara checkout
> that wont build.

I've read that three times now and I can't figure out what you're trying to
say.
1) I don't see an 'xorg'  branch at all in the xenocara/dist/Mesa/ subdirs
2) 'HEAD' is a magic word to cvs that many people misuse to mean the trunk
   (aka, what you get when you do "cvs up -A"), but it does *NOT* mean that
   when given to cvs's -r option...but it doesn't sound like you're
using it here
   with either definition
3) 'MAIN'?  Is that another name for the trunk?


> I've got no clue why the cvs server once considered the 'xorg' branch
> as HEAD, but when asked for HEAD with a date_sepc defined, it fails
> to remember 'xorg' was HEAD at that time and mistakenly gives you what
> was in the 'MAIN' branch at the specified time.

Oh, I think I see what you're trying to say.  Yes, asking for a
version from a specific time from before a given file was locally
modified results in the 'wrong' version being checked out.  This is
because vendor branch support is a kludge in cvs.  In this case, it's
the fact that it doesn't treat all the revisions on the 1.1.1 branch
with timestamps before 1.2 as occuring "between" 1.1 and 1.2.  You can
see the same effect with 'annotate'.


> Either cvs itself is
> hosed (not figuring out what branch was head at a specific time), or
> the branching commit was done wrong and needs to be fixed.

It's the former.  Note that the problem is not solvable without
additional metadata, in part because cvs thinks that it supports
multiple vendor branches.


> None of the following successfully clean up the hosed checkout:
>
>        cvs -d$CVSROOT up -ACd -jxorg -D'18 Apr 2010 10:30 GMT'
>        cvs -d$CVSROOT up -ACd -jxorg:'18 Apr 2010 10:30 GMT'
>        cvs -d$CVSROOT up -ACd -rxorg -D'18 Apr 2010 10:30 GMT'

The first of those check out the trunk on the specified date and then
merge all the changes from the xorg branch onto that.  I think there's
a bug in the opencvs server that makes it barf on that, though you can
get that effect with two commands.

The second should check out the tip of the trunk and then merge into
it the changes from the xorg branch that were made before the
specified date.  Again, I think bugs keep that from working in one
fell swoop though two commands should be doable.

The third of those 'should be' a usage error, but just results in the
-D option being ignored.


I believe there's no way to do what you want with cvs and I would be
shocked to be shown otherwise.


> My cvs-fu is to weak to work around this easily. You might be able to
> work around it on a directory by directory basis (picking the correct
> branch for each directory), but it would be far better to fix the
> branches/tags in the repositories.

The repository is fine; it's a design limitation of cvs's vendor branches.


> Since deleting or renaming branches is bad juju, I think the answer
> might be to add 'MAIN' as a tag to all the stuff in the 'xorg' branch.
> I've never hit this problem before, so I'm not really sure.

What is "MAIN"?  Where is it documented?


Philip Guenther

Reply via email to