Avoid processing internal Gerrit refs When Gerrit internal refs are updated, the its-base plugin should not consider them as actionable because they do not necessarily point to any valid Git commit object. refs/starred-changes/ and refs/sequences/ are internal and thus they should always be ignored. Bug: Issue 11097 Change-Id: Ic5099d67b7bd7e757de8305c4a60ddbbbebf1b0d
diff --git a/src/main/java/com/googlesource/gerrit/plugins/its/base/its/ItsConfig.java b/src/main/java/com/googlesource/gerrit/plugins/its/base/its/ItsConfig.java index cd125b0..1b06cd6 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/its/base/its/ItsConfig.java +++ b/src/main/java/com/googlesource/gerrit/plugins/its/base/its/ItsConfig.java
@@ -21,6 +21,7 @@ import com.google.gerrit.extensions.api.projects.CommentLinkInfo; import com.google.gerrit.reviewdb.client.Project; import com.google.gerrit.reviewdb.client.Project.NameKey; +import com.google.gerrit.reviewdb.client.RefNames; import com.google.gerrit.server.config.GerritServerConfig; import com.google.gerrit.server.config.PluginConfig; import com.google.gerrit.server.config.PluginConfigFactory; @@ -102,6 +103,10 @@ } public boolean isEnabled(Project.NameKey projectNK, String refName) { + if (isInternalRef(refName)) { + return false; + } + ProjectState projectState = projectCache.get(projectNK); if (projectState == null) { log.error( @@ -123,6 +128,10 @@ && isEnabledForBranch(projectState, refName); } + private boolean isInternalRef(String refName) { + return RefNames.isNoteDbMetaRef(refName) || refName.startsWith(RefNames.REFS_SEQUENCES); + } + private boolean isEnforcedByAnyParentProject(String refName, ProjectState projectState) { for (ProjectState parentState : projectState.treeInOrder()) { PluginConfig parentCfg = pluginCfgFactory.getFromProjectConfig(parentState, pluginName);
diff --git a/src/test/java/com/googlesource/gerrit/plugins/its/base/its/ItsConfigTest.java b/src/test/java/com/googlesource/gerrit/plugins/its/base/its/ItsConfigTest.java index 6561d00..aafbf38 100644 --- a/src/test/java/com/googlesource/gerrit/plugins/its/base/its/ItsConfigTest.java +++ b/src/test/java/com/googlesource/gerrit/plugins/its/base/its/ItsConfigTest.java
@@ -20,6 +20,8 @@ import com.google.gerrit.extensions.annotations.PluginName; import com.google.gerrit.extensions.config.FactoryModule; import com.google.gerrit.reviewdb.client.Project; +import com.google.gerrit.reviewdb.client.Project.NameKey; +import com.google.gerrit.reviewdb.client.RefNames; import com.google.gerrit.server.config.GerritServerConfig; import com.google.gerrit.server.config.PluginConfig; import com.google.gerrit.server.config.PluginConfigFactory; @@ -386,6 +388,48 @@ assertTrue(itsConfig.isEnabled(event)); } + public void testIsDisabledForStarredChangesRefs() { + RefUpdatedEvent event = + new RefUpdatedEvent() { + @Override + public String getRefName() { + return RefNames.REFS_STARRED_CHANGES + "123"; + } + + @Override + public NameKey getProjectNameKey() { + return new Project.NameKey("foo"); + } + }; + + ItsConfig itsConfig = createItsConfig(); + + replayMocks(); + + assertFalse(itsConfig.isEnabled(event)); + } + + public void testIsDisabledForSequencesRefs() { + RefUpdatedEvent event = + new RefUpdatedEvent() { + @Override + public String getRefName() { + return RefNames.REFS_SEQUENCES + "changes"; + } + + @Override + public NameKey getProjectNameKey() { + return new Project.NameKey("foo"); + } + }; + + ItsConfig itsConfig = createItsConfig(); + + replayMocks(); + + assertFalse(itsConfig.isEnabled(event)); + } + public void BROKEN_testIsEnabledEventDisabled() { String[] branches = {"^refs/heads/testBranch"}; setupIsEnabled("false", null, branches);