ChangeNotesParser: Invert logic for omitting deleted patch sets
When converting changes from reviewdb, there are no PatchSet rows at all for deleted patch sets, so we won't be able to detect and short-circuit when no patch sets have state DELETED. Instead, retain all entities related to non-deleted patch sets. Change-Id: I2d247316a327f9101394d092811e5197ca1f58f3
This commit is contained in:
@@ -83,6 +83,7 @@ import java.util.Collections;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.NavigableSet;
|
||||
import java.util.Set;
|
||||
import java.util.TreeMap;
|
||||
|
||||
@@ -682,9 +683,11 @@ class ChangeNotesParser implements AutoCloseable {
|
||||
FOOTER_COMMIT, ps.getPatchSetId());
|
||||
}
|
||||
}
|
||||
if (patchSetStates.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
Set<PatchSet.Id> deleted =
|
||||
Sets.newHashSetWithExpectedSize(patchSetStates.size());
|
||||
boolean deleted = false;
|
||||
for (Map.Entry<PatchSet.Id, PatchSetState> e : patchSetStates.entrySet()) {
|
||||
switch (e.getValue()) {
|
||||
case PUBLISHED:
|
||||
@@ -692,7 +695,8 @@ class ChangeNotesParser implements AutoCloseable {
|
||||
break;
|
||||
|
||||
case DELETED:
|
||||
deleted.add(e.getKey());
|
||||
deleted = true;
|
||||
patchSets.remove(e.getKey());
|
||||
break;
|
||||
|
||||
case DRAFT:
|
||||
@@ -703,32 +707,32 @@ class ChangeNotesParser implements AutoCloseable {
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (deleted.isEmpty()) {
|
||||
if (!deleted) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Post-process other collections to remove items corresponding to deleted
|
||||
// patch sets. This is safer than trying to prevent insertion, as it will
|
||||
// also filter out items racily added after the patch set was deleted.
|
||||
patchSets.keySet().removeAll(deleted);
|
||||
if (!patchSets.keySet().isEmpty()) {
|
||||
currentPatchSetId = patchSets.navigableKeySet().last();
|
||||
NavigableSet<PatchSet.Id> all = patchSets.navigableKeySet();
|
||||
if (!all.isEmpty()) {
|
||||
currentPatchSetId = all.last();
|
||||
} else {
|
||||
currentPatchSetId = null;
|
||||
}
|
||||
approvals.keySet().removeAll(deleted);
|
||||
changeMessagesByPatchSet.keys().removeAll(deleted);
|
||||
approvals.keySet().retainAll(all);
|
||||
changeMessagesByPatchSet.keys().retainAll(all);
|
||||
|
||||
for (Iterator<ChangeMessage> it = allChangeMessages.iterator();
|
||||
it.hasNext();) {
|
||||
if (deleted.contains(it.next().getPatchSetId())) {
|
||||
if (!all.contains(it.next().getPatchSetId())) {
|
||||
it.remove();
|
||||
}
|
||||
}
|
||||
for (Iterator<PatchLineComment> it = comments.values().iterator();
|
||||
it.hasNext();) {
|
||||
PatchSet.Id psId = it.next().getKey().getParentKey().getParentKey();
|
||||
if (deleted.contains(psId)) {
|
||||
if (!all.contains(psId)) {
|
||||
it.remove();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user