• 
      

    Split out rbext from Review Board into a new package.

    Review Request #14955 — Created March 24, 2026 and updated

    Information

    rbext
    master

    Reviewers

    This introduces a dedicated package for rbext, the Review Board
    extension command line tool. This is a straight port of what's in
    the Review Board 8 tree, but with modern typing and code cleanup
    integrated with it, and deprecations removed.

    The plan is to have a standalone tool not dependent on any given version
    of Review Board that can be used not only to create and test packages,
    but also to build packages to distribute.

    To accomplish building packages, an upcoming change will introduce a
    Python build backend, rbext.build.backend, built on top of
    buildthings. This will handle a pre-build phase involving asset
    generation and static media infrastructure setup, and then perform a
    standard python -m build.

    For now, everything that's in here is more or less what was in
    reviewboard/cmdline/rbext.py, but split up and cleaned up. This will
    be the foundation for future work.

    Tested creating a tree and then running unit tests on it.

    Summary ID
    Split out rbext from Review Board into a new package.
    This introduces a dedicated package for `rbext`, the Review Board extension command line tool. This is a straight port of what's in the Review Board 8 tree, but with modern typing and code cleanup integrated with it, and deprecations removed. The plan is to have a standalone tool not dependent on any given version of Review Board that can be used not only to create and test packages, but also to build packages to distribute. To accomplish building packages, an upcoming change will introduce a Python build backend, `rbext.build.backend`, built on top of `buildthings`. This will handle a pre-build phase involving asset generation and static media infrastructure setup, and then perform a standard `python -m build`. For now, everything that's in here is more or less what was in `reviewboard/cmdline/rbext.py`, but split up and cleaned up. This will be the foundation for future work.
    ab47e04f18fc550aa978c94b5d09a3071b7f884c
    Description From Last Updated

    'rbext.commands.build.BuildCommand' imported but unused Column: 1 Error code: F401

    reviewbotreviewbot

    'rbext.commands.inspect.InspectCommand' imported but unused Column: 1 Error code: F401

    reviewbotreviewbot

    https://www.youtube.com/watch?v=QRdRPLq5fzA

    daviddavid

    This will include only rbext but not rbext.commands or rbext.commands.base. I think we want: [tool.setuptools.packages.find] where = ['.'] namespaces = …

    daviddavid

    I know we don't have much in here, but we should probably have a __future__.annotations import anyway.

    daviddavid

    This file needs a __future__.annotations import.

    daviddavid

    We should type this as tuple[int, int, int, int, str, int, bool], otherwise it will be implicitly typed as literals …

    daviddavid

    "the" is duplicated here.

    daviddavid

    This should be an empty string I think.

    daviddavid

    Should be rbext.commands.base.errors.CommandError

    daviddavid

    using alphanumeric... what?

    daviddavid

    This comes from old code, but we shouldn't have "nose" anywhere in new stuff.

    daviddavid

    Can we use f-strings here?

    daviddavid

    rb-site -> rbext

    daviddavid
    Checks run (1 failed, 1 succeeded)
    flake8 failed.
    JSHint passed.

    flake8

    • rbext/main.py (Diff revision 1)
       
       
      Show all issues
      'rbext.commands.build.BuildCommand' imported but unused
      
      Column: 1
      Error code: F401
    • rbext/main.py (Diff revision 1)
       
       
      Show all issues
      'rbext.commands.inspect.InspectCommand' imported but unused
      
      Column: 1
      Error code: F401
    • 
        
    chipx86
    Review request changed
    Change Summary:

    Removed imports for in-development commands.

    Commits:
    Summary ID
    Split out rbext from Review Board into a new package.
    This introduces a dedicated package for `rbext`, the Review Board extension command line tool. This is a straight port of what's in the Review Board 8 tree, but with modern typing and code cleanup integrated with it, and deprecations removed. The plan is to have a standalone tool not dependent on any given version of Review Board that can be used not only to create and test packages, but also to build packages to distribute. To accomplish building packages, an upcoming change will introduce a Python build backend, `rbext.build.backend`, built on top of `buildthings`. This will handle a pre-build phase involving asset generation and static media infrastructure setup, and then perform a standard `python -m build`. For now, everything that's in here is more or less what was in `reviewboard/cmdline/rbext.py`, but split up and cleaned up. This will be the foundation for future work.
    02fc6b50b597201cbb6f4ac37541e32d75c39fe1
    Split out rbext from Review Board into a new package.
    This introduces a dedicated package for `rbext`, the Review Board extension command line tool. This is a straight port of what's in the Review Board 8 tree, but with modern typing and code cleanup integrated with it, and deprecations removed. The plan is to have a standalone tool not dependent on any given version of Review Board that can be used not only to create and test packages, but also to build packages to distribute. To accomplish building packages, an upcoming change will introduce a Python build backend, `rbext.build.backend`, built on top of `buildthings`. This will handle a pre-build phase involving asset generation and static media infrastructure setup, and then perform a standard `python -m build`. For now, everything that's in here is more or less what was in `reviewboard/cmdline/rbext.py`, but split up and cleaned up. This will be the foundation for future work.
    ab47e04f18fc550aa978c94b5d09a3071b7f884c

    Checks run (2 succeeded)

    flake8 passed.
    JSHint passed.
    david
    1. 
        
    2. pyproject.toml (Diff revision 2)
       
       
      Show all issues

      https://www.youtube.com/watch?v=QRdRPLq5fzA

    3. pyproject.toml (Diff revision 2)
       
       
      Show all issues

      This will include only rbext but not rbext.commands or rbext.commands.base. I think we want:

      [tool.setuptools.packages.find]
      where = ['.']
      namespaces = false

    4. rbext/__init__.py (Diff revision 2)
       
       
       
       
      Show all issues

      I know we don't have much in here, but we should probably have a __future__.annotations import anyway.

    5. rbext/_version.py (Diff revision 2)
       
       
      Show all issues

      This file needs a __future__.annotations import.

    6. rbext/_version.py (Diff revision 2)
       
       
      Show all issues

      We should type this as tuple[int, int, int, int, str, int, bool], otherwise it will be implicitly typed as literals and comparisons will warn.

    7. rbext/_version.py (Diff revision 2)
       
       
      Show all issues

      "the" is duplicated here.

    8. rbext/commands/base/commands.py (Diff revision 2)
       
       
      Show all issues

      This should be an empty string I think.

    9. rbext/commands/base/commands.py (Diff revision 2)
       
       
      Show all issues

      Should be rbext.commands.base.errors.CommandError

    10. rbext/commands/create.py (Diff revision 2)
       
       
      Show all issues

      using alphanumeric... what?

    11. rbext/commands/test.py (Diff revision 2)
       
       
       
       
       
       
       
       
       
       
       
      Show all issues

      This comes from old code, but we shouldn't have "nose" anywhere in new stuff.

    12. rbext/main.py (Diff revision 2)
       
       
       
      Show all issues

      Can we use f-strings here?

    13. rbext/main.py (Diff revision 2)
       
       
      Show all issues

      rb-site -> rbext

    14.