Implement isOptionEnabled for project + branch level Google-bug-id: b/369431612 Release-Notes: skip Change-Id: I2e99bb13235e6be6003504b135f4dba4d25b07fc
diff --git a/java/com/google/gerrit/plugins/codeowners/validation/SkipCodeOwnerConfigValidationPushOption.java b/java/com/google/gerrit/plugins/codeowners/validation/SkipCodeOwnerConfigValidationPushOption.java index 316da14..049cf11 100644 --- a/java/com/google/gerrit/plugins/codeowners/validation/SkipCodeOwnerConfigValidationPushOption.java +++ b/java/com/google/gerrit/plugins/codeowners/validation/SkipCodeOwnerConfigValidationPushOption.java
@@ -18,6 +18,8 @@ import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableListMultimap; +import com.google.gerrit.entities.BranchNameKey; +import com.google.gerrit.entities.Project; import com.google.gerrit.extensions.annotations.PluginName; import com.google.gerrit.extensions.restapi.AuthException; import com.google.gerrit.plugins.codeowners.backend.ChangedFiles; @@ -79,6 +81,14 @@ && hasModifiedCodeOwnerConfigFiles(changeNotes); } + // TODO: Extend check to contain hasModifiedCodeOwnerConfigFiles as well + // Callers would need to specify the list of files for that. + @Override + public boolean isOptionEnabled(Project.NameKey project, BranchNameKey branch) { + return !codeOwnersPluginConfiguration.getProjectConfig(project).isDisabled(branch.branch()) + && canSkipCodeOwnerConfigValidation(); + } + private boolean hasModifiedCodeOwnerConfigFiles(ChangeNotes changeNotes) { CodeOwnerBackend codeOwnerBackend = codeOwnersPluginConfiguration
diff --git a/javatests/com/google/gerrit/plugins/codeowners/acceptance/api/SkipCodeOwnerConfigValidationPushOptionIT.java b/javatests/com/google/gerrit/plugins/codeowners/acceptance/api/SkipCodeOwnerConfigValidationPushOptionIT.java index dd2cf9d..8b2c6bf 100644 --- a/javatests/com/google/gerrit/plugins/codeowners/acceptance/api/SkipCodeOwnerConfigValidationPushOptionIT.java +++ b/javatests/com/google/gerrit/plugins/codeowners/acceptance/api/SkipCodeOwnerConfigValidationPushOptionIT.java
@@ -73,12 +73,21 @@ Change.Id changeId = createChangeWithCodeOwnerConfigFile(project); ValidationOptionInfos validationOptionsInfos = gApi.changes().id(project.get(), changeId.get()).getValidationOptions(); + ValidationOptionInfos branchValidationOptionInfos = + gApi.projects().name(project.get()).branch("refs/heads/master").getValidationOptions(); assertThat(validationOptionsInfos.validationOptions) .isEqualTo( ImmutableList.of( new ValidationOptionInfo( "code-owners~" + SkipCodeOwnerConfigValidationPushOption.NAME, SkipCodeOwnerConfigValidationPushOption.DESCRIPTION))); + + assertThat(branchValidationOptionInfos.validationOptions) + .isEqualTo( + ImmutableList.of( + new ValidationOptionInfo( + "code-owners~" + SkipCodeOwnerConfigValidationPushOption.NAME, + SkipCodeOwnerConfigValidationPushOption.DESCRIPTION))); } @Test @@ -95,12 +104,21 @@ Change.Id changeId = createChangeWithCodeOwnerConfigFile(project); ValidationOptionInfos validationOptionsInfos = gApi.changes().id(project.get(), changeId.get()).getValidationOptions(); + ValidationOptionInfos branchValidationOptionInfos = + gApi.projects().name(project.get()).branch("refs/heads/master").getValidationOptions(); assertThat(validationOptionsInfos.validationOptions) .isEqualTo( ImmutableList.of( new ValidationOptionInfo( "code-owners~" + SkipCodeOwnerConfigValidationPushOption.NAME, SkipCodeOwnerConfigValidationPushOption.DESCRIPTION))); + + assertThat(branchValidationOptionInfos.validationOptions) + .isEqualTo( + ImmutableList.of( + new ValidationOptionInfo( + "code-owners~" + SkipCodeOwnerConfigValidationPushOption.NAME, + SkipCodeOwnerConfigValidationPushOption.DESCRIPTION))); } @Test @@ -113,7 +131,10 @@ Change.Id changeId = createChangeWithCodeOwnerConfigFile(project); ValidationOptionInfos validationOptionsInfos = gApi.changes().id(project.get(), changeId.get()).getValidationOptions(); + ValidationOptionInfos branchValidationOptionInfos = + gApi.projects().name(project.get()).branch("refs/heads/master").getValidationOptions(); assertThat(validationOptionsInfos.validationOptions).isEmpty(); + assertThat(branchValidationOptionInfos.validationOptions).isEmpty(); } @GerritConfig(name = "plugin.code-owners.disabled", value = "true") @@ -123,7 +144,10 @@ Change.Id changeId = createChangeWithCodeOwnerConfigFile(project); ValidationOptionInfos validationOptionsInfos = gApi.changes().id(project.get(), changeId.get()).getValidationOptions(); + ValidationOptionInfos branchValidationOptionInfos = + gApi.projects().name(project.get()).branch("refs/heads/master").getValidationOptions(); assertThat(validationOptionsInfos.validationOptions).isEmpty(); + assertThat(branchValidationOptionInfos.validationOptions).isEmpty(); } @GerritConfig(name = "plugin.code-owners.disabledBranch", value = "refs/heads/master") @@ -133,7 +157,10 @@ Change.Id changeId = createChangeWithCodeOwnerConfigFile(project, "master"); ValidationOptionInfos validationOptionsInfos = gApi.changes().id(project.get(), changeId.get()).getValidationOptions(); + ValidationOptionInfos branchValidationOptionInfos = + gApi.projects().name(project.get()).branch("refs/heads/master").getValidationOptions(); assertThat(validationOptionsInfos.validationOptions).isEmpty(); + assertThat(branchValidationOptionInfos.validationOptions).isEmpty(); } @Test @@ -142,7 +169,15 @@ Change.Id changeId = changeOperations.newChange().project(project).create(); ValidationOptionInfos validationOptionsInfos = gApi.changes().id(project.get(), changeId.get()).getValidationOptions(); + ValidationOptionInfos branchValidationOptionInfos = + gApi.projects().name(project.get()).branch("refs/heads/master").getValidationOptions(); assertThat(validationOptionsInfos.validationOptions).isEmpty(); + assertThat(branchValidationOptionInfos.validationOptions) + .isEqualTo( + ImmutableList.of( + new ValidationOptionInfo( + "code-owners~" + SkipCodeOwnerConfigValidationPushOption.NAME, + SkipCodeOwnerConfigValidationPushOption.DESCRIPTION))); } private Change.Id createChangeWithCodeOwnerConfigFile(Project.NameKey project) throws Exception {