Replace non-trivial uses of RefDatabase.getRefs with getRefsByPrefix
getRefs returns Map<String, Ref> where the key is the ref name with the given prefix stripped off. However, getRefsByPrefix returns a list of Refs with the full refname. Therefore, when converting to getRefsByPrefix, we have to explicitly remove the ref prefix from each ref name before using it. Change-Id: I9a3ecf942ea47325fffa27596265fde217c2af0c
This commit is contained in:
		| @@ -296,7 +296,11 @@ public class StarredChangesUtil { | ||||
|  | ||||
|   private static Set<String> getRefNames(Repository repo, String prefix) throws IOException { | ||||
|     RefDatabase refDb = repo.getRefDatabase(); | ||||
|     return refDb.getRefs(prefix).keySet(); | ||||
|     return refDb | ||||
|         .getRefsByPrefix(prefix) | ||||
|         .stream() | ||||
|         .map(r -> r.getName().substring(prefix.length())) | ||||
|         .collect(toSet()); | ||||
|   } | ||||
|  | ||||
|   public ObjectId getObjectId(Account.Id accountId, Change.Id changeId) { | ||||
|   | ||||
| @@ -1042,12 +1042,12 @@ public class ChangeData { | ||||
|       editsByUser = new HashMap<>(); | ||||
|       Change.Id id = checkNotNull(change.getId()); | ||||
|       try (Repository repo = repoManager.openRepository(project())) { | ||||
|         for (Map.Entry<String, Ref> e : | ||||
|             repo.getRefDatabase().getRefs(RefNames.REFS_USERS).entrySet()) { | ||||
|           if (id.equals(Change.Id.fromEditRefPart(e.getKey()))) { | ||||
|             Account.Id accountId = Account.Id.fromRefPart(e.getKey()); | ||||
|         for (Ref ref : repo.getRefDatabase().getRefsByPrefix(RefNames.REFS_USERS)) { | ||||
|           String name = ref.getName().substring(RefNames.REFS_USERS.length()); | ||||
|           if (id.equals(Change.Id.fromEditRefPart(name))) { | ||||
|             Account.Id accountId = Account.Id.fromRefPart(name); | ||||
|             if (accountId != null) { | ||||
|               editsByUser.put(accountId, e.getValue()); | ||||
|               editsByUser.put(accountId, ref); | ||||
|             } | ||||
|           } | ||||
|         } | ||||
|   | ||||
| @@ -16,12 +16,11 @@ package com.google.gerrit.server.update; | ||||
|  | ||||
| import static com.google.common.base.Preconditions.checkArgument; | ||||
| import static com.google.common.base.Preconditions.checkNotNull; | ||||
| import static java.util.stream.Collectors.toMap; | ||||
|  | ||||
| import com.google.common.collect.Maps; | ||||
| import com.google.gerrit.reviewdb.client.Project; | ||||
| import com.google.gerrit.server.git.GitRepositoryManager; | ||||
| import java.io.IOException; | ||||
| import java.util.HashMap; | ||||
| import java.util.Map; | ||||
| import java.util.Optional; | ||||
| import org.eclipse.jgit.lib.Config; | ||||
| @@ -133,14 +132,15 @@ public class RepoView { | ||||
|    * | ||||
|    * @param prefix ref prefix; must end in '/' or else be empty. | ||||
|    * @return a map of ref suffixes to SHA-1s. The refs are all under {@code prefix} and have the | ||||
|    *     prefix stripped; this matches the behavior of {@link | ||||
|    *     org.eclipse.jgit.lib.RefDatabase#getRefs(String)}. | ||||
|    *     prefix stripped. | ||||
|    * @throws IOException if an error occurred. | ||||
|    */ | ||||
|   public Map<String, ObjectId> getRefs(String prefix) throws IOException { | ||||
|     Map<String, ObjectId> result = | ||||
|         new HashMap<>( | ||||
|             Maps.transformValues(repo.getRefDatabase().getRefs(prefix), Ref::getObjectId)); | ||||
|         repo.getRefDatabase() | ||||
|             .getRefsByPrefix(prefix) | ||||
|             .stream() | ||||
|             .collect(toMap(r -> r.getName().substring(prefix.length()), Ref::getObjectId)); | ||||
|  | ||||
|     // First, overwrite any cached reads from the underlying RepoRefCache. If any of these differ, | ||||
|     // it's because a ref was updated after the RepoRefCache read it. It feels a little odd to | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 David Pursehouse
					David Pursehouse