diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/IdentifiedUser.java b/gerrit-server/src/main/java/com/google/gerrit/server/IdentifiedUser.java index 168dbf75e0..7397070abf 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/IdentifiedUser.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/IdentifiedUser.java @@ -424,6 +424,28 @@ public class IdentifiedUser extends CurrentUser { } } + /** + * Returns a materialized copy of the user with all dependencies. + * + * Invoke all providers and factories of dependent objects and store the + * references to a copy of the current identified user. + * + * @return copy of the identified user + */ + public IdentifiedUser materializedCopy() { + final CapabilityControl capabilities = getCapabilities(); + return new IdentifiedUser(new CapabilityControl.Factory() { + + @Override + public CapabilityControl create(CurrentUser user) { + return capabilities; + } + }, authConfig, realm, anonymousCowardName, + Providers.of(canonicalUrl.get()), accountCache, groupBackend, + disableReverseDnsLookup, Providers.of(remotePeerProvider.get()), state, + realUser); + } + private String getHost(final InetAddress in) { if (Boolean.FALSE.equals(disableReverseDnsLookup)) { return in.getCanonicalHostName(); diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/git/ReceiveCommits.java b/gerrit-server/src/main/java/com/google/gerrit/server/git/ReceiveCommits.java index 8e08818bdd..7bd9d8400c 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/git/ReceiveCommits.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/git/ReceiveCommits.java @@ -825,8 +825,9 @@ public class ReceiveCommits { return; } - try (BatchUpdate bu = batchUpdateFactory.create(db, - magicBranch.dest.getParentKey(), user, TimeUtil.nowTs()); + try (BatchUpdate bu = + batchUpdateFactory.create(db, magicBranch.dest.getParentKey(), + user.materializedCopy(), TimeUtil.nowTs()); ObjectInserter ins = repo.newObjectInserter()) { bu.setRepository(repo, rp.getRevWalk(), ins) .updateChangesInParallel();