in src/main/java/com/github/reviewassistant/reviewassistant/ChangeEventListener.java [102:189]
public void onEvent(Event changeEvent) {
boolean unmarkPrivate = isUnmarkPrivateEvent(changeEvent);
if (!(changeEvent instanceof PatchSetCreatedEvent) && !unmarkPrivate) {
return;
}
PatchSetEvent event = (PatchSetEvent) changeEvent;
ChangeAttribute c = event.change.get();
PatchSetAttribute p = event.patchSet.get();
log.debug(unmarkPrivate ? "Unmark private commit {}" : "Received new commit: {}", p.revision);
Project.NameKey projectName = event.getProjectNameKey();
boolean autoAddReviewers = true;
boolean ignorePrivate = true;
boolean ignoreWip = false;
try {
log.debug("Checking if autoAddReviewers is enabled");
autoAddReviewers =
cfg.getProjectPluginConfigWithInheritance(projectName, pluginName)
.getBoolean("reviewers", "autoAddReviewers", autoAddReviewers);
ignorePrivate =
cfg.getProjectPluginConfigWithInheritance(projectName, pluginName)
.getBoolean("reviewers", "ignorePrivate", ignorePrivate);
ignoreWip =
cfg.getProjectPluginConfigWithInheritance(projectName, pluginName)
.getBoolean("reviewers", "ignoreWip", ignoreWip);
} catch (NoSuchProjectException e) {
log.error("Could not find project {}", projectName);
}
if ((!ignorePrivate && unmarkPrivate)
|| (ignorePrivate && Boolean.TRUE.equals(c.isPrivate))
|| (ignoreWip && Boolean.TRUE.equals(c.wip))) {
return;
}
log.debug(autoAddReviewers ? "autoAddReviewers is enabled" : "autoAddReviewers is disabled");
if (autoAddReviewers) {
try (Repository repo = repoManager.openRepository(projectName);
RevWalk walk = new RevWalk(repo)) {
Change.Id changeId = Change.id(c.number);
final ChangeData cd = changeDataFactory.create(projectName, changeId);
if (cd == null) {
log.warn(
"Could not find change {} in project {}", changeId.get(), projectName.toString());
return;
}
final Change change = cd.change();
PatchSet.Id psId = PatchSet.id(changeId, p.number);
PatchSet ps = cd.patchSet(psId);
if (ps == null) {
log.warn("Could not find patch set {}", psId.get());
return;
}
RevCommit commit = walk.parseCommit(ObjectId.fromString(p.revision));
final Runnable task = reviewAssistantFactory.create(commit, change, ps, repo, projectName);
workQueue
.getDefaultQueue()
.submit(
new Runnable() {
@Override
public void run() {
RequestContext old =
tl.setContext(
new RequestContext() {
@Override
public CurrentUser getUser() {
if (!ReviewAssistant.realUser) {
return pluginUser;
}
return identifiedUserFactory.create(change.getOwner());
}
});
try {
task.run();
} finally {
tl.setContext(old);
}
}
});
} catch (IOException x) {
log.error(x.getMessage(), x);
}
}
}