bzr 2.2b4

Codename:Monkey Magic

This fourth and final beta in the 2.2 series now stabilizes the internal APIs. Plugin authors are recommended to ensure their releases are compatible, so that 2.2rc1 can be a true release candidate, containing stable and compatible plugin versions.

For users of bzrlib as a library, one of the primary changes is to request that they call bzrlib.initialize and use the returned context manager appropriately.

Better interaction with bzr-loom to make sure branching from a loom even over a smart server still yields a local loom. Not to mention lots of bugfixes over 2.2b3.

Compatibility Breaks

  • bzrlib library users now need to call __enter__ and __exit__ on the result of bzrlib.initialize. This change was made when fixing the bad habit recent bzr versions have had of leaving progress bars behind on the screen. That required calling another function before exiting the program, and it made sense to provide a full context manager at the same time. (Robert Collins)
  • The bzr front end now requires a bzrlib.ui.ui_factory which is a context manager in the Python 2.5 and above sense. The bzrlib base class is such a manager, but third party UI factories which do not derive from bzrlib.ui.UIFactory will be incompatible with the command line front end.
  • URLs like foo:bar/baz are now always parsed as a URL with scheme “foo” and path “bar/baz”, even if bzr does not recognize “foo” as a known URL scheme. Previously these URLs would be treated as local paths. (Gordon Tyler)

