Multi-branch Bazaar plugin for Trac
###################################

This plugin is based on earlier plugins.  Its main innovation is to make
multiple branches available, the way Trac normally does.


Features
========
Supports all major Trac views and "changeset:" notation.

Allows a collection of branches to be treated as a "trac repository",
regardless of whether they are related or in the same bzr repository.

Follows symlinks to branches


Requirements
============

Python 2.4
----------
This plugin uses bzrlib directly, so it requires Python 2.4 or greater.

Bazzar 1.3
----------
This has been tested with Bazaar 1.3.  Earlier versions may or may not work.


Configuration
=============
After installing, you'll want to set the following values:

components
----------
This should include "tracbzr.* = enabled"

repository_dir
--------------
This should point at the directory containing your branches.  This directory
does not have to be a repository.  trac+bzr doesn't require branches to
be related, though that is permitted, of course.

repository_type
---------------
This should be "bzr".

You can also use "bzr+debug" for debug mode.  In debug mode, all
repository operations are logged to the standard log output.  (Turning this on
for one repository_dir may enable it for all of them.)


Limitations
===========

Bogus changesets
----------------
This plugin introduces the bogus changeset "current:", which is used as
the last-revision for directories that are not branches.  It also provides
"null:", which is part of Bazaar's theoretical model, but usually hidden.

Hidden Nested Branches
----------------------
Because Trac, like Subversion, doesn't differentiate between "source file
namespace" and "branch namespace", it is impossible to view branches whose
directories are directly inside other branches' directories.

Speed issues
------------
Some user-level operations are rather slow, because Trac's assumptions
about which repository operations are cheap vs expensive doesn't match Bazaar's
design.  In particular, Bzr doesn't track "which revision last modified files
in this directory."  In theory, this can be solved by caching the results of 
expensive operations.

Revision Order
--------------
Changesets are sorted by timestamp, so clock skew may cause some changesets
to be displayed out-of order.  Changesets have only a partial ordering anyhow,
and this was deemed faster.

Bracket syntax
--------------
Trac appears not to recognize bzr revision strings in its bracket notation,
e.g. [tree,25].  However, you can use the changeset notation instead, e.g.
changeset:tree,25.
