Merge branch 'stable-2.15' * stable-2.15: pom: Fix plugin name to be all lowercase Change-Id: I54c52b9371959bf98c06a2eef430067ef34f232c
diff --git a/.bazelversion b/.bazelversion index 9084fa2..fd2a018 100644 --- a/.bazelversion +++ b/.bazelversion
@@ -1 +1 @@ -1.1.0 +3.1.0
diff --git a/.gitignore b/.gitignore index 8c58b98..ec6ea01 100644 --- a/.gitignore +++ b/.gitignore
@@ -10,3 +10,4 @@ /buck-cache /buck-out *.iml +/.apt_generated/
diff --git a/BUILD b/BUILD index 82c5dfb..9acc76b 100644 --- a/BUILD +++ b/BUILD
@@ -5,7 +5,7 @@ srcs = glob(["src/main/java/**/*.java"]), manifest_entries = [ "Gerrit-PluginName: batch", - "Gerrit-ApiVersion: 2.15", + "Gerrit-ApiVersion: 2.16", "Implementation-Title: Batch Plugin", "Implementation-URL: https://gerrit-review.googlesource.com/#/admin/projects/plugins/batch", "Gerrit-Module: com.googlesource.gerrit.plugins.batch.Module",
diff --git a/WORKSPACE b/WORKSPACE index 4f05d1e..4890441 100644 --- a/WORKSPACE +++ b/WORKSPACE
@@ -3,7 +3,7 @@ load("//:bazlets.bzl", "load_bazlets") load_bazlets( - commit = "f53f51fb660552d0581aa0ba52c3836ed63d56a3", + commit = "22b242638bd36017790d94ffcc18a57f223bda2f", #local_path = "/home/<user>/projects/bazlets", )
diff --git a/pom.xml b/pom.xml index dfd207a..ae82977 100644 --- a/pom.xml +++ b/pom.xml
@@ -22,7 +22,7 @@ <groupId>com.googlesource.gerrit.plugins.batch</groupId> <artifactId>batch</artifactId> <packaging>jar</packaging> - <version>2.15.7</version> + <version>2.16.11.1</version> <name>batch</name> <properties>
diff --git a/src/main/java/com/google/gerrit/server/git/meta/GitFile.java b/src/main/java/com/google/gerrit/server/git/meta/GitFile.java index beca5b3..ce9505e 100644 --- a/src/main/java/com/google/gerrit/server/git/meta/GitFile.java +++ b/src/main/java/com/google/gerrit/server/git/meta/GitFile.java
@@ -18,8 +18,6 @@ import com.google.gerrit.reviewdb.client.File; import com.google.gerrit.reviewdb.client.Project; import com.google.gerrit.server.git.GitRepositoryManager; -import com.google.gerrit.server.git.MetaDataUpdate; -import com.google.gerrit.server.git.VersionedMetaData; import com.google.gerrit.server.project.NoSuchProjectException; import com.google.inject.Inject; import com.google.inject.assistedinject.Assisted; @@ -58,7 +56,7 @@ public String read() throws ConfigInvalidException, IOException, NoSuchProjectException { Project.NameKey project = branch.getParentKey(); try (Repository repo = repos.openRepository(project)) { - load(repo); + load(project, repo); return text; } catch (RepositoryNotFoundException e) { throw new NoSuchProjectException(project);
diff --git a/src/main/java/com/google/gerrit/server/util/RefUpdater.java b/src/main/java/com/google/gerrit/server/util/RefUpdater.java index c2c700d..818d857 100644 --- a/src/main/java/com/google/gerrit/server/util/RefUpdater.java +++ b/src/main/java/com/google/gerrit/server/util/RefUpdater.java
@@ -13,6 +13,7 @@ // limitations under the License. package com.google.gerrit.server.util; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.reviewdb.client.Branch; import com.google.gerrit.reviewdb.client.Project; import com.google.gerrit.server.CurrentUser; @@ -32,11 +33,9 @@ import org.eclipse.jgit.lib.PersonIdent; import org.eclipse.jgit.lib.RefUpdate; import org.eclipse.jgit.lib.Repository; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; public class RefUpdater { - private static final Logger log = LoggerFactory.getLogger(RefUpdater.class); + private static final FluentLogger log = FluentLogger.forEnclosingClass(); public class Args { public final Branch.NameKey branch; @@ -142,7 +141,8 @@ initUpdate(); handleResult(runUpdate()); } catch (IOException err) { - log.error("RefUpdate failed: branch not updated: " + branch.get(), err); + log.atSevere().withCause(err).log( + "RefUpdate failed: branch not updated: %s", branch.get()); throw err; } finally { repo.close(); @@ -202,8 +202,8 @@ project, update.getName(), update.getOldObjectId(), args.newObjectId); } if (userProvider.get().isIdentifiedUser()) { - AccountState accountState = accountCache.get(userProvider.get().getAccountId()); - gitRefUpdated.fire(project, update, accountState.getAccount()); + AccountState accountState = accountCache.get(userProvider.get().getAccountId()).get(); + gitRefUpdated.fire(project, update, accountState); } } }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/batch/BatchCleaner.java b/src/main/java/com/googlesource/gerrit/plugins/batch/BatchCleaner.java index b099fa6..e0fb174 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/batch/BatchCleaner.java +++ b/src/main/java/com/googlesource/gerrit/plugins/batch/BatchCleaner.java
@@ -17,6 +17,7 @@ import static java.util.concurrent.TimeUnit.DAYS; import static java.util.concurrent.TimeUnit.MINUTES; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.extensions.annotations.PluginName; import com.google.gerrit.extensions.events.LifecycleListener; import com.google.gerrit.server.CurrentUser; @@ -30,12 +31,10 @@ import java.util.ArrayList; import java.util.concurrent.ScheduledFuture; import org.eclipse.jgit.lib.Config; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** Clean up expired batches daily. */ public class BatchCleaner implements CancelableRunnable { - private static final Logger log = LoggerFactory.getLogger(BatchCleaner.class); + private static final FluentLogger log = FluentLogger.forEnclosingClass(); public static class Lifecycle implements LifecycleListener { public static final long DEFAULT_START_MINUTES = MINUTES.convert(1, MINUTES); @@ -119,7 +118,7 @@ try { batches = list.getBatches(); } catch (Exception e) { - log.error("getting list of batches to clean.", e); + log.atSevere().withCause(e).log("getting list of batches to clean."); // Ignore errors and hope someone notices the log file and fixes before the next run return; } @@ -131,7 +130,7 @@ try { remover.remove(batch.id); } catch (Exception e) { - log.error("cleaning batch: " + batch.id, e); + log.atSevere().withCause(e).log("cleaning batch: %s", batch.id); // Ignore errors and hope someone notices the log file and fixes before the next run } }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/batch/BatchCloser.java b/src/main/java/com/googlesource/gerrit/plugins/batch/BatchCloser.java index 5f68d7c..a528d2f 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/batch/BatchCloser.java +++ b/src/main/java/com/googlesource/gerrit/plugins/batch/BatchCloser.java
@@ -56,9 +56,9 @@ protected String getBatchRef(Batch batch, Batch.Destination dest) { // AccountId is always present, UserName is optional but the preferred identifier - if (user.getUserName() != null) { + if (user.getUserName().isPresent()) { return String.format( - "refs/batch/%s/%s/%s/%s", "users", user.getUserName(), batch.id, dest.ref); + "refs/batch/%s/%s/%s/%s", "users", user.getUserName().get(), batch.id, dest.ref); } return String.format( "refs/batch/%s/%s/%s/%s",
diff --git a/src/main/java/com/googlesource/gerrit/plugins/batch/BatchStore.java b/src/main/java/com/googlesource/gerrit/plugins/batch/BatchStore.java index 6d693df..d582af4 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/batch/BatchStore.java +++ b/src/main/java/com/googlesource/gerrit/plugins/batch/BatchStore.java
@@ -29,7 +29,6 @@ import java.util.ConcurrentModificationException; import java.util.Date; import java.util.List; -import java.util.Map; import javax.inject.Singleton; import org.eclipse.jgit.errors.ConfigInvalidException; import org.eclipse.jgit.lib.Ref; @@ -62,10 +61,10 @@ public List<Batch> find(boolean includeBatchInfo) throws IOException { List<Batch> batches = new ArrayList<>(); try (Repository repo = repoManager.openRepository(project)) { - for (Map.Entry<String, Ref> entry : repo.getRefDatabase().getRefs(BATCHES_REF).entrySet()) { + for (Ref ref : repo.getRefDatabase().getRefsByPrefix(BATCHES_REF)) { + String id = ref.getName().substring(BATCHES_REF.length()); try { - batches.add( - (includeBatchInfo == true) ? read(entry.getKey()) : new Batch(entry.getKey())); + batches.add((includeBatchInfo == true) ? read(id) : new Batch(id)); } catch (NoSuchBatchException e) { continue; }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/batch/BatchSubmitter.java b/src/main/java/com/googlesource/gerrit/plugins/batch/BatchSubmitter.java index 7697dab..3893d3c 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/batch/BatchSubmitter.java +++ b/src/main/java/com/googlesource/gerrit/plugins/batch/BatchSubmitter.java
@@ -14,7 +14,7 @@ package com.googlesource.gerrit.plugins.batch; -import com.google.gerrit.common.TimeUtil; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.extensions.restapi.AuthException; import com.google.gerrit.extensions.restapi.RestApiException; import com.google.gerrit.reviewdb.client.Branch; @@ -26,6 +26,8 @@ import com.google.gerrit.server.PatchSetUtil; import com.google.gerrit.server.git.GitRepositoryManager; import com.google.gerrit.server.git.MergedByPushOp; +import com.google.gerrit.server.logging.RequestId; +import com.google.gerrit.server.logging.TraceContext; import com.google.gerrit.server.notedb.ChangeNotes; import com.google.gerrit.server.permissions.ChangePermission; import com.google.gerrit.server.permissions.PermissionBackend; @@ -35,24 +37,21 @@ import com.google.gerrit.server.update.BatchUpdate; import com.google.gerrit.server.update.UpdateException; import com.google.gerrit.server.util.RefUpdater; -import com.google.gerrit.server.util.RequestId; import com.google.gerrit.server.util.RequestScopePropagator; +import com.google.gerrit.server.util.time.TimeUtil; import com.google.gwtorm.server.OrmException; import com.google.inject.Inject; import com.googlesource.gerrit.plugins.batch.exception.NoSuchBatchException; import java.io.IOException; -import java.util.Collection; import org.eclipse.jgit.errors.RepositoryNotFoundException; import org.eclipse.jgit.lib.ObjectId; import org.eclipse.jgit.lib.ObjectInserter; import org.eclipse.jgit.lib.ObjectReader; import org.eclipse.jgit.lib.Repository; import org.eclipse.jgit.revwalk.RevWalk; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; public class BatchSubmitter { - private static final Logger log = LoggerFactory.getLogger(BatchSubmitter.class); + private static final FluentLogger log = FluentLogger.forEnclosingClass(); protected final ReviewDb db; protected final GitRepositoryManager repoManager; @@ -126,9 +125,7 @@ RestApiException, UpdateException, PermissionBackendException { for (Batch.Destination dest : batch.listDestinations()) { updateRef(dest); - if (dest.changes != null) { - closeChanges(dest.changes); - } + closeChanges(dest); } } @@ -139,15 +136,17 @@ refUpdater.forceUpdate(branch, ObjectId.fromString(dest.sha1)); } - private void closeChanges(Collection<Batch.Change> changes) + private void closeChanges(Batch.Destination dest) throws IOException, OrmException, RepositoryNotFoundException, RestApiException, UpdateException, PermissionBackendException { - for (Batch.Change change : changes) { - closeChange(change.toPatchSetId()); + if (dest.changes != null) { + for (Batch.Change change : dest.changes) { + closeChange(change.toPatchSetId(), dest.sha1); + } } } - private void closeChange(PatchSet.Id psId) + private void closeChange(PatchSet.Id psId, String sha1) throws IOException, OrmException, RepositoryNotFoundException, RestApiException, UpdateException, PermissionBackendException { ChangeNotes changeNotes = notesFactory.createChecked(psId.getParentKey()); @@ -155,7 +154,7 @@ Change change = changeNotes.getChange(); PatchSet ps = psUtil.get(db, changeNotes, psId); if (change == null || ps == null) { - log.error("" + psId + " is missing"); + log.atSevere().log("%s is missing", psId); return; } @@ -166,18 +165,19 @@ Branch.NameKey destination = change.getDest(); Project.NameKey project = destination.getParentKey(); - try (Repository repo = repoManager.openRepository(project); + try (TraceContext traceContext = + TraceContext.open() + .addTag(RequestId.Type.SUBMISSION_ID, new RequestId(change.getId().toString())); + Repository repo = repoManager.openRepository(project); BatchUpdate bu = batchUpdateFactory.create(db, project, user, TimeUtil.nowTs()); ObjectInserter ins = repo.newObjectInserter(); ObjectReader reader = ins.newReader(); RevWalk walk = new RevWalk(reader)) { bu.setRepository(repo, walk, ins).updateChangesInParallel(); - bu.setRequestId(RequestId.forChange(change)); bu.setRefLogMessage("merged (batch submit)"); - bu.addOp( psId.getParentKey(), - mergedByPushOpFactory.create(requestScopePropagator, psId, destination.get())); + mergedByPushOpFactory.create(requestScopePropagator, psId, destination.get(), sha1)); bu.execute(); } }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/batch/ssh/MergeChangeCommand.java b/src/main/java/com/googlesource/gerrit/plugins/batch/ssh/MergeChangeCommand.java index 444b148..37b4428 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/batch/ssh/MergeChangeCommand.java +++ b/src/main/java/com/googlesource/gerrit/plugins/batch/ssh/MergeChangeCommand.java
@@ -18,7 +18,6 @@ import com.google.gerrit.reviewdb.client.PatchSet; import com.google.gerrit.reviewdb.client.Project; import com.google.gerrit.reviewdb.server.ReviewDb; -import com.google.gerrit.server.IdentifiedUser; import com.google.gerrit.server.OutputFormat; import com.google.gerrit.server.git.GitRepositoryManager; import com.google.gerrit.server.project.NoSuchRefException; @@ -86,7 +85,6 @@ @Inject protected MergeBranch.Factory mergeBranchFactory; @Inject protected BatchCloser batchCloser; @Inject protected ReviewDb db; - @Inject protected IdentifiedUser user; @Inject protected GitRepositoryManager repoManager; protected Map<PatchSet.Id, List<ObjectId>> parentsByPsarg = new HashMap<>();
diff --git a/src/main/java/com/googlesource/gerrit/plugins/batch/util/MergeBranch.java b/src/main/java/com/googlesource/gerrit/plugins/batch/util/MergeBranch.java index c766351..5d9323e 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/batch/util/MergeBranch.java +++ b/src/main/java/com/googlesource/gerrit/plugins/batch/util/MergeBranch.java
@@ -14,16 +14,16 @@ package com.googlesource.gerrit.plugins.batch.util; import com.google.gerrit.common.Nullable; -import com.google.gerrit.extensions.client.InheritableBoolean; import com.google.gerrit.extensions.restapi.BadRequestException; +import com.google.gerrit.reviewdb.client.BooleanProjectConfig; import com.google.gerrit.reviewdb.client.Branch; import com.google.gerrit.reviewdb.client.Project; import com.google.gerrit.reviewdb.client.RefNames; import com.google.gerrit.server.git.GitRepositoryManager; -import com.google.gerrit.server.git.IntegrationException; import com.google.gerrit.server.project.NoSuchRefException; import com.google.gerrit.server.project.ProjectCache; import com.google.gerrit.server.project.ProjectState; +import com.google.gerrit.server.submit.IntegrationException; import com.google.inject.Inject; import com.google.inject.assistedinject.Assisted; import com.googlesource.gerrit.plugins.batch.util.MergeBuilder.FastForwardMode; @@ -112,8 +112,8 @@ protected MergeStrategy defaultStrategy(MergeStrategy strategy) { if (strategy == null) { - Project project = projectFromName(projectName); - if (project != null && project.getUseContentMerge() == InheritableBoolean.TRUE) { + ProjectState project = projectFromName(projectName); + if (project != null && project.is(BooleanProjectConfig.USE_CONTENT_MERGE)) { return MergeStrategy.RESOLVE; } return MergeStrategy.SIMPLE_TWO_WAY_IN_CORE; @@ -121,11 +121,8 @@ return strategy; } - protected Project projectFromName(Project.NameKey name) { + protected ProjectState projectFromName(Project.NameKey name) { ProjectState ps = projectCache.get(name); - if (ps == null) { - return null; - } - return ps.getProject(); + return ps != null ? ps : null; } }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/batch/util/MergeBuilder.java b/src/main/java/com/googlesource/gerrit/plugins/batch/util/MergeBuilder.java index 6e5c4a8..72bd980 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/batch/util/MergeBuilder.java +++ b/src/main/java/com/googlesource/gerrit/plugins/batch/util/MergeBuilder.java
@@ -18,7 +18,7 @@ import com.google.gerrit.server.GerritPersonIdent; import com.google.gerrit.server.IdentifiedUser; import com.google.gerrit.server.git.GitRepositoryManager; -import com.google.gerrit.server.git.IntegrationException; +import com.google.gerrit.server.submit.IntegrationException; import com.google.inject.Inject; import com.google.inject.assistedinject.Assisted; import java.io.IOException;
diff --git a/tools/BUILD b/tools/BUILD new file mode 100644 index 0000000..1fa2160 --- /dev/null +++ b/tools/BUILD
@@ -0,0 +1 @@ +# Empty file - bazel treat directories with BUILD file as a package \ No newline at end of file