@Override
public synchronized void blameResult(InputFile file, List<BlameLine> lines) {
Preconditions.checkNotNull(file);
Preconditions.checkNotNull(lines);
Preconditions.checkArgument(allFilesToBlame.contains(file), "It was not expected to blame file " + file.relativePath());
if (lines.size() != file.lines()) {
LOG.debug("Ignoring blame result since provider returned " + lines.size() + " blame lines but file " + file.relativePath() + " has " + file.lines() + " lines");
return;
}
PropertiesBuilder<Integer, String> authors = propertiesBuilder(CoreMetrics.SCM_AUTHORS_BY_LINE);
PropertiesBuilder<Integer, String> dates = propertiesBuilder(CoreMetrics.SCM_LAST_COMMIT_DATETIMES_BY_LINE);
PropertiesBuilder<Integer, String> revisions = propertiesBuilder(CoreMetrics.SCM_REVISIONS_BY_LINE);
int lineNumber = 1;
for (BlameLine line : lines) {
authors.add(lineNumber, normalizeString(line.author()));
Date date = line.date();
dates.add(lineNumber, date != null ? DateUtils.formatDateTime(date) : "");
revisions.add(lineNumber, line.revision());
lineNumber++;
}
ScmSensor.saveMeasures(context, file, authors.buildData(), dates.buildData(), revisions.buildData());
allFilesToBlame.remove(file);
count++;
progressReport.message(count + "/" + total + " files analyzed, last one was " + file.absolutePath());
}