From 2e505b7ac0fa6de0a75268cec12f7eaf6c02aef2 Mon Sep 17 00:00:00 2001 From: Patrick Hiesel Date: Fri, 10 Jan 2020 14:14:51 +0100 Subject: [PATCH] Move addition of refs/users/self symlink out of filtering logic Gerrit moved to a model where it wraps around RefDatabase to tell JGit which refs are visible to a user. This was done in I0bb85de2b. This meant moving filtering code from a AdvertiseRefsHook into a wrapper of RefDatabase. There is one case in which the logic that got moved would not only filter refs but add a ref in addition that is not present in the input: when authenticated users interact with All-Users. In this case, Gerrit adds a refs/users/self symbolic reference to make it easier to interact with one's account data. This led to a problem with the new inferface and smelled as a whole since concerns weren't clearly separated. The problem with the new interface would occur when using RefDatabase#exactRef - a method that expects {0,1} refs but got two for All-Users since refs/users/self was added. This change fixes the issue by separating the addition of the symref into an AdvertiseRefsHook and leaving ref filtering by just that. RefAdvertisementIT has different tests for testing the advertisement of refs/users/self and PushAccountIT covers push cases. The tests succeeded before, because the problem could only be encountered when the in-memory ref cache on the push path is not used. We add a config to run push tests without in-memory ref cache to make sure the code path that failed previosuly gets executed now. Bug: Issue 12027 Change-Id: I07777b698ddb86ad5cec1407ac5671874866fee5 --- .../gerrit/acceptance/InProcessProtocol.java | 9 +- .../gerrit/httpd/GitOverHttpServlet.java | 9 +- .../google/gerrit/server/git/HookUtil.java | 28 ++++++ .../git/UsersSelfAdvertiseRefsHook.java | 93 +++++++++++++++++++ .../git/receive/AsyncReceiveCommits.java | 11 ++- .../ReceiveCommitsAdvertiseRefsHookChain.java | 32 ++++++- .../server/permissions/DefaultRefFilter.java | 27 ------ .../google/gerrit/sshd/commands/Upload.java | 5 + .../acceptance/api/accounts/AccountIT.java | 14 +-- .../gerrit/acceptance/git/PushAccountIT.java | 14 +++ .../acceptance/git/RefAdvertisementIT.java | 4 +- 11 files changed, 204 insertions(+), 42 deletions(-) create mode 100644 java/com/google/gerrit/server/git/UsersSelfAdvertiseRefsHook.java diff --git a/java/com/google/gerrit/acceptance/InProcessProtocol.java b/java/com/google/gerrit/acceptance/InProcessProtocol.java index 8fcc1e7752..feda6bf6b3 100644 --- a/java/com/google/gerrit/acceptance/InProcessProtocol.java +++ b/java/com/google/gerrit/acceptance/InProcessProtocol.java @@ -35,6 +35,7 @@ import com.google.gerrit.server.git.PermissionAwareRepositoryManager; import com.google.gerrit.server.git.ReceivePackInitializer; import com.google.gerrit.server.git.TransferConfig; import com.google.gerrit.server.git.UploadPackInitializer; +import com.google.gerrit.server.git.UsersSelfAdvertiseRefsHook; import com.google.gerrit.server.git.receive.AsyncReceiveCommits; import com.google.gerrit.server.git.validators.UploadValidators; import com.google.gerrit.server.permissions.PermissionBackend; @@ -200,6 +201,7 @@ class InProcessProtocol extends TestProtocol { private final ThreadLocalRequestContext threadContext; private final ProjectCache projectCache; private final PermissionBackend permissionBackend; + private final UsersSelfAdvertiseRefsHook usersSelfAdvertiseRefsHook; @Inject Upload( @@ -209,7 +211,8 @@ class InProcessProtocol extends TestProtocol { UploadValidators.Factory uploadValidatorsFactory, ThreadLocalRequestContext threadContext, ProjectCache projectCache, - PermissionBackend permissionBackend) { + PermissionBackend permissionBackend, + UsersSelfAdvertiseRefsHook usersSelfAdvertiseRefsHook) { this.transferConfig = transferConfig; this.uploadPackInitializers = uploadPackInitializers; this.preUploadHooks = preUploadHooks; @@ -217,6 +220,7 @@ class InProcessProtocol extends TestProtocol { this.threadContext = threadContext; this.projectCache = projectCache; this.permissionBackend = permissionBackend; + this.usersSelfAdvertiseRefsHook = usersSelfAdvertiseRefsHook; } @Override @@ -250,6 +254,9 @@ class InProcessProtocol extends TestProtocol { UploadPack up = new UploadPack(permissionAwareRepository); up.setPackConfig(transferConfig.getPackConfig()); up.setTimeout(transferConfig.getTimeout()); + if (projectState.isAllUsers()) { + up.setAdvertiseRefsHook(usersSelfAdvertiseRefsHook); + } List hooks = Lists.newArrayList(preUploadHooks); hooks.add( uploadValidatorsFactory.create( diff --git a/java/com/google/gerrit/httpd/GitOverHttpServlet.java b/java/com/google/gerrit/httpd/GitOverHttpServlet.java index 57a936568c..eb6b2e089f 100644 --- a/java/com/google/gerrit/httpd/GitOverHttpServlet.java +++ b/java/com/google/gerrit/httpd/GitOverHttpServlet.java @@ -35,6 +35,7 @@ import com.google.gerrit.server.git.PermissionAwareRepositoryManager; import com.google.gerrit.server.git.TracingHook; import com.google.gerrit.server.git.TransferConfig; import com.google.gerrit.server.git.UploadPackInitializer; +import com.google.gerrit.server.git.UsersSelfAdvertiseRefsHook; import com.google.gerrit.server.git.receive.AsyncReceiveCommits; import com.google.gerrit.server.git.validators.UploadValidators; import com.google.gerrit.server.group.GroupAuditService; @@ -355,6 +356,7 @@ public class GitOverHttpServlet extends GitServlet { private final GroupAuditService groupAuditService; private final Metrics metrics; private final PluginSetContext requestListeners; + private final UsersSelfAdvertiseRefsHook usersSelfAdvertiseRefsHook; @Inject UploadFilter( @@ -363,13 +365,15 @@ public class GitOverHttpServlet extends GitServlet { Provider userProvider, GroupAuditService groupAuditService, Metrics metrics, - PluginSetContext requestListeners) { + PluginSetContext requestListeners, + UsersSelfAdvertiseRefsHook usersSelfAdvertiseRefsHook) { this.uploadValidatorsFactory = uploadValidatorsFactory; this.permissionBackend = permissionBackend; this.userProvider = userProvider; this.groupAuditService = groupAuditService; this.metrics = metrics; this.requestListeners = requestListeners; + this.usersSelfAdvertiseRefsHook = usersSelfAdvertiseRefsHook; } @Override @@ -416,6 +420,9 @@ public class GitOverHttpServlet extends GitServlet { up.setPreUploadHook( PreUploadHookChain.newChain( Lists.newArrayList(up.getPreUploadHook(), uploadValidators))); + if (state.isAllUsers()) { + up.setAdvertiseRefsHook(usersSelfAdvertiseRefsHook); + } try (TracingHook tracingHook = new TracingHook()) { up.setProtocolV2Hook(tracingHook); diff --git a/java/com/google/gerrit/server/git/HookUtil.java b/java/com/google/gerrit/server/git/HookUtil.java index e160e718a8..fd29c8debc 100644 --- a/java/com/google/gerrit/server/git/HookUtil.java +++ b/java/com/google/gerrit/server/git/HookUtil.java @@ -21,6 +21,7 @@ import java.util.Map; import org.eclipse.jgit.lib.Ref; import org.eclipse.jgit.transport.ReceivePack; import org.eclipse.jgit.transport.ServiceMayNotContinueException; +import org.eclipse.jgit.transport.UploadPack; /** Static utilities for writing git protocol hooks. */ public class HookUtil { @@ -51,5 +52,32 @@ public class HookUtil { return refs; } + /** + * Scan and advertise all refs in the repo if refs have not already been advertised; otherwise, + * just return the advertised map. + * + * @param up upload-pack handler. + * @return map of refs that were advertised. + * @throws ServiceMayNotContinueException if a problem occurred. + */ + public static Map ensureAllRefsAdvertised(UploadPack up) + throws ServiceMayNotContinueException { + Map refs = up.getAdvertisedRefs(); + if (refs != null) { + return refs; + } + try { + refs = + up.getRepository().getRefDatabase().getRefs().stream() + .collect(toMap(Ref::getName, r -> r)); + } catch (ServiceMayNotContinueException e) { + throw e; + } catch (IOException e) { + throw new ServiceMayNotContinueException(e); + } + up.setAdvertisedRefs(refs); + return refs; + } + private HookUtil() {} } diff --git a/java/com/google/gerrit/server/git/UsersSelfAdvertiseRefsHook.java b/java/com/google/gerrit/server/git/UsersSelfAdvertiseRefsHook.java new file mode 100644 index 0000000000..169ae328d8 --- /dev/null +++ b/java/com/google/gerrit/server/git/UsersSelfAdvertiseRefsHook.java @@ -0,0 +1,93 @@ +// Copyright (C) 2020 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package com.google.gerrit.server.git; + +import com.google.common.flogger.FluentLogger; +import com.google.gerrit.entities.Account; +import com.google.gerrit.entities.RefNames; +import com.google.gerrit.server.CurrentUser; +import java.io.IOException; +import java.util.Map; +import javax.inject.Inject; +import javax.inject.Provider; +import javax.inject.Singleton; +import org.eclipse.jgit.lib.Ref; +import org.eclipse.jgit.lib.RefDatabase; +import org.eclipse.jgit.lib.SymbolicRef; +import org.eclipse.jgit.transport.AdvertiseRefsHook; +import org.eclipse.jgit.transport.ReceivePack; +import org.eclipse.jgit.transport.ServiceMayNotContinueException; +import org.eclipse.jgit.transport.UploadPack; + +/** + * Advertises {@code refs/users/self} for authenticated users when interacting with the {@code + * All-Users} repository. + */ +@Singleton +public class UsersSelfAdvertiseRefsHook implements AdvertiseRefsHook { + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); + + private final Provider userProvider; + + @Inject + public UsersSelfAdvertiseRefsHook(Provider userProvider) { + this.userProvider = userProvider; + } + + @Override + public void advertiseRefs(UploadPack uploadPack) throws ServiceMayNotContinueException { + CurrentUser user = userProvider.get(); + if (!user.isIdentifiedUser()) { + return; + } + + addSelfSymlinkIfNecessary( + uploadPack.getRepository().getRefDatabase(), + HookUtil.ensureAllRefsAdvertised(uploadPack), + user.getAccountId()); + } + + @Override + public void advertiseRefs(ReceivePack receivePack) throws ServiceMayNotContinueException { + CurrentUser user = userProvider.get(); + if (!user.isIdentifiedUser()) { + return; + } + + addSelfSymlinkIfNecessary( + receivePack.getRepository().getRefDatabase(), + HookUtil.ensureAllRefsAdvertised(receivePack), + user.getAccountId()); + } + + private static void addSelfSymlinkIfNecessary( + RefDatabase refDatabase, Map advertisedRefs, Account.Id accountId) + throws ServiceMayNotContinueException { + String refName = RefNames.refsUsers(accountId); + try { + Ref r = refDatabase.exactRef(refName); + if (r == null) { + logger.atWarning().log("User ref %s not found", refName); + return; + } + + SymbolicRef s = new SymbolicRef(RefNames.REFS_USERS_SELF, r); + advertisedRefs.put(s.getName(), s); + logger.atFinest().log("Added %s as alias for user ref %s", RefNames.REFS_USERS_SELF, refName); + } catch (IOException e) { + throw new ServiceMayNotContinueException(e); + } + } +} diff --git a/java/com/google/gerrit/server/git/receive/AsyncReceiveCommits.java b/java/com/google/gerrit/server/git/receive/AsyncReceiveCommits.java index 942baea59a..8c20f30bd9 100644 --- a/java/com/google/gerrit/server/git/receive/AsyncReceiveCommits.java +++ b/java/com/google/gerrit/server/git/receive/AsyncReceiveCommits.java @@ -34,6 +34,7 @@ import com.google.gerrit.metrics.MetricMaker; import com.google.gerrit.metrics.Timer1; import com.google.gerrit.server.IdentifiedUser; import com.google.gerrit.server.PublishCommentsOp; +import com.google.gerrit.server.config.AllUsersName; import com.google.gerrit.server.config.ConfigUtil; import com.google.gerrit.server.config.GerritServerConfig; import com.google.gerrit.server.config.ReceiveCommitsExecutor; @@ -41,6 +42,7 @@ import com.google.gerrit.server.git.MultiProgressMonitor; import com.google.gerrit.server.git.PermissionAwareRepositoryManager; import com.google.gerrit.server.git.ProjectRunnable; import com.google.gerrit.server.git.TransferConfig; +import com.google.gerrit.server.git.UsersSelfAdvertiseRefsHook; import com.google.gerrit.server.logging.Metadata; import com.google.gerrit.server.permissions.PermissionBackend; import com.google.gerrit.server.permissions.PermissionBackendException; @@ -269,6 +271,8 @@ public class AsyncReceiveCommits implements PreReceiveHook { ContributorAgreementsChecker contributorAgreements, Metrics metrics, QuotaBackend quotaBackend, + UsersSelfAdvertiseRefsHook usersSelfAdvertiseRefsHook, + AllUsersName allUsersName, @Named(TIMEOUT_NAME) long timeoutMillis, @Assisted ProjectState projectState, @Assisted IdentifiedUser user, @@ -313,7 +317,12 @@ public class AsyncReceiveCommits implements PreReceiveHook { allRefsWatcher = new AllRefsWatcher(); receivePack.setAdvertiseRefsHook( ReceiveCommitsAdvertiseRefsHookChain.create( - allRefsWatcher, queryProvider, projectName, user.getAccountId())); + allRefsWatcher, + usersSelfAdvertiseRefsHook, + allUsersName, + queryProvider, + projectName, + user.getAccountId())); resultChangeIds = new ResultChangeIds(); receiveCommits = factory.create( diff --git a/java/com/google/gerrit/server/git/receive/ReceiveCommitsAdvertiseRefsHookChain.java b/java/com/google/gerrit/server/git/receive/ReceiveCommitsAdvertiseRefsHookChain.java index fae1401956..dd11c57b8d 100644 --- a/java/com/google/gerrit/server/git/receive/ReceiveCommitsAdvertiseRefsHookChain.java +++ b/java/com/google/gerrit/server/git/receive/ReceiveCommitsAdvertiseRefsHookChain.java @@ -17,8 +17,13 @@ package com.google.gerrit.server.git.receive; import com.google.common.annotations.VisibleForTesting; import com.google.gerrit.entities.Account; import com.google.gerrit.entities.Project; +import com.google.gerrit.server.CurrentUser; +import com.google.gerrit.server.config.AllUsersName; +import com.google.gerrit.server.config.AllUsersNameProvider; +import com.google.gerrit.server.git.UsersSelfAdvertiseRefsHook; import com.google.gerrit.server.query.change.InternalChangeQuery; import com.google.inject.Provider; +import com.google.inject.util.Providers; import java.util.ArrayList; import java.util.List; import org.eclipse.jgit.transport.AdvertiseRefsHook; @@ -35,10 +40,19 @@ public class ReceiveCommitsAdvertiseRefsHookChain { */ public static AdvertiseRefsHook create( AllRefsWatcher allRefsWatcher, + UsersSelfAdvertiseRefsHook usersSelfAdvertiseRefsHook, + AllUsersName allUsersName, Provider queryProvider, Project.NameKey projectName, Account.Id user) { - return create(allRefsWatcher, queryProvider, projectName, user, false); + return create( + allRefsWatcher, + usersSelfAdvertiseRefsHook, + allUsersName, + queryProvider, + projectName, + user, + false); } /** @@ -49,12 +63,21 @@ public class ReceiveCommitsAdvertiseRefsHookChain { */ @VisibleForTesting public static AdvertiseRefsHook createForTest( - Provider queryProvider, Project.NameKey projectName, Account.Id user) { - return create(new AllRefsWatcher(), queryProvider, projectName, user, true); + Provider queryProvider, Project.NameKey projectName, CurrentUser user) { + return create( + new AllRefsWatcher(), + new UsersSelfAdvertiseRefsHook(Providers.of(user)), + new AllUsersName(AllUsersNameProvider.DEFAULT), + queryProvider, + projectName, + user.getAccountId(), + true); } private static AdvertiseRefsHook create( AllRefsWatcher allRefsWatcher, + UsersSelfAdvertiseRefsHook usersSelfAdvertiseRefsHook, + AllUsersName allUsersName, Provider queryProvider, Project.NameKey projectName, Account.Id user, @@ -65,6 +88,9 @@ public class ReceiveCommitsAdvertiseRefsHookChain { if (!skipHackPushNegotiateHook) { advHooks.add(new HackPushNegotiateHook()); } + if (projectName.equals(allUsersName)) { + advHooks.add(usersSelfAdvertiseRefsHook); + } return AdvertiseRefsHookChain.newChain(advHooks); } } diff --git a/java/com/google/gerrit/server/permissions/DefaultRefFilter.java b/java/com/google/gerrit/server/permissions/DefaultRefFilter.java index 47a48b78ac..90d9d88c19 100644 --- a/java/com/google/gerrit/server/permissions/DefaultRefFilter.java +++ b/java/com/google/gerrit/server/permissions/DefaultRefFilter.java @@ -68,7 +68,6 @@ import org.eclipse.jgit.lib.Config; import org.eclipse.jgit.lib.Constants; import org.eclipse.jgit.lib.Ref; import org.eclipse.jgit.lib.Repository; -import org.eclipse.jgit.lib.SymbolicRef; class DefaultRefFilter { private static final FluentLogger logger = FluentLogger.forEnclosingClass(); @@ -206,10 +205,6 @@ class DefaultRefFilter { throws PermissionBackendException { logger.atFinest().log("Filter refs (refs = %s)", refs); - if (projectState.isAllUsers()) { - refs = addUsersSelfSymref(repo, refs); - } - // TODO(hiesel): Remove when optimization is done. boolean hasReadOnRefsStar = checkProjectPermission(permissionBackendForProject, ProjectPermission.READ); @@ -400,28 +395,6 @@ class DefaultRefFilter { return refs; } - private List addUsersSelfSymref(Repository repo, List refs) - throws PermissionBackendException { - if (user.isIdentifiedUser()) { - String refName = RefNames.refsUsers(user.getAccountId()); - try { - Ref r = repo.exactRef(refName); - if (r == null) { - logger.atWarning().log("User ref %s not found", refName); - return refs; - } - - SymbolicRef s = new SymbolicRef(REFS_USERS_SELF, r); - refs = new ArrayList<>(refs); - refs.add(s); - logger.atFinest().log("Added %s as alias for user ref %s", REFS_USERS_SELF, refName); - } catch (IOException e) { - throw new PermissionBackendException(e); - } - } - return refs; - } - private boolean visible(Repository repo, Change.Id changeId) throws PermissionBackendException { if (visibleChanges == null) { if (changeCache == null) { diff --git a/java/com/google/gerrit/sshd/commands/Upload.java b/java/com/google/gerrit/sshd/commands/Upload.java index a10c52e368..de4508a3df 100644 --- a/java/com/google/gerrit/sshd/commands/Upload.java +++ b/java/com/google/gerrit/sshd/commands/Upload.java @@ -24,6 +24,7 @@ import com.google.gerrit.server.git.PermissionAwareRepositoryManager; import com.google.gerrit.server.git.TracingHook; import com.google.gerrit.server.git.TransferConfig; import com.google.gerrit.server.git.UploadPackInitializer; +import com.google.gerrit.server.git.UsersSelfAdvertiseRefsHook; import com.google.gerrit.server.git.validators.UploadValidationException; import com.google.gerrit.server.git.validators.UploadValidators; import com.google.gerrit.server.logging.TraceContext; @@ -54,6 +55,7 @@ final class Upload extends AbstractGitCommand { @Inject private UploadValidators.Factory uploadValidatorsFactory; @Inject private SshSession session; @Inject private PermissionBackend permissionBackend; + @Inject private UsersSelfAdvertiseRefsHook usersSelfAdvertiseRefsHook; private PackStatistics stats; @@ -75,6 +77,9 @@ final class Upload extends AbstractGitCommand { up.setPackConfig(config.getPackConfig()); up.setTimeout(config.getTimeout()); up.setPostUploadHook(PostUploadHookChain.newChain(Lists.newArrayList(postUploadHooks))); + if (projectState.isAllUsers()) { + up.setAdvertiseRefsHook(usersSelfAdvertiseRefsHook); + } if (extraParameters != null) { up.setExtraParameters(ImmutableList.copyOf(extraParameters)); } diff --git a/javatests/com/google/gerrit/acceptance/api/accounts/AccountIT.java b/javatests/com/google/gerrit/acceptance/api/accounts/AccountIT.java index 07e74d46f1..625d0fbf4e 100644 --- a/javatests/com/google/gerrit/acceptance/api/accounts/AccountIT.java +++ b/javatests/com/google/gerrit/acceptance/api/accounts/AccountIT.java @@ -41,6 +41,7 @@ import static com.google.gerrit.truth.ConfigSubject.assertThat; import static java.nio.charset.StandardCharsets.UTF_8; import static java.util.Objects.requireNonNull; import static java.util.concurrent.TimeUnit.SECONDS; +import static java.util.stream.Collectors.toList; import static java.util.stream.Collectors.toSet; import static org.eclipse.jgit.lib.Constants.OBJ_BLOB; @@ -130,7 +131,6 @@ import com.google.gerrit.server.index.account.AccountIndexer; import com.google.gerrit.server.index.account.StalenessChecker; import com.google.gerrit.server.notedb.Sequences; import com.google.gerrit.server.permissions.PermissionBackend; -import com.google.gerrit.server.permissions.PermissionBackend.RefFilterOptions; import com.google.gerrit.server.plugincontext.PluginSetContext; import com.google.gerrit.server.project.ProjectConfig; import com.google.gerrit.server.project.RefPattern; @@ -163,6 +163,7 @@ import java.util.concurrent.atomic.AtomicInteger; import org.bouncycastle.bcpg.ArmoredOutputStream; import org.bouncycastle.openpgp.PGPPublicKey; import org.bouncycastle.openpgp.PGPPublicKeyRing; +import org.eclipse.jgit.api.Git; import org.eclipse.jgit.api.errors.TransportException; import org.eclipse.jgit.errors.ConfigInvalidException; import org.eclipse.jgit.internal.storage.dfs.InMemoryRepository; @@ -1470,12 +1471,11 @@ public class AccountIT extends AbstractDaemonTest { @Test public void refsUsersSelfIsAdvertised() throws Exception { - try (Repository allUsersRepo = repoManager.openRepository(allUsers)) { - assertThat( - permissionBackend.currentUser().project(allUsers) - .filter(ImmutableList.of(), allUsersRepo, RefFilterOptions.defaults()).stream() - .map(Ref::getName)) - .containsExactly(RefNames.REFS_USERS_SELF); + TestRepository testRepository = cloneProject(allUsers, user); + try (Git git = testRepository.git()) { + List advertisedRefs = + git.lsRemote().call().stream().map(Ref::getName).collect(toList()); + assertThat(advertisedRefs).contains(RefNames.REFS_USERS_SELF); } } diff --git a/javatests/com/google/gerrit/acceptance/git/PushAccountIT.java b/javatests/com/google/gerrit/acceptance/git/PushAccountIT.java index c48eb3b637..2f677e2fd0 100644 --- a/javatests/com/google/gerrit/acceptance/git/PushAccountIT.java +++ b/javatests/com/google/gerrit/acceptance/git/PushAccountIT.java @@ -62,6 +62,20 @@ public class PushAccountIT extends AbstractDaemonTest { @ConfigSuite.Default public static Config enableSignedPushConfig() { + return defaultConfig(); + } + + @ConfigSuite.Config + public static Config disableInMemoryRefCache() { + // Run these tests for both enabled and disabled in-memory ref caches. This is an implementation + // detail of ReceiveCommits that makes the logic either base it's computation on previously + // advertised refs or a make it query a ref database. + Config cfg = defaultConfig(); + cfg.setBoolean("receive", null, "enableInMemoryRefCache", false); + return cfg; + } + + private static Config defaultConfig() { Config cfg = new Config(); cfg.setBoolean("receive", null, "enableSignedPush", true); diff --git a/javatests/com/google/gerrit/acceptance/git/RefAdvertisementIT.java b/javatests/com/google/gerrit/acceptance/git/RefAdvertisementIT.java index 9e447532b5..56d9ff2bf4 100644 --- a/javatests/com/google/gerrit/acceptance/git/RefAdvertisementIT.java +++ b/javatests/com/google/gerrit/acceptance/git/RefAdvertisementIT.java @@ -1342,7 +1342,6 @@ public class RefAdvertisementIT extends AbstractDaemonTest { List expectedNonMetaRefs = ImmutableList.of( - RefNames.REFS_USERS_SELF, RefNames.refsUsers(admin.id()), RefNames.refsUsers(user.id()), RefNames.REFS_EXTERNAL_IDS, @@ -1446,7 +1445,8 @@ public class RefAdvertisementIT extends AbstractDaemonTest { private TestRefAdvertiser.Result getReceivePackRefs() throws Exception { try (Repository repo = repoManager.openRepository(project)) { AdvertiseRefsHook adv = - ReceiveCommitsAdvertiseRefsHookChain.createForTest(queryProvider, project, admin.id()); + ReceiveCommitsAdvertiseRefsHookChain.createForTest( + queryProvider, project, identifiedUserFactory.create(admin.id())); ReceivePack rp = new ReceivePack(repo); rp.setAdvertiseRefsHook(adv); TestRefAdvertiser advertiser = new TestRefAdvertiser(repo);