• Get Review Board
  • What's New
  • Products
  • Review Board Code review, image review, and document review
  • Documentation
  • Release Notes
  • Power Pack Enterprise integrations, reports, and enhanced document review
  • Try for 60 Days
  • Purchase
  • RBCommons Review Board as a Service, hosted by us
  • Pricing
  • RBTools Command line tools and Python API for Review Board
  • Documentation
  • Release Notes
  • Review Bot Automated code review, connecting tools you already use
  • Documentation
  • Release Notes
  • RB Gateway Manage Git and Mercurial repositories in your network
  • Documentation
  • Release Notes
  • Learn and Explore
  • What is Code Review?
  • Documentation
  • Frequently Asked Questions
  • Support Options
  • Third-Party Integrations
  • Demo
  • Review Board RBTools Power Pack Review Bot Djblets RB Gateway
    1. RBTools
    2. RBTools 4.0 Release Notes
  • Home
  • RBTools 5.2.1 Release Notes
  • RBTools 5.2 Release Notes
  • RBTools 5.1.1 Release Notes
  • RBTools 5.1 Release Notes
  • RBTools 5.0 Release Notes
  • RBTools 4.1 Release Notes
  • RBTools 4.0 Release Notes
  • RBTools 3.1.2 Release Notes
  • RBTools 3.1.1 Release Notes
  • RBTools 3.1 Release Notes
  • RBTools 3.0 Release Notes
  • RBTools 2.0.1 Release Notes
  • RBTools 2.0 Release Notes
  • RBTools 1.0.3 Release Notes
  • RBTools 1.0.2 Release Notes
  • RBTools 1.0.1 Release Notes
  • RBTools 1.0 Release Notes
  • RBTools 0.7.11 Release Notes
  • RBTools 0.7.10 Release Notes
  • RBTools 0.7.9 Release Notes
  • RBTools 0.7.8 Release Notes
  • RBTools 0.7.7 Release Notes
  • RBTools 0.7.6 Release Notes
  • RBTools 0.7.5 Release Notes
  • RBTools 0.7.4 Release Notes
  • RBTools 0.7.3 Release Notes
  • RBTools 0.7.2 Release Notes
  • RBTools 0.7.1 Release Notes
  • RBTools 0.7.0 Release Notes
  • RBTools 0.6.3 Release Notes
  • RBTools 0.6.2 Release Notes
  • RBTools 0.6.1 Release Notes
  • RBTools 0.6 Release Notes
  • RBTools 0.5.7 Release Notes
  • RBTools 0.5.6 Release Notes
  • RBTools 0.5.5 Release Notes
  • RBTools 0.5.4 Release Notes
  • RBTools 0.5.3 Release Notes
  • RBTools 0.5.2 Release Notes
  • RBTools 0.5.1 Release Notes
  • RBTools 0.5.0 Release Notes
  • RBTools 0.4.3 Release Notes
  • RBTools 0.4.2 Release Notes
  • RBTools 0.4.1 Release Notes
  • RBTools 0.4.0 Release Notes
  • RBTools 0.3.4 Release Notes
  • RBTools 0.3.3 Release Notes
  • RBTools 0.3.2 Release Notes
  • RBTools 0.3.1 Release Notes
  • RBTools 0.3.0 Release Notes
  • RBTools 0.2.0 Release Notes
  • RBTools 0.2 RC 1 Release Notes
  • RBTools 0.2 Beta 2 Release Notes
  • RBTools 0.2 Beta 1 Release Notes
  • Release Notes
  • RBTools 4.0 Release Notes¶

    Release date: October 24, 2022

    Compatibility¶

    • RBTools 4.0 supports Python 3.7 through 3.11.

      Support for Python 2.7 and 3.6 have been dropped. For continued support, please use RBTools 3.x.

    • The RBTools for Windows installer now bundles Python 3.10.

      This unfortunately means we have to drop support for Windows 7 and older, as Python has dropped support in their installers.

    New Features¶

    • Added support for Apple Diff on macOS Ventura.

      Ventura is the first version of macOS to drop support for GNU Diff. It instead introduces Apple Diff, which is similar to GNU Diff in most (but not all) respects.

      RBTools 4 has been updated to detect whether GNU Diff or Apple Diff is installed and to interface with it properly.

    • Added conflict information when trying to apply Subversion patches using rbt patch or rbt land.

    • Improved error messages when posting review requests if failing to find a repository match.

      Sometimes local tools (such as git, svn, or diff) are missing when posting a change for review, or the local tree doesn’t quite match up with what’s configured on Review Board. Or there may be too many repositories that match the local tree.

      RBTools will now report on what types of repositories were tried, what tools may be missing, and what conflicts may have been found, helping you to resolve the problem more quickly.

    Performance Improvements¶

    • Improved the performance of diff generation for most SCMs.

      Subversion, Perforce, and Team Foundation Server will see the most gains here, especially for larger changes.

    • Improved startup time and reliability.

      We’ve optimized how we load in repository support, reducing the work required when starting up.

    RBTools Python API¶

    If you’re developing custom scripts that use the RBTools Python API, you may need to update your scripts for RBTools 4.

    These changes should all be backwards-compatible, but deprecated code will be removed in RBTools 5.

    New SCMClient Support¶

    We’ve completely reworked how SCMClients (which interface with services like Git or Perforce) are registered and set up:

    • SCMClients can be registered or looked up using rbtools.clients.base.registry.scmclient_registry.

      This will still include SCMClients provided by Python packages that use Python Entry Points.

    • Custom SCMClients must now inherit from rbtools.clients.base.scmclient.BaseSCMClient, instead of the legacy rbtools.clients.SCMClient.

      This allows base class allows clients to specify dependencies, compatible diff tools (GNU Diff, Apple Diff, or custom diff tools), and go through a formal setup process.

    • If manually instantiating a SCMClient, setup() must be called.

      This checks for missing dependencies and performs some internal client setup.

      If not called, certain operations may fail, or emit deprecation warnings.

    New Diff Functionality¶

    It’s now easier than ever to create or process diffs using RBTools.

    • rbtools.diffs.tools provides wrappers and a registry for looking up and calling the correct diff tool for your system.

    • rbtools.diffs.writers.UnifiedDiffWriter makes it easy to programmatically generate Unified Diff files with the right syntax and encodings.

    New Repository Scanning¶

    Tools can now use rbtools.utils.source_tree.scan_scmclients_for_path() to determine which SCMClient and which repository on Review Board is correct for a given path.

    This will check client dependencies as well, and return detailed error messages if a match could not be found.

    Python 3 Type Annotations¶

    Much of our codebase has been updated to provide Type Annotations, which IDEs can use to ensure the code you write is using the right types.

    Much of the API, SCMClients, new diff functionality, and utility functions have been updated with Type Annotations, with more coming in the future.

    Deprecations¶

    The following functionality in the RBTools Python API have been deprecated and will be removed in RBTools 5:

    rbtools.api¶

    • rbtools.api.cache.CachedHTTPResponse:

      • info() (use headers instead).

      • getcode() (use code instead).

    • rbtools.api.cache.LiveHTTPResponse:

      • info() (use headers instead).

      • getcode() (use code instead).

    • rbtools.api.request.HttpRequest:

      • add_field() now requires byte string or Unicode string arguments.

    • rbtools.api.resource.ResourceDictField:

      • iteritems() (use items() instead).

      • iterfields() (use fields() instead).

    rbtools.clients¶

    • rbtools.clients.SCMClient (subclass rbtools.clients.base.scmclient.BaseSCMClient instead).

    • rbtools.clients.base.repository.RepositoryInfo now expects keyword arguments instead of positional arguments.

    • BaseSCMClient.diff() now expects keyword arguments, and should not take SCM-specific arguments.

    rbtools.utils¶

    • rbtools.utils.checks

      • is_valid_version() (compare tuples directly instead).

    • rbtools.utils.diffs

      • filename_match_any_patterns() now expects base_dir as a keyword argument.

      • filter_diff() now expects exclude_patterns and base_dir as keyword arguments.

      • normalize_patterns() now expects base_dir and cwd as keyword arguments.

      • remove_filenames_matching_patterns() now expects base_dir and patterns as keyword arguments.

    • rbtools.utils.process

      • execute() (use run_process() instead).

    Bug Fixes¶

    API Communication¶

    • Fixed a bug where RBTools tried and failed to load custom SSL certificates when only finding a certificate or a key (but not both).

    Bazaar/Breezy¶

    • Fixed rare crashes that could occur with mismatched data types.

    Mercurial¶

    • Fixed problems that could occur when applying Mercurial patches using rbt patch or rbt land.

    Subversion¶

    • Fixed problems that could occur when applying Subversion patches using rbt patch or rbt land.

    • Fixed an infinite loop that could theoretically occur when building diffs of empty files.

    Team Foundation Server¶

    • Fixed a crash that could occur when parsing revisions to post for review.

    • Fixed string type issues on Python 3.

    Contributors¶

    • Christian Hammond

    • David Trowbridge

    • Michelle Aubin

    Keep up with the latest Review Board releases, security updates, and helpful information.

    About
    News
    Demo
    RBCommons Hosting
    Integrations
    Happy Users
    Support Options
    Documentation
    FAQ
    User Manual
    RBTools
    Administration Guide
    Power Pack
    Release Notes
    Downloads
    Review Board
    RBTools
    Djblets
    Power Pack
    Package Store
    PGP Signatures
    Contributing
    Bug Tracker
    Submit Patches
    Development Setup
    Wiki
    Follow Us
    Mailing Lists
    Reddit
    Twitter
    Mastodon
    Facebook
    YouTube

    Copyright © 2006-2025 Beanbag, Inc. All rights reserved.

    Terms of Service — Privacy Policy — AI Ethics Policy — Branding

    On this page

    • [Top]
    • Compatibility
    • New Features
    • Performance Improvements
    • RBTools Python API
      • New SCMClient Support
      • New Diff Functionality
      • New Repository Scanning
      • Python 3 Type Annotations
      • Deprecations
        • rbtools.api
        • rbtools.clients
        • rbtools.utils
    • Bug Fixes
      • API Communication
      • Bazaar/Breezy
      • Mercurial
      • Subversion
      • Team Foundation Server
    • Contributors