The owners-autoassign plugin allows to customize the selection of owners that need to be added to the attention-set. By default, Gerrit adds all reviewers to the attention-set, which could not be ideal when the list of owners automatically assigned could be quite long, due to the hierarchy of the OWNERS files in the parent directories.
The owners-api.jar libModule included in the owners' plugin project contains a generic interface that can be used to customize Gerrit's default attention-set behaviour.
Copy the owners-api.jar libModule into the $GERRIT_SITE/lib directory and add the following entry to gerrit.config:
[gerrit] installModule = com.googlesource.gerrit.owners.api.OwnersApiModule
The OwnersAttentionSet API, contained in the owners-api.jar libModule, provides the following interface:
public interface OwnersAttentionSet {
Collection<Account.Id> addToAttentionSet(ChangeInfo changeInfo, Collection<Account.Id> owners);
}
Any other plugin, or script, can implement the interface and provide an alternative implementation of the Gerrit's default mechanism.
Example: select two random owners and add to the attention set by adding the following script as $GERRIT_SITE/plugins/owners-attentionset-1.0.groovy.
import com.google.inject.*
import com.google.gerrit.common.*
import com.google.gerrit.entities.*
import com.google.gerrit.extensions.common.*
import com.google.gerrit.extensions.registration.*
import com.googlesource.gerrit.owners.api.*
import java.util.*
@Singleton
class MyAttentionSet implements OwnersAttentionSet {
def desiredAttentionSet = 3
Collection<Account.Id> addToAttentionSet(ChangeInfo changeInfo, Collection<Account.Id> owners) {
def currentAttentionSet = changeInfo.attentionSet.size()
// There is already the desired number of attention-set
if (currentAttentionSet >= desiredAttentionSet) {
return Collections.emptyList()
}
// All owners are within the attention-set limits
if (owners.size() <= desiredAttentionSet) {
return owners
}
// Select randomly some owners for the attention-set
def shuffledOwners = owners.asType(List)
Collections.shuffle shuffledOwners
return shuffledOwners.subList(0,desiredAttentionSet)
}
}
class MyAttentionSetModule extends AbstractModule {
protected void configure() {
DynamicItem.bind(binder(), OwnersAttentionSet.class)
.to(MyAttentionSet.class)
.in(Scopes.SINGLETON)
}
}
modules = [ MyAttentionSetModule.class ]
NOTE: Install the groovy-provider plugin for enabling Gerrit to load Groovy scripts as plugins.