[Python-Dev] CVS

Thomas Wouters thomas@xs4all.net
Tue, 3 Jul 2001 17:05:28 +0200

On Tue, Jul 03, 2001 at 10:31:40AM -0400, Guido van Rossum wrote:
> > Slightly off-topic, but I've depleted all my other sources :) I'm tryin=
g to
> > get CVS to give me all logentries for all checkins in a specific branch=
> > 2.1.1 branch) so I can pipe it through logmerge. It seems the one thing=
> > missing now is a branchpoint tag (which should translate to a revision =
> > an even number of dots, apparently) but 'release21' and 'release21-main=
> > both don't qualify. Even the usage logmerge suggests (cvs log -rrelease=
> > doesn't work, gives me a bunch of "no revision =12elease21' in <file>"
> > warnings and just all logentries for those files.

> But those files should be old, so logmerge should safely sort their
> messages last, right?

Yes, but it also lists all checkin messages for all branches, including the
trunk, after release21... so I end up no smarter than without '-rrelease21'.

> > Am I missing something simple, here, or should I hack logmerge to parse=
> > symbolic names, figure out the even-dotted revision for each file from =
> > uneven-dotted branch-tag, and filter out stuff outside that range ? :P

> You're lucky: at least the fork point is tagged (release21).  For the
> descr-branch, if I want to do some kind of reasonable merge, I'll have
> to write a tool that figures out the fork point and tags it.  That's
> one "cvs tag" call for each file...

No, that's one 'cvs log' command; for each entry, it contains all symbolic
names. All you need to do <wink> is to search for the descr-branch symbolic
name in that list, grab the revision it lists (if any), chop off the last
dot-and-digit, and you're done. You can almost do that in a shell oneliner:

centurion:~/python/python-CVS > cvs log | egrep "(RCS file:|descr-branch:)"=
 | python -c "
import fileinput
lastline =3D ''
for line in fileinput.input():
    if lastline and line[0] =3D=3D '\t':
        filename =3D lastline[33:-3]
        revision =3D line.split()[1]
        branchpoint =3D revision[:revision.rindex('.')]
        print filename, branchpoint
        lastline =3D ''
        lastline =3D line

(adjust quotes for (t)csh, I guess)
Tadaaa! Hmm... I'll just use that myself, too <wink>.

But why not merge the trunk into your tree ? You can do that with

cvs update -j HEAD

inside your (sticky-tagged) working tree, IIRC. It doesn't change the
repository either, just your working directory, so it's safe to try in a
separate directory. Then, when you're satisfied it all works, you can commit
the whole thing.

Thomas Wouters <thomas@xs4all.net>

Hi! I'm a .signature virus! copy me into your .signature file to help me sp=