[Rhythmbox-devel] Rhythmbox arch tree



I've been working on a new (more scalable/optimized) backend for the
last week or so, and it's been growing in steadily in
rhythmbox/rhythmdb/.  It's really at the point now where I need to start
touching other code to use it so I can test it.  

This will end up modifying a lot of code, so I really need to have a
branch, since we need to make stable releases while the rhythmdb work is
ongoing.  However CVS absolutely, absolutely sucks at branching.  And
I've been excited about the "arch" revision control system lately.  I
think it is quite frankly the future of free software revision control. 
Still a bit rough around the edges, but getting better and better every
day.

So I've started to maintain Rhythmbox in arch.  However, this doesn't
mean CVS is irrelevant now.  Obviously I can't expect all of you other
developers to switch at the same time, not to mention translators.

What does this mean to you?  Well, you can ignore it if you like; the
CVS tree will still be used.  Read on to find out more:

To implement this, what I've done is set up an arch tree that contains
*both* a CVS and arch setup.  This will be a regular synchronization
point.  So I will regularly 'cvs update' in this tree, and apply those
patches to the arch tree.

I have two other branches.  One is 'mainline', on which I will regularly
be doing work.  Occasionally, I will merge this with the cvs branch, and
commit from there to the GNOME CVS.  So you will still pick up all the
work I'm doing in arch.  Additionally, I have a 'rhythmdb' branch where
I'll be doing my rhythmdb work.  This will eventually be merged back
into 'mainline'.

Now, if you are a Rhythmbox developer or you want to be, you should try
arch!  You can still commit to CVS, but it would make things even more
efficient if you used arch too.  And once you've tried it, trust me, you
won't be able to go back to CVS.  Here's the web page, with links to
downloads:

http://regexps.srparish.net/www/

You will almost certainly want to grab the 1.1pre5 release.

So what's cool about arch?

First of all, let's say you don't have access to the GNOME CVS.  You
want to make some semi-complex changes to Rhythmbox.  With arch, you can
just create a local branch based off my Rhythmbox arch tree, without
needing write access to it at all.  Even better, you can *commit* to
your local branch.  As much as you want.  Then later, you can put a
mirror of your branch up on the 'net somewhere, and say 'Hey Colin, I
just implemented this feature, please merge.'  And I can just pull the
changes out of your repository and merge them with a single command.

Secondly, you have all the nice stuff with atomic changesets, handling
file renames, etc.

Thirdly, arch handles the repeated merge problem.  This is a *huge*
feature, and it's something that CVS and Subversion don't pretend to
solve.  You can create branches that are repeatedly merged, and arch
keeps track of things so that there's no conflicts from repeatedly
applied patches.  If you've ever created a branch in CVS, you know what
I mean.

Fourthly, no more anoncvs.  In fact, no more dealing with cvs at all
(for you, I unfortunately still have to...).

And there's more too, but hopefully that's enough to whet your appetite.

Now, here's how you get started downloading the Rhythmbox source code
via arch:

$ tla register-archive walters@rhythmbox.org--2003 http://arch.verbum.org/rhythmbox
$ tla get walters@rhythmbox.org--2003/rhythmbox--mainline--1.0

That's it.  Now, to update your copy, just do:

$ tla replay --in-place .

Simple enough.  The next question you're likely to ask is, "Now how do I
create a local branch that I can hack on?"  It's not too hard, but
you'll want some basic familiarity with arch before you do it.  There's
a tutorial here:

http://regexps.srparish.net/tutorial-tla/arch.html

It is a little out of date, but otherwise pretty good.  If you join
#rhythmbox i can help you step through it.  There's also the arch gurus
on irc.freenode.net:#arch.

Happy hacking, and start sending me those arch changesets :)




[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]