public HeuristicResult findResponsibleUser()

in src/main/java/jetbrains/buildServer/investigationsAutoAssigner/heuristics/OneCommitterHeuristic.java [38:74]


  public HeuristicResult findResponsibleUser(@NotNull HeuristicContext heuristicContext) {
    HeuristicResult result = new HeuristicResult();
    SBuild build = heuristicContext.getBuild();
    User responsible = null;
    final SelectPrevBuildPolicy selectPrevBuildPolicy = SelectPrevBuildPolicy.SINCE_LAST_BUILD;
    for (SVcsModification vcsChange : build.getChanges(selectPrevBuildPolicy, true)) {
      try {
        ModificationAnalyzerFactory.ModificationAnalyzer vcsChangeWrapped = myModificationAnalyzerFactory.getInstance(vcsChange);
        User probableResponsible = vcsChangeWrapped.getOnlyCommitter(heuristicContext.getUsersToIgnore());
        if (probableResponsible == null) continue;
        ensureSameUsers(responsible, probableResponsible);
        responsible = probableResponsible;
      } catch (HeuristicNotApplicableException ex) {
        LOGGER.debug("Heuristic \"OneCommitter\" is ignored as " + ex.getMessage() + ". Build: " +
                     LogUtil.describe(build));
        return result;
      }
    }

    if (responsible != null) {
      if (isCompilationErrorFixed(build)) {
        LOGGER.debug("Heuristic \"OneCommitter\" found " + responsible.getDescriptiveName() + "as responsible but " +
                     "results are ignored as previous build contained compilation errors." +
                     "  Build: " + LogUtil.describe(build));
        return result;
      }

      Responsibility responsibility = new Responsibility(responsible, "was the only committer to the build");
      heuristicContext.getTestRuns().forEach(sTestRun -> result.addResponsibility(sTestRun, responsibility));

      heuristicContext.getBuildProblems()
                      .stream()
                      .filter(problem -> BuildProblemsFilter.supportedEverywhereTypes.contains(problem.getBuildProblemData().getType()))
                      .forEach(buildProblem -> result.addResponsibility(buildProblem, responsibility));
    }
    return result;
  }