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