• 
      

    Add support for custom SCMTool-provided repository configuration forms.

    Review Request #10809 — Created Dec. 4, 2019 and submitted — Latest diff uploaded

    Information

    Review Board
    release-3.0.x
    7adc340...

    Reviewers

    For a long time now, hosting services have had the ability to provide
    custom authentication and repository information forms for the
    repository configuration page, allowing them to gather information
    needed to authenticate with hosting services, locate organization
    details, project IDs, or anything else they needed.

    Plain repositories (those not backed by a hosting service) were stuck
    with a standard repository form containing Path, Mirror Path, Raw File
    URL, Username, and Password fields. SCMTools could show or hide some of
    these fields through flags, but otherwise had very little control.

    This isn't good enough going forward, as we've finally found a need for
    some custom UI for an in-progress SCMTool. Rather than bolt the field
    onto the main form and control it through another flag (which we did
    with Perforce's Ticket Auth and Git's Raw File URL fields in the past),
    it's time to give SCMTools the same level of control that hosting
    services have enjoyed.

    This change moves all support for those fields into a couple of new
    subforms, one for authentication and one for repository details.
    SCMTools by default use the standard form fields we've used in the past,
    but can provide a custom form by setting SCMTool.auth_form and
    SCMTool.repository_form to subclasses of BaseSCMToolAuthForm and
    BaseSCMToolRepositoryForm (or the "Standard" subclasses of each).
    These can augment or replace the existing fields entirely.

    Since this is late in the life of Review Board 3.0.x, we're not going to
    deprecate any old functionality. However, the plan is for 4.0 to
    deprecate a handful of flags on SCMTool, including field_help_text,
    supports_raw_file_urls, and supports_ticket_auth, and require moving
    to form subclasses to collect this information.

    Unit tests passed.

    Tested creating and configuring repositories of various types, using both
    plain repositories and hosting services.