Table of Contents (3.3.22)

# Breezy Release Notes

## brz 3.3.22

3.3.22:

  2026-05-05

  - Honour `token` entries in `authentication.conf` by sending an `Authorization` header preemptively over HTTP. `brz gh-login` and `brz gitlab-login` now write a `token` field, so subsequent git smart-HTTP fetch and push traffic to GitHub and GitLab reuses the forge credentials rather than going anonymous. (Jelmer Vernooĳ)

  - Use the `vcsgraph` package for graph, topological sort and known graph implementations rather than local copies. (Jelmer Vernooĳ)

  - Add a format-independent `MemoryTree` in `breezy.memorytree` that does not use file ids or inventories. The bzr-specific `MemoryTree` has moved to `breezy.bzr.memorytree`. `Branch.create_memorytree()` is now format-specific, with implementations on `BzrBranch`, `RemoteBranch` and `LocalGitBranch`. (Jelmer Vernooĳ)

  - Drive three-way merges by paths rather than by file ids, so non-inventory trees (including the new generic `MemoryTree`) can participate in merges. (Jelmer Vernooĳ)

  - Fix `MalformedTransform: unversioned executability` crash when merging a git tree where THIS renames a file that OTHER modifies. (Jelmer Vernooĳ)

  - Fix `revision_tree()` crash when a bzr revision id embeds a git tag SHA rather than a commit SHA. (Jelmer Vernooĳ)

  - Fix TLS certificate verification error when accessing an HTTPS server through an HTTP proxy. (L. Guruprasad)

  - Use the `catalogus` package for the registry implementation rather than a local copy. (Jelmer Vernooĳ)

  - Fix builtin command lookup when running brz commands in-process without going through `main()`. (Jelmer Vernooĳ)

  - Hold a read lock around `workspace.extras()` to avoid inconsistent results under concurrent access. (Jelmer Vernooĳ)

## brz 3.3.21

> - Require testtools 2.8+. (Jelmer Vernooĳ)

> - Restrict maximum dulwich version. (Jelmer Vernooĳ)

> - Fix `iter_bytes()` usage in tests. (Jelmer Vernooĳ)

> - Fix object store lifecycle management for dulwich 0.25+. (Jelmer Vernooĳ)

## brz 3.3.20

> - Fix `UTextWrapper` to properly drop trailing whitespace when wrapping long words, matching Python 3.13’s `textwrap` behavior. (Jelmer Vernooĳ)

## brz 3.3.19

> - Fix compatibility with Dulwich 0.25. (Jelmer Vernooĳ)

## brz 3.3.18

> - Add warning about known issues in `bzr fast-export` (Jelmer Vernooĳ)

## brz 3.3.17

> - Fix compatibility with newer versions of Dulwich. (Jelmer Vernooĳ)

## brz 3.3.16

3.3.16:

  2025-10-29

- Mark PyO3 0.27 as compatible. (Jelmer Vernooĳ)

- Drop support for Python 3.9. (Jelmer Vernooĳ)

## brz 3.3.15

3.3.15:

  2025-10-26

