fixup! Add in_depends-on operator Fix operator to not fail when the provided change does not exist or is invalid. Change-Id: I17d45e814fcc24b0b28146c426e83e9b92934d6f
diff --git a/src/main/java/com/googlesource/gerrit/plugins/depends/on/ChangeMessageStore.java b/src/main/java/com/googlesource/gerrit/plugins/depends/on/ChangeMessageStore.java index 9d4060c..9840df1 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/depends/on/ChangeMessageStore.java +++ b/src/main/java/com/googlesource/gerrit/plugins/depends/on/ChangeMessageStore.java
@@ -31,6 +31,7 @@ import com.google.gerrit.server.patch.PatchListNotAvailableException; import com.google.gerrit.server.permissions.PermissionBackendException; import com.google.gerrit.server.project.InvalidChangeOperationException; +import com.google.gerrit.server.project.NoSuchChangeException; import com.google.gerrit.server.restapi.change.PostReview; import com.google.gerrit.server.update.UpdateException; import com.google.inject.Inject; @@ -89,7 +90,12 @@ } public List<DependsOn> loadWithOrder(Change.Id cid) throws StorageException { - ChangeNotes changeNote = changeNotesFactory.createCheckedUsingIndexLookup(cid); + ChangeNotes changeNote; + try { + changeNote = changeNotesFactory.createCheckedUsingIndexLookup(cid); + } catch (NoSuchChangeException e) { + return Collections.emptyList(); + } for (ChangeMessage message : Lists.reverse(cmUtil.byChange(changeNote))) { Optional<List<DependsOn>> deps = Comment.from(message.getMessage()); if (deps.isPresent()) {
diff --git a/src/main/java/com/googlesource/gerrit/plugins/depends/on/InDependsOnOperator.java b/src/main/java/com/googlesource/gerrit/plugins/depends/on/InDependsOnOperator.java index e5566f0..3d15985 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/depends/on/InDependsOnOperator.java +++ b/src/main/java/com/googlesource/gerrit/plugins/depends/on/InDependsOnOperator.java
@@ -24,6 +24,8 @@ import com.google.gerrit.server.query.change.ChangeQueryBuilder.ChangeOperatorFactory; import com.google.inject.Inject; import com.google.inject.Singleton; +import java.util.Collections; +import java.util.Optional; import java.util.Set; import java.util.stream.Collectors; import org.slf4j.Logger; @@ -38,10 +40,13 @@ public InDependsOnPredicate(String value) { super(InDependsOnOperator.FIELD, value); + Optional<Change.Id> changeId = Change.Id.tryParse(value); dependentChanges = - changeMessageStore.load(Change.Id.tryParse(value).get()).stream() - .map(d -> d.id()) - .collect(Collectors.toSet()); + changeId.isPresent() + ? changeMessageStore.load(changeId.get()).stream() + .map(d -> d.id()) + .collect(Collectors.toSet()) + : Collections.emptySet(); } @Override
diff --git a/test/test_dependson_operators.sh b/test/test_dependson_operators.sh index 03c31c3..8d64a9b 100755 --- a/test/test_dependson_operators.sh +++ b/test/test_dependson_operators.sh
@@ -128,6 +128,9 @@ ACTUAL="$(query "independson:$CHANGE" | jq --raw-output '.number')" result_out "independson operator" "$DEPENDENT_CHANGE" "$ACTUAL" +ACTUAL="$(query "independson:99999" | jq --raw-output '.number')" +result_out "independson operator (non-existent change)" "null" "$ACTUAL" + # ------------------------- has:a_depends-on Tests --------------------------- CHANGE_1=$(create_change "$SRC_REF_BRANCH" "$FILE_A") || \ die "Failed to create change on project: $PROJECT branch: $SRC_REF_BRANCH"