What’s New in Bazaar 2.4 (Oronsay)

Bazaar 2.4 has been released on the 8th of August 2011 and marks the start of a new long-term-stable series. From here, we will only make bugfix releases on the 2.4 series (2.4.1, etc, and support it until February 2013), while 2.5 will become our new development series.

This document accumulates a high level summary of what’s changed. See the Bazaar Release Notes for a full list.

Users are encouraged to upgrade from the other stable series. This document outlines the improvements in Bazaar 2.4 vs Bazaar 2.3. As well as summarizing improvements made to the core product, it highlights enhancements within the broader Bazaar world of potential interest to those upgrading.

Bazaar 2.4.0 is fully compatible both locally and on the network with 2.0, 2.1, 2.2 and 2.3, and can read and write repositories generated by all previous versions.

Bazaar 2.4.1 includes all the fixes in the un-released 2.0.7, 2.1.5, 2.2.6 and 2.3.5 versions that weren’t included in 2.4.0 and fixes some bugs on its own.

Bazaar 2.4.2 includes all the fixes in the un-released 2.0.7, 2.1.5, 2.2.6 and 2.3.5 versions that weren’t included in 2.4.1 and fixes some bugs on its own.

Dropping Python2.4 and Python2.5 support

Bazaar 2.4.0 is the first version of bzr to drop support for python versions before 2.6. The 2.3 series will still be maintained in bugfix mode for people who need older versions of python. You can also use Launchpad to nominate fixes for 2.3. We can’t fix everything, but that can help guide us to what people are running into. Upgrading to python2.6 allows us to clean up the syntax in our files, and makes it easier to work on python3 compatibility.

External merge tools

External merge tool configuration has been added to bzr core. The name and commandline of one or more external merge tools can be defined in bazaar.conf. See the help topic configuration for more details.

Tagged revisions are copied

When tags are copied from a branch, the associated revisions are now copied too if the config entry branch.fetch_tags is set to True. Operations like branching, merging or pulling will still always copy new tags visible in bzr tags. When the config is set, it will now also copy the revisions and their ancestry. This way tagged revisions will always be present, so that operations like bzr log -r tag:foo will always work.

Deprecated command synonyms

Two built-in synonyms for bzr branch have been deprecated: clone and get.

Command options

  • The bzr log and bzr missing commands now accept -S as a shorthand for --short.

Configuration files

Option values can now refer to other options in the same configuration file by enclosing them in curly brackets ({option}). This is an opt-in feature controlled by the bzr.config.expand option that should be declared in bazaar.conf and no other file.

Changelog merge plugin

The changelog_merge plugin has been added. It provides a merge hook to automate merging of changes to ChangeLog files in GNU’s change log format. Refer to bzr help changelog_merge for documentation on how to enable it and what it can do.

Faster operations on Large Trees

Many bzr commands used to run into pathological behavior on large trees (>10k files), reading the inventory data in random order causing cache thrashing (the fix was backported to bzr-2.3.2). We also updated several code paths that were updating the WT state using an O(tree) operation to one that was an O(changes) operation. A possibly incomplete list is as follows for running commands on a 70k file tree:

bzr-2.3.1 bzr-2.3.2 bzr-2.4  action
3m39s         1m08s   1m03s  bzr co --lightweight
  38s            8s      2s  bzr revert (in a clean tree)
4m47s         3m56s     15s  bzr merge
4m45s           20s      3s  bzr pull
4m58s         3m00s      2s  bzr up
9m33s           21s     19s  bzr uncommit (including a merge)
4m44s           17s      2s  bzr uncommit (simple commit)

This is a smaller table of times for the Launchpad tree (~8k items):

bzr-2.3.1   bzr-2.4     action
5.3s        5.2s        bzr co --lightweight
0.9s        0.3s        bzr revert
1.4s        0.4s        bzr pull
3.9s        3.7s        bzr uncommit (with merge)
0.9s        0.3s        bzr uncommit (without merge)

Faster stacked branches

Creating a stacked branch from a smart server with bzr branch --stacked is a bit faster now. For small branches it does 20% fewer network roundtrips. Other operations where a local branch is stacked on a branch hosted on a smart server will also benefit.

More export control

When exporting a tree, you may now use get_export_generator() to do an operation after each file is exported.


The selftest --exclude option can now be specified multiple times and the tests that match any of the specified patterns will be excluded. Only the last specified pattern was previously taken into account.

Digital Signature Verification

A new command bzr verify-signatures has been added to check that commits are correctly signed with trusted keys by GPG. This requires python-gpgme to be installed. bzr log has gained a --signatures option to list the validity of signatures for each commit. New config options acceptable_keys and validate_signatures_in_log can be set to control options to these commands.

Further information

For more detailed information on the changes made, see the the Bazaar Release Notes for:

For a summary of changes made in earlier releases, see: