3 class RootSet extends DataModelObject {
5 constructor(id, object)
8 this._repositories = [];
9 this._repositoryToCommitMap = {};
10 this._latestCommitTime = null;
15 for (var row of object.roots) {
16 var repositoryId = row.repository;
17 row.repository = Repository.findById(repositoryId);
19 console.assert(!this._repositoryToCommitMap[repositoryId]);
20 this._repositoryToCommitMap[repositoryId] = CommitLog.ensureSingleton(row.id, row);
21 this._repositories.push(row.repository);
25 repositories() { return this._repositories; }
26 commitForRepository(repository) { return this._repositoryToCommitMap[repository.id()]; }
28 revisionForRepository(repository)
30 var commit = this._repositoryToCommitMap[repository.id()];
31 return commit ? commit.revision() : null;
36 if (this._latestCommitTime == null) {
38 for (var repositoryId in this._repositoryToCommitMap)
39 maxTime = Math.max(maxTime, +this._repositoryToCommitMap[repositoryId].time());
40 this._latestCommitTime = maxTime;
42 return this._latestCommitTime;
47 if (this._repositories.length != other._repositories.length)
49 for (var repositoryId in this._repositoryToCommitMap) {
50 if (this._repositoryToCommitMap[repositoryId] != other._repositoryToCommitMap[repositoryId])
56 static containsMultipleCommitsForRepository(rootSets, repository)
58 console.assert(repository instanceof Repository);
59 if (rootSets.length < 2)
61 var firstCommit = rootSets[0].commitForRepository(repository);
62 for (var set of rootSets) {
63 var anotherCommit = set.commitForRepository(repository);
64 if (!firstCommit != !anotherCommit || (firstCommit && firstCommit.revision() != anotherCommit.revision()))
71 class MeasurementRootSet extends RootSet {
73 constructor(id, revisionList)
76 for (var values of revisionList) {
77 // [<commit-id>, <repository-id>, <revision>, <time>]
78 var commitId = values[0];
79 var repositoryId = values[1];
80 var revision = values[2];
82 var repository = Repository.findById(repositoryId);
86 this._repositoryToCommitMap[repositoryId] = CommitLog.ensureSingleton(commitId, {repository: repository, revision: revision, time: time});
87 this._repositories.push(repository);
91 static ensureSingleton(measurementId, revisionList)
93 var rootSetId = measurementId + '-rootset';
94 return RootSet.findById(rootSetId) || (new MeasurementRootSet(rootSetId, revisionList));
102 this._revisionListByRepository = new Map;
105 setRevisionForRepository(repository, revision)
107 console.assert(repository instanceof Repository);
108 this._revisionListByRepository.set(repository, revision);
111 repositories() { return Array.from(this._revisionListByRepository.keys()); }
112 revisionForRepository(repository) { return this._revisionListByRepository.get(repository); }
116 if (typeof module != 'undefined') {
117 module.exports.RootSet = RootSet;
118 module.exports.MeasurementRootSet = MeasurementRootSet;
119 module.exports.CustomRootSet = CustomRootSet;