Posts in 'bazaar' – Page 2

Using a pqm with Subversion

One of the things that I've always missed in DVCS is the ability to refuse commits in a branch that's shared by multiple people based on a test suite run. Sure, it's possible to have a pre-commit hook - but that would mean that you'd have to wait for the full test suite to run until the commit finishes. With the time it takes to run the Samba testsuite, this is not really an option.

One of the things that would work is to have everybody work in a separate branch and then have some sort of tool that merges those revisions from everybody's personal branches that worked ok. However, to my knowledge, there is no such tool for Subversion.

Bazaar uses a tool called PQM (Patch Queue Manager). PQM usually controls the main branch (for example for Bazaar, it controls, and waits for GPG-signed requests to merge a specific revision into that main branch. Before accepting such a revision, it will try to run the testsuite to make sure it passes. This guarantees that the main branch never contains broken code (as far as can be indicated by the testsuite).

Now that bzr-svn supports true push, it is possible to actually use a PQM with a Subversion branch. I've tried it on a smaller branch last week, and am now looking into using this for my Samba work.



I'm currently doing a bit of sightseeing in London, after attending the Bazaar sprint at the Canonical office. It was a good sprint, and quite different from the previous ones - in that there was only a limited amount of actual coding involved. The view from the Canonical office is magnificent, so we were even able to do some sightseeing while working...

Bazaars' focus has previously mainly been on correctness and features. The first has always been one of our strengths, and we're in pretty good shape regarding the second. Performance has been one of the main complaints from users about Bazaar and so we have recently tried to improve in that area.

Since 0.12, we have already tried to optimise some of the common code paths and some people have been working on a high performance smart server (to speed up remote operations).

During the first two-and-a-half days of the sprint, we analysed 20 of the most common use cases with Bazaar and determined what complexity they should ideally require to be able to work. After this analysis, we looked at ways to change our data structures to reach these goals.

I have mainly been a spectator during the latter parts of these discussion, but they were interesting to follow.

One of the things I worked on was support for true push in bzr-svn. This was one of the bugs that has bitten a lot of users of bzr-svn. The upcoming bzr-svn 0.4 now supports true push as well as commits in heavyweight checkouts. I hope to release 0.4 after adding nested tree and ignores support so that I don't have to change the internal mapping mechanisms again.

And now, it is time for some more sightseeing. After that I hope to get back to the reason I'm doing all of this in the first place: Samba!


Bazaar for dvcs users

John Goerzen has been evaluating various version control systems and his blogs posts on the subject have been interesting. One of the most interesting points he raises about Bazaar is that there is no "darcs send"-like support. The "submit" plugin gets close, but I think it misses some important features - and I agree it should be part of the core.

I'm not sure that the merge support in Bazaar is worse than that in Mercurial or Git. I've never had problems with it, and I use it a lot. Performance, other than remote access, is also no longer a problem for medium size projects as of 0.15. Update: it's no longer as much of a problem as it used to be. Remote access is still significantly slower than it can be, but people are working hard on fixing that problem.

It's also interesting to see that the Bazaar user interface and documentation is apparently confusing to people who are mostly familiar with other distributed version control systems rather than centralized systems. We definitely need to work on that.

The fact that John doesn't come from CVS or Subversion also explains that checkouts don't appeal to him.


Bazaar and Subversion nested tree support

As of 0.15, Bazaar will have initial support for nested trees. Nested trees basically allow you to add a 'magic' directory to a Bazaar branch that in itself is another Bazaar branch. A very good use case of this is if you have a project for which you need to include some library (e.g. popt). Nested trees allow you to add a reference to the upstream popt branch, avoiding the need to synchronize every time upstream fixes a bug.

Subversion has similar functionality, although the term used there is 'externals'. Externals are quite easy to use - using them only requires setting the svn:externals property.

I've done some early work on supporting externals in bzr-svn and mapping them to nested trees. At the moment, bzr-svn is able to track nested trees that are being added. Removes and changes to existing nested tree locations are still on my todo list, but will definitely be supported in bzr-svn 0.4.0.


Bazaar 0.15

Since I've upgraded serendipity to version 1.1, it seems to keep losing my draft blog entries (either that, or hiding them somewhere I can't find them). For that reason, this blog post is a bit short, as I'm too lazy to rewrite the original one I had drafted up.

Bazaar 0.15 is promising to be a really great release. Several new features are going to land: dirstate (fast working tree access), tags and initial nested tree support.

I miss travelling.

cp: Smashing Pumpkins - Ava Adore


Bazaar gains tags support

Martin sent a merge request for tags this morning. W00t! Another point off my list of wishlist items.

That leaves:



Now that I have some more time to spend, I've done some more work on Samba 3 and 4. In particular, I've resolved a couple of pending DCE/RPC issues. I'm now looking at improving the test runner a bit, so that it shows progress.

I released bzr-svn 0.3 a couple of days ago, a couple of hours after the first release candidate for Bazaar 0.14. The main focus has been on reducing the number of bugs. That's resulted in a large number of repositories now working with bzr-svn. In fact, all of the repositories I've tested so far work.

It's going to be another Bazaar-heavy week next week at the Bazaar sprint Wouter and I are organizing in Amsterdam.

Currently playing: Acda en de Munnik - Vondelpark Vannacht


First Bazaar commit

The Bazaar PQM has just merged my first Bazaar commits. Hopefully there are more to follow in the near future. I also managed to fixed some more annoying bzr-svn bugs today, 0.2 is nearer than ever now.

Currently playing: Transatlantic - Bridges Across Forever - Duel With The Devil


Using bzr-svn in production

