Merge "Fix: push bypass review cannot close change from UI" into stable-2.6

This commit is contained in:
Shawn Pearce 2013-06-04 11:55:43 +00:00 committed by Gerrit Code Review
commit fea56e31ee

View File

@ -30,11 +30,13 @@ import com.google.common.base.Function;
import com.google.common.base.Predicate;
import com.google.common.base.Splitter;
import com.google.common.base.Strings;
import com.google.common.collect.HashMultimap;
import com.google.common.collect.Iterables;
import com.google.common.collect.LinkedListMultimap;
import com.google.common.collect.ListMultimap;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.collect.SetMultimap;
import com.google.common.collect.Sets;
import com.google.common.util.concurrent.CheckedFuture;
import com.google.common.util.concurrent.Futures;
@ -276,7 +278,7 @@ public class ReceiveCommits {
new HashMap<RevCommit, ReplaceRequest>();
private final Set<RevCommit> validCommits = new HashSet<RevCommit>();
private Map<ObjectId, Ref> refsById;
private SetMultimap<ObjectId, Ref> refsById;
private Map<String, Ref> allRefs;
private final SubmoduleOp.Factory subOpFactory;
@ -2011,13 +2013,14 @@ public class ReceiveCommits {
rw.markUninteresting(rw.parseCommit(cmd.getOldId()));
}
final Map<ObjectId, Ref> byCommit = changeRefsById();
final SetMultimap<ObjectId, Ref> byCommit = changeRefsById();
final Map<Change.Key, Change.Id> byKey = openChangesByKey(
new Branch.NameKey(project.getNameKey(), cmd.getRefName()));
final List<ReplaceRequest> toClose = new ArrayList<ReplaceRequest>();
RevCommit c;
while ((c = rw.next()) != null) {
final Ref ref = byCommit.get(c.copy());
final Set<Ref> refs = byCommit.get(c.copy());
for (Ref ref : refs) {
if (ref != null) {
rw.parseBody(c);
Change.Key closedChange =
@ -2027,6 +2030,7 @@ public class ReceiveCommits {
byKey.remove(closedChange);
}
}
}
rw.parseBody(c);
for (final String changeId : c.getFooterLines(CHANGE_ID)) {
@ -2104,9 +2108,9 @@ public class ReceiveCommits {
return change.getKey();
}
private Map<ObjectId, Ref> changeRefsById() throws IOException {
private SetMultimap<ObjectId, Ref> changeRefsById() throws IOException {
if (refsById == null) {
refsById = new HashMap<ObjectId, Ref>();
refsById = HashMultimap.create();
for (Ref r : repo.getRefDatabase().getRefs("refs/changes/").values()) {
if (PatchSet.isRef(r.getName())) {
refsById.put(r.getObjectId(), r);