Configure the set of refs prefixes to be ignored by the global-refdb
Introduce the ref-database.ignoredRefsPrefixes to disable the
global-refdb tracking and validation of a set of refs.
Example of configuration for ignoring the user's sandbox branches
and the refs created by the ref-protection plugin:
[global-refdb]
ignoreRefsPrefixes = refs/sandbox
ignoreRefsPrefixes = refs/backups
Change-Id: I0de509851359b712bae7cc197fca2e05f7554822
diff --git a/src/main/java/com/gerritforge/gerrit/globalrefdb/validation/RefUpdateValidator.java b/src/main/java/com/gerritforge/gerrit/globalrefdb/validation/RefUpdateValidator.java
index 7fa5645..5972ad3 100644
--- a/src/main/java/com/gerritforge/gerrit/globalrefdb/validation/RefUpdateValidator.java
+++ b/src/main/java/com/gerritforge/gerrit/globalrefdb/validation/RefUpdateValidator.java
@@ -158,8 +158,9 @@
}
private Boolean isRefToBeIgnored(String refName) {
- Boolean isRefToBeIgnored = ignoredRefs.contains(refName);
- logger.atFine().log("Is project version update? " + isRefToBeIgnored);
+ Boolean isRefToBeIgnored =
+ ignoredRefs.stream().anyMatch(ignoredRefPrefix -> refName.startsWith(ignoredRefPrefix));
+ logger.atFine().log("Is ref to be ignored? " + isRefToBeIgnored);
return isRefToBeIgnored;
}
diff --git a/src/main/java/com/gerritforge/gerrit/globalrefdb/validation/SharedRefDbConfiguration.java b/src/main/java/com/gerritforge/gerrit/globalrefdb/validation/SharedRefDbConfiguration.java
index a607cdc..986175a 100644
--- a/src/main/java/com/gerritforge/gerrit/globalrefdb/validation/SharedRefDbConfiguration.java
+++ b/src/main/java/com/gerritforge/gerrit/globalrefdb/validation/SharedRefDbConfiguration.java
@@ -21,6 +21,7 @@
import com.gerritforge.gerrit.globalrefdb.validation.dfsrefdb.SharedRefEnforcement.EnforcePolicy;
import com.google.common.base.Supplier;
import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Multimap;
import com.google.common.collect.MultimapBuilder;
import java.io.IOException;
@@ -102,9 +103,11 @@
public static final String SECTION = "ref-database";
public static final String ENABLE_KEY = "enabled";
public static final String SUBSECTION_ENFORCEMENT_RULES = "enforcementRules";
+ public static final String IGNORED_REFS_PREFIXES = "ignoredRefsPrefixes";
private final boolean enabled;
private final Multimap<EnforcePolicy, String> enforcementRules;
+ private final ImmutableSet<String> ignoredRefsPrefixes;
private SharedRefDatabase(Supplier<Config> cfg) {
enabled = getBoolean(cfg, SECTION, null, ENABLE_KEY, false);
@@ -113,6 +116,8 @@
enforcementRules.putAll(
policy, getList(cfg, SECTION, SUBSECTION_ENFORCEMENT_RULES, policy.name()));
}
+
+ ignoredRefsPrefixes = ImmutableSet.copyOf(getList(cfg, SECTION, null, IGNORED_REFS_PREFIXES));
}
/**
@@ -146,6 +151,16 @@
return enforcementRules;
}
+ /**
+ * Returns the set of refs prefixes that are ignored during the validation and enforcement of
+ * the global refdb.
+ *
+ * @return Set of ignored prefixes of ignored refs
+ */
+ public ImmutableSet<String> getIgnoredRefsPrefixes() {
+ return ignoredRefsPrefixes;
+ }
+
private List<String> getList(
Supplier<Config> cfg, String section, String subsection, String name) {
return ImmutableList.copyOf(cfg.get().getStringList(section, subsection, name));