Proto CachedPreferences: use PreferencesParserUtil wrappers for parsing
PreferencesParserUtil is adding some data for legacy preferences, for
example in `parseMyMenus`. Prior to this change, proto preferences were
not
wrapped with the same methods, leading to incompatibility.
Release-Notes: skip
Google-Bug-Id: b/353555340
Change-Id: I7b5eeb16cdaf0d920e814831d471e4eaa14e8149
diff --git a/java/com/google/gerrit/server/config/CachedPreferences.java b/java/com/google/gerrit/server/config/CachedPreferences.java
index 6e957e6..309d1fd 100644
--- a/java/com/google/gerrit/server/config/CachedPreferences.java
+++ b/java/com/google/gerrit/server/config/CachedPreferences.java
@@ -47,6 +47,7 @@
public Optional<CachedPreferencesProto> nonEmptyConfig() {
return config().equals(EMPTY.config()) ? Optional.empty() : Optional.of(config());
}
+
/** Returns a cache-able representation of the preferences proto. */
public static CachedPreferences fromUserPreferencesProto(UserPreferences proto) {
return fromCachedPreferencesProto(
@@ -126,7 +127,8 @@
switch (userPreferencesProto.getPreferencesCase()) {
case USER_PREFERENCES:
PreferencesT pref =
- preferencesParser.fromUserPreferences(userPreferencesProto.getUserPreferences());
+ preferencesParser.fromUserPreferences(
+ userPreferencesProto.getUserPreferences(), configOrNull(defaultPreferences));
return preferencesParser.parse(pref, configOrNull(defaultPreferences));
case LEGACY_GIT_CONFIG:
return preferencesParser.parse(
diff --git a/java/com/google/gerrit/server/config/PreferencesParserUtil.java b/java/com/google/gerrit/server/config/PreferencesParserUtil.java
index ecb0868..9249b3c 100644
--- a/java/com/google/gerrit/server/config/PreferencesParserUtil.java
+++ b/java/com/google/gerrit/server/config/PreferencesParserUtil.java
@@ -320,13 +320,14 @@
}
/** Provides methods for parsing user configs */
- public interface PreferencesParser<T> {
+ interface PreferencesParser<T> {
T parse(Config cfg, @Nullable Config defaultConfig, @Nullable T input)
throws ConfigInvalidException;
T parse(T cfg, @Nullable Config defaultConfig) throws ConfigInvalidException;
- T fromUserPreferences(UserPreferences userPreferences);
+ T fromUserPreferences(UserPreferences userPreferences, @Nullable Config defaultCfg)
+ throws ConfigInvalidException;
T getJavaDefaults();
}
@@ -352,8 +353,10 @@
}
@Override
- public GeneralPreferencesInfo fromUserPreferences(UserPreferences p) {
- return GENERAL_PREFERENCES_INFO_CONVERTER.fromProto(p.getGeneralPreferencesInfo());
+ public GeneralPreferencesInfo fromUserPreferences(
+ UserPreferences p, @Nullable Config defaultCfg) throws ConfigInvalidException {
+ return PreferencesParserUtil.parseGeneralPreferences(
+ GENERAL_PREFERENCES_INFO_CONVERTER.fromProto(p.getGeneralPreferencesInfo()), defaultCfg);
}
@Override
@@ -382,8 +385,10 @@
}
@Override
- public EditPreferencesInfo fromUserPreferences(UserPreferences p) {
- return EDIT_PREFERENCES_INFO_CONVERTER.fromProto(p.getEditPreferencesInfo());
+ public EditPreferencesInfo fromUserPreferences(UserPreferences p, @Nullable Config defaultCfg)
+ throws ConfigInvalidException {
+ return PreferencesParserUtil.parseEditPreferences(
+ EDIT_PREFERENCES_INFO_CONVERTER.fromProto(p.getEditPreferencesInfo()), defaultCfg);
}
@Override
@@ -412,8 +417,10 @@
}
@Override
- public DiffPreferencesInfo fromUserPreferences(UserPreferences p) {
- return DIFF_PREFERENCES_INFO_CONVERTER.fromProto(p.getDiffPreferencesInfo());
+ public DiffPreferencesInfo fromUserPreferences(UserPreferences p, @Nullable Config defaultCfg)
+ throws ConfigInvalidException {
+ return PreferencesParserUtil.parseDiffPreferences(
+ DIFF_PREFERENCES_INFO_CONVERTER.fromProto(p.getDiffPreferencesInfo()), defaultCfg);
}
@Override
diff --git a/javatests/com/google/gerrit/server/config/CachedPreferencesTest.java b/javatests/com/google/gerrit/server/config/CachedPreferencesTest.java
index b149d09..131fb23 100644
--- a/javatests/com/google/gerrit/server/config/CachedPreferencesTest.java
+++ b/javatests/com/google/gerrit/server/config/CachedPreferencesTest.java
@@ -151,6 +151,58 @@
}
@Test
+ public void bothPreferencesTypes_getGeneralPreferencesAreEqual() throws Exception {
+ UserPreferences originalProto =
+ UserPreferences.newBuilder()
+ .setGeneralPreferencesInfo(
+ UserPreferences.GeneralPreferencesInfo.newBuilder().setChangesPerPage(19))
+ .build();
+ Config originalCfg = new Config();
+ originalCfg.fromText("[general]\n\tchangesPerPage = 19");
+
+ CachedPreferences protoPref = CachedPreferences.fromUserPreferencesProto(originalProto);
+ GeneralPreferencesInfo protoGeneral = CachedPreferences.general(Optional.empty(), protoPref);
+ CachedPreferences cfgPref = CachedPreferences.fromLegacyConfig(originalCfg);
+ GeneralPreferencesInfo cfgGeneral = CachedPreferences.general(Optional.empty(), cfgPref);
+
+ assertThat(protoGeneral).isEqualTo(cfgGeneral);
+ }
+
+ @Test
+ public void bothPreferencesTypes_getDiffPreferencesAreEqual() throws Exception {
+ UserPreferences originalProto =
+ UserPreferences.newBuilder()
+ .setDiffPreferencesInfo(UserPreferences.DiffPreferencesInfo.newBuilder().setContext(23))
+ .build();
+ Config originalCfg = new Config();
+ originalCfg.fromText("[diff]\n\tcontext = 23");
+
+ CachedPreferences protoPref = CachedPreferences.fromUserPreferencesProto(originalProto);
+ DiffPreferencesInfo protoDiff = CachedPreferences.diff(Optional.empty(), protoPref);
+ CachedPreferences cfgPref = CachedPreferences.fromLegacyConfig(originalCfg);
+ DiffPreferencesInfo cfgDiff = CachedPreferences.diff(Optional.empty(), cfgPref);
+
+ assertThat(protoDiff).isEqualTo(cfgDiff);
+ }
+
+ @Test
+ public void bothPreferencesTypes_getEditPreferencesAreEqual() throws Exception {
+ UserPreferences originalProto =
+ UserPreferences.newBuilder()
+ .setEditPreferencesInfo(UserPreferences.EditPreferencesInfo.newBuilder().setTabSize(27))
+ .build();
+ Config originalCfg = new Config();
+ originalCfg.fromText("[edit]\n\ttabSize = 27");
+
+ CachedPreferences protoPref = CachedPreferences.fromUserPreferencesProto(originalProto);
+ EditPreferencesInfo protoEdit = CachedPreferences.edit(Optional.empty(), protoPref);
+ CachedPreferences cfgPref = CachedPreferences.fromLegacyConfig(originalCfg);
+ EditPreferencesInfo cfgEdit = CachedPreferences.edit(Optional.empty(), cfgPref);
+
+ assertThat(protoEdit).isEqualTo(cfgEdit);
+ }
+
+ @Test
public void defaultPreferences_acceptingGitConfig() throws Exception {
Config cfg = new Config();
cfg.fromText("[general]\n\tchangesPerPage = 19");