Difference between revisions of "Bazaar"

From The Linux Foundation
Jump to: navigation, search
(Speed: Remove the "suggestion" language, since it's implemented.)
m (Current Trial: repo -> project)
Line 40: Line 40:
To check out a copy:
To check out a copy:
  bzr branch <nowiki>http://bzr.freestandards.org/unofficial/</nowiki>''(repo)'' ''(localdir)''
  bzr branch <nowiki>http://bzr.freestandards.org/unofficial/</nowiki>''(project)'' ''(localdir)''
  bzr branch <nowiki>http://bzr.freestandards.org/lsb/3.1/</nowiki>''(repo)'' ''(localdir)''
  bzr branch <nowiki>http://bzr.freestandards.org/lsb/3.1/</nowiki>''(project)'' ''(localdir)''
The webserve interface in the browser has links to the repository that work.
The webserve interface in the browser has links to the repository that work.

Revision as of 18:15, 27 June 2006


Bazaar-NG (or "bzr") is the primary candidate for replacing CVS as the FSG's preferred Version Control system. (The other is Mercurial.)

Getting Started

Bazaar-NG is available in several distributions, although most of them currenly provide an older version. Access to the FSG's repositories is recommended with bzr 0.8 or higher.

Base Software

Users of Fedora Core 5, Debian "etch", or Ubuntu "Dapper" can use their distribution's version of bzr. For Debian 3.1 ("sarge"), a backport is available.

For other distributions, the current version of bzr can be downloaded from the Bazaar-NG download page. It requires Python 2.4 and the "ElementTree" and "cElementTree" modules at minimum. To use the "sftp" method of talking to external repositories, the "paramiko" and "pycrypto" modules are required.


Plugins are add-on code modules which extend bzr, enhancing current features and adding new ones.

Distributions which package bzr itself often package plugins as well; search for a "bzrtools" package to see. For unpackaged plugins, installing involves copying the plugin's files into the place where the "bzrlib" module is installed, usually in /usr/lib/python2.4/site-packages. That module contains a "plugins" directory; create a directory under that, and copy the plugin's files into the new subdirectory.

One module in particular used at the FSG is the "tags" plugin. The bzr repository is here. You must have this plugin installed to access tagging information in our repositories, or to add new tags.


The Bazaar-NG Web site is available. In particular, the following links are useful:

Current Trial

Migration trials are being run as of this writing. They are available at the following URL:


This will become the final site for the repositories, and the current layout is approximately what they will be for the real migration. The repository is browseable, and has roughly the same functionality as cvsweb. Unofficial user branches are stored in "unofficial"; official branches from the workgroups are stored in a workgroup directory, with released and development versions in subdirectories.

To check out a copy:

bzr branch http://bzr.freestandards.org/unofficial/(project) (localdir)


bzr branch http://bzr.freestandards.org/lsb/3.1/(project) (localdir)

The webserve interface in the browser has links to the repository that work.

Issues with Bazaar-NG


By far, the biggest problem with bzr is its speed, particularly at doing the initial checkout. The initial checkout of the "build_env" repositiory in the trial has been timed to take as long as 25 minutes, and others have reported even longer times. Local operations, and updates after the initial checkout, are much faster.

The bzr developers have blamed this on an initial focus on correctness and functionality, rather than speed. Optimizing bzr is the primary goal of the 0.9 series. The current goal is to release bzr 1.0 within the next few months, so it's hoped that current speed problems are temporary.

An automated tarball download feature has been implemented in the current trial. In the changelog mode, there is a "download" link, which will create and send a tarball to the user consisting of the .bzr directory of the repository. This can be made into a working copy by untarring the tarball, changing into the root of the resulting tree, and running "bzr revert". After this, the directory is functionally identical to a tree created with "bzr branch".

Project Reorganization

It's been pointed out that bzr does not allow the checking out of subdirectories alone; you must check out the entire branch. Thus, it may not make sense to lump as many of the sub-projects together as they are currently organized in CVS.

Commit Rights

With CVS, since it is very difficult to maintain a local branch, pretty much anyone who did serious development on the LSB was granted commit rights. With bzr, since each branch is local, that's no longer needed. Thus, many fewer developers need commit rights. The problem then becomes: how do we get changes made by individual developers back into the main tree?

We are planning to use an approach the bzr developers also use: an add-on for bzr called a "patch queue manager". Under this approach, maintenance of the official main tree is automated to some degree. Development is done on local branches, which are then made available online, and a request for a merge is submitted via a web interface, linked to from the bzr-webserve browser interfaces (via the "merge" link).

Access to PQM requires authentication. Access to merge patches is granted on a per-workgroup basis.

For more information, see the Bazaar-NG Patch Queue Manager page.

User Branches

Without CVS as a method of distributing patches through the official tree, we will need some other means of making new development available. Allowing users to publish their bzr branches on an FSG site is the best way for this to happen. The question, of course, is how to best do this.

The current trial has a "unofficial" section for user branches. For more information on how they work, see Bazaar-NG User Branches.


As of 0.8.x, bzr does not have a native tagging facility. This page explains the proposals for adding tags to bzr. In the short term, Martin Pool has recommended to us that we use the tags plugin, which gives us approximately what Mercurial tags give us.

Other Problems

If you notice other issues, please add them to the wiki, or discuss them on the Discussion page if you prefer.