public void onEvent()

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);
      }
    }
  }