As a final note on Gerrit workflows, it’s worth looking into Gerrit’s Prolog engine if you need a customized code approval process. Now, I know what you’re thinking – do you really need to learn Prolog to use Gerrit? Certainly not! You can use Gerrit out of the box very effectively. But if you need a highly tailored workflow, you can either write a Java plugin or write some rules in Prolog. The Prolog syntax is well suited for logical expressions, and you can check the Prolog rules in to a Gerrit repo as regular text files. That’s easier than writing, building, and maintaining a Java plugin.
So what can you do with Prolog? Two very useful things:
- Submit rules define when a change can be submitted. The default is to require one vote of the highest option from each rule category, with no lowest votes in any category. A common choice is to require a human ‘+2’ and a ‘+1’ from the CI system. Submit rules can be defined globally or per project. Submit rules are given a set of facts about a commit (author, message, and so on) and then decide whether the commit can be submitted.
- Submit types define how a change can be submitted, per project. You can choose from fast forward only, merge if necessary, merge always, cherry pick, or rebase if necessary.
There’s a great Gerrit Prolog workbook to get you started, and Gerrit provides a Prolog shell and debugging environment.
As a simple example, here’s a submit type that only allows fast-forward updates on release branches, but allows other submit types on other branches.
submit_type(T) :- gerrit:project_default_submit_type(T)
Hacking Prolog is not for the brand-new-to-Gerrit, but don’t be scared of it either. It gives you a tremendous amount of control over how changes flow into your repositories. If you store configuration data in Git and are subject to PCI regulations or other compliance measures, then a strong Gerrit workflow explicitly defined in Prolog will help satisfy your compliance concerns.
As always if you have any questions just ask. We have a team of Git experts waiting to help.