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.
- A new --concurrency option has been added as well as an associated
BZR_CONCURRENCY environment variable to specify the number of
processes that can be run concurrently when running bzr selftest. The
command-line option overrides the environment variable if both are
specified. If none is specified. the number of processes is obtained
from the OS as before. (Matt Nordhoff, Vincent Ladeuil)
Bug Fixes
- bzr+http servers no longer give spurious jail break errors when
serving branches inside a shared repository. (Andrew Bennetts, #348308)
- 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)
- Launchpad urls can now be resolved from behind proxies.
(Gordon Tyler, Vincent Ladeuil, #186920)
- 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)
- TreeTransform.adjust_path updates the limbo paths of descendants of adjusted
files. (Aaron Bentley)
- Unicode paths are now handled correctly and consistently by the smart
server. (Andrew Bennetts, Michael Hudson, #458762)
Improvements
- 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)
- Peak memory under certain operations has been reduced significantly.
(eg, ‘bzr branch launchpad standalone’ is cut in half)
(John Arbash Meinel)
Documentation
- Filtered views user documentation upgraded to refer to format 2a
instead of pre-2.0 formats. (Ian Clatworthy)
API Changes
- Remove deprecated CLIUIFactory. (Martin Pool)
- 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)