Instead of asking gerrit to merge changes, have zuul perform the merges.
That gives us more control over how the merge is performed, letting us, for instance, use standard git merge strategies (which are better than gerrit's), or cherry-pick changes while enforcing dependencies.
* Zuul would need to enforce commit dependencies.
* Zuul would need to enforce gerrit review policies.
* Zuul would need to add the git review notes.
* Zuul would need to run on something other than the jenkins server because it would have a key that can push to gerrit.
This would let us have more control over the commit history, and we can make it look nicer.
This would also let us handle cross-repo-dependencies in zuul.
Alternately, we can have zuul submit cherry-pick patches while enforcing the dependency order itself. Though that doesn't get us the CRD benefit.
Here is a case not currently handled by Zuul's merger that will need to be dealt with: a change in gerrit with a parent commit that is not a change in gerrit. Example:
https:/ /review. openstack. org/#/c/ 39890/ (patchset 27).
This case needs to be detected and rejected by zuul as early as possible.