At last, I've started to use bzr-svn in production. I'm now working on Samba in bzr, pulling from and pushing to Subversion branches as if they were native Bazaar branches.

It seems to work quite well. Bazaar can be slow dealing with large history, but that appears to be a temporary issue rather than a design flaw.

I've also published conversions of the two main Samba branches on the web at

Now, time to get the Subversion Python fixes into all the distro packages.


Pushing Mercurial branches into Subversion using Bazaar

The example below demonstrates just how well foreign branch support in Bazaar is progressing. Here's how you can actually push Mercurial branches in Subversion:

charis:~/bzr/hg-bzr-svn% svnadmin create svn-repos
charis:~/bzr/hg-bzr-svn% mkdir hg-branch; cd hg-branch
charis:~/bzr/hg-bzr-svn/hg-branch% hg init; echo data > afile; hg add afile
charis:~/bzr/hg-bzr-svn/hg-branch% hg ci -m "Add afile"
charis:~/bzr/hg-bzr-svn/hg-branch% cd ..
charis:~/bzr/hg-bzr-svn% bzr branch svn+file://`pwd`/svn-repos bzr-co
Branched 0 revision(s).
charis:~/bzr/hg-bzr-svn% cd bzr-co
charis:~/bzr/hg-bzr-svn/bzr-co% bzr pull ../hg-branch
All changes applied successfully.
1 revision(s) pulled.
charis:~/bzr/hg-bzr-svn/bzr-co% bzr push svn+file://`pwd`/../svn-repos
This transport does not update the working tree of:
1 revision(s) pushed.
charis:~/bzr/hg-bzr-svn/bzr-co% cd ..
charis:~/bzr/hg-bzr-svn% svn co file://`pwd`/svn-repos svn-co
A    svn-co/afile
 U   svn-co
Checked out revision 1.
charis:~/bzr/hg-bzr-svn% cd svn-co
charis:~/bzr/hg-bzr-svn/svn-co% svn pl
Properties on '.':
charis:~/bzr/hg-bzr-svn/svn-co% svn pg bzr:merge
charis:~/bzr/hg-bzr-svn/svn-co% svn log -v
r1 | jelmer | 2006-07-10 21:33:49 +0200 (Mon, 10 Jul 2006) | 1 line
Changed paths:
   M /
   A /afile

Add afile


Pushing to Subversion from Bazaar works

charis:~% bzr branch svn+ssh:// smb-build
Branched 50 revision(s).
charis:~% cd smb-build
charis:~/smb-build% ls
README  bla    config.sub    configure.list  include
acinclude.m4  bin         build  config.guess  foobar          install-sh
charis:~/smb-build% echo This line was added from Bazaar >> README
charis:~/smb-build% bzr ci -m "Update README"
modified README

You need a passphrase to unlock the secret key for
user: "Jelmer Vernooij <>"
1024-bit DSA key, ID 1EEF5276, created 2001-10-30

Committed revision 51.
charis:~/smb-build% bzr push svn+ssh://
This transport does not update the working tree of:
1 revision(s) pushed.
charis:~/smb-build% bzr pull
Using saved location: svn+ssh://
All changes applied successfully.
0 revision(s) pulled.
charis:~/smb-build% svn log -v -r HEAD svn://
r61 | jelmer | 2006-07-04 21:37:52 +0200 (Tue, 04 Jul 2006) | 1 line
Changed paths:
   M /trunk
   M /trunk/README

charis:~/smb-build% svn diff -r 60:61 svn://
--- README      (revision 60)
+++ README      (revision 61)
@@ -1 +1,2 @@
 Bazaar rocks
+This line was added from Bazaar

Or view the screenshot on

Left to do before public announcement:
  • Fix nasty bug when branching off Samba (revno 11098 gives an error because it can't find a file parent...)
  • Get workingtree fixes integrated into
  • Get Ubuntu bug #51304 fixed (integrate Subversion fixes into package).


Next items for bzrsvn

Now that commits, merges, renames and working trees work in bzrsvn, I'm looking at the next items on the list:

  • push into Svn repositories
  • creating working copies from Bazaar
  • performance improvements

For the plugin, I've had to make quite a few changes to the Python bindings to Subversion. I recently became partial committer to Subversion. My patches are listed by the contribulyzer and commits in the archives. It's been fun working with the Subversion developers.


Commits from Bazaar into Subversion work! (-:

After a few days hard work, I finally got commits working! Mandatory screenshots are up:


Bazaar Sprint

It's been a fun week. I visited the Bazaar sprint in London with LarstIQ and had a great time meeting the core developers. Especially the pair-programming and test driven development was very interesting; the number of lines of code I wrote was smaller than usual, but I have never spent so little time debugging. Among the things I worked on were Commit Builder with Robert and some more work on bzr-svn.

The Arrow Rock festival yesterday was great. I was a little skeptical about Porcupine Tree's live performance, but I was very pleasantly surprised. Roger Waters' show was shorter than announced (3 hours) but very good nonetheless. Queensryche was the only disappointment - they played only a few old songs and their sound was pretty bad (at least from where I was standing).


Graphical User Interfaces for Bazaar

In the past one-and-a-half week, the discussion about Bazaars' Summer of Code projects, in particular the graphical user interfaces, sparked some interest in nautilus integration, which was originally an unfinished proof-of-concept I wrote a couple of months back. Jeff Bailey picked it up and then contributed some more code as well. The endresult is that we now have very basic nautilus integration, a bit like TortoiseSVN for Subversion in Window Explorer.

We've also bundled some of the existing GTK+ plugins such as bzrk and gannotate into one plugin, bzr-gtk, in the hopes of making maintainance easier. Hopefully the Summer of Code student that was going to work on this will be able to continue with these two projects.