DefaultAdvertiseRefsHook: Avoid Repository#getAllRefs
Change-Id: I8987d674b8fdfbab163fa50088845aaf1a11b103
diff --git a/java/com/google/gerrit/server/git/DefaultAdvertiseRefsHook.java b/java/com/google/gerrit/server/git/DefaultAdvertiseRefsHook.java
index f255ea2..a8594e7 100644
--- a/java/com/google/gerrit/server/git/DefaultAdvertiseRefsHook.java
+++ b/java/com/google/gerrit/server/git/DefaultAdvertiseRefsHook.java
@@ -14,13 +14,14 @@
package com.google.gerrit.server.git;
+import com.google.common.collect.ImmutableList;
import com.google.gerrit.server.permissions.PermissionBackend;
import com.google.gerrit.server.permissions.PermissionBackendException;
import java.io.IOException;
-import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.eclipse.jgit.lib.Ref;
+import org.eclipse.jgit.lib.RefDatabase;
import org.eclipse.jgit.lib.Repository;
import org.eclipse.jgit.revwalk.RevWalk;
import org.eclipse.jgit.transport.AbstractAdvertiseRefsHook;
@@ -44,19 +45,10 @@
protected Map<String, Ref> getAdvertisedRefs(Repository repo, RevWalk revWalk)
throws ServiceMayNotContinueException {
try {
- Map<String, Ref> refs;
- List<String> prefixes = opts.prefixes();
- if (prefixes.isEmpty() || prefixes.get(0).isEmpty()) {
- refs = repo.getAllRefs();
- } else {
- refs = new HashMap<>();
- for (String prefix : prefixes) {
- for (Ref ref : repo.getRefDatabase().getRefsByPrefix(prefix)) {
- refs.put(ref.getName(), ref);
- }
- }
- }
- return perm.filter(refs, repo, opts);
+ List<String> prefixes =
+ !opts.prefixes().isEmpty() ? opts.prefixes() : ImmutableList.of(RefDatabase.ALL);
+ return perm.filter(
+ repo.getRefDatabase().getRefsByPrefix(prefixes.toArray(new String[0])), repo, opts);
} catch (IOException | PermissionBackendException e) {
ServiceMayNotContinueException ex = new ServiceMayNotContinueException();
ex.initCause(e);