Fix possible NPE when auto-closing changes

Before [1] all refs in existingRefs were guaranteed to be patchset refs,
whereas the refs taken from ReceivePackRefsCache are all refs in the
"refs/changes/*" namespace and these aren't guaranteed to be patchset
refs.

While walking the commits from new tip to previous tip to find open
changes that should be closed by the push, possible patchset-refs are
collected from ReceivePackRefsCache.
Check if the found refs actually are patchset-refs before attempting
to parse it into a Patchset.Id.

[1] https://gerrit-review.googlesource.com/c/gerrit/+/241932

Bug: Issue 13408
Change-Id: Ifafdbba79c436ced406914937ba259eccea7c84f
This commit is contained in:
Sven Selberg
2020-09-11 17:00:27 +02:00
committed by Luca Milanesio
parent d6aff75bbb
commit 46106cdb2b

View File

@@ -3272,6 +3272,9 @@ class ReceiveCommits {
for (Ref ref :
receivePackRefCache.tipsFromObjectId(c.copy(), RefNames.REFS_CHANGES)) {
if (!PatchSet.isChangeRef(ref.getName())) {
continue;
}
PatchSet.Id psId = PatchSet.Id.fromRef(ref.getName());
Optional<ChangeNotes> notes = getChangeNotes(psId.changeId());
if (notes.isPresent() && notes.get().getChange().getDest().equals(branch)) {