in java/com/google/gerrit/plugins/checks/api/RerunCheck.java [66:112]
public Response<CheckInfo> apply(CheckResource checkResource, RerunInput input)
throws RestApiException, IOException, PermissionBackendException, ConfigInvalidException {
if (!self.get().isIdentifiedUser()) {
throw new AuthException("Authentication required");
}
if (checkResource.getRevisionResource().getEdit().isPresent()) {
throw new ResourceConflictException("checks are not supported on a change edit");
}
if (input == null) {
input = new RerunInput();
}
CheckKey key =
CheckKey.create(
checkResource.getRevisionResource().getProject(),
checkResource.getRevisionResource().getPatchSet().id(),
checkResource.getCheckerUuid());
Optional<Check> check = checks.getCheck(key, GetCheckOptions.defaults());
CheckerUuid checkerUuid = checkResource.getCheckerUuid();
Check updatedCheck;
if (!check.isPresent()) {
Checker checker =
checkers
.getChecker(checkerUuid)
.orElseThrow(
() ->
new ResourceNotFoundException(
String.format("checker %s not found", checkerUuid)));
// This error should not be thrown since this case is filtered before reaching this code.
// Also return a backfilled check for checkers that do not apply to the change.
updatedCheck =
Check.newBackfilledCheck(
checkResource.getRevisionResource().getProject(),
checkResource.getRevisionResource().getPatchSet(),
checker);
} else {
CheckUpdate.Builder builder = CheckUpdate.builder();
builder
.setState(CheckState.NOT_STARTED)
.unsetFinished()
.unsetStarted()
.setMessage("")
.setUrl("");
updatedCheck =
checksUpdate.get().updateCheck(key, builder.build(), input.notify, input.notifyDetails);
}
return Response.ok(checkJsonFactory.noOptions().format(updatedCheck));
}