blob: 2800f9674ccd96a060dbd89412baa36bec6cc29c [file] [log] [blame]
class ChartRevisionRange {
constructor(chart, metric)
{
this._chart = chart;
const thisClass = new.target;
this._computeRevisionList = new LazilyEvaluatedFunction((currentPoint, prevoiusPoint) => {
return thisClass._computeRevisionList(currentPoint, prevoiusPoint);
});
this._computeRevisionRange = new LazilyEvaluatedFunction((repository, currentPoint, previousPoint) => {
return {
repository,
from: thisClass._revisionForPoint(repository, previousPoint),
to: thisClass._revisionForPoint(repository, currentPoint)};
});
}
revisionList()
{
const referencePoints = this._chart.referencePoints('current');
const currentPoint = referencePoints ? referencePoints.currentPoint : null;
const previousPoint = referencePoints ? referencePoints.previousPoint : null;
return this._computeRevisionList.evaluate(currentPoint, previousPoint);
}
rangeForRepository(repository)
{
const referencePoints = this._chart.referencePoints('current');
const currentPoint = referencePoints ? referencePoints.currentPoint : null;
const previousPoint = referencePoints ? referencePoints.previousPoint : null;
return this._computeRevisionRange.evaluate(repository, currentPoint, previousPoint);
}
static _revisionForPoint(repository, point)
{
if (!point || !repository)
return null;
const commitSet = point.commitSet();
if (!commitSet)
return null;
const commit = commitSet.commitForRepository(repository);
if (!commit)
return null;
return commit.revision();
}
static _computeRevisionList(currentPoint, previousPoint)
{
if (!currentPoint)
return null;
const currentCommitSet = currentPoint.commitSet();
const previousCommitSet = previousPoint ? previousPoint.commitSet() : null;
const repositoriesInCurrentCommitSet = Repository.sortByNamePreferringOnesWithURL(currentCommitSet.repositories());
const revisionList = [];
for (let repository of repositoriesInCurrentCommitSet) {
let currentCommit = currentCommitSet.commitForRepository(repository);
let previousCommit = previousCommitSet ? previousCommitSet.commitForRepository(repository) : null;
revisionList.push(currentCommit.diff(previousCommit));
}
return revisionList;
}
}