• 
      

    Add the legacy bug tracker migration module.

    Review Request #15321 — Created Sept. 17, 2026 and updated

    Information

    Review Board
    release-9.x

    Reviewers

    This change adds a new module for converting legacy per-repository bug
    tracker state into the new configuration model. It classifies each
    repository (in-repo, standalone tracker service, or custom URL),
    extracts unprefixed settings, and creates ConfiguredBugTracker
    configurations scoped to the repositories that produced them.

    Identical standalone and custom configurations are deduplicated by
    fingerprint. These fingerprints never span Local Sites. Each created
    configuration records its fingerprint in extra_data, making the creation
    idempotent. In-repo configurations aren't deduplicated, because they're
    bound to individual repositories anyway.

    A repository's default bug tracker is only assigned when unset or when
    it was itself derived from legacy settings, so manual edits are never
    overwritten. The legacy fields are left untouched.

    Nothing calls this yet. The save-time sync, management command, and
    upgrade step follow in later changes.

    Ran unit tests.

    Summary ID
    Add the legacy bug tracker migration module.
    This change adds a new module for converting legacy per-repository bug tracker state into the new configuration model. It classifies each repository (in-repo, standalone tracker service, or custom URL), extracts unprefixed settings, and creates `ConfiguredBugTracker` configurations scoped to the repositories that produced them. Identical standalone and custom configurations are deduplicated by fingerprint. These fingerprints never span Local Sites. Each created configuration records its fingerprint in extra_data, making the creation idempotent. In-repo configurations aren't deduplicated, because they're bound to individual repositories anyway. A repository's default bug tracker is only assigned when unset or when it was itself derived from legacy settings, so manual edits are never overwritten. The legacy fields are left untouched. Nothing calls this yet. The save-time sync, management command, and upgrade step follow in later changes. Testing Done: Ran unit tests.
    ltmrkuxyuzowqlmlpsyyptprzpylonnk
    Checks run (2 succeeded)
    flake8 passed.
    JSHint passed.