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