bzr 2.1.0


bzr 2.1.0


This release marks our second long-term-stable series. The Bazaar team has decided that we will continue to make bugfix-only 2.0.x and 2.1.x releases, along with 2.2 development releases.

This is a fairly incremental update, focusing on polish and bugfixing. There are no changes for supported disk formats. Key updates include reduced memory consumption for many operations, a new per-file merge hook, ignore patterns can now include ‘!’ to exclude files, globbing support for all commands on Windows, and support for addressing home directories via bzr+ssh://host/~/ syntax.

Users are encouraged to upgrade from the 2.0 stable series.

Bug Fixes

  • Don’t require testtools to use sftp. (Vincent Ladeuil, #516183)
  • Fix “AttributeError in Inter1and2Helper” during fetch. (Martin Pool, #513432)
  • bzr update performs the two merges in a more logical order and will stop when it encounters conflicts. (Gerard Krol, #113809)
  • Give a better error message when doing bzr bind in an already bound branch. (Neil Martinsen-Burrell, #513063)
  • Ignore KeyError from remove_index during _abort_write_group in a pack repository, which can happen harmlessly if the abort occurs during finishing the write group. Also use bzrlib.cleanup so that any other errors that occur while aborting the individual packs won’t be hidden by secondary failures when removing the corresponding indices. (Andrew Bennetts, #423015)
  • Set the mtime of files exported to a directory by bzr export all to the same value to avoid confusing make and other date-based build systems. (Robert Collins, #515631)


  • Fetching into experimental formats will now print a warning. (Jelmer Vernooij)

API Changes

  • Repository.deserialise_inventory has been renamed to Repository._deserialise_inventory to indicate it is private. (Jelmer Vernooij)
  • Repository.get_inventory_xml has been renamed to Repository._get_inventory_xml to indicate it is private. (Jelmer Vernooij)
  • Repository.serialise_inventory has been renamed to Repository._serialise_inventory to indicate it is private.
  • Using the bzrlib.chk_map module from within multiple threads at the same time was broken due to race conditions with a module level page cache. This shows up as a KeyError in the bzrlib.lru_cache code with bzrlib.chk_map in the backtrace, and can be triggered without using the same high level objects such as bzrlib.repository.Repository from different threads. chk_map now uses a thread local cache which may increase memory pressure on processes using threads. (Robert Collins, John Arbash Meinel, #514090)
  • The new merge_file_content should now be ok with tests to avoid regressions. (Vincent Ladeuil, #515597)


  • Use bzrlib.cleanup rather than less robust try/finally blocks in several places in bzrlib.merge. This avoids masking prior errors when errors like ImmortalPendingDeletion occur during cleanup in do_merge. (Andrew Bennetts, #517275)

API Changes

  • The remove_index method of bzrlib.repofmt.pack_repo.AggregateIndex no longer takes a pack argument. This argument was always ignored. (Andrew Bennetts, #423015)