bzr 2.1.0b4

Codename:san francisco airport

The fourth beta release in the 2.1 series brings with it a significant number of bugfixes (~20). The test suite is once again (finally) “green” on Windows, and should remain that way for future releases. There are a few performance related updates (faster upgrade and log), and several UI tweaks. There has also been a significant number of tweaks to the runtime documentation. 2.1.0b4 include everything from the 2.0.3 release.

Compatibility Breaks

  • The BZR_SSH environmental variable may now be set to the path of a secure shell client. If currently set to the value ssh it will now guess the vendor of the program with that name, to restore the old behaviour that indicated the SSH Corporation client use sshcorp instead as the magic string. (Martin <>, #176292)

New Features

  • bzr commit now has a --commit-time option. (Alexander Sack, #459276)
  • -Dhpss now increases logging done when run on the bzr server, similarly to how it works on the client. (John Arbash Meinel)
  • New option bzr unshelve --keep applies the changes and leaves them on the shelf. (Martin Pool, Oscar Fuentes, #492091)
  • The BZR_COLUMNS envrionment variable can be set to force bzr to respect a given terminal width. This can be useful when output is redirected or in obscure cases where the default value is not appropriate. Pagers can use it to get a better control of the line lengths. (Vincent Ladeuil)
  • The new command bzr lp-mirror will request that Launchpad update its mirror of a local branch. This command will only function if launchpadlib is installed. (Jonathan Lange)

Bug Fixes

  • After renaming a file, the dirstate could accidentally reference source\\path rather than source/path on Windows. This might be a source of some dirstate-related failures. (John Arbash Meinel)
  • bzr commit now detects commit messages that looks like file names and issues a warning. (Gioele Barabucci, #73073)
  • bzr ignore / no longer causes an IndexError. (Gorder Tyler, #456036)
  • bzr log -n0 -rN should not return revisions beyond its merged revisions. (#325618, #484109, Marius Kruger)
  • bzr merge --weave and --lca will now create .BASE files for files with conflicts (similar to --merge3). The contents of the file is a synthesis of all bases used for the merge. (John Arbash Meinel, #40412)
  • bzr mv --quiet really is quiet now. (Gordon Tyler, #271790)
  • bzr serve is more clear about the risk of supplying –allow-writes. (Robert Collins, #84659)
  • bzr serve --quiet really is quiet now. (Gordon Tyler, #252834)
  • Fix bug with redirected URLs over authenticated HTTP. (Glen Mailer, Neil Martinsen-Burrell, Vincent Ladeuil, #395714)
  • Interactive merge doesn’t leave branch locks behind. (Aaron Bentley)
  • Lots of bugfixes for the test suite on Windows. We should once again have a test suite with no failures on Windows. (John Arbash Meinel)
  • osutils.terminal_width() obeys the BZR_COLUMNS environment variable but returns None if the terminal is not a tty (when output is redirected for example). Also fixes its usage under OSes that doesn’t provide termios.TIOCGWINSZ. Make sure the corresponding tests runs on windows too. (Joke de Buhr, Vincent Ladeuil, #353370, #62539) (John Arbash Meinel, Vincent Ladeuil, #492561)
  • Terminate ssh subprocesses when no references to them remain, fixing subprocess and file descriptor leaks. (Andrew Bennetts, #426662)
  • The --hardlink option of bzr branch and bzr checkout now works for 2a format trees. Only files unaffected by content filters will be hardlinked. (Andrew Bennetts, #408193)
  • The new glob expansion on Windows would replace all \ characters with / even if it there wasn’t a glob to expand, the arg was quoted, etc. Now only change slashes if there is something being glob expanded. (John Arbash Meinel, #485771)
  • Use our faster KnownGraph.heads() functionality when computing the new rich-root heads. This can cut a conversion time in half (mysql from 13.5h => 6.2h) (John Arbash Meinel, #487632)
  • When launching a external diff tool via bzr diff –using, temporary files are no longer created, rather, the path to the file in the working tree is passed to the external diff tool. This allows the file to be edited if the diff tool provides for this. (Gary van der Merwe, #490738)
  • The launchpad-open command can now be used from a subdirectory of a branch, not just from the root of the branch. (Neil Martinsen-Burrell, #489102)


  • bzr log is now faster. (Ian Clatworthy)
  • bzr update provides feedback on which branch it is up to date with. (Neil Martinsen-Burrell)
  • bzr upgrade from pre-2a to 2a can be significantly faster (4x). For details see the xml8 patch and heads() improvements. (John Arbash Meinel)
  • bzrlib.urlutils.local_path_from_url now accepts ‘file://localhost/‘ as well as ‘file:///‘ URLs on POSIX. (Michael Hudson)
  • The progress bar now shows only a spinner and per-operation counts, not an overall progress bar. The previous bar was often not correlated with real overall operation progress, either because the operations take nonlinear time, or because at the start of the operation Bazaar couldn’t estimate how much work there was to do. (Martin Pool)


  • Lots of documentation tweaks for inline help topics and command help information.

API Changes

  • bzrlib.textui (vestigial module) removed. (Martin Pool)
  • The Launchpad plugin now has a function login which will log in to Launchpad with launchpadlib, and load_branch which will return the Launchpad Branch object corresponding to a given Bazaar Branch object. (Jonathan Lange)


  • New test Feature: ModuleAvailableFeature. It is designed to make it easier to handle what tests you want to run based on what modules can be imported. (Rather than lots of custom-implemented features that were basically copy-and-pasted.) (John Arbash Meinel)
  • osutils.timer_func() can be used to get either time.time() or time.clock() when you want to do performance timing. time.time() is limited to 15ms resolution on Windows, but time.clock() gives CPU and not wall-clock time on other platforms. (John Arbash Meinel)
  • Several code paths that were calling Transport.get().read() have been changed to the equalivent Transport.get_bytes(). The main difference is that the latter will explicitly call file.close(), rather than expecting the garbage collector to handle it. This helps with some race conditions on Windows during the test suite and sftp tests. (John Arbash Meinel)


  • TestCaseWithMemoryTransport no longer sets $HOME and $BZR_HOME to unicode strings. (Michael Hudson, #464174)

Table Of Contents

Previous topic

bzr 2.0.4

Next topic

bzr 2.0.3

This Page