Breezy Release Notes

brz 3.0.0


brz 3.0.0 is the first release of Breezy, a fork of Bazaar. For more information, see our release announcement on the Bazaar mailing list and README.

External Compatibility Breaks

  • The bzr command has been renamed to brz, to prevent clashes with upstream Bazaar. (Martin Packman, Jelmer Vernooij)
  • The –prefix/-p argument for brz diff now defaults to -p1 rather than -p0. (Jelmer Vernooij, #1695126)
  • The brz register-branch command from the Launchpad plugin has been removed, because it has not worked for at least five years: it relies on password authentication rather than SSO, the relevant systems no longer have firewall-level access to the outside world, and in general the Mirrored branch type is deprecated. Either just push the branch to Launchpad or use code imports instead ( (Colin Watson, #254567, #483689)
  • brz no longer supports building the C extensions using Pyrex. Only Cython is supported. (Jelmer Vernooij)
  • Support for HTTP support using “pycurl” and the associated URL schemes “http+pycurl://” and “https+pycurl://” has been dropped. (Jelmer Vernooij, #82086, #377389, #122258, #516222, #545776, #1696602)
  • Support for medusa for FTP tests has been dropped, only pyftpdlib is now supported. (Jelmer Vernooij)
  • The deprecated brz get and brz clone commands have been removed. (Jelmer Vernooij)
  • The setting to ignore missing C extensions has been changed from ignore_missing_extensions=True to suppress_warnings=missing_extensions. (Jelmer Vernooij)
  • Remove format names as options to brz init and brz init-repository.. Now you must use brz init --format=.... This simplifies brz init --help. (Neil Martinsen-Burrell, #330494)
  • python-gpg is now used for checking GPG signatures rather than python-gpgme. (Jelmer Vernooij, #1702308)
  • python-gpg is now used for signing commits, rather than shelling out to the gnupg command. The gpg_signing_command option has been removed. (Jelmer Vernooij, #847388)
  • The bzr.transform.orphan_policy configuration option has been renamed to transform.orphan_policy. (Jelmer Vernooij)
  • Backslash () is no longer accepted as a path separator on platforms where it is not the default path separator, e.g. POSIX systems. This is so that filenames with backslashes in their name can be added explicitly. (#176263, #165151)
  • One-letter shortcuts for Ubuntu releases are no longer supported after ‘ubuntu:’. Bazaar’s mapping for one-letter distroseries had not been updated since natty. (Jelmer Vernooij)
  • The brz lp-mirror-branch subcommand has been removed. Please use the lp-force-branch-mirror command from the lptools package instead. (Jelmer Vernooij, #518807)
  • Up-to-date checking for Bazaar packaging branches is no longer performed, since there are no longer any automated imports. (Jelmer Vernooij)
  • setuptools is now required to build and install Breezy. (Jelmer Vernooij)

New Features

  • The ‘bisect’ plugin is now shipped with brz. (Jelmer Vernooij)
  • The ‘fastimport’ plugin is now bundled with Breezy. (Jelmer Vernooij)
  • The grep plugin has been merged into Breezy. (Parth Malwankar, Martin Packman, Jelmer Vernooij)
  • The ‘stats’ plugin is now bundled with Breezy. (Jelmer Vernooij)
  • The ‘upload’ plugin is now bundled with Breezy. (Jelmer Vernooij)
  • The ‘cvs’ and ‘mtn’ plugins are now bundled with Breezy. (Jelmer Vernooij)
  • The ‘email’ plugin is now bundled with Breezy. (Jelmer Vernooij)
  • The ‘import’ command is now bundled with brz. Imported from bzrtools by Aaron Bentley. (Jelmer Vernooij, #773241)
  • The ‘link-tree’ command is now bundled with brz. Imported from bzrtools by Aaron Bentley. (Jelmer Vernooij)
  • The ‘fetch-ghosts’ command is now bundled with brz. Imported from bzrtools by Aaron Bentley. (Jelmer Vernooij)
  • The ‘commitfromnews’ plugin is now bundled and can be enabled by setting commit.template_from_files = NEWS. (Jelmer Vernooij)
  • The ‘darcs’ plugin is now bundled. (Jelmer Vernooij)
  • The functionality from bzr-guess is now merged into Breezy. It will provide suggestions if the user typoes a command. (Jelmer Vernooij)
  • Support the creation of colocated branches in brz fast-import. (Jelmer Vernooij, #1744626)
  • New lp-logout command to unset launchpad username. (Jelmer Vernooij, #349143)
  • Plugins can now be registered using the ‘entrypoints’ mechanism in setuptools. (Jelmer Vernooij, #1802647)
  • The Breezy UI now handles RCP-style URLs and suggests the user specify either git+ssh or bzr+ssh. (Jelmer Vernooij)


  • Doc generators now support the SOURCE_DATE_EPOCH environment variable ( (Jelmer Vernooij)
  • The repodebug plugin is now bundled. (Jelmer Vernooij)
  • New brz cp command which copies files (but does not currently track history). (Jelmer Vernooij, start towards #269095)
  • HPSS calls for RevisionTree.archive and RevisionTree.annotate_iter have been added. (Jelmer Vernooij, #897781)
  • New lp+bzr:// URL scheme for Bazaar-only branches on Launchpad. (Jelmer Vernooij)
  • Report colocated branch information in brz info. (Jelmer Vernooij, #1803846)

Bug Fixes

  • Support Server Name Indication (SNI) when talking to https servers. Cherry-picked from lp:~vila/bzr/1089352-sni-support (Vincent Ladeuil, #1089352)
  • The bisect command now works in non-.bzr directories. (Jelmer Vernooij)
  • When creating authentication.conf, umask is now set so only the current user can read the file. Breezy warns if the file is accessible for other users when it starts. (Joke de Buhr, Jelmer Vernooij, #475501)
  • Support brz commit -x in combination with iter_changes. (Jelmer Vernooij, #796582, #403811, #694946, #268135, #299879)
  • Print a proper error when encountering ghost revisions in mainline in brz log. (Jelmer Vernooij, #726466)
  • Security fix: hostnames starting with a dash in bzr+ssh URLs are now filtered out when using a subprocess SSH client. . Thanks to Augie Fackler for reporting. (Jelmer Vernooij, #1710979)
  • Mark all options as unicode. Allows using non-ASCII values in most options. (Jelmer Vernooij, #563692)
  • Support automatic rename tracking into new directories. (mnn, #373319)
  • Avoid writing directly to sys.stdout, but use self.outf in Command implementations instead. (#268573, B. Clausius)
  • It is now possible to version files with backslashes in their name on platforms that support it. (Jelmer Vernooij, #81844)
  • Support ‘0’ markers in fastimport plugin. (Jelmer Vernooij, #1744615)
  • Support adding/removing filenames that consist of just backslashes in where backslash is not the path separator. (Jelmer Vernooij, #176263, #165151)
  • Report correct path in output of brz add. (Brian de Alwis, Jelmer Vernooij, #1799482)
  • Don’t report empty directories in git trees as changes. (Jelmer Vernooij, #1804072)
  • Fix support for ‘brz ignore’ in Git trees. (Jelmer Vernooij, #1804053)
  • Print a clearer error when GPG can’t be found. (Jelmer Vernooij, #1803898)
  • Fix a corner case when moving files. (Jelmer Vernooij, #533152)
  • Fix fastexport output to standard output when running under Python 3. (Jelmer Vernooij, #1805172)
  • Restore absolute URLs in branch reference URLs. This is needed for backwards compatibility with Bazaar. (Jelmer Vernooij, #1803845)
  • Don’t report .git files as unknown files. (Jelmer Vernooij, Debian Bug #921240)
  • Raise better error when path subsegments lack =. (Jelmer Vernooij, #891483)
  • Display correct pull location argument in output of brz uncommit. (Jelmer Vernooij, #386577)


  • Various documents have been updated to explain that Breezy is a fork of Bazaar.
  • Documentation translations into Japanese, Spanish and Russian have been removed since there are no current translators to update them. (Jelmer Vernooij)
  • A quick introduction about using Breezy with GitHub has been added. (Jelmer Vernooij, #1803867)

API Changes

  • bzrlib has been renamed to breezy. (Martin Packman, Jelmer Vernooij)
  • Signature of load_tests used by TestLoader changed to be compatible with standard libarary unittest. (Martin Packman)
  • All previously deprecated functionality has been removed. (Jelmer Vernooij)
  • CommitBuilder.record_entry_contents has been removed. (Jelmer Vernooij, #731433, #604953)
  • Renamed parameter filter= to predicate=. (Martin Packman)
  • Branch.bzrdir, Repository.bzrdir and WorkingTree.bzrdir have been renamed to Branch.controldir, Repository.controldir and WorkingTree.controldir, respectively. (Jelmer Vernooij, #1695774)
  • BzrBranch and the various bzr branch format implementations have been moved to breezy.bzr. (Jelmer Vernooij)
  • MetaDirBranchFormatFactory has been removed. Use lazy registration on breezy.branch.format_registry instead. (Jelmer Vernooij)
  • breezy.bzrdir.format_registry has been removed; use breezy.controldir.format_registry instead. (Jelmer Vernooij)
  • breezy.api has been removed. (Jelmer Vernooij, #742192)
  • ControlDir.find_bzrdirs has been renamed to ControlDir.find_controldirs. (Jelmer Vernooij)
  • Repository.get_revisions no longer accepts None as argument. (Jelmer Vernooij)
  • A new Repository.iter_revisions method has been added. (Jelmer Vernooij)
  • A new WorkingTreeFormat.supports_setting_file_ids property has been added that can be set to False to indicate a working tree doesn’t support e.g. passing a file_id into WorkingTree.mkdir. (Jelmer Vernooij, #1707533)
  • A new RepositoryFormat.supports_setting_revision_ids property has been added that can be set to False to indicate a repository doesn’t support passing revision ids to CommitBuilder.commit. (Jelmer Vernooij)
  • A new RepositoryFormat.supports_overriding_transport property has been added that can be set to False to indicate a repository doesn’t support passing an alternative transport to (Jelmer Vernooij)
  • Repository.print_file and Branch.print_file have been removed. (Jelmer Vernooij)
  • Various lock_write and lock_read functions now return a context manager. (Jelmer Vernooij)
  • The BranchWriteLockResult.branch_token (returned by Branch.lock_write) has been renamed to BranchWriteLockResult.token. (Jelmer Vernooij)
  • breezy.decorators.needs_write_lock, breezy.decorators.needs_read_lock and breezy.mutabletree.needs_tree_write_lock have been deprecated. Instead, use the context managers returned by .lock_write, .lock_read and .lock_tree_write respectively. (Jelmer Vernooij)
  • Tree methods now take a path as primary key argument, rather than a file_id. file_id is still present as optional argument for most functions, and can be specified to speed up lookups. (Jelmer Vernooij)


  • Allow overriding of default HTTP headers by caller. (Jelmer Vernooij, #1753734)


  • Allow /dev/null to be a symlink to a chardev. (Igo Pashev, #832257)
  • A test isolation issue in breezy.tests.test_ui was fixed, which caused output_encoding = iso-8859-1 to be added to the users’ bazaar.conf. (Jelmer Vernooij)
  • Newer versions of pyftpdlib are now supported for running FTP tests. (Jelmer Vernooij)
  • The --subunit argument for brz selftest has been renamed to --subunit1, and a new argument --subunit2 has been added that outputs subunit v2. (Jelmer Vernooij, #1699346, #661205)
  • Launchpad plugin tests no longer try to connect to production Launchpad. (Jelmer Vernooij, #723183)
  • Set the GPGHOME environment variable during testing, to prevent e.g. leaking keys into the users’ GNUPG directory. (Jelmer Vernooij, #843885)
  • Allow some slack when comparing times. (Jelmer Vernooij, #1804121)
  • Fix a spuriously failing fastexport test due to dictionary ordering. (Jelmer Vernooij, #1808630)