Merge stable-3.2 into stable-3.3 * stable-3.2: Remove standalone build mode Upgrade bazlets to latest stable-3.2 to build with 3.2.5.1 API Upgrade bazlets to latest stable-3.1 to build with 3.1.10 API Bump Bazel version to 3.7.0 Upgrade bazlets to latest stable-3.0 to build with 3.0.13 API Bump Bazel version to 3.5.0 Change-Id: Ie48eaa92fe8fb57877e3da7aed24df0a4cc15fed
diff --git a/src/main/java/com/googlesource/gerrit/plugins/serviceuser/CreateServiceUser.java b/src/main/java/com/googlesource/gerrit/plugins/serviceuser/CreateServiceUser.java index 50fc6a0..13ff20c 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/serviceuser/CreateServiceUser.java +++ b/src/main/java/com/googlesource/gerrit/plugins/serviceuser/CreateServiceUser.java
@@ -78,12 +78,12 @@ } private final PluginConfig cfg; + private final Provider<ProjectLevelConfig.Bare> configProvider; private final CreateAccount createAccount; private final List<String> blockedNames; private final Provider<CurrentUser> userProvider; private final MetaDataUpdate.User metaDataUpdateFactory; private final Project.NameKey allProjects; - private final ProjectLevelConfig storage; private final DateFormat rfc2822DateFormatter; private final Provider<GetConfig> getConfig; private final AccountLoader.Factory accountLoader; @@ -91,6 +91,7 @@ @Inject CreateServiceUser( PluginConfigFactory cfgFactory, + Provider<ProjectLevelConfig.Bare> configProvider, @PluginName String pluginName, CreateAccount createAccount, Provider<CurrentUser> userProvider, @@ -100,6 +101,7 @@ Provider<GetConfig> getConfig, AccountLoader.Factory accountLoader) { this.cfg = cfgFactory.getFromGerritConfig(pluginName); + this.configProvider = configProvider; this.createAccount = createAccount; this.blockedNames = Lists.transform( @@ -112,7 +114,6 @@ }); this.userProvider = userProvider; this.metaDataUpdateFactory = metaDataUpdateFactory; - this.storage = projectCache.getAllProjects().getConfig(pluginName + ".db"); this.allProjects = projectCache.getAllProjects().getProject().getNameKey(); this.rfc2822DateFormatter = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss Z", Locale.US); this.rfc2822DateFormatter.setCalendar( @@ -178,16 +179,20 @@ Account.Id creatorId = ((IdentifiedUser) user).getAccountId(); String creationDate = rfc2822DateFormatter.format(new Date()); - Config db = storage.get(); - db.setInt(USER, username, KEY_CREATOR_ID, creatorId.get()); - if (creator != null) { - db.setString(USER, username, KEY_CREATED_BY, creator); - } - db.setString(USER, username, KEY_CREATED_AT, creationDate); + try (MetaDataUpdate md = metaDataUpdateFactory.create(allProjects)) { + ProjectLevelConfig.Bare update = configProvider.get(); + update.load(md); - MetaDataUpdate md = metaDataUpdateFactory.create(allProjects); - md.setMessage("Create service user '" + username + "'\n"); - storage.commit(md); + Config db = update.getConfig(); + db.setInt(USER, username, KEY_CREATOR_ID, creatorId.get()); + if (creator != null) { + db.setString(USER, username, KEY_CREATED_BY, creator); + } + db.setString(USER, username, KEY_CREATED_AT, creationDate); + + md.setMessage("Create service user '" + username + "'\n"); + update.commit(md); + } ServiceUserInfo info = new ServiceUserInfo(response); AccountLoader al = accountLoader.create(true); info.createdBy = al.get(creatorId);
diff --git a/src/main/java/com/googlesource/gerrit/plugins/serviceuser/CreateServiceUserNotes.java b/src/main/java/com/googlesource/gerrit/plugins/serviceuser/CreateServiceUserNotes.java index 93fc84c..d60203b 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/serviceuser/CreateServiceUserNotes.java +++ b/src/main/java/com/googlesource/gerrit/plugins/serviceuser/CreateServiceUserNotes.java
@@ -131,8 +131,9 @@ } } - private void markUninteresting(Repository git, String branch, RevWalk rw, ObjectId oldObjectId) { - for (Ref r : git.getAllRefs().values()) { + private void markUninteresting(Repository git, String branch, RevWalk rw, ObjectId oldObjectId) + throws IOException { + for (Ref r : git.getRefDatabase().getRefs()) { try { if (r.getName().equals(branch)) { if (!ObjectId.zeroId().equals(oldObjectId)) {
diff --git a/src/main/java/com/googlesource/gerrit/plugins/serviceuser/GetConfig.java b/src/main/java/com/googlesource/gerrit/plugins/serviceuser/GetConfig.java index f89f047..3cca663 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/serviceuser/GetConfig.java +++ b/src/main/java/com/googlesource/gerrit/plugins/serviceuser/GetConfig.java
@@ -95,7 +95,7 @@ return v ? v : null; } - public class ConfigInfo { + static class ConfigInfo { public String info; public String onSuccess; public Boolean allowEmail;
diff --git a/src/main/java/com/googlesource/gerrit/plugins/serviceuser/GetOwner.java b/src/main/java/com/googlesource/gerrit/plugins/serviceuser/GetOwner.java index 31c2eb6..74b97b2 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/serviceuser/GetOwner.java +++ b/src/main/java/com/googlesource/gerrit/plugins/serviceuser/GetOwner.java
@@ -17,7 +17,7 @@ import static com.googlesource.gerrit.plugins.serviceuser.CreateServiceUser.KEY_OWNER; import static com.googlesource.gerrit.plugins.serviceuser.CreateServiceUser.USER; -import com.google.gerrit.common.data.GroupDescription; +import com.google.gerrit.entities.GroupDescription; import com.google.gerrit.extensions.annotations.PluginName; import com.google.gerrit.extensions.common.GroupInfo; import com.google.gerrit.extensions.restapi.IdString;
diff --git a/src/main/java/com/googlesource/gerrit/plugins/serviceuser/Module.java b/src/main/java/com/googlesource/gerrit/plugins/serviceuser/Module.java index 56d14e1..9dc32a4 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/serviceuser/Module.java +++ b/src/main/java/com/googlesource/gerrit/plugins/serviceuser/Module.java
@@ -19,13 +19,16 @@ import static com.googlesource.gerrit.plugins.serviceuser.ServiceUserResource.SERVICE_USER_SSH_KEY_KIND; import com.google.gerrit.extensions.annotations.Exports; +import com.google.gerrit.extensions.annotations.PluginName; import com.google.gerrit.extensions.config.CapabilityDefinition; import com.google.gerrit.extensions.events.GitReferenceUpdatedListener; import com.google.gerrit.extensions.registration.DynamicMap; import com.google.gerrit.extensions.registration.DynamicSet; import com.google.gerrit.extensions.restapi.RestApiModule; import com.google.gerrit.server.git.validators.CommitValidationListener; +import com.google.gerrit.server.project.ProjectLevelConfig; import com.google.inject.AbstractModule; +import com.google.inject.Provides; import com.google.inject.assistedinject.FactoryModuleBuilder; class Module extends AbstractModule { @@ -72,4 +75,9 @@ }); install(new HttpModule()); } + + @Provides + ProjectLevelConfig.Bare createProjectLevelConfig(@PluginName String pluginName) { + return new ProjectLevelConfig.Bare(pluginName + ".db"); + } }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/serviceuser/PutOwner.java b/src/main/java/com/googlesource/gerrit/plugins/serviceuser/PutOwner.java index fd8bbbf..120c464 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/serviceuser/PutOwner.java +++ b/src/main/java/com/googlesource/gerrit/plugins/serviceuser/PutOwner.java
@@ -20,11 +20,10 @@ import static com.googlesource.gerrit.plugins.serviceuser.CreateServiceUser.USER; import com.google.common.base.Strings; -import com.google.gerrit.common.data.GroupDescription; import com.google.gerrit.entities.AccountGroup; import com.google.gerrit.entities.AccountGroup.UUID; +import com.google.gerrit.entities.GroupDescription; import com.google.gerrit.entities.Project; -import com.google.gerrit.extensions.annotations.PluginName; import com.google.gerrit.extensions.common.GroupInfo; import com.google.gerrit.extensions.restapi.DefaultInput; import com.google.gerrit.extensions.restapi.IdString; @@ -47,6 +46,7 @@ import com.google.inject.Singleton; import com.googlesource.gerrit.plugins.serviceuser.PutOwner.Input; import java.io.IOException; +import org.eclipse.jgit.errors.ConfigInvalidException; import org.eclipse.jgit.lib.Config; @Singleton @@ -57,8 +57,7 @@ private final Provider<GetConfig> getConfig; private final GroupsCollection groups; - private final String pluginName; - private final ProjectCache projectCache; + private final Provider<ProjectLevelConfig.Bare> configProvider; private final Project.NameKey allProjects; private final MetaDataUpdate.User metaDataUpdateFactory; private final GroupJson json; @@ -69,7 +68,7 @@ PutOwner( Provider<GetConfig> getConfig, GroupsCollection groups, - @PluginName String pluginName, + Provider<ProjectLevelConfig.Bare> configProvider, ProjectCache projectCache, MetaDataUpdate.User metaDataUpdateFactory, GroupJson json, @@ -77,8 +76,7 @@ PermissionBackend permissionBackend) { this.getConfig = getConfig; this.groups = groups; - this.pluginName = pluginName; - this.projectCache = projectCache; + this.configProvider = configProvider; this.allProjects = projectCache.getAllProjects().getProject().getNameKey(); this.metaDataUpdateFactory = metaDataUpdateFactory; this.json = json; @@ -89,7 +87,6 @@ @Override public Response<GroupInfo> apply(ServiceUserResource rsrc, Input input) throws RestApiException, IOException, PermissionBackendException { - ProjectLevelConfig storage = projectCache.getAllProjects().getConfig(pluginName + ".db"); Boolean ownerAllowed; try { ownerAllowed = getConfig.get().apply(new ConfigResource()).value().allowOwner; @@ -103,22 +100,32 @@ if (input == null) { input = new Input(); } - Config db = storage.get(); - String oldGroup = db.getString(USER, rsrc.getUser().getUserName().get(), KEY_OWNER); + GroupDescription.Basic group = null; - if (Strings.isNullOrEmpty(input.group)) { - db.unset(USER, rsrc.getUser().getUserName().get(), KEY_OWNER); - } else { - group = groups.parse(TopLevelResource.INSTANCE, IdString.fromDecoded(input.group)).getGroup(); - UUID groupUUID = group.getGroupUUID(); - if (!AccountGroup.uuid(groupUUID.get()).isInternalGroup()) { - throw new MethodNotAllowedException("Group with UUID '" + groupUUID + "' is external"); + String oldGroup; + try (MetaDataUpdate md = metaDataUpdateFactory.create(allProjects)) { + ProjectLevelConfig.Bare update = configProvider.get(); + update.load(md); + + Config db = update.getConfig(); + oldGroup = db.getString(USER, rsrc.getUser().getUserName().get(), KEY_OWNER); + if (Strings.isNullOrEmpty(input.group)) { + db.unset(USER, rsrc.getUser().getUserName().get(), KEY_OWNER); + } else { + group = + groups.parse(TopLevelResource.INSTANCE, IdString.fromDecoded(input.group)).getGroup(); + UUID groupUUID = group.getGroupUUID(); + if (!AccountGroup.uuid(groupUUID.get()).isInternalGroup()) { + throw new MethodNotAllowedException("Group with UUID '" + groupUUID + "' is external"); + } + db.setString(USER, rsrc.getUser().getUserName().get(), KEY_OWNER, groupUUID.get()); } - db.setString(USER, rsrc.getUser().getUserName().get(), KEY_OWNER, groupUUID.get()); + md.setMessage("Set owner for service user '" + rsrc.getUser().getUserName() + "'\n"); + update.commit(md); + } catch (ConfigInvalidException e) { + throw asRestApiException("Invalid configuration", e); } - MetaDataUpdate md = metaDataUpdateFactory.create(allProjects); - md.setMessage("Set owner for service user '" + rsrc.getUser().getUserName() + "'\n"); - storage.commit(md); + return group != null ? (oldGroup != null ? Response.ok(json.format(group))
diff --git a/src/main/java/com/googlesource/gerrit/plugins/serviceuser/RefUpdateListener.java b/src/main/java/com/googlesource/gerrit/plugins/serviceuser/RefUpdateListener.java index 31d1a56..fef0bc7 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/serviceuser/RefUpdateListener.java +++ b/src/main/java/com/googlesource/gerrit/plugins/serviceuser/RefUpdateListener.java
@@ -26,6 +26,8 @@ import com.google.inject.Inject; import com.google.inject.Singleton; import java.io.IOException; +import java.util.concurrent.Future; + import org.eclipse.jgit.lib.ObjectId; import org.eclipse.jgit.lib.Repository; import org.slf4j.Logger; @@ -90,7 +92,8 @@ } }; if (cfg.getBoolean("createNotesAsync", false)) { - workQueue.getDefaultQueue().submit(task); + @SuppressWarnings("unused") + Future<?> possiblyIgnoredError = workQueue.getDefaultQueue().submit(task); } else { task.run(); }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/serviceuser/ServiceUserCollection.java b/src/main/java/com/googlesource/gerrit/plugins/serviceuser/ServiceUserCollection.java index bce9e37..c5e5d9a 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/serviceuser/ServiceUserCollection.java +++ b/src/main/java/com/googlesource/gerrit/plugins/serviceuser/ServiceUserCollection.java
@@ -19,8 +19,8 @@ import static com.googlesource.gerrit.plugins.serviceuser.CreateServiceUser.KEY_OWNER; import static com.googlesource.gerrit.plugins.serviceuser.CreateServiceUser.USER; -import com.google.gerrit.common.data.GroupDescription; import com.google.gerrit.entities.Account; +import com.google.gerrit.entities.GroupDescription; import com.google.gerrit.extensions.annotations.PluginName; import com.google.gerrit.extensions.registration.DynamicMap; import com.google.gerrit.extensions.restapi.AuthException;
diff --git a/src/main/java/com/googlesource/gerrit/plugins/serviceuser/ServiceUserResolver.java b/src/main/java/com/googlesource/gerrit/plugins/serviceuser/ServiceUserResolver.java index 65ac232..0c46e26 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/serviceuser/ServiceUserResolver.java +++ b/src/main/java/com/googlesource/gerrit/plugins/serviceuser/ServiceUserResolver.java
@@ -16,9 +16,9 @@ import static com.google.gerrit.server.api.ApiUtil.asRestApiException; -import com.google.gerrit.common.data.GroupDescription; import com.google.gerrit.entities.Account; import com.google.gerrit.entities.AccountGroup; +import com.google.gerrit.entities.GroupDescription; import com.google.gerrit.extensions.common.AccountInfo; import com.google.gerrit.extensions.restapi.ResourceNotFoundException; import com.google.gerrit.extensions.restapi.RestApiException;