Merge branch 'stable-2.16' into stable-3.0 * stable-2.16: Make transitive starlark loads explicit Format java files with google-java-format Create a user-context if not propagated by Gerrit Change-Id: I61240539c0a6a295147e8f11db55ed90aca66403
diff --git a/WORKSPACE b/WORKSPACE index d22a85a..6089c79 100644 --- a/WORKSPACE +++ b/WORKSPACE
@@ -3,7 +3,7 @@ load("//:bazlets.bzl", "load_bazlets") load_bazlets( - commit = "b084bd74743f4303971a2a057bcea4f3352ddf4e", + commit = "1d381f01c853e2c02ae35430a8e294e485635d62", #local_path = "/home/<user>/projects/bazlets", )
diff --git a/lib/prolog/prolog.bzl b/lib/prolog/prolog.bzl index ae46601..5ba004b 100644 --- a/lib/prolog/prolog.bzl +++ b/lib/prolog/prolog.bzl
@@ -1 +1,3 @@ -load("@com_googlesource_gerrit_bazlets//lib/prolog:prolog.bzl", "prolog_cafe_library") +load("@com_googlesource_gerrit_bazlets//lib/prolog:prolog.bzl", _prolog_cafe_library = "prolog_cafe_library") + +prolog_cafe_library = _prolog_cafe_library
diff --git a/owners-autoassign/src/main/java/com/googlesource/gerrit/owners/common/GitRefListener.java b/owners-autoassign/src/main/java/com/googlesource/gerrit/owners/common/GitRefListener.java index 22e3db8..4a34958 100644 --- a/owners-autoassign/src/main/java/com/googlesource/gerrit/owners/common/GitRefListener.java +++ b/owners-autoassign/src/main/java/com/googlesource/gerrit/owners/common/GitRefListener.java
@@ -19,10 +19,12 @@ import static com.google.gerrit.extensions.client.DiffPreferencesInfo.Whitespace.IGNORE_NONE; import com.google.common.collect.Sets; +import com.google.gerrit.exceptions.StorageException; import com.google.gerrit.extensions.annotations.Listen; import com.google.gerrit.extensions.api.GerritApi; import com.google.gerrit.extensions.api.changes.ChangeApi; import com.google.gerrit.extensions.api.changes.Changes; +import com.google.gerrit.extensions.common.AccountInfo; import com.google.gerrit.extensions.common.ChangeInfo; import com.google.gerrit.extensions.events.GitReferenceUpdatedListener; import com.google.gerrit.extensions.restapi.RestApiException; @@ -30,12 +32,16 @@ import com.google.gerrit.reviewdb.client.Change; import com.google.gerrit.reviewdb.client.Project; import com.google.gerrit.reviewdb.client.RefNames; +import com.google.gerrit.server.CurrentUser; import com.google.gerrit.server.git.GitRepositoryManager; import com.google.gerrit.server.patch.PatchList; import com.google.gerrit.server.patch.PatchListCache; import com.google.gerrit.server.patch.PatchListKey; import com.google.gerrit.server.patch.PatchListNotAvailableException; +import com.google.gerrit.server.util.ManualRequestContext; +import com.google.gerrit.server.util.OneOffRequestContext; import com.google.inject.Inject; +import com.google.inject.Provider; import java.io.IOException; import java.util.Set; import org.eclipse.jgit.lib.ObjectId; @@ -54,22 +60,58 @@ private final Accounts accounts; private final ReviewerManager reviewerManager; + private final OneOffRequestContext oneOffReqCtx; + + private Provider<CurrentUser> currentUserProvider; + @Inject public GitRefListener( GerritApi api, PatchListCache patchListCache, GitRepositoryManager repositoryManager, Accounts accounts, - ReviewerManager reviewerManager) { + ReviewerManager reviewerManager, + OneOffRequestContext oneOffReqCtx, + Provider<CurrentUser> currentUserProvider) { this.api = api; this.patchListCache = patchListCache; this.repositoryManager = repositoryManager; this.accounts = accounts; this.reviewerManager = reviewerManager; + this.oneOffReqCtx = oneOffReqCtx; + this.currentUserProvider = currentUserProvider; } @Override public void onGitReferenceUpdated(Event event) { + AccountInfo updaterAccountInfo = event.getUpdater(); + CurrentUser currentUser = currentUserProvider.get(); + if (currentUser.isIdentifiedUser()) { + handleGitReferenceUpdated(event); + } else if (updaterAccountInfo != null) { + handleGitReferenceUpdatedAsUser(event, new Account.Id(updaterAccountInfo._accountId)); + } else { + handleGitReferenceUpdatedAsServer(event); + } + } + + private void handleGitReferenceUpdatedAsUser(Event event, Account.Id updaterAccountId) { + try (ManualRequestContext ctx = oneOffReqCtx.openAs(updaterAccountId)) { + handleGitReferenceUpdated(event); + } catch (StorageException e) { + logger.warn("Unable to process event {} on project {}", event, event.getProjectName(), e); + } + } + + private void handleGitReferenceUpdatedAsServer(Event event) { + try (ManualRequestContext ctx = oneOffReqCtx.open()) { + handleGitReferenceUpdated(event); + } catch (StorageException e) { + logger.warn("Unable to process event {} on project {}", event, event.getProjectName(), e); + } + } + + private void handleGitReferenceUpdated(Event event) { String projectName = event.getProjectName(); Repository repository; try {
diff --git a/owners-autoassign/src/test/java/com/vmware/gerrit/owners/common/GitRefListenerIT.java b/owners-autoassign/src/test/java/com/vmware/gerrit/owners/common/GitRefListenerIT.java index aa6db4f..24c07a3 100644 --- a/owners-autoassign/src/test/java/com/vmware/gerrit/owners/common/GitRefListenerIT.java +++ b/owners-autoassign/src/test/java/com/vmware/gerrit/owners/common/GitRefListenerIT.java
@@ -21,7 +21,11 @@ import com.google.gerrit.acceptance.TestPlugin; import com.google.gerrit.extensions.events.GitReferenceUpdatedListener; import com.google.gerrit.reviewdb.client.RefNames; +import com.google.gerrit.server.AnonymousUser; +import com.google.gerrit.server.util.ManualRequestContext; +import com.google.gerrit.server.util.ThreadLocalRequestContext; import com.google.inject.AbstractModule; +import com.google.inject.Inject; import org.eclipse.jgit.transport.ReceiveCommand.Type; import org.junit.Test; @@ -30,6 +34,13 @@ sysModule = "com.vmware.gerrit.owners.common.GitRefListenerIT$TestModule") public class GitRefListenerIT extends LightweightPluginDaemonTest { + @Inject GitRefListenerTest gitRefListener; + @Inject ThreadLocalRequestContext requestContext; + + String aRefChange = RefNames.REFS_CHANGES + "01/01/01"; + String anOldObjectId = "anOldRef"; + String aNewObjectId = "aNewRef"; + public static class TestModule extends AbstractModule { @Override protected void configure() { @@ -39,15 +50,14 @@ @Test public void shouldNotProcessNoteDbOnlyRefs() { - GitRefListenerTest gitRefListener = getPluginInstance(GitRefListenerTest.class); - - String aRefChange = RefNames.REFS_CHANGES + "01/01" + RefNames.META_SUFFIX; - String anOldObjectId = "anOldRef"; - String aNewObjectId = "aNewRef"; - ReferenceUpdatedEventTest refUpdatedEvent = new ReferenceUpdatedEventTest( - project, aRefChange, anOldObjectId, aNewObjectId, Type.CREATE); + project, + RefNames.REFS_CHANGES + "01/01" + RefNames.META_SUFFIX, + anOldObjectId, + aNewObjectId, + Type.CREATE, + admin.id()); gitRefListener.onGitReferenceUpdated(refUpdatedEvent); assertEquals(0, gitRefListener.getProcessedEvents()); @@ -55,21 +65,31 @@ @Test public void shouldProcessRefChanges() { - GitRefListenerTest gitRefListener = getPluginInstance(GitRefListenerTest.class); - - String aRefChange = RefNames.REFS_CHANGES + "01/01/01"; - String anOldObjectId = "anOldRef"; - String aNewObjectId = "aNewRef"; - - ReferenceUpdatedEventTest refUpdatedEvent = - new ReferenceUpdatedEventTest( - project, aRefChange, anOldObjectId, aNewObjectId, Type.CREATE); - - gitRefListener.onGitReferenceUpdated(refUpdatedEvent); + gitRefListener.onGitReferenceUpdated(newRefUpdateEvent()); assertEquals(1, gitRefListener.getProcessedEvents()); } - private <T> T getPluginInstance(Class<T> clazz) { - return plugin.getSysInjector().getInstance(clazz); + @Test + public void shouldRetrieveChangeFromAnonymousContext() throws Exception { + try (ManualRequestContext ctx = new ManualRequestContext(new AnonymousUser(), requestContext)) { + gitRefListener.onGitReferenceUpdated(newRefUpdateEvent()); + assertEquals(1, gitRefListener.getProcessedEvents()); + } + } + + @Test + public void shouldRetrieveChangeFromAnonymousContextWithoutAccountId() throws Exception { + ReferenceUpdatedEventTest refUpdateWithoutAccountId = + new ReferenceUpdatedEventTest( + project, aRefChange, anOldObjectId, aNewObjectId, Type.CREATE, null); + try (ManualRequestContext ctx = new ManualRequestContext(new AnonymousUser(), requestContext)) { + gitRefListener.onGitReferenceUpdated(refUpdateWithoutAccountId); + assertEquals(1, gitRefListener.getProcessedEvents()); + } + } + + private ReferenceUpdatedEventTest newRefUpdateEvent() { + return new ReferenceUpdatedEventTest( + project, aRefChange, anOldObjectId, aNewObjectId, Type.CREATE, admin.id()); } }
diff --git a/owners-autoassign/src/test/java/com/vmware/gerrit/owners/common/GitRefListenerTest.java b/owners-autoassign/src/test/java/com/vmware/gerrit/owners/common/GitRefListenerTest.java index 1052349..e3d4be4 100644 --- a/owners-autoassign/src/test/java/com/vmware/gerrit/owners/common/GitRefListenerTest.java +++ b/owners-autoassign/src/test/java/com/vmware/gerrit/owners/common/GitRefListenerTest.java
@@ -16,9 +16,12 @@ package com.vmware.gerrit.owners.common; import com.google.gerrit.extensions.api.GerritApi; +import com.google.gerrit.server.CurrentUser; import com.google.gerrit.server.git.GitRepositoryManager; import com.google.gerrit.server.patch.PatchListCache; +import com.google.gerrit.server.util.OneOffRequestContext; import com.google.inject.Inject; +import com.google.inject.Provider; import com.googlesource.gerrit.owners.common.Accounts; import com.googlesource.gerrit.owners.common.GitRefListener; import com.googlesource.gerrit.owners.common.ReviewerManager; @@ -31,12 +34,21 @@ @Inject public GitRefListenerTest( - GerritApi api, - PatchListCache patchListCache, - GitRepositoryManager repositoryManager, - Accounts accounts, - ReviewerManager reviewerManager) { - super(api, patchListCache, repositoryManager, accounts, reviewerManager); + GerritApi api, + PatchListCache patchListCache, + GitRepositoryManager repositoryManager, + Accounts accounts, + ReviewerManager reviewerManager, + OneOffRequestContext oneOffReqCtx, + Provider<CurrentUser> currentUserProvider) { + super( + api, + patchListCache, + repositoryManager, + accounts, + reviewerManager, + oneOffReqCtx, + currentUserProvider); } @Override
diff --git a/owners-autoassign/src/test/java/com/vmware/gerrit/owners/common/ReferenceUpdatedEventTest.java b/owners-autoassign/src/test/java/com/vmware/gerrit/owners/common/ReferenceUpdatedEventTest.java index 446a8bb..9946502 100644 --- a/owners-autoassign/src/test/java/com/vmware/gerrit/owners/common/ReferenceUpdatedEventTest.java +++ b/owners-autoassign/src/test/java/com/vmware/gerrit/owners/common/ReferenceUpdatedEventTest.java
@@ -18,6 +18,8 @@ import com.google.gerrit.extensions.api.changes.NotifyHandling; import com.google.gerrit.extensions.common.AccountInfo; import com.google.gerrit.extensions.events.GitReferenceUpdatedListener; +import com.google.gerrit.reviewdb.client.Account; +import com.google.gerrit.reviewdb.client.Account.Id; import com.google.gerrit.reviewdb.client.Project; import org.eclipse.jgit.transport.ReceiveCommand; import org.junit.Ignore; @@ -30,18 +32,21 @@ private final String oldObjectId; private final String newObjectId; private final ReceiveCommand.Type type; + private final Id eventAccountId; public ReferenceUpdatedEventTest( Project.NameKey project, String ref, String oldObjectId, String newObjectId, - ReceiveCommand.Type type) { + ReceiveCommand.Type type, + Account.Id eventAccountId) { this.projectName = project.get(); this.ref = ref; this.oldObjectId = oldObjectId; this.newObjectId = newObjectId; this.type = type; + this.eventAccountId = eventAccountId; } @Override @@ -81,7 +86,11 @@ @Override public AccountInfo getUpdater() { - return null; + if (eventAccountId == null) { + return null; + } + + return new AccountInfo(eventAccountId.get()); } @Override
diff --git a/tools/bzl/classpath.bzl b/tools/bzl/classpath.bzl index d5764f7..c921d01 100644 --- a/tools/bzl/classpath.bzl +++ b/tools/bzl/classpath.bzl
@@ -1,4 +1,6 @@ load( "@com_googlesource_gerrit_bazlets//tools:classpath.bzl", - "classpath_collector", + _classpath_collector = "classpath_collector", ) + +classpath_collector = _classpath_collector
diff --git a/tools/bzl/junit.bzl b/tools/bzl/junit.bzl index 3af7e58..97307bd 100644 --- a/tools/bzl/junit.bzl +++ b/tools/bzl/junit.bzl
@@ -1,4 +1,6 @@ load( "@com_googlesource_gerrit_bazlets//tools:junit.bzl", - "junit_tests", + _junit_tests = "junit_tests", ) + +junit_tests = _junit_tests
diff --git a/tools/bzl/maven_jar.bzl b/tools/bzl/maven_jar.bzl index 43393b9..ce4730f 100644 --- a/tools/bzl/maven_jar.bzl +++ b/tools/bzl/maven_jar.bzl
@@ -1 +1,4 @@ -load("@com_googlesource_gerrit_bazlets//tools:maven_jar.bzl", "GERRIT", "maven_jar") +load("@com_googlesource_gerrit_bazlets//tools:maven_jar.bzl", _GERRIT = "GERRIT", _maven_jar = "maven_jar") + +GERRIT = _GERRIT +maven_jar = _maven_jar
diff --git a/tools/bzl/plugin.bzl b/tools/bzl/plugin.bzl index d21bdf4..a271493 100644 --- a/tools/bzl/plugin.bzl +++ b/tools/bzl/plugin.bzl
@@ -1,7 +1,12 @@ load( "@com_googlesource_gerrit_bazlets//:gerrit_plugin.bzl", - "PLUGIN_DEPS", - "PLUGIN_DEPS_NEVERLINK", - "PLUGIN_TEST_DEPS", - "gerrit_plugin", + _gerrit_plugin = "gerrit_plugin", + _plugin_deps = "PLUGIN_DEPS", + _plugin_deps_neverlink = "PLUGIN_DEPS_NEVERLINK", + _plugin_test_deps = "PLUGIN_TEST_DEPS", ) + +gerrit_plugin = _gerrit_plugin +PLUGIN_DEPS = _plugin_deps +PLUGIN_DEPS_NEVERLINK = _plugin_deps_neverlink +PLUGIN_TEST_DEPS = _plugin_test_deps
diff --git a/tools/genrule2.bzl b/tools/genrule2.bzl index de66f32..61c4e18 100644 --- a/tools/genrule2.bzl +++ b/tools/genrule2.bzl
@@ -1 +1,3 @@ -load("@com_googlesource_gerrit_bazlets//tools:genrule2.bzl", "genrule2") +load("@com_googlesource_gerrit_bazlets//tools:genrule2.bzl", _genrule2 = "genrule2") + +genrule2 = _genrule2