Release notes

This is our second feature-filled release since 2.0, pushing us down the path to a 2.1.0. Once again, all bugfixes in 2.0.2 are present in 2.1.0b2.

Key highlights in this release are: improved handling of failures-during-cleanup for commit, fixing a long-standing bug with
``bzr+http`` and shared repositories, all ``lp:`` urls to be resolved behind proxies, and a new StaticTuple datatype, allowing us to reduce memory consumption (50%) and garbage collector overhead (40% faster) for many operations.

Changelog

View the full changelog

bzr 2.1.0b2
###########

:Codename: a load off my mind
:2.1.0b2: 2009-11-02

This is our second feature-filled release since 2.0, pushing us down the
path to a 2.1.0. Once again, all bugfixes in 2.0.2 are present in 2.1.0b2.

Key highlights in this release are: improved handling of
failures-during-cleanup for commit, fixing a long-standing bug with
``bzr+http`` and shared repositories, all ``lp:`` urls to be resolved
behind proxies, and a new StaticTuple datatype, allowing us to reduce
memory consumption (50%) and garbage collector overhead (40% faster) for
many operations.

* Errors during commit are handled more robustly so that knock-on errors
are less likely to occur, and will not obscure the original error if
they do occur. This fixes some causes of ``TooManyConcurrentRequests``
and similar errors. (Andrew Bennetts, #429747, #243391)

* Reduce the strictness for StaticTuple, instead add a debug flag
``-Dstatic_tuple`` which will change apis to be strict and raise errors.
This way, most users won't see failures, but developers can improve
internals. (John Arbash Meinel, #471193)

* When reading index files, we now use a ``StaticTuple`` rather than a
plain ``tuple`` object. This generally gives a 20% decrease in peak
memory, and can give a performance boost up to 40% on large projects.
(John Arbash Meinel)

* ``UIFactory`` now has new ``show_error``, ``show_message`` and
``show_warning`` methods, which can be hooked by non-text UIs.
(Martin Pool)

Internals
*********

* Added ``bzrlib._simple_set_pyx``. This is a hybrid between a Set and a
Dict (it only holds keys, but you can lookup the object located at a
given key). It has significantly reduced memory consumption versus the
builtin objects (1/2 the size of Set, 1/3rd the size of Dict). This is
used as the interning structure for StaticTuple objects.
(John Arbash Meinel)

* ``bzrlib._static_tuple_c.StaticTuple`` is now available and used by
the btree index parser and the chk map parser. This class functions
similarly to ``tuple`` objects. However, it can only point to a limited
collection of types. (Currently StaticTuple, str, unicode, None, bool,
int, long, float, but not subclasses). This allows us to remove it from
the garbage collector (it cannot be in a cycle), it also allows us to
intern the objects. In testing, this can reduce peak memory by 20-40%,
and significantly improve performance by removing objects from being
inspected by the garbage collector. (John Arbash Meinel)

* ``GroupCompressBlock._ensure_content()`` will now release the
``zlib.decompressobj()`` when the first request is for all of the
content. (Previously it would only be released if you made a request for
part of the content, and then all of it later.) This turns out to be a
significant memory savings, as a ``zstream`` carries around approx 260kB
of internal state and buffers. (For branching bzr.dev this drops peak
memory from 382MB => 345MB.) (John Arbash Meinel)

* When streaming content between ``2a`` format repositories, we now clear
caches from earlier versioned files. (So 'revisions' is cleared when we
start reading 'inventories', etc.) This can have a significant impact on
peak memory for initial copies (~200MB). (John Arbash Meinel)