|Codename:||While the cat is away
This is the first development release in the new split “stable” and
“development” series. As such, the release is a snapshot of bzr.dev
without creating a release candidate first. This release includes a
fair amount of internal changes, with deprecated code being removed,
and several new feature developments. People looking for a stable code
base with only bugfixes should focus on the 2.0.1 release. All bugfixes
present in 2.0.1 are present in 2.1.0b1.
Highlights include support for bzr+ssh://host/~/homedir style urls,
finer control over the plugin search path via extended BZR_PLUGIN_PATH
syntax, visible warnings when extension modules fail to load, and improved
error handling during unlocking.
Bazaar can now send mail through Apple OS X Mail.app.
(Brian de Alwis)
bzr+ssh and bzr paths can now be relative to home directories
specified in the URL. Paths starting with a path segment of ~ are
relative to the home directory of the user running the server, and paths
starting with ~user are relative to the home directory of the named
user. For example, for a user “bob” with a home directory of
/home/bob, these URLs are all equivalent:
If bzr serve was invoked with a --directory argument, then no
home directories outside that directory will be accessible via this
This is a feature of bzr serve, so pre-2.1 clients will
automatically benefit from this feature when bzr on the server is
upgraded. (Andrew Bennetts, #109143)
Extensions can now be compiled if either Cython or Pyrex is available.
Currently Pyrex is preferred, but that may change in the future.
Give more control on BZR_PLUGIN_PATH by providing a way to refer to or
disable the user, site and core plugin directories.
(Vincent Ladeuil, #412930, #316192, #145612)
- Bazaar’s native protocol code now correctly handles EINTR, which most
noticeably occurs if you break in to the debugger while connected to a
bzr+ssh server. You can now can continue from the debugger (by typing
‘c’) and the process continues. However, note that pressing C-in the
shell may still kill the SSH process, which is bug 162509, so you must
sent a signal to the bzr process specifically, for example by typing
kill -QUIT PID in another shell. (Martin Pool, #341535)
- bzr add in a tree that has files with \r or \n in the
filename will issue a warning and skip over those files.
(Robert Collins, #3918)
- bzr dpush now aborts if uncommitted changes (including pending merges)
are present in the working tree. The configuration option dpush_strict
can be used to set the default for this behavior.
(Vincent Ladeuil, #438158)
- bzr merge and bzr remove-tree now requires –force if pending
merges are present in the working tree.
(Vincent Ladeuil, #426344)
- Clearer message when Bazaar runs out of memory, instead of a MemoryError
traceback. (Martin Pool, #109115)
- Don’t give a warning on Windows when failing to import _readdir_pyx
as it is never built. (John Arbash Meinel, #430645)
- Don’t restrict the command name used to run the test suite.
(Vincent Ladeuil, #419950)
- ftp transports were built differently when the kerberos python module was
present leading to obscure failures related to ASCII/BINARY modes.
(Vincent Ladeuil, #443041)
- Network streams now decode adjacent records of the same type into a
single stream, reducing layering churn. (Robert Collins)
- PreviewTree behaves correctly when get_file_mtime is invoked on an unmodified
file. (Aaron Bentley, #251532)
- Registry objects should not use iteritems() when asked to use items().
(Vincent Ladeuil, #430510)
- Weave based repositories couldn’t be cloned when committers were using
domains or user ids embedding ‘.sig’. Now they can.
(Matthew Fuller, Vincent Ladeuil, #430868)
- Revision specifiers can now be given in a more DWIM form, without
needing explicit prefixes for specifiers like tags or revision id’s.
See bzr help revisionspec for full details. (Matthew Fuller)
- Bazaar gives a warning before exiting, and writes into .bzr.log, if
compiled extensions can’t be loaded. This typically indicates a
packaging or installation problem. In this case Bazaar will keep
running using pure-Python versions, but this may be substantially
slower. The warning can be disabled by setting
ignore_missing_extensions = True in bazaar.conf.
See also <https://answers.launchpad.net/bzr/+faq/703>.
(Martin Pool, #406113, #430529)
- Secondary errors that occur during Branch.unlock and Repository.unlock
no longer obscure the original error. These methods now use a new
decorator, only_raises. This fixes many causes of
TooManyConcurrentRequests and similar errors.
(Andrew Bennetts, #429747)
- Describe the new shell-like test feature. (Vincent Ladeuil)
- Help on hooks no longer says ‘Not deprecated’ for hooks that are
currently supported. (Ian Clatworthy, #422415)
- bzrlib.user_encoding has been removed; use
bzrlib.osutils.get_user_encoding instead. (Martin Pool)
- bzrlib.tests now uses stopTestRun for its TestResult
subclasses - the same as python’s unittest module. (Robert Collins)
- diff._get_trees_to_diff has been renamed to
diff.get_trees_and_branches_to_diff. It is now a public API, and it
returns the old and new branches. (Gary van der Merwe)
- bzrlib.trace.log_error, error and info have been deprecated.
- MutableTree.has_changes() does not require a tree parameter anymore. It
now defaults to comparing to the basis tree. It now checks for pending
merges too. Merger.check_basis has been deprecated and replaced by the
corresponding has_changes() calls. Merge.compare_basis,
Merger.file_revisions and Merger.ensure_revision_trees have also
(Vincent Ladeuil, #440631)
- ProgressTask.note is deprecated.
- Added -Drelock debug flag. It will note a message every time a
repository or branch object is unlocked then relocked the same way.
- BTreeLeafParser.extract_key has been tweaked slightly to reduce
mallocs while parsing the index (approx 3=>1 mallocs per key read).
This results in a 10% speedup while reading an index.
(John Arbash Meinel)
- The bzrlib.lsprof module has a new class BzrProfiler which makes
profiling in some situations like callbacks and generators easier.
- Passing --lsprof-tests -v to bzr selftest will cause lsprof output to
be output for every test. Note that this is very verbose! (Robert Collins)
- Setting BZR_TEST_PDB=1 when running selftest will cause a pdb
post_mortem to be triggered when a test failure occurs. (Robert Collins)
- Shell-like tests can now be written. Code in bzrlib/tests/script.py ,
documentation in developers/testing.txt for details.
- Some tests could end up with the same id, that was dormant for
a long time.
(Vincent Ladeuil, #442980)
- Stop showing the number of tests due to missing features in the test
progress bar. (Martin Pool)
- Test parameterisation now does a shallow copy, not a deep copy of the test
to be parameterised. This is not expected to break external use of test
parameterisation, and is substantially faster. (Robert Collins)
- Tests that try to open a bzr dir on an arbitrary transport will now
fail unless they have explicitly permitted the transport via
self.permit_url. The standard test factories such as self.get_url
will permit the urls they provide automatically, so only exceptional
tests should need to do this. (Robert Collins)
- The break-in test no longer cares about clean shutdown of the child,
instead it is happy if the debugger starts up. (Robert Collins)
- The full test suite is expected to pass when the C extensions are not
present. (Vincent Ladeuil, #430749)