This post originally ran on Sean Dague’s blog “Sean’s Mental Walkabout”. Sean has been an Open Source developer for most of his professional life. He’s part of the HP OpenStack team working to make OpenStack better. He’s a core reviewer on Nova, Tempest, Devstack, Grenade, and lots of smaller projects within OpenStack, and is serving on the OpenStack Technical Committee. You should follow him on Twitter.
Gerrit got a very nice upgrade recently which brings in a whole new host of features that are really interesting. Here are some of the things you should know to make use of these new features. You might want to read up on the basics of gerrit searches here: Gerrit queries to avoid review overload, before getting started.
Labels
Gone are the days of -CodeReview-1, we now have a more generic mechanism called labels. Labels are a lot more powerful because they can specify both ranges as well as specific users!
For instance, to select everything without negative code reviews:
status:open NOT label:Code-Review<=-1
Because we now have operators, we can select for a range of values, so any negative (-1, -2, or any high negative value should it get implemented in the future) matches. Also negation is done with the ‘NOT’ keyword, and notable that CodeReview becomes label:Code-Review in the new system.
Labels exist for all three columns. Verified is what CI bots vote in, and Workflow is a combination of the Work in Progress (Workflow=-1) and Approved (Workflow=1) states that we used to have.
Labels With Users
Labels get really power when you start adding users to them. Now that we have a ton of CI bots voting, with regular issues in their systems, you might want to filter out by changes that Jenkins currently has a positive vote on.
status:open label:Verified>=1,jenkins
This means that changes which do not yet have a Jenkins +1 or +2 won’t be shown in your list. Hiding patches which are currently blocked by Jenkins or it hasn’t reported on yet. If you want to see not yet voted changes, you could change that to >=0.
Labels With Self
This is where we get really fun. There is a special user, self, which means your logged in id.
status:open NOT label:Code-Review>=0,self label:Verified>=1,jenkins NOT label:Code-Review<=-1
This is a list of all changes that ‘you have not yet commented on’, that don’t have negative code reviews, and that Jenkins has passing results. That means this query becomes a todo list, because as you comment on changes, positive, negative, or otherwise, they drop out of this query.
If you also drop all the work in progress patches:
status:open NOT label:Code-Review>=0,self label:Verified>=1,jenkins NOT label:Code-Review<=-1
NOT label:Workflow<=-1
then I consider this a basic “Inbox zero” review query. You can apply this to specific projects with “project:openstack/nova”, for instance. Out of this basic chunk I’ve built a bunch of local links to work through reviews.
File Matching
With this version of gerrit we get a thing called secondary indexes, which means we get some more interesting searching capabilities. which basically means we also have a search engine for certain other types of queries. This includes matching changes against files.
status:open file:^.*/db/.*/versions/.* project:^openstack.*
is a query that looks at all the outstanding changes in OpenStack that change a database migration. It’s currently showing glance, heat, nova, neutron, trove, and storyboard changes.
Very helpful if as a reviewer you want to keep an eye on a cross section of changes regardless of project.
Learning more
There are also plenty of other new parts of this query language. You can learn all the details in the gerrit documentation.
We’re also going to work at making some of these “inbox zero” queries available in the gerrit review system as a custom dashboard, making it easy to use it on any project in the system without building local bookmarks to queries.
Happy reviewing!
__
Image credit: Sean Dague
- Splitting up Git Commits - August 6, 2014
- Helpful Gerrit Queries (Gerrit 2.8 Edition) - May 10, 2014