a8n: allow campaign creation from locally computed diffs
Created by: sqs
Adds a new createCampaignPlanFromPatches
GraphQL API mutation that accepts a list of repository-branches and corresponding patches (which are expected to be computed by the caller). From this, a campaign plan is created. Previously, you could only create a campaign plan from a specification (such as of a Comby rewrite), which was simpler in many ways but less powerful. This new API lets you perform arbitrary mass changes across repositories, assuming you're able to compute the diffs locally.
(Proposed in this Slack thread.)