Bridging the gap between Launchpad and Github


Ever the diplomat, I've been trying to figure out a way to use Launchpad yet keeping the people that dislike it happy.

It is based on two premises. If you disagree with them, you may as well stop reading now. (or, even better: tell me why)
  • Launchpad's bug tracker is preferable, or at least equal, to Github Issues.
  • Launchpad's merge proposals are identical to Github Pull Request 2.0's, with the exception of bug tracker integration.
First of all, the project uses Launchpad as a bug tracker, and Launchpad merge proposals as the mandatory code review for getting code into trunk. Launchpad trunk is constantly mirrored into a Github repository.

Launchpad users that want to develop the project pretend Github doesn't exist.

Github users that want to develop the project pretend Launchpad doesn't exist. They just fork the repository and make some changes, as they normally would. Once they want to get some code into trunk, they file a pull request, which is where the magic starts.

A bot creates an alternative merge proposal equivalent to the pull request. There are two options for doing that:
  • Grabbing the pull request diff
  • Using bzr-git to import the branch into git
(The latter is preferable because it preserves commit structure. The former is probably easier to implement and less hairy to implement/maintain due to impedance mismatches.)

Either way, a new branch is created with the same name as the Github branch. Ideally, the merge proposal is linked to the appropriate bug. That means the branch should contain information about the bug it relates to (possibly in the name, eg 54321-fixQuantumTransmogrifier), since, as far as I know, git has no equivalent to bzr commit's --fixes. The pull request gets a link to the merge proposal. All review-related work happens in Launchpad, not Github. Based on the second premise, this is acceptable.

The obvious problem here is that Github users can't really monitor what's going on in terms of development in Launchpadland and vice-versa. A solution may be to push more branches, but I dislike doing that. Perhaps using their respective APIs, the data can be syndicated into a common source. Ideas welcome.