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);