- Add Python 3.14 support. (Jelmer Vernooĳ, #2121688)

- Migrate Rust code to modern PyO3 0.26 API to eliminate deprecation warnings. (Jelmer Vernooĳ)

## brz 3.3.14

There was no 3.3.14 release.

## brz 3.3.13

3.3.13:

  2025-08-31

- Add warning when accessing Bazaar branches on Launchpad, as Launchpad is phasing out Bazaar code hosting. The warning can be suppressed by adding `launchpad_bazaar_deprecation` to the `suppress_warnings` configuration option. (Jelmer Vernooĳ)

- Fix compatibility with paramiko 4.0.0, which removed DSA key support. (Jelmer Vernooĳ)

- Add Python 3.14 support. (Jelmer Vernooĳ)

- Cope with removed `ast.Str` in Python 3.14. (Jelmer Vernooĳ)

- Use released dulwich rather than development version. (Jelmer Vernooĳ)

- Fix git object store compatibility issues with dulwich. (Jelmer Vernooĳ)

- git: Ensure tags are pushed for local operations. (Jelmer Vernooĳ)

- Fix typing issues with newer versions of typing-extensions. (Jelmer Vernooĳ)

- Drop support for Bazaar on Launchpad. (Jelmer Vernooĳ)

- Remove references to Bazaar codehosting on Launchpad. (Jelmer Vernooĳ)

- Improve installation instructions for modern Python. (Jelmer Vernooĳ, #2119976)

## brz 3.3.12

3.3.12:

  2025-05-13

- Drop use of `PyInt_AsUnsignedLongMask`, which is deprecated in modern Python. (Jelmer Vernooĳ)

## brz 3.3.11

3.3.11:

  2025-04-06

- Drop static tuple. This is breaking Python 3.13 support, Python has made improvements to tuples that should reduce the need for this. We’re also moving performance-critical code to rust in the future. (#2102194, Jelmer Vernooĳ)

- Fix timezone handling, avoid looking up timezone. (#2103478, Jelmer Vernooĳ)

- Drop unused `simple_set` extension. (Jelmer Vernooĳ)

## brz 3.3.10

3.3.10:

  2025-03-14

- Breezy itself is now hosted on GitHub - https://github.com/breezy-team/breezy. (Jelmer Vernooĳ)

- Bump PyO3 to 0.23. (Jelmer Vernooĳ)

- Add support for Python 3.13. (Jelmer Vernooĳ, #2102194)

## brz 3.3.9

3.3.9:

  2024-10-20

- Update pyo3 to 0.22, adding support for Python 3.13. (Jelmer Vernooĳ, #2084288)

## brz 3.3.8

3.3.8:

  2024-06-27

- Prevent builds with PyO3 0.22 and up, which are incompatible with Breezy 3.3. (Jelmer Vernooĳ)

## brz 3.3.7

3.3.7:

  2024-04-01

- Fix compatibility with Python 3 < 3.11, which don’t have datetime.UTC. (Jelmer Vernooĳ)

## brz 3.3.6

3.3.6:

  2024-04-01

- Ignore race conditions loading config files. (Jelmer Vernooĳ)

- Fix tests on Python 3.12. (Jelmer Vernooĳ)

## brz 3.3.5

3.3.5:

  2024-01-19

- Fix compatibility with Python 3.12. Jelmer Vernooĳ, #2047991)

## brz 3.3.4

3.3.4:

  2023-09-04

- Improve handling of lp: URLs when lp: insteadOf is set in gitconfig. (Jelmer Vernooĳ)

- Allow setting _ConnectRequestor.selector. (Jelmer Vernooĳ)

- Fix brz-email bug on Python 3. (Triss)

- Fix compatibility with newer versions of dulwich. (Jelmer Vernooĳ)

## brz 3.3.3

3.3.3:

  2023-05-23

### External Compatibility Breaks

- Drop support for the ubuntu: and debianlp: aliases. These imports have long been broken. (Jelmer Vernooĳ)

- Fix support for newer versions of Dulwich. (Jelmer Vernooĳ)

## brz 3.3.2

3.3.2:

  2023-01-21

### Improvements

- Update Git code to use newer Dulwich APIs for pack generation, significantly improving performance. (Jelmer Vernooĳ)

- gitlab: Support URL schemes https, http. (Jelmer Vernooĳ)

- Bundle the webdav plugin. (Jelmer Vernooĳ)

- Add supports_auto_merge setting. (Jelmer Vernooĳ)

- Add –auto argument for “brz propose”. (Jelmer Vernooĳ)

### Bug Fixes

- Fix anonymous access of lp: URLs. (Jelmer Vernooĳ, #2000806)

- gitlab: Handle GitLab consistently returning 500 when updating description in some versions. (Jelmer Vernooĳ)

- github: Support multiple pages when enumerating forks. (Jelmer Vernooĳ)

## brz 3.3.1

3.3.1:

  2022-11-22

### External Compatibility Breaks

- Drop support for Python < 3.7. (Jelmer Vernooĳ)

- Factored gettext support out into setuptools-gettext. (Jelmer Vernooĳ)

### New Features

- Add `--open` argument to `brz propose`. (Jelmer Vernooĳ)

- New `brz web-open` command, which opens a branch or merge proposal in a web browser. Deprecates `brz lp-open`. (Jelmer Vernooĳ)

### Improvements

- Various portability fixes for Mac OS X and Windows. (Jelmer Vernooĳ)

- Ship typing hints. (Jelmer Vernooĳ)

- Build binary on GitHub for most Python platforms. (Jelmer Vernooĳ)

- Drop trivial pkg-version dependency. (Ondřej Pohořelský)

- Drop use of unnecessary `iso8061` module for Forge interactions. (Jelmer Vernooĳ)

- Support finding GitHub PRs by URL. (Jelmer Vernooĳ)

### Bug Fixes

- Fix compatibility with Python 3.11. (Jelmer Vernooĳ, #1995814) + Remove use of PyUnicode_FromUnicode, gone in Python 3.11. + Fix reference counter tests for Python 3.11.

- Handle unexpected HTTP Status errors from Dulwich, converting them to the appropriate Breezy exceptions. (Jelmer Vernooĳ)

- Handle out of file descriptor errors in `breezy.dirty_tracker`. (Jelmer Vernooĳ)

- git: Properly decode remote tag names rather than leaving them as bytes. (Jelmer Vernooĳ)

- Fix compatibility with Dulwich >= 0.20.50. (Jelmer Vernooĳ)

- Fix `Tree.get_file_mtime` in shallow git trees. (Jelmer Vernooĳ)

### Documentation

- Remove various references to brz-gtk and breezy. (Jelmer Vernooĳ, #1926890, #1837056, #1837053)

### API Changes

- Removed `breezy.revision.ensure_null`, originally added for the migation from `None` to `NULL_REVISION`. (Jelmer Vernooĳ)

- New `Forge.create_project` method. (Jelmer Vernooĳ)

- New `breezy.forge.get_forge_by_hostname` function. (Jelmer Vernooĳ)

- New `Tree.is_special_filename` to match on e.g. `.gitattributes` and `.bzrignore`. (Jelmer Vernooĳ)

### Internals

- Switch to using Launchpad REST API for lp: URL lookups, rather than XML/RPC. (Jelmer Vernooĳ)

- Migrate from pkg_resources to importlib for entrypoints. (Jelmer Vernooĳ)

- New exception `UnsupportedVcs`. (Jelmer Vernooĳ)

- Support titles for merge proposals. (Jelmer Vernooĳ)

- Use standard python infrastructure to mark extensions as optional. (Jelmer Vernooĳ)

- Add pyproject.toml. (Jelmer Vernooĳ)

### Testing

- Increased timeouts since e.g. the setup test takes longer to run now we’re compiling rust files. (Jelmer Vernooĳ)

- Raise exception for timed out test rather than killing entire process when hitting timeouts. (Jelmer Vernooĳ)

- Add xfail lists for Mac OS X and Windows. (Jelmer Vernooĳ)

- Properly clear BRZ_SSH in tests. (Jelmer Vernooĳ)

## brz 3.3.0

3.3.0:

  2022-10-07

### External Compatibility Breaks

- Breezy now uses the system merge3 rather than bundling its own copy. (Jelmer Vernooĳ)

- Breezy now requires PyYAML. (Jelmer Vernooĳ)

- Breezy now requires setuptools-rust and a rust compiler to be built. (Martin Packman, Jelmer Vernooĳ)

### New Features

- Add –recurse-nested argument to ‘brz export’. (Jelmer Vernooĳ)

### Improvements

- Add an `extra` for installing PGP dependencies. (Jelmer Vernooĳ)

- Convert multiple authors to the Co-authored-by field. (Jelmer Vernooĳ)

- github: Lazily load github pull requests, improving performance. (Jelmer Vernooĳ)

- github: Return canonical URLs for branches. (Jelmer Vernooĳ)

- Avoid deprecated distutils.version, ahead of removal. (Jelmer Vernooĳ)

- Add a docker file. (Jelmer Vernooĳ)

- launchpad: Store Launchpad credentials in authentication.conf. (Jelmer Vernooĳ)

- git: Support accessing git branch configuration. (Jelmer Vernooĳ)

- pgp: Add support for create_signatures=when-possible (Jelmer Vernooĳ)

- propose: By default, don’t push tags when proposing changes. (Jelmer Vernooĳ)

- git: Split out and separately report ProtectedBranchHookDeclined. (Jelmer Vernooĳ)

- git: Avoid reading entire pack files into memory. (Jelmer Vernooĳ)

### Bug Fixes

- git: Fix handling of empty directories in iter_changes. (Jelmer Vernooĳ)

- fastimport: Open stdin in binary mode. (Alexander Grund)

- Fix printing of exceptions for unsupported formats. (Jelmer Vernooĳ)

- Fix compatibility with modern dulwich. (Jelmer Vernooĳ)

- bzr: Only update working tree when pushing to active branch. (Jelmer Vernooĳ)

- gitlab: Fix API access; now seems to reject ‘;’ as separator of url parameters. (Jelmer Vernooĳ)

- Launchpad: Fix instance iteration. (Jelmer Vernooĳ)

- git: Fix remote branch reference handling. (Jelmer Vernooĳ)

- git: Handle symref loops. (Jelmer Vernooĳ)

- Fix handling of chunked HTTP requests. (Jelmer Vernooĳ)

- git: Fix handling of date: revision specs. (Jelmer Vernooĳ)

- git: Support insteadOf / pushInsteadOf. (Jelmer Vernooĳ)

### Documentation

- Add link to Matrix room, point to new IRC channel. (Jelmer Vernooĳ)

### API Changes

- Various errors have moved out of `breezy.errors` to the modules they are related to. Including: UnsupportedProtocol, FileExists and NoSuchFile from breezy.errors => breezy.transport (Jelmer Vernooĳ)

- Add `MergeProposal.set_target_branch()` method. (Jelmer Vernooĳ)

- Move `static_tuple` to `breezy.bzr`. (Jelmer Vernooĳ)

### Internals

- File ids are mostly gone from the API. There are a few select cases where they are still used. (Jelmer Vernooĳ)

- python2-cleanup: Remove obsolete __cmp__. (Jelmer Vernooĳ)

- bzr: Support name argument in ControlDir.push_branch. (Jelmer Vernooĳ)

- Fix flake8 with newer versions of flake8. (Jelmer Vernooĳ)

- Avoid deprecated urllib.parse.{splittype,splitport,splithost}. (Jelmer Vernooĳ)

- Improve handling of remote git trees; improved performance, support for more functions. (Jelmer Vernooĳ)

- git: Raise custom error for unknown encodings in Git commits. (Jelmer Vernooĳ)

- Use google docstrings in more places, fixing errors from pydoctor in the process. (Jelmer Vernooĳ)

- Lockdir now uses yaml rather than RIO. (Jelmer Vernooĳ)

### Testing

- Disable known failing test_build_and_install on GitHub. (Jelmer Vernooĳ)

- bashcomp: Preserve environment when invoking brz. (Jelmer Vernooĳ)