Rewrite the Bazaar support to use the command line tool.
Review Request #720 - Created June 20, 2017 and updated
Our support for Bazaar, a third-party contribution, has depended on their Python API. This change rewrites the module, modernizing it and updating it to use the command line bzr tool instead. This keeps us license-compliant and improves maintainability. The one tricky part about Bazaar compatibility is that in order to use a custom SSH program (rbssh in our case), we have to register it using the Python API. To solve this, the rbssh support has been moved to a Bazaar plugin, which is loaded by bzr on launch. Review Board sets environment variables to tell bzr when it can find this. The plugin lives in the Review Board source tree, but isn't part of the product, and instead acts as its own top-level module living in the `bzrlib.plugins` namespace (a requirement for Bazaar plugins). Some other parts, like the revision handling, have been improved to be more versatile, allowing for additional revision specifiers. The rbssh support has also been simplified some, making use of the existing `RB_LOCAL_SITE` environment variable instead of having to define custom URLs with the Local Site name. Additional unit tests have been written to more thoroughly test Bazaar functionality. Testing Done: Unit tests pass. Tested unit tests without the `bzr` tool installed. Tested functionality with a Bazaar repository. Bugs closed: 4535 Reviewed at https://reviews.reviewboard.org/r/8835/