New Features

  • Support --directory option for a number of additional commands: conflicts, merge-directive, missing, resolve, shelve, switch, unshelve, whoami. (Martin von Gagern, #527878)

Bug Fixes

  • bzr branch to a new repository with a default stacking policy no longer transfers the full history unnecessarily. (Andrew Bennetts, #597942)
  • bzr init does not recursively scan directory contents anymore leading to faster init for directories with existing content. (Martin [gz], Parth Malwankar, #501307)
  • bzr log --exclude-common-ancestry is now taken into account for linear ancetries. (Vincent Ladeuil, #575631)
  • bzr log -r branch:REMOTE can now properly log the remote branch, rather than trying to fetch the data locally and failing because of a readonly error. (Martin von Gagern, #149270)
  • bzr pull now works when a lp: URL is explicitly defined as the parent or pull location in locations.conf or branch.conf. (Gordon Tyler, #534787)
  • bzr reconfigure --unstacked now works with branches accessed via a smart server. (Andrew Bennetts, #551525)
  • BzrDir.find_branches should ignore branches with missing repositories. (Marius Kruger, Robert Collins)
  • BzrDir.find_bzrdirs should ignore dirs that raises PermissionDenied. (Marius Kruger, Robert Collins)
  • Ensure that wrong path specifications in BZR_PLUGINS_AT display proper error messages. (Vincent Ladeuil, #591215)
  • Explicitly removing --profile-imports option from parsed command-line arguments on Windows, because bzr script does the same. (Alexander Belchenko, #588277)
  • Fetching was slightly confused about the best code to use and was using a new code path for all branches, resulting in more lookups than necessary on old branches. (Robert Collins, #593515)
  • Final fix for ‘no help for command’ issue. We now show a clean message when a command has no help, document how to set help more clearly, and test that all commands available to the test suite have help. (Robert Collins, #177500)
  • Invalid patterns supplied to Globster or lazy_regex now raise InvalidPattern exception showing clear error message to the user. (Parth Malwankar #300062)
  • Progress output is cleaned up when exiting. (Aaron Bentley)
  • Raise ValueError instead of a string exception. (John Arbash Meinel, #586926)
  • Relative imports in plugins are now handled correctly when using BZR_PLUGINS_AT. (Vincent Ladeuil, #588959)
  • ScriptRunner now strips off leading indentation from test scripts, which previously caused “SyntaxError: No command for line”. (Martin Pool)
  • Show unicode filenames in diff headers using terminal encoding. (Alexander Belchenko, Bug #382699) NOTE for Windows users: If user need to save diff to file then user need to change encoding of the terminal to ANSI encoding with command chcp XXX (e.g. chcp 1251 for Russian Windows).
  • URL displayed for use with break-lock when smart server sees lock contention are now valid. Default timeout for lock contention retry is now 30 seconds instead of 300 seconds. (Parth Malwankar, #250451)
  • walkdirs now raises a useful message when the filenames are not using the filesystem encoding. (Eric Moritz, #488519)
  • Enable debugging of bzr on windows with pdb and other tools. This was broken because we call GetCommandLineW on windows. The fix adjusts the command line we get to be the same length as sys.argv. (Jason Spashett, Alexander Belchenko, #587868)


  • Bazaar now reads data from SSH connections more efficiently on platforms that provide the socketpair function, and when using paramiko. (Andrew Bennetts, #590637)
  • Branch.copy_content_into is now a convenience method dispatching to a InterBranch multi-method. This permits bzr-loom and other plugins to intercept this even when a RemoteBranch proxy is in use. (Robert Collins, #201613)
  • Branch formats can now be loaded lazily by registering a MetaDirBranchFormatFactory rather than an actual format. This will cause the named format class to be loaded only when an enumeration of formats is needed or when the format string for the object is encountered. (Robert Collins, Jelmer Vernooij)
  • The encoding that bzr uses to output things other than file content can now be overridden via the output_encoding configuration option. (Martin Pool, #340394)
  • Use lazy imports in bzrlib/ so that plugins like news_merge do not cause modules to be loaded unnecessarily just because the plugin registers a merge hook. This improves bzr rocks time by about 25% in a default installation (with just the core plugins). (Andrew Bennetts)


  • Added regression tag to our tags list. (Robert Collins)
  • Improved our release checklist to have a bit less churn and leave things ready-to-go for the next action (including other people doing development). (Robert Collins)
  • Remove obsolete discussion of PQM in documentation about how to contribute to Bazaar. (Martin Pool, #588444)

API Changes

  • bzrlib.branch.InterBranch._get_branch_formats_to_test now returns an iterable of format pairs, rather than just a single pair, permitting InterBranch objects that work with multiple permutations to be comprehensively tested. (Robert Collins)
  • bzrlib.lsprof.profile will no longer silently generate bad threaded profiles when concurrent profile requests are made. Instead the profile requests will be serialised. Reentrant requests will now deadlock. (Robert Collins)
  • bzrlib.knit.KnitSequenceMatcher, which has been deprecated since 2007, has been deleted. Use PatienceSequenceMatcher from bzrlib.patiencediff instead. (Andrew Bennetts)
  • bzrlib.re_compile_checked is now deprecated. Caller should handle bzrlib.errors.InvalidPattern exception thrown by re.match in case the default error message not suitable for the use case. (Parth Malwankar)
  • bzrlib.tests.blackbox.ExternalBase is deprecated. It provided only one method check_output, and we now recommend checking command output using run_script. (Martin Pool)
  • bzrlib.transport.ssh.SSHVendor.connect_ssh now returns an object that implements the interface of bzrlib.transport.ssh.SSHConnection. Third-party implementations of SSHVendor may need to be updated accordingly. Similarly, any code using SSHConnection directly will need to be updated. (Andrew Bennetts)
  • The constructor of has changed to take an SSHParams instance (replacing many individual values). (Andrew Bennetts)


  • bzrlib.osutils.get_terminal_encoding will now only mutter its selection when explicitly requested; this avoids many duplicate calls being logged when helpers, wrappers and older code that manually calls it are executed it is now logged deliberately by the ui setup code. (Robert Collins)
  • Improved bzrlib.urlutils to handle lp:foo/bar URLs. (Gordon Tyler)
  • bzrlib._c_static_tuple.StaticTuple now implements __sizeof__, so that sys.getsizeof and other memory analysis tools will report more accurate results. (Andrew Bennetts)
  • The symbol_versioning module can now cleanup after itself - suppress_deprecation_warnings now returns a cleanup function. (Robert Collins)


  • Add bzrlib.tests.fixtures to hold code for setting up objects to test. (Martin Pool)
  • test_import_tariff now respects BZR_PLUGINS_AT and BZR_PLUGINS_DISABLE. (Vincent Ladeuil, #595587)

Table Of Contents

Previous topic

bzr 2.2

Next topic

bzr 2.2b3

This Page