<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[213952] trunk/Websites/perf.webkit.org</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/213952">213952</a></dd>
<dt>Author</dt> <dd>rniwa@webkit.org</dd>
<dt>Date</dt> <dd>2017-03-14 16:06:40 -0700 (Tue, 14 Mar 2017)</dd>
</dl>

<h3>Log Message</h3>
<pre>Rename RootSet to CommitSet
https://bugs.webkit.org/show_bug.cgi?id=169580

Rubber-stamped by Chris Dumez.

Renamed root_sets to commit_sets and roots to commit_set_relationships in the database schema, and renamed
related classes in public/v3/ and tools accordingly.

RootSet, MeasurementRootSet, and CustomRootSet are respectively renamed to CommitSet, MeasurementCommitSet,
and CustomCommitSet.

In order to migrate the database, run:
```
BEGIN;
ALTER TABLE root_sets RENAME TO commit_sets;
ALTER TABLE commit_sets RENAME COLUMN rootset_id TO commitset_id;
ALTER TABLE roots RENAME TO commit_set_relationships;
ALTER TABLE commit_set_relationships RENAME COLUMN root_set TO commitset_set;
ALTER TABLE commit_set_relationships RENAME COLUMN root_commit TO commitset_commit;
ALTER TABLE build_requests RENAME COLUMN request_root_set TO request_commit_set;
END;
```

* browser-tests/index.html:
* init-database.sql:
* public/api/build-requests.php:
(main):
* public/api/test-groups.php:
(main):
(format_test_group):
* public/include/build-requests-fetcher.php:
(BuildRequestsFetcher::__construct):
(BuildRequestsFetcher::results_internal):
(BuildRequestsFetcher::commit_sets): Renamed from root_sets.
(BuildRequestsFetcher::commits): Renamed from roots.
(BuildRequestsFetcher::fetch_commits_for_set_if_needed): Renamed from fetch_roots_for_set_if_needed.
* public/privileged-api/create-test-group.php:
(main):
(ensure_commit_sets): Renamed from commit_sets_from_root_sets.
* public/v3/components/analysis-results-viewer.js:
(AnalysisResultsViewer.prototype.buildRowGroups):
(AnalysisResultsViewer.prototype._collectCommitSetsInTestGroups): Renamed from _collectRootSetsInTestGroups.
(AnalysisResultsViewer.prototype._buildRowsForPointsAndTestGroups):
(AnalysisResultsViewer.prototype._buildRowsForPointsAndTestGroups):
(AnalysisResultsViewer.CommitSetInTestGroup): Renamed from RootSetInTestGroup.
(AnalysisResultsViewer.CommitSetInTestGroup.prototype.constructor):
(AnalysisResultsViewer.CommitSetInTestGroup.prototype.commitSet): Renamed from rootSet.
(AnalysisResultsViewer.CommitSetInTestGroup.prototype.succeedingCommitSet): Renamed from succeedingRootSet.
(AnalysisResultsViewer.TestGroupStackingBlock.prototype.constructor):
(AnalysisResultsViewer.TestGroupStackingBlock.prototype.addRowIndex):
(AnalysisResultsViewer.TestGroupStackingBlock.prototype.isComplete):
(AnalysisResultsViewer.TestGroupStackingBlock.prototype.startRowIndex):
(AnalysisResultsViewer.TestGroupStackingBlock.prototype.endRowIndex):
(AnalysisResultsViewer.TestGroupStackingBlock.prototype._computeTestGroupStatus):
* public/v3/components/chart-revision-range.js:
(ChartRevisionRange.prototype._revisionForPoint):
(ChartRevisionRange.prototype._computeRevisionList):
* public/v3/components/customizable-test-group-form.js:
(CustomizableTestGroupForm.prototype.constructor):
(CustomizableTestGroupForm.prototype.setCommitSetMap): Renamed from setRootSetMap.
(CustomizableTestGroupForm.prototype._submitted):
(CustomizableTestGroupForm.prototype._computeCommitSetMap): Renamed from _computeRootSetMap.
(CustomizableTestGroupForm.prototype.render): Renamed from render.
(CustomizableTestGroupForm.prototype._constructRevisionRadioButtons):
* public/v3/components/results-table.js:
(ResultsTable.prototype.render):
(ResultsTable.prototype._createRevisionListCells):
(ResultsTable.prototype._computeRepositoryList):
(ResultsTableRow.prototype.constructor):
(ResultsTableRow.prototype.commitSet): Renamed from rootSet.
* public/v3/components/test-group-results-table.js:
(TestGroupResultsTable.prototype.buildRowGroups):
* public/v3/index.html:
* public/v3/models/build-request.js:
(BuildRequest.prototype.constructor):
(BuildRequest.prototype.updateSingleton):
(BuildRequest.prototype.commitSet): Renamed from rootSet.
(BuildRequest.constructBuildRequestsFromData):
* public/v3/models/commit-set.js: Renamed from public/v3/models/root-set.js.
(CommitSet): Renamed from RootSet.
(CommitSet.containsMultipleCommitsForRepository):
(MeasurementCommitSet): Renamed from MeasurementRootSet.
(MeasurementCommitSet.prototype.namedStaticMap):
(MeasurementCommitSet.prototype.ensureNamedStaticMap):
(MeasurementCommitSet.namedStaticMap):
(MeasurementCommitSet.ensureNamedStaticMap):
(MeasurementCommitSet.ensureSingleton):
(CustomCommitSet): Renamed from CustomRootSet.
* public/v3/models/measurement-adaptor.js:
(MeasurementAdaptor.prototype.applyTo):
* public/v3/models/test-group.js:
(TestGroup.prototype.constructor):
(TestGroup.prototype.addBuildRequest):
(TestGroup.prototype.repetitionCount):
(TestGroup.prototype.requestedCommitSets): Renamed from requestedRootSets.
(TestGroup.prototype.requestsForCommitSet): Renamed from requestsForRootSet.
(TestGroup.prototype.labelForCommitSet): Renamed from labelForRootSet.
(TestGroup.prototype.didSetResult):
(TestGroup.prototype.compareTestResults):
(TestGroup.prototype._valuesForCommitSet): Renamed from _valuesForRootSet.
(TestGroup.prototype.createAndRefetchTestGroups):
* public/v3/pages/analysis-task-page.js:
(AnalysisTaskPage.prototype.render):
(AnalysisTaskPage.prototype._retryCurrentTestGroup):
(AnalysisTaskPage.prototype._createNewTestGroupFromChart):
(AnalysisTaskPage.prototype._createNewTestGroupFromViewer):
(AnalysisTaskPage.prototype._createTestGroupAfterVerifyingCommitSetList):
* server-tests/api-build-requests-tests.js:
* server-tests/resources/mock-data.js:
(MockData.resetV3Models):
(MockData.addMockData):
(MockData.addAnotherMockTestGroup):
* tools/detect-changes.js:
(createAnalysisTaskAndNotify):
* tools/js/buildbot-syncer.js:
(BuildbotSyncer.prototype._propertiesForBuildRequest):
(BuildbotSyncer.prototype._revisionSetFromCommitSetWithExclusionList):
* tools/js/database.js:
(tableToPrefixMap):
* tools/js/v3-models.js:
* tools/sync-buildbot.js:
(syncLoop):
* tools/sync-with-buildbot.py: Deleted. No longer used.
* unit-tests/analysis-task-tests.js:
* unit-tests/build-request-tests.js:
(sampleBuildRequestData):
* unit-tests/buildbot-syncer-tests.js:
(sampleCommitSetData):
* unit-tests/measurement-adaptor-tests.js:
* unit-tests/measurement-set-tests.js:
* unit-tests/resources/mock-v3-models.js:
(MockModels.inject):
* unit-tests/test-groups-tests.js:
(sampleTestGroup):</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkWebsitesperfwebkitorgChangeLog">trunk/Websites/perf.webkit.org/ChangeLog</a></li>
<li><a href="#trunkWebsitesperfwebkitorgbrowsertestsindexhtml">trunk/Websites/perf.webkit.org/browser-tests/index.html</a></li>
<li><a href="#trunkWebsitesperfwebkitorginitdatabasesql">trunk/Websites/perf.webkit.org/init-database.sql</a></li>
<li><a href="#trunkWebsitesperfwebkitorgpublicapibuildrequestsphp">trunk/Websites/perf.webkit.org/public/api/build-requests.php</a></li>
<li><a href="#trunkWebsitesperfwebkitorgpublicapitestgroupsphp">trunk/Websites/perf.webkit.org/public/api/test-groups.php</a></li>
<li><a href="#trunkWebsitesperfwebkitorgpublicincludebuildrequestsfetcherphp">trunk/Websites/perf.webkit.org/public/include/build-requests-fetcher.php</a></li>
<li><a href="#trunkWebsitesperfwebkitorgpublicprivilegedapicreatetestgroupphp">trunk/Websites/perf.webkit.org/public/privileged-api/create-test-group.php</a></li>
<li><a href="#trunkWebsitesperfwebkitorgpublicv3componentsanalysisresultsviewerjs">trunk/Websites/perf.webkit.org/public/v3/components/analysis-results-viewer.js</a></li>
<li><a href="#trunkWebsitesperfwebkitorgpublicv3componentschartrevisionrangejs">trunk/Websites/perf.webkit.org/public/v3/components/chart-revision-range.js</a></li>
<li><a href="#trunkWebsitesperfwebkitorgpublicv3componentscustomizabletestgroupformjs">trunk/Websites/perf.webkit.org/public/v3/components/customizable-test-group-form.js</a></li>
<li><a href="#trunkWebsitesperfwebkitorgpublicv3componentsresultstablejs">trunk/Websites/perf.webkit.org/public/v3/components/results-table.js</a></li>
<li><a href="#trunkWebsitesperfwebkitorgpublicv3componentstestgroupresultstablejs">trunk/Websites/perf.webkit.org/public/v3/components/test-group-results-table.js</a></li>
<li><a href="#trunkWebsitesperfwebkitorgpublicv3indexhtml">trunk/Websites/perf.webkit.org/public/v3/index.html</a></li>
<li><a href="#trunkWebsitesperfwebkitorgpublicv3modelsbuildrequestjs">trunk/Websites/perf.webkit.org/public/v3/models/build-request.js</a></li>
<li><a href="#trunkWebsitesperfwebkitorgpublicv3modelsmeasurementadaptorjs">trunk/Websites/perf.webkit.org/public/v3/models/measurement-adaptor.js</a></li>
<li><a href="#trunkWebsitesperfwebkitorgpublicv3modelstestgroupjs">trunk/Websites/perf.webkit.org/public/v3/models/test-group.js</a></li>
<li><a href="#trunkWebsitesperfwebkitorgpublicv3pagesanalysistaskpagejs">trunk/Websites/perf.webkit.org/public/v3/pages/analysis-task-page.js</a></li>
<li><a href="#trunkWebsitesperfwebkitorgservertestsapibuildrequeststestsjs">trunk/Websites/perf.webkit.org/server-tests/api-build-requests-tests.js</a></li>
<li><a href="#trunkWebsitesperfwebkitorgservertestsresourcesmockdatajs">trunk/Websites/perf.webkit.org/server-tests/resources/mock-data.js</a></li>
<li><a href="#trunkWebsitesperfwebkitorgtoolsdetectchangesjs">trunk/Websites/perf.webkit.org/tools/detect-changes.js</a></li>
<li><a href="#trunkWebsitesperfwebkitorgtoolsjsbuildbotsyncerjs">trunk/Websites/perf.webkit.org/tools/js/buildbot-syncer.js</a></li>
<li><a href="#trunkWebsitesperfwebkitorgtoolsjsdatabasejs">trunk/Websites/perf.webkit.org/tools/js/database.js</a></li>
<li><a href="#trunkWebsitesperfwebkitorgtoolsjsv3modelsjs">trunk/Websites/perf.webkit.org/tools/js/v3-models.js</a></li>
<li><a href="#trunkWebsitesperfwebkitorgtoolssyncbuildbotjs">trunk/Websites/perf.webkit.org/tools/sync-buildbot.js</a></li>
<li><a href="#trunkWebsitesperfwebkitorgunittestsanalysistasktestsjs">trunk/Websites/perf.webkit.org/unit-tests/analysis-task-tests.js</a></li>
<li><a href="#trunkWebsitesperfwebkitorgunittestsbuildrequesttestsjs">trunk/Websites/perf.webkit.org/unit-tests/build-request-tests.js</a></li>
<li><a href="#trunkWebsitesperfwebkitorgunittestsbuildbotsyncertestsjs">trunk/Websites/perf.webkit.org/unit-tests/buildbot-syncer-tests.js</a></li>
<li><a href="#trunkWebsitesperfwebkitorgunittestsmeasurementadaptortestsjs">trunk/Websites/perf.webkit.org/unit-tests/measurement-adaptor-tests.js</a></li>
<li><a href="#trunkWebsitesperfwebkitorgunittestsmeasurementsettestsjs">trunk/Websites/perf.webkit.org/unit-tests/measurement-set-tests.js</a></li>
<li><a href="#trunkWebsitesperfwebkitorgunittestsresourcesmockv3modelsjs">trunk/Websites/perf.webkit.org/unit-tests/resources/mock-v3-models.js</a></li>
<li><a href="#trunkWebsitesperfwebkitorgunitteststestgroupstestsjs">trunk/Websites/perf.webkit.org/unit-tests/test-groups-tests.js</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkWebsitesperfwebkitorgpublicv3modelscommitsetjs">trunk/Websites/perf.webkit.org/public/v3/models/commit-set.js</a></li>
</ul>

<h3>Removed Paths</h3>
<ul>
<li><a href="#trunkWebsitesperfwebkitorgpublicv3modelsrootsetjs">trunk/Websites/perf.webkit.org/public/v3/models/root-set.js</a></li>
<li><a href="#trunkWebsitesperfwebkitorgtoolssyncwithbuildbotpy">trunk/Websites/perf.webkit.org/tools/sync-with-buildbot.py</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkWebsitesperfwebkitorgChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Websites/perf.webkit.org/ChangeLog (213951 => 213952)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Websites/perf.webkit.org/ChangeLog        2017-03-14 23:03:47 UTC (rev 213951)
+++ trunk/Websites/perf.webkit.org/ChangeLog        2017-03-14 23:06:40 UTC (rev 213952)
</span><span class="lines">@@ -1,3 +1,140 @@
</span><ins>+2017-03-12  Ryosuke Niwa  &lt;rniwa@webkit.org&gt;
+
+        Rename RootSet to CommitSet
+        https://bugs.webkit.org/show_bug.cgi?id=169580
+
+        Rubber-stamped by Chris Dumez.
+
+        Renamed root_sets to commit_sets and roots to commit_set_relationships in the database schema, and renamed
+        related classes in public/v3/ and tools accordingly.
+
+        RootSet, MeasurementRootSet, and CustomRootSet are respectively renamed to CommitSet, MeasurementCommitSet,
+        and CustomCommitSet.
+
+        In order to migrate the database, run:
+        ```
+        BEGIN;
+        ALTER TABLE root_sets RENAME TO commit_sets;
+        ALTER TABLE commit_sets RENAME COLUMN rootset_id TO commitset_id;
+        ALTER TABLE roots RENAME TO commit_set_relationships;
+        ALTER TABLE commit_set_relationships RENAME COLUMN root_set TO commitset_set;
+        ALTER TABLE commit_set_relationships RENAME COLUMN root_commit TO commitset_commit;
+        ALTER TABLE build_requests RENAME COLUMN request_root_set TO request_commit_set;
+        END;
+        ```
+
+        * browser-tests/index.html:
+        * init-database.sql:
+        * public/api/build-requests.php:
+        (main):
+        * public/api/test-groups.php:
+        (main):
+        (format_test_group):
+        * public/include/build-requests-fetcher.php:
+        (BuildRequestsFetcher::__construct):
+        (BuildRequestsFetcher::results_internal):
+        (BuildRequestsFetcher::commit_sets): Renamed from root_sets.
+        (BuildRequestsFetcher::commits): Renamed from roots.
+        (BuildRequestsFetcher::fetch_commits_for_set_if_needed): Renamed from fetch_roots_for_set_if_needed.
+        * public/privileged-api/create-test-group.php:
+        (main):
+        (ensure_commit_sets): Renamed from commit_sets_from_root_sets.
+        * public/v3/components/analysis-results-viewer.js:
+        (AnalysisResultsViewer.prototype.buildRowGroups):
+        (AnalysisResultsViewer.prototype._collectCommitSetsInTestGroups): Renamed from _collectRootSetsInTestGroups.
+        (AnalysisResultsViewer.prototype._buildRowsForPointsAndTestGroups):
+        (AnalysisResultsViewer.prototype._buildRowsForPointsAndTestGroups):
+        (AnalysisResultsViewer.CommitSetInTestGroup): Renamed from RootSetInTestGroup.
+        (AnalysisResultsViewer.CommitSetInTestGroup.prototype.constructor):
+        (AnalysisResultsViewer.CommitSetInTestGroup.prototype.commitSet): Renamed from rootSet.
+        (AnalysisResultsViewer.CommitSetInTestGroup.prototype.succeedingCommitSet): Renamed from succeedingRootSet.
+        (AnalysisResultsViewer.TestGroupStackingBlock.prototype.constructor):
+        (AnalysisResultsViewer.TestGroupStackingBlock.prototype.addRowIndex):
+        (AnalysisResultsViewer.TestGroupStackingBlock.prototype.isComplete):
+        (AnalysisResultsViewer.TestGroupStackingBlock.prototype.startRowIndex):
+        (AnalysisResultsViewer.TestGroupStackingBlock.prototype.endRowIndex):
+        (AnalysisResultsViewer.TestGroupStackingBlock.prototype._computeTestGroupStatus):
+        * public/v3/components/chart-revision-range.js:
+        (ChartRevisionRange.prototype._revisionForPoint):
+        (ChartRevisionRange.prototype._computeRevisionList):
+        * public/v3/components/customizable-test-group-form.js:
+        (CustomizableTestGroupForm.prototype.constructor):
+        (CustomizableTestGroupForm.prototype.setCommitSetMap): Renamed from setRootSetMap.
+        (CustomizableTestGroupForm.prototype._submitted):
+        (CustomizableTestGroupForm.prototype._computeCommitSetMap): Renamed from _computeRootSetMap.
+        (CustomizableTestGroupForm.prototype.render): Renamed from render.
+        (CustomizableTestGroupForm.prototype._constructRevisionRadioButtons):
+        * public/v3/components/results-table.js:
+        (ResultsTable.prototype.render):
+        (ResultsTable.prototype._createRevisionListCells):
+        (ResultsTable.prototype._computeRepositoryList):
+        (ResultsTableRow.prototype.constructor):
+        (ResultsTableRow.prototype.commitSet): Renamed from rootSet.
+        * public/v3/components/test-group-results-table.js:
+        (TestGroupResultsTable.prototype.buildRowGroups):
+        * public/v3/index.html:
+        * public/v3/models/build-request.js:
+        (BuildRequest.prototype.constructor):
+        (BuildRequest.prototype.updateSingleton):
+        (BuildRequest.prototype.commitSet): Renamed from rootSet.
+        (BuildRequest.constructBuildRequestsFromData):
+        * public/v3/models/commit-set.js: Renamed from public/v3/models/root-set.js.
+        (CommitSet): Renamed from RootSet.
+        (CommitSet.containsMultipleCommitsForRepository):
+        (MeasurementCommitSet): Renamed from MeasurementRootSet.
+        (MeasurementCommitSet.prototype.namedStaticMap):
+        (MeasurementCommitSet.prototype.ensureNamedStaticMap):
+        (MeasurementCommitSet.namedStaticMap):
+        (MeasurementCommitSet.ensureNamedStaticMap):
+        (MeasurementCommitSet.ensureSingleton):
+        (CustomCommitSet): Renamed from CustomRootSet.
+        * public/v3/models/measurement-adaptor.js:
+        (MeasurementAdaptor.prototype.applyTo):
+        * public/v3/models/test-group.js:
+        (TestGroup.prototype.constructor):
+        (TestGroup.prototype.addBuildRequest):
+        (TestGroup.prototype.repetitionCount):
+        (TestGroup.prototype.requestedCommitSets): Renamed from requestedRootSets.
+        (TestGroup.prototype.requestsForCommitSet): Renamed from requestsForRootSet.
+        (TestGroup.prototype.labelForCommitSet): Renamed from labelForRootSet.
+        (TestGroup.prototype.didSetResult):
+        (TestGroup.prototype.compareTestResults):
+        (TestGroup.prototype._valuesForCommitSet): Renamed from _valuesForRootSet.
+        (TestGroup.prototype.createAndRefetchTestGroups):
+        * public/v3/pages/analysis-task-page.js:
+        (AnalysisTaskPage.prototype.render):
+        (AnalysisTaskPage.prototype._retryCurrentTestGroup):
+        (AnalysisTaskPage.prototype._createNewTestGroupFromChart):
+        (AnalysisTaskPage.prototype._createNewTestGroupFromViewer):
+        (AnalysisTaskPage.prototype._createTestGroupAfterVerifyingCommitSetList):
+        * server-tests/api-build-requests-tests.js:
+        * server-tests/resources/mock-data.js:
+        (MockData.resetV3Models):
+        (MockData.addMockData):
+        (MockData.addAnotherMockTestGroup):
+        * tools/detect-changes.js:
+        (createAnalysisTaskAndNotify):
+        * tools/js/buildbot-syncer.js:
+        (BuildbotSyncer.prototype._propertiesForBuildRequest):
+        (BuildbotSyncer.prototype._revisionSetFromCommitSetWithExclusionList):
+        * tools/js/database.js:
+        (tableToPrefixMap):
+        * tools/js/v3-models.js:
+        * tools/sync-buildbot.js:
+        (syncLoop):
+        * tools/sync-with-buildbot.py: Deleted. No longer used.
+        * unit-tests/analysis-task-tests.js:
+        * unit-tests/build-request-tests.js:
+        (sampleBuildRequestData):
+        * unit-tests/buildbot-syncer-tests.js:
+        (sampleCommitSetData):
+        * unit-tests/measurement-adaptor-tests.js:
+        * unit-tests/measurement-set-tests.js:
+        * unit-tests/resources/mock-v3-models.js:
+        (MockModels.inject):
+        * unit-tests/test-groups-tests.js:
+        (sampleTestGroup):
+
</ins><span class="cx"> 2017-03-13  Ryosuke Niwa  &lt;rniwa@webkit.org&gt;
</span><span class="cx"> 
</span><span class="cx">         Database's query functions should support querying for a row with NULL value
</span></span></pre></div>
<a id="trunkWebsitesperfwebkitorgbrowsertestsindexhtml"></a>
<div class="modfile"><h4>Modified: trunk/Websites/perf.webkit.org/browser-tests/index.html (213951 => 213952)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Websites/perf.webkit.org/browser-tests/index.html        2017-03-14 23:03:47 UTC (rev 213951)
+++ trunk/Websites/perf.webkit.org/browser-tests/index.html        2017-03-14 23:06:40 UTC (rev 213952)
</span><span class="lines">@@ -211,7 +211,7 @@
</span><span class="cx">             'models/platform.js',
</span><span class="cx">             'models/test.js',
</span><span class="cx">             'models/metric.js',
</span><del>-            'models/root-set.js',
</del><ins>+            'models/commit-set.js',
</ins><span class="cx">             'models/commit-log.js',
</span><span class="cx">             'components/base.js',
</span><span class="cx">             'components/time-series-chart.js',
</span></span></pre></div>
<a id="trunkWebsitesperfwebkitorginitdatabasesql"></a>
<div class="modfile"><h4>Modified: trunk/Websites/perf.webkit.org/init-database.sql (213951 => 213952)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Websites/perf.webkit.org/init-database.sql        2017-03-14 23:03:47 UTC (rev 213951)
+++ trunk/Websites/perf.webkit.org/init-database.sql        2017-03-14 23:06:40 UTC (rev 213952)
</span><span class="lines">@@ -26,8 +26,8 @@
</span><span class="cx"> DROP TABLE IF EXISTS triggerable_repositories CASCADE;
</span><span class="cx"> DROP TABLE IF EXISTS bugs CASCADE;
</span><span class="cx"> DROP TABLE IF EXISTS analysis_test_groups CASCADE;
</span><del>-DROP TABLE IF EXISTS root_sets CASCADE;
-DROP TABLE IF EXISTS roots CASCADE;
</del><ins>+DROP TABLE IF EXISTS commit_sets CASCADE;
+DROP TABLE IF EXISTS commit_set_relationships CASCADE;
</ins><span class="cx"> DROP TABLE IF EXISTS build_requests CASCADE;
</span><span class="cx"> DROP TYPE IF EXISTS build_request_status_type CASCADE;
</span><span class="cx"> 
</span><span class="lines">@@ -251,12 +251,12 @@
</span><span class="cx">     CONSTRAINT testgroup_name_must_be_unique_for_each_task UNIQUE(testgroup_task, testgroup_name));
</span><span class="cx"> CREATE INDEX testgroup_task_index ON analysis_test_groups(testgroup_task);
</span><span class="cx"> 
</span><del>-CREATE TABLE root_sets (
-    rootset_id serial PRIMARY KEY);
</del><ins>+CREATE TABLE commit_sets (
+    commitset_id serial PRIMARY KEY);
</ins><span class="cx"> 
</span><del>-CREATE TABLE roots (
-    root_set integer REFERENCES root_sets NOT NULL,
-    root_commit integer REFERENCES commits NOT NULL);
</del><ins>+CREATE TABLE commit_set_relationships (
+    commitset_set integer REFERENCES commit_sets NOT NULL,
+    commitset_commit integer REFERENCES commits NOT NULL);
</ins><span class="cx"> 
</span><span class="cx"> CREATE TYPE build_request_status_type as ENUM ('pending', 'scheduled', 'running', 'failed', 'completed', 'canceled');
</span><span class="cx"> CREATE TABLE build_requests (
</span><span class="lines">@@ -266,7 +266,7 @@
</span><span class="cx">     request_test integer REFERENCES tests NOT NULL,
</span><span class="cx">     request_group integer REFERENCES analysis_test_groups NOT NULL,
</span><span class="cx">     request_order integer NOT NULL,
</span><del>-    request_root_set integer REFERENCES root_sets NOT NULL,
</del><ins>+    request_commit_set integer REFERENCES commit_sets NOT NULL,
</ins><span class="cx">     request_status build_request_status_type NOT NULL DEFAULT 'pending',
</span><span class="cx">     request_url varchar(1024),
</span><span class="cx">     request_build integer REFERENCES builds,
</span></span></pre></div>
<a id="trunkWebsitesperfwebkitorgpublicapibuildrequestsphp"></a>
<div class="modfile"><h4>Modified: trunk/Websites/perf.webkit.org/public/api/build-requests.php (213951 => 213952)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Websites/perf.webkit.org/public/api/build-requests.php        2017-03-14 23:03:47 UTC (rev 213951)
+++ trunk/Websites/perf.webkit.org/public/api/build-requests.php        2017-03-14 23:06:40 UTC (rev 213952)
</span><span class="lines">@@ -33,8 +33,8 @@
</span><span class="cx">     $resolve_id = array_get($_GET, 'useLegacyIdResolution');
</span><span class="cx">     exit_with_success(array(
</span><span class="cx">         'buildRequests' =&gt; $resolve_id ? $requests_fetcher-&gt;results_with_resolved_ids() : $requests_fetcher-&gt;results(),
</span><del>-        'rootSets' =&gt; $requests_fetcher-&gt;root_sets(),
-        'roots' =&gt; $requests_fetcher-&gt;roots(),
</del><ins>+        'commitSets' =&gt; $requests_fetcher-&gt;commit_sets(),
+        'commits' =&gt; $requests_fetcher-&gt;commits(),
</ins><span class="cx">     ));
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkWebsitesperfwebkitorgpublicapitestgroupsphp"></a>
<div class="modfile"><h4>Modified: trunk/Websites/perf.webkit.org/public/api/test-groups.php (213951 => 213952)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Websites/perf.webkit.org/public/api/test-groups.php        2017-03-14 23:03:47 UTC (rev 213951)
+++ trunk/Websites/perf.webkit.org/public/api/test-groups.php        2017-03-14 23:06:40 UTC (rev 213952)
</span><span class="lines">@@ -49,13 +49,13 @@
</span><span class="cx">     foreach ($build_requests as $request) {
</span><span class="cx">         $request_group = &amp;$group_by_id[$request['testGroup']];
</span><span class="cx">         array_push($request_group['buildRequests'], $request['id']);
</span><del>-        array_push($request_group['rootSets'], $request['rootSet']);
</del><ins>+        array_push($request_group['commitSets'], $request['commitSet']);
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     exit_with_success(array('testGroups' =&gt; $test_groups,
</span><span class="cx">         'buildRequests' =&gt; $build_requests,
</span><del>-        'rootSets' =&gt; $build_requests_fetcher-&gt;root_sets(),
-        'roots' =&gt; $build_requests_fetcher-&gt;roots()));
</del><ins>+        'commitSets' =&gt; $build_requests_fetcher-&gt;commit_sets(),
+        'commits' =&gt; $build_requests_fetcher-&gt;commits()));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> function format_test_group($group_row) {
</span><span class="lines">@@ -67,7 +67,7 @@
</span><span class="cx">         'createdAt' =&gt; strtotime($group_row['testgroup_created_at']) * 1000,
</span><span class="cx">         'hidden' =&gt; Database::is_true($group_row['testgroup_hidden']),
</span><span class="cx">         'buildRequests' =&gt; array(),
</span><del>-        'rootSets' =&gt; array(),
</del><ins>+        'commitSets' =&gt; array(),
</ins><span class="cx">     );
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkWebsitesperfwebkitorgpublicincludebuildrequestsfetcherphp"></a>
<div class="modfile"><h4>Modified: trunk/Websites/perf.webkit.org/public/include/build-requests-fetcher.php (213951 => 213952)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Websites/perf.webkit.org/public/include/build-requests-fetcher.php        2017-03-14 23:03:47 UTC (rev 213951)
+++ trunk/Websites/perf.webkit.org/public/include/build-requests-fetcher.php        2017-03-14 23:06:40 UTC (rev 213952)
</span><span class="lines">@@ -6,10 +6,10 @@
</span><span class="cx">     function __construct($db) {
</span><span class="cx">         $this-&gt;db = $db;
</span><span class="cx">         $this-&gt;rows = null;
</span><del>-        $this-&gt;root_sets = array();
-        $this-&gt;roots_by_id = array();
-        $this-&gt;roots = array();
-        $this-&gt;root_sets_by_id = array();
</del><ins>+        $this-&gt;commit_sets = array();
+        $this-&gt;commits_by_id = array();
+        $this-&gt;commits = array();
+        $this-&gt;commit_sets_by_id = array();
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     function fetch_for_task($task_id) {
</span><span class="lines">@@ -60,9 +60,9 @@
</span><span class="cx">         foreach ($this-&gt;rows as $row) {
</span><span class="cx">             $test_id = $row['request_test'];
</span><span class="cx">             $platform_id = $row['request_platform'];
</span><del>-            $root_set_id = $row['request_root_set'];
</del><ins>+            $commit_set_id = $row['request_commit_set'];
</ins><span class="cx"> 
</span><del>-            $this-&gt;fetch_roots_for_set_if_needed($root_set_id, $resolve_ids);
</del><ins>+            $this-&gt;fetch_commits_for_set_if_needed($commit_set_id, $resolve_ids);
</ins><span class="cx"> 
</span><span class="cx">             array_push($requests, array(
</span><span class="cx">                 'id' =&gt; $row['request_id'],
</span><span class="lines">@@ -72,7 +72,7 @@
</span><span class="cx">                 'platform' =&gt; $resolve_ids ? $id_to_platform_name[$platform_id] : $platform_id,
</span><span class="cx">                 'testGroup' =&gt; $row['request_group'],
</span><span class="cx">                 'order' =&gt; $row['request_order'],
</span><del>-                'rootSet' =&gt; $root_set_id,
</del><ins>+                'commitSet' =&gt; $commit_set_id,
</ins><span class="cx">                 'status' =&gt; $row['request_status'],
</span><span class="cx">                 'url' =&gt; $row['request_url'],
</span><span class="cx">                 'build' =&gt; $row['request_build'],
</span><span class="lines">@@ -82,45 +82,45 @@
</span><span class="cx">         return $requests;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    function root_sets() {
-        return $this-&gt;root_sets;
</del><ins>+    function commit_sets() {
+        return $this-&gt;commit_sets;
</ins><span class="cx">     }
</span><span class="cx"> 
</span><del>-    function roots() {
-        return $this-&gt;roots;
</del><ins>+    function commits() {
+        return $this-&gt;commits;
</ins><span class="cx">     }
</span><span class="cx"> 
</span><del>-    private function fetch_roots_for_set_if_needed($root_set_id, $resolve_ids) {
-        if (array_key_exists($root_set_id, $this-&gt;root_sets_by_id))
</del><ins>+    private function fetch_commits_for_set_if_needed($commit_set_id, $resolve_ids) {
+        if (array_key_exists($commit_set_id, $this-&gt;commit_sets_by_id))
</ins><span class="cx">             return;
</span><span class="cx"> 
</span><del>-        $root_rows = $this-&gt;db-&gt;query_and_fetch_all('SELECT *
-            FROM roots, commits LEFT OUTER JOIN repositories ON commit_repository = repository_id
-            WHERE root_commit = commit_id AND root_set = $1', array($root_set_id));
</del><ins>+        $commit_rows = $this-&gt;db-&gt;query_and_fetch_all('SELECT *
+            FROM commit_set_relationships, commits LEFT OUTER JOIN repositories ON commit_repository = repository_id
+            WHERE commitset_commit = commit_id AND commitset_set = $1', array($commit_set_id));
</ins><span class="cx"> 
</span><del>-        $root_ids = array();
-        foreach ($root_rows as $row) {
</del><ins>+        $commit_ids = array();
+        foreach ($commit_rows as $row) {
</ins><span class="cx">             $repository_id = $resolve_ids ? $row['repository_name'] : $row['repository_id'];
</span><span class="cx">             $revision = $row['commit_revision'];
</span><span class="cx">             $commit_time = $row['commit_time'];
</span><del>-            array_push($root_ids, $row['commit_id']);
</del><ins>+            array_push($commit_ids, $row['commit_id']);
</ins><span class="cx"> 
</span><del>-            $root_id = $row['commit_id'];
-            if (array_key_exists($root_id, $this-&gt;roots_by_id))
</del><ins>+            $commit_id = $row['commit_id'];
+            if (array_key_exists($commit_id, $this-&gt;commits_by_id))
</ins><span class="cx">                 continue;
</span><span class="cx"> 
</span><del>-            array_push($this-&gt;roots, array(
-                'id' =&gt; $root_id,
</del><ins>+            array_push($this-&gt;commits, array(
+                'id' =&gt; $commit_id,
</ins><span class="cx">                 'repository' =&gt; $repository_id,
</span><span class="cx">                 'revision' =&gt; $revision,
</span><span class="cx">                 'time' =&gt; Database::to_js_time($commit_time)));
</span><span class="cx"> 
</span><del>-            $this-&gt;roots_by_id[$root_id] = TRUE;
</del><ins>+            $this-&gt;commits_by_id[$commit_id] = TRUE;
</ins><span class="cx">         }
</span><span class="cx"> 
</span><del>-        $this-&gt;root_sets_by_id[$root_set_id] = TRUE;
</del><ins>+        $this-&gt;commit_sets_by_id[$commit_set_id] = TRUE;
</ins><span class="cx"> 
</span><del>-        array_push($this-&gt;root_sets, array('id' =&gt; $root_set_id, 'roots' =&gt; $root_ids));
</del><ins>+        array_push($this-&gt;commit_sets, array('id' =&gt; $commit_set_id, 'commits' =&gt; $commit_ids));
</ins><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkWebsitesperfwebkitorgpublicprivilegedapicreatetestgroupphp"></a>
<div class="modfile"><h4>Modified: trunk/Websites/perf.webkit.org/public/privileged-api/create-test-group.php (213951 => 213952)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Websites/perf.webkit.org/public/privileged-api/create-test-group.php        2017-03-14 23:03:47 UTC (rev 213951)
+++ trunk/Websites/perf.webkit.org/public/privileged-api/create-test-group.php        2017-03-14 23:06:40 UTC (rev 213952)
</span><span class="lines">@@ -9,13 +9,13 @@
</span><span class="cx"> 
</span><span class="cx">     $task_id = array_get($data, 'task');
</span><span class="cx">     $name = array_get($data, 'name');
</span><del>-    $root_sets = array_get($data, 'rootSets');
</del><ins>+    $commit_sets_info = array_get($data, 'commitSets');
</ins><span class="cx">     $repetition_count = intval(array_get($data, 'repetitionCount', 1));
</span><span class="cx"> 
</span><span class="cx">     if (!$name)
</span><span class="cx">         exit_with_error('MissingName');
</span><del>-    if (!$root_sets)
-        exit_with_error('MissingRootSets');
</del><ins>+    if (!$commit_sets_info)
+        exit_with_error('MissingCommitSets');
</ins><span class="cx">     if ($repetition_count &lt; 1)
</span><span class="cx">         exit_with_error('InvalidRepetitionCount', array('repetitionCount' =&gt; $repetition_count));
</span><span class="cx"> 
</span><span class="lines">@@ -26,16 +26,16 @@
</span><span class="cx">     if (!$triggerable)
</span><span class="cx">         exit_with_error('TriggerableNotFoundForTask', array('task' =&gt; $task_id));
</span><span class="cx"> 
</span><del>-    $commit_sets = commit_sets_from_root_sets($db, $root_sets);
</del><ins>+    $commit_sets = ensure_commit_sets($db, $commit_sets_info);
</ins><span class="cx"> 
</span><span class="cx">     $db-&gt;begin_transaction();
</span><span class="cx"> 
</span><del>-    $root_set_id_list = array();
</del><ins>+    $commit_set_id_list = array();
</ins><span class="cx">     foreach ($commit_sets as $commit_list) {
</span><del>-        $root_set_id = $db-&gt;insert_row('root_sets', 'rootset', array());
</del><ins>+        $commit_set_id = $db-&gt;insert_row('commit_sets', 'commitset', array());
</ins><span class="cx">         foreach ($commit_list as $commit)
</span><del>-            $db-&gt;insert_row('roots', 'root', array('set' =&gt; $root_set_id, 'commit' =&gt; $commit), 'commit');
-        array_push($root_set_id_list, $root_set_id);
</del><ins>+            $db-&gt;insert_row('commit_set_relationships', 'commitset', array('set' =&gt; $commit_set_id, 'commit' =&gt; $commit), 'commit');
+        array_push($commit_set_id_list, $commit_set_id);
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     $group_id = $db-&gt;insert_row('analysis_test_groups', 'testgroup',
</span><span class="lines">@@ -43,7 +43,7 @@
</span><span class="cx"> 
</span><span class="cx">     $order = 0;
</span><span class="cx">     for ($i = 0; $i &lt; $repetition_count; $i++) {
</span><del>-        foreach ($root_set_id_list as $root_set_id) {
</del><ins>+        foreach ($commit_set_id_list as $commit_set_id) {
</ins><span class="cx">             $db-&gt;insert_row('build_requests', 'request', array(
</span><span class="cx">                 'triggerable' =&gt; $triggerable['id'],
</span><span class="cx">                 'platform' =&gt; $triggerable['platform'],
</span><span class="lines">@@ -50,7 +50,7 @@
</span><span class="cx">                 'test' =&gt; $triggerable['test'],
</span><span class="cx">                 'group' =&gt; $group_id,
</span><span class="cx">                 'order' =&gt; $order,
</span><del>-                'root_set' =&gt; $root_set_id));
</del><ins>+                'commit_set' =&gt; $commit_set_id));
</ins><span class="cx">             $order++;
</span><span class="cx">         }
</span><span class="cx">     }
</span><span class="lines">@@ -60,13 +60,13 @@
</span><span class="cx">     exit_with_success(array('testGroupId' =&gt; $group_id));
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-function commit_sets_from_root_sets($db, $root_sets) {
</del><ins>+function ensure_commit_sets($db, $commit_sets_info) {
</ins><span class="cx">     $repository_name_to_id = array();
</span><span class="cx">     foreach ($db-&gt;fetch_table('repositories') as $row)
</span><span class="cx">         $repository_name_to_id[$row['repository_name']] = $row['repository_id'];
</span><span class="cx"> 
</span><span class="cx">     $commit_sets = array();
</span><del>-    foreach ($root_sets as $repository_name =&gt; $revisions) {
</del><ins>+    foreach ($commit_sets_info as $repository_name =&gt; $revisions) {
</ins><span class="cx">         $repository_id = array_get($repository_name_to_id, $repository_name);
</span><span class="cx">         if (!$repository_id)
</span><span class="cx">             exit_with_error('RepositoryNotFound', array('name' =&gt; $repository_name));
</span><span class="lines">@@ -83,7 +83,7 @@
</span><span class="cx">     $commit_count_per_set = count($commit_sets[0]);
</span><span class="cx">     foreach ($commit_sets as $commits) {
</span><span class="cx">         if ($commit_count_per_set != count($commits))
</span><del>-            exit_with_error('InvalidRootSets', array('rootSets' =&gt; $root_sets));
</del><ins>+            exit_with_error('InvalidCommitSets', array('commitSets' =&gt; $commit_sets));
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     return $commit_sets;
</span></span></pre></div>
<a id="trunkWebsitesperfwebkitorgpublicv3componentsanalysisresultsviewerjs"></a>
<div class="modfile"><h4>Modified: trunk/Websites/perf.webkit.org/public/v3/components/analysis-results-viewer.js (213951 => 213952)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Websites/perf.webkit.org/public/v3/components/analysis-results-viewer.js        2017-03-14 23:03:47 UTC (rev 213951)
+++ trunk/Websites/perf.webkit.org/public/v3/components/analysis-results-viewer.js        2017-03-14 23:06:40 UTC (rev 213952)
</span><span class="lines">@@ -85,21 +85,21 @@
</span><span class="cx">         Instrumentation.startMeasuringTime('AnalysisResultsViewer', 'buildRowGroups');
</span><span class="cx"> 
</span><span class="cx">         var testGroups = this._testGroups || [];
</span><del>-        var rootSetsInTestGroups = this._collectRootSetsInTestGroups(testGroups);
</del><ins>+        var commitSetsInTestGroups = this._collectCommitSetsInTestGroups(testGroups);
</ins><span class="cx"> 
</span><del>-        var rowToMatchingRootSets = new Map;
-        var rowList = this._buildRowsForPointsAndTestGroups(rootSetsInTestGroups, rowToMatchingRootSets);
</del><ins>+        var rowToMatchingCommitSets = new Map;
+        var rowList = this._buildRowsForPointsAndTestGroups(commitSetsInTestGroups, rowToMatchingCommitSets);
</ins><span class="cx"> 
</span><span class="cx">         var testGroupLayoutMap = new Map;
</span><span class="cx">         var self = this;
</span><span class="cx">         rowList.forEach(function (row, rowIndex) {
</span><del>-            var matchingRootSets = rowToMatchingRootSets.get(row);
-            if (!matchingRootSets) {
</del><ins>+            var matchingCommitSets = rowToMatchingCommitSets.get(row);
+            if (!matchingCommitSets) {
</ins><span class="cx">                 console.assert(row instanceof AnalysisResultsViewer.ExpandableRow);
</span><span class="cx">                 return;
</span><span class="cx">             }
</span><span class="cx"> 
</span><del>-            for (var entry of matchingRootSets) {
</del><ins>+            for (var entry of matchingCommitSets) {
</ins><span class="cx">                 var testGroup = entry.testGroup();
</span><span class="cx"> 
</span><span class="cx">                 var block = testGroupLayoutMap.get(testGroup);
</span><span class="lines">@@ -130,44 +130,44 @@
</span><span class="cx">         return [{rows: rowList}];
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    _collectRootSetsInTestGroups(testGroups)
</del><ins>+    _collectCommitSetsInTestGroups(testGroups)
</ins><span class="cx">     {
</span><span class="cx">         if (!this._testGroups)
</span><span class="cx">             return [];
</span><span class="cx"> 
</span><del>-        var rootSetsInTestGroups = [];
</del><ins>+        var commitSetsInTestGroups = [];
</ins><span class="cx">         for (var group of this._testGroups) {
</span><del>-            var sortedSets = group.requestedRootSets();
</del><ins>+            var sortedSets = group.requestedCommitSets();
</ins><span class="cx">             for (var i = 0; i &lt; sortedSets.length; i++)
</span><del>-                rootSetsInTestGroups.push(new AnalysisResultsViewer.RootSetInTestGroup(group, sortedSets[i], sortedSets[i + 1]));
</del><ins>+                commitSetsInTestGroups.push(new AnalysisResultsViewer.CommitSetInTestGroup(group, sortedSets[i], sortedSets[i + 1]));
</ins><span class="cx">         }
</span><span class="cx"> 
</span><del>-        return rootSetsInTestGroups;
</del><ins>+        return commitSetsInTestGroups;
</ins><span class="cx">     }
</span><span class="cx"> 
</span><del>-    _buildRowsForPointsAndTestGroups(rootSetsInTestGroups, rowToMatchingRootSets)
</del><ins>+    _buildRowsForPointsAndTestGroups(commitSetsInTestGroups, rowToMatchingCommitSets)
</ins><span class="cx">     {
</span><span class="cx">         console.assert(this._startPoint.series == this._endPoint.series);
</span><span class="cx">         var rowList = [];
</span><span class="cx">         var pointAfterEnd = this._endPoint.series.nextPoint(this._endPoint);
</span><del>-        var rootSetsWithPoints = new Set;
</del><ins>+        var commitSetsWithPoints = new Set;
</ins><span class="cx">         var pointIndex = 0;
</span><span class="cx">         var previousPoint;
</span><span class="cx">         for (var point = this._startPoint; point &amp;&amp; point != pointAfterEnd; point = point.series.nextPoint(point), pointIndex++) {
</span><del>-            var rootSetInPoint = point.rootSet();
-            var matchingRootSets = [];
-            for (var entry of rootSetsInTestGroups) {
-                if (rootSetInPoint.equals(entry.rootSet()) &amp;&amp; !rootSetsWithPoints.has(entry)) {
-                    matchingRootSets.push(entry);
-                    rootSetsWithPoints.add(entry);
</del><ins>+            const commitSetInPoint = point.commitSet();
+            const matchingCommitSets = [];
+            for (var entry of commitSetsInTestGroups) {
+                if (commitSetInPoint.equals(entry.commitSet()) &amp;&amp; !commitSetsWithPoints.has(entry)) {
+                    matchingCommitSets.push(entry);
+                    commitSetsWithPoints.add(entry);
</ins><span class="cx">                 }
</span><span class="cx">             }
</span><span class="cx"> 
</span><del>-            var hasMatchingTestGroup = !!matchingRootSets.length;
</del><ins>+            const hasMatchingTestGroup = !!matchingCommitSets.length;
</ins><span class="cx">             if (!hasMatchingTestGroup &amp;&amp; !this._expandedPoints.has(point))
</span><span class="cx">                 continue;
</span><span class="cx"> 
</span><del>-            var row = new ResultsTableRow(pointIndex.toString(), rootSetInPoint);
</del><ins>+            const row = new ResultsTableRow(pointIndex.toString(), commitSetInPoint);
</ins><span class="cx">             row.setResult(point);
</span><span class="cx"> 
</span><span class="cx">             if (previousPoint &amp;&amp; previousPoint.series.nextPoint(previousPoint) != point)
</span><span class="lines">@@ -174,36 +174,36 @@
</span><span class="cx">                 rowList.push(new AnalysisResultsViewer.ExpandableRow(this._expandBetween.bind(this, previousPoint, point)));
</span><span class="cx">             previousPoint = point;
</span><span class="cx"> 
</span><del>-            rowToMatchingRootSets.set(row, matchingRootSets);
</del><ins>+            rowToMatchingCommitSets.set(row, matchingCommitSets);
</ins><span class="cx">             rowList.push(row);
</span><span class="cx">         }
</span><span class="cx"> 
</span><del>-        rootSetsInTestGroups.forEach(function (entry) {
-            if (rootSetsWithPoints.has(entry))
</del><ins>+        commitSetsInTestGroups.forEach(function (entry) {
+            if (commitSetsWithPoints.has(entry))
</ins><span class="cx">                 return;
</span><span class="cx"> 
</span><span class="cx">             for (var i = 0; i &lt; rowList.length; i++) {
</span><span class="cx">                 var row = rowList[i];
</span><del>-                if (!(row instanceof AnalysisResultsViewer.ExpandableRow) &amp;&amp; row.rootSet().equals(entry.rootSet())) {
-                    rowToMatchingRootSets.get(row).push(entry);
</del><ins>+                if (!(row instanceof AnalysisResultsViewer.ExpandableRow) &amp;&amp; row.commitSet().equals(entry.commitSet())) {
+                    rowToMatchingCommitSets.get(row).push(entry);
</ins><span class="cx">                     return;
</span><span class="cx">                 }
</span><span class="cx">             }
</span><span class="cx"> 
</span><del>-            var groupTime = entry.rootSet().latestCommitTime();
-            var newRow = new ResultsTableRow(null, entry.rootSet());
-            rowToMatchingRootSets.set(newRow, [entry]);
</del><ins>+            var groupTime = entry.commitSet().latestCommitTime();
+            var newRow = new ResultsTableRow(null, entry.commitSet());
+            rowToMatchingCommitSets.set(newRow, [entry]);
</ins><span class="cx"> 
</span><span class="cx">             for (var i = 0; i &lt; rowList.length; i++) {
</span><span class="cx">                 if (rowList[i] instanceof AnalysisResultsViewer.ExpandableRow)
</span><span class="cx">                     continue;
</span><span class="cx"> 
</span><del>-                if (entry.succeedingRootSet() &amp;&amp; rowList[i].rootSet().equals(entry.succeedingRootSet())) {
</del><ins>+                if (entry.succeedingCommitSet() &amp;&amp; rowList[i].commitSet().equals(entry.succeedingCommitSet())) {
</ins><span class="cx">                     rowList.splice(i, 0, newRow);
</span><span class="cx">                     return;
</span><span class="cx">                 }
</span><span class="cx"> 
</span><del>-                var rowTime = rowList[i].rootSet().latestCommitTime();
</del><ins>+                var rowTime = rowList[i].commitSet().latestCommitTime();
</ins><span class="cx">                 if (rowTime &gt; groupTime) {
</span><span class="cx">                     rowList.splice(i, 0, newRow);
</span><span class="cx">                     return;
</span><span class="lines">@@ -211,13 +211,13 @@
</span><span class="cx"> 
</span><span class="cx">                 if (rowTime == groupTime) {
</span><span class="cx">                     // Missing some commits. Do as best as we can to avoid going backwards in time.
</span><del>-                    var repositoriesInNewRow = entry.rootSet().repositories();
</del><ins>+                    var repositoriesInNewRow = entry.commitSet().repositories();
</ins><span class="cx">                     for (var j = i; j &lt; rowList.length; j++) {
</span><span class="cx">                         if (rowList[j] instanceof AnalysisResultsViewer.ExpandableRow)
</span><span class="cx">                             continue;
</span><span class="cx">                         for (var repository of repositoriesInNewRow) {
</span><del>-                            var newCommit = entry.rootSet().commitForRepository(repository);
-                            var rowCommit = rowList[j].rootSet().commitForRepository(repository);
</del><ins>+                            var newCommit = entry.commitSet().commitForRepository(repository);
+                            var rowCommit = rowList[j].commitSet().commitForRepository(repository);
</ins><span class="cx">                             if (!rowCommit || newCommit.time() &lt; rowCommit.time()) {
</span><span class="cx">                                 rowList.splice(j, 0, newRow);
</span><span class="cx">                                 return;
</span><span class="lines">@@ -227,8 +227,8 @@
</span><span class="cx">                 }
</span><span class="cx">             }
</span><span class="cx"> 
</span><del>-            var newRow = new ResultsTableRow(null, entry.rootSet());
-            rowToMatchingRootSets.set(newRow, [entry]);
</del><ins>+            var newRow = new ResultsTableRow(null, entry.commitSet());
+            rowToMatchingCommitSets.set(newRow, [entry]);
</ins><span class="cx">             rowList.push(newRow);
</span><span class="cx">         });
</span><span class="cx"> 
</span><span class="lines">@@ -355,19 +355,19 @@
</span><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-AnalysisResultsViewer.RootSetInTestGroup = class {
-    constructor(testGroup, rootSet, succeedingRootSet)
</del><ins>+AnalysisResultsViewer.CommitSetInTestGroup = class {
+    constructor(testGroup, commitSet, succeedingCommitSet)
</ins><span class="cx">     {
</span><span class="cx">         console.assert(testGroup instanceof TestGroup);
</span><del>-        console.assert(rootSet instanceof RootSet);
</del><ins>+        console.assert(commitSet instanceof CommitSet);
</ins><span class="cx">         this._testGroup = testGroup;
</span><del>-        this._rootSet = rootSet;
-        this._succeedingRootSet = succeedingRootSet;
</del><ins>+        this._commitSet = commitSet;
+        this._succeedingCommitSet = succeedingCommitSet;
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     testGroup() { return this._testGroup; }
</span><del>-    rootSet() { return this._rootSet; }
-    succeedingRootSet() { return this._succeedingRootSet; }
</del><ins>+    commitSet() { return this._commitSet; }
+    succeedingCommitSet() { return this._succeedingCommitSet; }
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> AnalysisResultsViewer.TestGroupStackingBlock = class {
</span><span class="lines">@@ -374,7 +374,7 @@
</span><span class="cx">     constructor(testGroup, className, callback)
</span><span class="cx">     {
</span><span class="cx">         this._testGroup = testGroup;
</span><del>-        this._rootSetIndexRowIndexMap = [];
</del><ins>+        this._commitSetIndexRowIndexMap = [];
</ins><span class="cx">         this._className = className;
</span><span class="cx">         this._label = null;
</span><span class="cx">         this._title = null;
</span><span class="lines">@@ -382,10 +382,10 @@
</span><span class="cx">         this._callback = callback;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    addRowIndex(rootSetInTestGroup, rowIndex)
</del><ins>+    addRowIndex(commitSetInTestGroup, rowIndex)
</ins><span class="cx">     {
</span><del>-        console.assert(rootSetInTestGroup instanceof AnalysisResultsViewer.RootSetInTestGroup);
-        this._rootSetIndexRowIndexMap.push({rootSet: rootSetInTestGroup.rootSet(), rowIndex: rowIndex});
</del><ins>+        console.assert(commitSetInTestGroup instanceof AnalysisResultsViewer.CommitSetInTestGroup);
+        this._commitSetIndexRowIndexMap.push({commitSet: commitSetInTestGroup.commitSet(), rowIndex: rowIndex});
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     testGroup() { return this._testGroup; }
</span><span class="lines">@@ -402,10 +402,10 @@
</span><span class="cx">         }, ComponentBase.createLink(this._label, this._title, this._callback));
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    isComplete() { return this._rootSetIndexRowIndexMap.length &gt;= 2; }
</del><ins>+    isComplete() { return this._commitSetIndexRowIndexMap.length &gt;= 2; }
</ins><span class="cx"> 
</span><del>-    startRowIndex() { return this._rootSetIndexRowIndexMap[0].rowIndex; }
-    endRowIndex() { return this._rootSetIndexRowIndexMap[this._rootSetIndexRowIndexMap.length - 1].rowIndex; }
</del><ins>+    startRowIndex() { return this._commitSetIndexRowIndexMap[0].rowIndex; }
+    endRowIndex() { return this._commitSetIndexRowIndexMap[this._commitSetIndexRowIndexMap.length - 1].rowIndex; }
</ins><span class="cx">     isThin()
</span><span class="cx">     {
</span><span class="cx">         this._computeTestGroupStatus();
</span><span class="lines">@@ -417,10 +417,10 @@
</span><span class="cx">         if (this._status || !this.isComplete())
</span><span class="cx">             return;
</span><span class="cx"> 
</span><del>-        console.assert(this._rootSetIndexRowIndexMap.length &lt;= 2); // FIXME: Support having more root sets.
</del><ins>+        console.assert(this._commitSetIndexRowIndexMap.length &lt;= 2); // FIXME: Support having more root sets.
</ins><span class="cx"> 
</span><span class="cx">         var result = this._testGroup.compareTestResults(
</span><del>-            this._rootSetIndexRowIndexMap[0].rootSet, this._rootSetIndexRowIndexMap[1].rootSet);
</del><ins>+            this._commitSetIndexRowIndexMap[0].commitSet, this._commitSetIndexRowIndexMap[1].commitSet);
</ins><span class="cx"> 
</span><span class="cx">         this._label = result.label;
</span><span class="cx">         this._title = result.fullLabel;
</span></span></pre></div>
<a id="trunkWebsitesperfwebkitorgpublicv3componentschartrevisionrangejs"></a>
<div class="modfile"><h4>Modified: trunk/Websites/perf.webkit.org/public/v3/components/chart-revision-range.js (213951 => 213952)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Websites/perf.webkit.org/public/v3/components/chart-revision-range.js        2017-03-14 23:03:47 UTC (rev 213951)
+++ trunk/Websites/perf.webkit.org/public/v3/components/chart-revision-range.js        2017-03-14 23:06:40 UTC (rev 213952)
</span><span class="lines">@@ -38,10 +38,10 @@
</span><span class="cx">     {
</span><span class="cx">         if (!point || !repository)
</span><span class="cx">             return null;
</span><del>-        const rootSet = point.rootSet();
-        if (!rootSet)
</del><ins>+        const commitSet = point.commitSet();
+        if (!commitSet)
</ins><span class="cx">             return null;
</span><del>-        const commit = rootSet.commitForRepository(repository);
</del><ins>+        const commit = commitSet.commitForRepository(repository);
</ins><span class="cx">         if (!commit)
</span><span class="cx">             return null;
</span><span class="cx">         return commit.revision();
</span><span class="lines">@@ -52,14 +52,14 @@
</span><span class="cx">         if (!currentPoint)
</span><span class="cx">             return null;
</span><span class="cx"> 
</span><del>-        const currentRootSet = currentPoint.rootSet();
-        const previousRootSet = previousPoint ? previousPoint.rootSet() : null;
</del><ins>+        const currentCommitSet = currentPoint.commitSet();
+        const previousCommitSet = previousPoint ? previousPoint.commitSet() : null;
</ins><span class="cx"> 
</span><del>-        const repositoriesInCurrentRootSet = Repository.sortByNamePreferringOnesWithURL(currentRootSet.repositories());
</del><ins>+        const repositoriesInCurrentCommitSet = Repository.sortByNamePreferringOnesWithURL(currentCommitSet.repositories());
</ins><span class="cx">         const revisionList = [];
</span><del>-        for (let repository of repositoriesInCurrentRootSet) {
-            let currentCommit = currentRootSet.commitForRepository(repository);
-            let previousCommit = previousRootSet ? previousRootSet.commitForRepository(repository) : null;
</del><ins>+        for (let repository of repositoriesInCurrentCommitSet) {
+            let currentCommit = currentCommitSet.commitForRepository(repository);
+            let previousCommit = previousCommitSet ? previousCommitSet.commitForRepository(repository) : null;
</ins><span class="cx">             revisionList.push(currentCommit.diff(previousCommit));
</span><span class="cx">         }
</span><span class="cx">         return revisionList;
</span></span></pre></div>
<a id="trunkWebsitesperfwebkitorgpublicv3componentscustomizabletestgroupformjs"></a>
<div class="modfile"><h4>Modified: trunk/Websites/perf.webkit.org/public/v3/components/customizable-test-group-form.js (213951 => 213952)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Websites/perf.webkit.org/public/v3/components/customizable-test-group-form.js        2017-03-14 23:03:47 UTC (rev 213951)
+++ trunk/Websites/perf.webkit.org/public/v3/components/customizable-test-group-form.js        2017-03-14 23:06:40 UTC (rev 213952)
</span><span class="lines">@@ -4,7 +4,7 @@
</span><span class="cx">     constructor()
</span><span class="cx">     {
</span><span class="cx">         super('customizable-test-group-form');
</span><del>-        this._rootSetMap = null;
</del><ins>+        this._commitSetMap = null;
</ins><span class="cx">         this._renderedRepositorylist = null;
</span><span class="cx">         this._customized = false;
</span><span class="cx">         this._nameControl = this.content().querySelector('.name');
</span><span class="lines">@@ -12,9 +12,9 @@
</span><span class="cx">         this.content().querySelector('a').onclick = this._customize.bind(this);
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    setRootSetMap(map)
</del><ins>+    setCommitSetMap(map)
</ins><span class="cx">     {
</span><del>-        this._rootSetMap = map;
</del><ins>+        this._commitSetMap = map;
</ins><span class="cx">         this._customized = false;
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="lines">@@ -21,7 +21,7 @@
</span><span class="cx">     _submitted()
</span><span class="cx">     {
</span><span class="cx">         if (this._startCallback)
</span><del>-            this._startCallback(this._nameControl.value, this._repetitionCount, this._computeRootSetMap());
</del><ins>+            this._startCallback(this._nameControl.value, this._repetitionCount, this._computeCommitSetMap());
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     _customize(event)
</span><span class="lines">@@ -31,24 +31,24 @@
</span><span class="cx">         this.enqueueToRender();
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    _computeRootSetMap()
</del><ins>+    _computeCommitSetMap()
</ins><span class="cx">     {
</span><del>-        console.assert(this._rootSetMap);
</del><ins>+        console.assert(this._commitSetMap);
</ins><span class="cx">         if (!this._customized)
</span><del>-            return this._rootSetMap;
</del><ins>+            return this._commitSetMap;
</ins><span class="cx"> 
</span><span class="cx">         console.assert(this._renderedRepositorylist);
</span><span class="cx">         var map = {};
</span><del>-        for (var label in this._rootSetMap) {
-            var customRootSet = new CustomRootSet;
</del><ins>+        for (var label in this._commitSetMap) {
+            var customCommitSet = new CustomCommitSet;
</ins><span class="cx">             for (var repository of this._renderedRepositorylist) {
</span><span class="cx">                 var className = CustomizableTestGroupForm._classForLabelAndRepository(label, repository);
</span><span class="cx">                 var revision = this.content().querySelector('.' + className).value;
</span><span class="cx">                 console.assert(revision);
</span><span class="cx">                 if (revision)
</span><del>-                    customRootSet.setRevisionForRepository(repository, revision);
</del><ins>+                    customCommitSet.setRevisionForRepository(repository, revision);
</ins><span class="cx">             }
</span><del>-            map[label] = customRootSet;
</del><ins>+            map[label] = customCommitSet;
</ins><span class="cx">         }
</span><span class="cx">         return map;
</span><span class="cx">     }
</span><span class="lines">@@ -56,7 +56,7 @@
</span><span class="cx">     render()
</span><span class="cx">     {
</span><span class="cx">         super.render();
</span><del>-        var map = this._rootSetMap;
</del><ins>+        var map = this._commitSetMap;
</ins><span class="cx"> 
</span><span class="cx">         this.content().querySelector('button').disabled = !(map &amp;&amp; this._nameControl.value);
</span><span class="cx">         this.content().querySelector('.customize-link').style.display = !map ? 'none' : null;
</span><span class="lines">@@ -68,11 +68,11 @@
</span><span class="cx">         console.assert(map);
</span><span class="cx"> 
</span><span class="cx">         var repositorySet = new Set;
</span><del>-        var rootSetLabels = [];
</del><ins>+        var commitSetLabels = [];
</ins><span class="cx">         for (var label in map) {
</span><span class="cx">             for (var repository of map[label].repositories())
</span><span class="cx">                 repositorySet.add(repository);
</span><del>-            rootSetLabels.push(label);
</del><ins>+            commitSetLabels.push(label);
</ins><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         this._renderedRepositorylist = Repository.sortByNamePreferringOnesWithURL(Array.from(repositorySet.values()));
</span><span class="lines">@@ -82,8 +82,8 @@
</span><span class="cx">             element('table', {class: 'custom-table'}, [
</span><span class="cx">                 element('thead',
</span><span class="cx">                     element('tr',
</span><del>-                        [element('td', 'Repository'), rootSetLabels.map(function (label) {
-                            return element('td', {colspan: rootSetLabels.length + 1}, label);
</del><ins>+                        [element('td', 'Repository'), commitSetLabels.map(function (label) {
+                            return element('td', {colspan: commitSetLabels.length + 1}, label);
</ins><span class="cx">                         })])),
</span><span class="cx">                 element('tbody',
</span><span class="cx">                     this._renderedRepositorylist.map(function (repository) {
</span><span class="lines">@@ -96,7 +96,7 @@
</span><span class="cx"> 
</span><span class="cx">     static _classForLabelAndRepository(label, repository) { return label + '-' + repository.id(); }
</span><span class="cx"> 
</span><del>-    static _constructRevisionRadioButtons(rootSetMap, repository, rowLabel)
</del><ins>+    static _constructRevisionRadioButtons(commitSetMap, repository, rowLabel)
</ins><span class="cx">     {
</span><span class="cx">         var className = this._classForLabelAndRepository(rowLabel, repository);
</span><span class="cx">         var groupName = className + '-group';
</span><span class="lines">@@ -103,11 +103,11 @@
</span><span class="cx">         var element = ComponentBase.createElement;
</span><span class="cx">         var revisionEditor = element('input', {class: className});
</span><span class="cx"> 
</span><del>-        var nodes = [];
-        for (var labelToChoose in rootSetMap) {
-            var commit = rootSetMap[labelToChoose].commitForRepository(repository);
-            var checked = labelToChoose == rowLabel;
-            var radioButton = this._createRadioButton(groupName, revisionEditor, commit, checked);
</del><ins>+        const nodes = [];
+        for (let labelToChoose in commitSetMap) {
+            const commit = commitSetMap[labelToChoose].commitForRepository(repository);
+            const checked = labelToChoose == rowLabel;
+            const radioButton = this._createRadioButton(groupName, revisionEditor, commit, checked);
</ins><span class="cx">             if (checked)
</span><span class="cx">                 revisionEditor.value = commit ? commit.revision() : '';
</span><span class="cx">             nodes.push(element('td', element('label', [radioButton, labelToChoose])));
</span></span></pre></div>
<a id="trunkWebsitesperfwebkitorgpublicv3componentsresultstablejs"></a>
<div class="modfile"><h4>Modified: trunk/Websites/perf.webkit.org/public/v3/components/results-table.js (213951 => 213952)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Websites/perf.webkit.org/public/v3/components/results-table.js        2017-03-14 23:03:47 UTC (rev 213951)
+++ trunk/Websites/perf.webkit.org/public/v3/components/results-table.js        2017-03-14 23:06:40 UTC (rev 213952)
</span><span class="lines">@@ -50,7 +50,7 @@
</span><span class="cx">                 if (self._rangeSelectorLabels) {
</span><span class="cx">                     for (var label of self._rangeSelectorLabels) {
</span><span class="cx">                         var content = '';
</span><del>-                        if (row.rootSet()) {
</del><ins>+                        if (row.commitSet()) {
</ins><span class="cx">                             content = element('input',
</span><span class="cx">                                 {type: 'radio', name: label, onchange: self._rangeSelectorClicked.bind(self, label, row)});
</span><span class="cx">                         }
</span><span class="lines">@@ -66,7 +66,7 @@
</span><span class="cx">                     cells.push(element('td', {class: 'whole-row-label', colspan: repositoryList.length + 1}, row.labelForWholeRow()));
</span><span class="cx">                 else {
</span><span class="cx">                     cells.push(element('td', row.resultContent(barGraphGroup)));
</span><del>-                    cells.push(self._createRevisionListCells(repositoryList, revisionSupressionCount, group, row.rootSet(), rowIndex));
</del><ins>+                    cells.push(self._createRevisionListCells(repositoryList, revisionSupressionCount, group, row.commitSet(), rowIndex));
</ins><span class="cx">                 }
</span><span class="cx"> 
</span><span class="cx">                 return element('tr', [cells, row.additionalColumns()]);
</span><span class="lines">@@ -92,13 +92,13 @@
</span><span class="cx">         Instrumentation.endMeasuringTime('ResultsTable', 'render');
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    _createRevisionListCells(repositoryList, revisionSupressionCount, testGroup, rootSet, rowIndex)
</del><ins>+    _createRevisionListCells(repositoryList, revisionSupressionCount, testGroup, commitSet, rowIndex)
</ins><span class="cx">     {
</span><span class="cx">         var element = ComponentBase.createElement;
</span><span class="cx">         var link = ComponentBase.createLink;
</span><span class="cx">         var cells = [];
</span><span class="cx">         for (var repository of repositoryList) {
</span><del>-            var commit = rootSet ? rootSet.commitForRepository(repository) : null;
</del><ins>+            var commit = commitSet ? commitSet.commitForRepository(repository) : null;
</ins><span class="cx"> 
</span><span class="cx">             if (revisionSupressionCount[repository.id()]) {
</span><span class="cx">                 revisionSupressionCount[repository.id()]--;
</span><span class="lines">@@ -105,10 +105,10 @@
</span><span class="cx">                 continue;
</span><span class="cx">             }
</span><span class="cx"> 
</span><del>-            var succeedingRowIndex = rowIndex + 1;
</del><ins>+            let succeedingRowIndex = rowIndex + 1;
</ins><span class="cx">             while (succeedingRowIndex &lt; testGroup.rows.length) {
</span><del>-                var succeedingRootSet = testGroup.rows[succeedingRowIndex].rootSet();
-                if (succeedingRootSet &amp;&amp; commit != succeedingRootSet.commitForRepository(repository))
</del><ins>+                const succeedingCommitSet = testGroup.rows[succeedingRowIndex].commitSet();
+                if (succeedingCommitSet &amp;&amp; commit != succeedingCommitSet.commitForRepository(repository))
</ins><span class="cx">                     break;
</span><span class="cx">                 succeedingRowIndex++;
</span><span class="cx">             }
</span><span class="lines">@@ -148,21 +148,21 @@
</span><span class="cx">             }
</span><span class="cx">             return a.hasUrlForRevision() ? -1 /* a &lt; b */ : 1; // a &gt; b
</span><span class="cx">         });
</span><del>-        var rootSets = [];
-        for (var group of rowGroups) {
-            for (var row of group.rows) {
-                var rootSet = row.rootSet();
-                if (rootSet)
-                    rootSets.push(rootSet);
</del><ins>+        const commitSets = [];
+        for (let group of rowGroups) {
+            for (let row of group.rows) {
+                const commitSet = row.commitSet();
+                if (commitSet)
+                    commitSets.push(commitSet);
</ins><span class="cx">             }
</span><span class="cx">         }
</span><del>-        if (!rootSets.length)
</del><ins>+        if (!commitSets.length)
</ins><span class="cx">             return [];
</span><span class="cx"> 
</span><del>-        var repositoryPresenceMap = {};
-        for (var repository of allRepositories) {
-            var someCommit = rootSets[0].commitForRepository(repository);
-            if (RootSet.containsMultipleCommitsForRepository(rootSets, repository))
</del><ins>+        const repositoryPresenceMap = {};
+        for (let repository of allRepositories) {
+            const someCommit = commitSets[0].commitForRepository(repository);
+            if (CommitSet.containsMultipleCommitsForRepository(commitSets, repository))
</ins><span class="cx">                 repositoryPresenceMap[repository.id()] = true;
</span><span class="cx">             else if (someCommit)
</span><span class="cx">                 extraRepositories.push(someCommit);
</span><span class="lines">@@ -271,19 +271,19 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> class ResultsTableRow {
</span><del>-    constructor(heading, rootSet)
</del><ins>+    constructor(heading, commitSet)
</ins><span class="cx">     {
</span><span class="cx">         this._heading = heading;
</span><span class="cx">         this._result = null;
</span><span class="cx">         this._link = null;
</span><span class="cx">         this._label = '-';
</span><del>-        this._rootSet = rootSet;
</del><ins>+        this._commitSet = commitSet;
</ins><span class="cx">         this._additionalColumns = [];
</span><span class="cx">         this._labelForWholeRow = null;
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     heading() { return this._heading; }
</span><del>-    rootSet() { return this._rootSet; }
</del><ins>+    commitSet() { return this._commitSet; }
</ins><span class="cx">     setResult(result) { this._result = result; }
</span><span class="cx">     setLink(link, label)
</span><span class="cx">     {
</span></span></pre></div>
<a id="trunkWebsitesperfwebkitorgpublicv3componentstestgroupresultstablejs"></a>
<div class="modfile"><h4>Modified: trunk/Websites/perf.webkit.org/public/v3/components/test-group-results-table.js (213951 => 213952)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Websites/perf.webkit.org/public/v3/components/test-group-results-table.js        2017-03-14 23:03:47 UTC (rev 213951)
+++ trunk/Websites/perf.webkit.org/public/v3/components/test-group-results-table.js        2017-03-14 23:06:40 UTC (rev 213952)
</span><span class="lines">@@ -29,19 +29,19 @@
</span><span class="cx"> 
</span><span class="cx">     buildRowGroups()
</span><span class="cx">     {
</span><del>-        var testGroup = this._testGroup;
</del><ins>+        const testGroup = this._testGroup;
</ins><span class="cx">         if (!testGroup)
</span><span class="cx">             return [];
</span><span class="cx"> 
</span><del>-        var rootSets = this._testGroup.requestedRootSets();
-        var groups = rootSets.map(function (rootSet) {
-            var rows = [new ResultsTableRow('Mean', rootSet)];
</del><ins>+        const commitSets = this._testGroup.requestedCommitSets();
+        const groups = commitSets.map(function (commitSet) {
+            const rows = [new ResultsTableRow('Mean', commitSet)];
</ins><span class="cx">             var results = [];
</span><span class="cx"> 
</span><del>-            for (var request of testGroup.requestsForRootSet(rootSet)) {
</del><ins>+            for (var request of testGroup.requestsForCommitSet(commitSet)) {
</ins><span class="cx">                 var result = request.result();
</span><del>-                // Call result.rootSet() for each result since the set of revisions used in testing maybe different from requested ones.
-                var row = new ResultsTableRow(1 + +request.order(), result ? result.rootSet() : null);
</del><ins>+                // Call result.commitSet() for each result since the set of revisions used in testing maybe different from requested ones.
+                var row = new ResultsTableRow(1 + +request.order(), result ? result.commitSet() : null);
</ins><span class="cx">                 rows.push(row);
</span><span class="cx">                 if (result) {
</span><span class="cx">                     row.setLink(result.build().url(), result.build().label());
</span><span class="lines">@@ -55,16 +55,16 @@
</span><span class="cx">             if (!isNaN(aggregatedResult.value))
</span><span class="cx">                 rows[0].setResult(aggregatedResult);
</span><span class="cx"> 
</span><del>-            return {heading: testGroup.labelForRootSet(rootSet), rows:rows};
</del><ins>+            return {heading: testGroup.labelForCommitSet(commitSet), rows};
</ins><span class="cx">         });
</span><span class="cx"> 
</span><del>-        var comparisonRows = [];
-        for (var i = 0; i &lt; rootSets.length; i++) {
-            for (var j = i + 1; j &lt; rootSets.length; j++) {
-                var startConfig = testGroup.labelForRootSet(rootSets[i]);
-                var endConfig = testGroup.labelForRootSet(rootSets[j]);
</del><ins>+        const comparisonRows = [];
+        for (let i = 0; i &lt; commitSets.length; i++) {
+            for (let j = i + 1; j &lt; commitSets.length; j++) {
+                const startConfig = testGroup.labelForCommitSet(commitSets[i]);
+                const endConfig = testGroup.labelForCommitSet(commitSets[j]);
</ins><span class="cx"> 
</span><del>-                var result = this._testGroup.compareTestResults(rootSets[i], rootSets[j]);
</del><ins>+                const result = this._testGroup.compareTestResults(commitSets[i], commitSets[j]);
</ins><span class="cx">                 if (result.changeType == null)
</span><span class="cx">                     continue;
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkWebsitesperfwebkitorgpublicv3indexhtml"></a>
<div class="modfile"><h4>Modified: trunk/Websites/perf.webkit.org/public/v3/index.html (213951 => 213952)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Websites/perf.webkit.org/public/v3/index.html        2017-03-14 23:03:47 UTC (rev 213951)
+++ trunk/Websites/perf.webkit.org/public/v3/index.html        2017-03-14 23:06:40 UTC (rev 213952)
</span><span class="lines">@@ -62,7 +62,7 @@
</span><span class="cx">         &lt;script src=&quot;models/analysis-task.js&quot;&gt;&lt;/script&gt;
</span><span class="cx">         &lt;script src=&quot;models/test-group.js&quot;&gt;&lt;/script&gt;
</span><span class="cx">         &lt;script src=&quot;models/build-request.js&quot;&gt;&lt;/script&gt;
</span><del>-        &lt;script src=&quot;models/root-set.js&quot;&gt;&lt;/script&gt;
</del><ins>+        &lt;script src=&quot;models/commit-set.js&quot;&gt;&lt;/script&gt;
</ins><span class="cx">         &lt;script src=&quot;models/triggerable.js&quot;&gt;&lt;/script&gt;
</span><span class="cx">         &lt;script src=&quot;models/manifest.js&quot;&gt;&lt;/script&gt;
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkWebsitesperfwebkitorgpublicv3modelsbuildrequestjs"></a>
<div class="modfile"><h4>Modified: trunk/Websites/perf.webkit.org/public/v3/models/build-request.js (213951 => 213952)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Websites/perf.webkit.org/public/v3/models/build-request.js        2017-03-14 23:03:47 UTC (rev 213951)
+++ trunk/Websites/perf.webkit.org/public/v3/models/build-request.js        2017-03-14 23:06:40 UTC (rev 213952)
</span><span class="lines">@@ -17,8 +17,8 @@
</span><span class="cx">         console.assert(object.test instanceof Test);
</span><span class="cx">         this._test = object.test;
</span><span class="cx">         this._order = object.order;
</span><del>-        console.assert(object.rootSet instanceof RootSet);
-        this._rootSet = object.rootSet;
</del><ins>+        console.assert(object.commitSet instanceof CommitSet);
+        this._commitSet = object.commitSet;
</ins><span class="cx">         this._status = object.status;
</span><span class="cx">         this._statusUrl = object.url;
</span><span class="cx">         this._buildId = object.build;
</span><span class="lines">@@ -30,7 +30,7 @@
</span><span class="cx">     {
</span><span class="cx">         console.assert(this._testGroup == object.testGroup);
</span><span class="cx">         console.assert(this._order == object.order);
</span><del>-        console.assert(this._rootSet == object.rootSet);
</del><ins>+        console.assert(this._commitSet == object.commitSet);
</ins><span class="cx">         this._status = object.status;
</span><span class="cx">         this._statusUrl = object.url;
</span><span class="cx">         this._buildId = object.build;
</span><span class="lines">@@ -42,7 +42,7 @@
</span><span class="cx">     platform() { return this._platform; }
</span><span class="cx">     test() { return this._test; }
</span><span class="cx">     order() { return +this._order; }
</span><del>-    rootSet() { return this._rootSet; }
</del><ins>+    commitSet() { return this._commitSet; }
</ins><span class="cx"> 
</span><span class="cx">     status() { return this._status; }
</span><span class="cx">     hasFinished() { return this._status == 'failed' || this._status == 'completed' || this._status == 'canceled'; }
</span><span class="lines">@@ -139,15 +139,15 @@
</span><span class="cx"> 
</span><span class="cx">     static constructBuildRequestsFromData(data)
</span><span class="cx">     {
</span><del>-        var rootIdMap = {};
-        for (var root of data['roots']) {
-            rootIdMap[root.id] = root;
-            root.repository = Repository.findById(root.repository);
</del><ins>+        const commitIdMap = {};
+        for (let commit of data['commits']) {
+            commitIdMap[commit.id] = commit;
+            commit.repository = Repository.findById(commit.repository);
</ins><span class="cx">         }
</span><span class="cx"> 
</span><del>-        var rootSets = data['rootSets'].map(function (row) {
-            row.roots = row.roots.map(function (rootId) { return rootIdMap[rootId]; });
-            return RootSet.ensureSingleton(row.id, row);
</del><ins>+        const commitSets = data['commitSets'].map((row) =&gt; {
+            row.commits = row.commits.map((commitId) =&gt; commitIdMap[commitId]);
+            return CommitSet.ensureSingleton(row.id, row);
</ins><span class="cx">         });
</span><span class="cx"> 
</span><span class="cx">         return data['buildRequests'].map(function (rawData) {
</span><span class="lines">@@ -155,7 +155,7 @@
</span><span class="cx">             rawData.test = Test.findById(rawData.test);
</span><span class="cx">             rawData.testGroupId = rawData.testGroup;
</span><span class="cx">             rawData.testGroup = TestGroup.findById(rawData.testGroup);
</span><del>-            rawData.rootSet = RootSet.findById(rawData.rootSet);
</del><ins>+            rawData.commitSet = CommitSet.findById(rawData.commitSet);
</ins><span class="cx">             return BuildRequest.ensureSingleton(rawData.id, rawData);
</span><span class="cx">         });
</span><span class="cx">     }
</span></span></pre></div>
<a id="trunkWebsitesperfwebkitorgpublicv3modelscommitsetjsfromrev213951trunkWebsitesperfwebkitorgpublicv3modelsrootsetjs"></a>
<div class="copfile"><h4>Copied: trunk/Websites/perf.webkit.org/public/v3/models/commit-set.js (from rev 213951, trunk/Websites/perf.webkit.org/public/v3/models/root-set.js) (0 => 213952)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Websites/perf.webkit.org/public/v3/models/commit-set.js                                (rev 0)
+++ trunk/Websites/perf.webkit.org/public/v3/models/commit-set.js        2017-03-14 23:06:40 UTC (rev 213952)
</span><span class="lines">@@ -0,0 +1,126 @@
</span><ins>+'use strict';
+
+class CommitSet extends DataModelObject {
+
+    constructor(id, object)
+    {
+        super(id);
+        this._repositories = [];
+        this._repositoryToCommitMap = {};
+        this._latestCommitTime = null;
+
+        if (!object)
+            return;
+
+        for (let row of object.commits) {
+            const repositoryId = row.repository.id();
+            console.assert(!this._repositoryToCommitMap[repositoryId]);
+            this._repositoryToCommitMap[repositoryId] = CommitLog.ensureSingleton(row.id, row);
+            this._repositories.push(row.repository);
+        }
+    }
+
+    repositories() { return this._repositories; }
+    commitForRepository(repository) { return this._repositoryToCommitMap[repository.id()]; }
+
+    revisionForRepository(repository)
+    {
+        var commit = this._repositoryToCommitMap[repository.id()];
+        return commit ? commit.revision() : null;
+    }
+
+    // FIXME: This should return a Date object.
+    latestCommitTime()
+    {
+        if (this._latestCommitTime == null) {
+            var maxTime = 0;
+            for (var repositoryId in this._repositoryToCommitMap)
+                maxTime = Math.max(maxTime, +this._repositoryToCommitMap[repositoryId].time());
+            this._latestCommitTime = maxTime;
+        }
+        return this._latestCommitTime;
+    }
+
+    equals(other)
+    {
+        if (this._repositories.length != other._repositories.length)
+            return false;
+        for (var repositoryId in this._repositoryToCommitMap) {
+            if (this._repositoryToCommitMap[repositoryId] != other._repositoryToCommitMap[repositoryId])
+                return false;
+        }
+        return true;
+    }
+
+    static containsMultipleCommitsForRepository(commitSets, repository)
+    {
+        console.assert(repository instanceof Repository);
+        if (commitSets.length &lt; 2)
+            return false;
+        const firstCommit = commitSets[0].commitForRepository(repository);
+        for (let set of commitSets) {
+            const anotherCommit = set.commitForRepository(repository);
+            if (!firstCommit != !anotherCommit || (firstCommit &amp;&amp; firstCommit.revision() != anotherCommit.revision()))
+                return true;
+        }
+        return false;
+    }
+}
+
+class MeasurementCommitSet extends CommitSet {
+
+    constructor(id, revisionList)
+    {
+        super(id, null);
+        for (var values of revisionList) {
+            // [&lt;commit-id&gt;, &lt;repository-id&gt;, &lt;revision&gt;, &lt;time&gt;]
+            var commitId = values[0];
+            var repositoryId = values[1];
+            var revision = values[2];
+            var time = values[3];
+            var repository = Repository.findById(repositoryId);
+            if (!repository)
+                continue;
+
+            this._repositoryToCommitMap[repositoryId] = CommitLog.ensureSingleton(commitId, {repository: repository, revision: revision, time: time});
+            this._repositories.push(repository);
+        }
+    }
+
+    // Use CommitSet's static maps because MeasurementCommitSet and CommitSet are logically of the same type.
+    // FIXME: Idaelly, DataModel should take care of this but traversing prototype chain is expensive.
+    namedStaticMap(name) { return CommitSet.namedStaticMap(name); }
+    ensureNamedStaticMap(name) { return CommitSet.ensureNamedStaticMap(name); }
+    static namedStaticMap(name) { return CommitSet.namedStaticMap(name); }
+    static ensureNamedStaticMap(name) { return CommitSet.ensureNamedStaticMap(name); }
+
+    static ensureSingleton(measurementId, revisionList)
+    {
+        const commitSetId = measurementId + '-commitset';
+        return CommitSet.findById(commitSetId) || (new MeasurementCommitSet(commitSetId, revisionList));
+    }
+}
+
+class CustomCommitSet {
+
+    constructor()
+    {
+        this._revisionListByRepository = new Map;
+    }
+
+    setRevisionForRepository(repository, revision)
+    {
+        console.assert(repository instanceof Repository);
+        this._revisionListByRepository.set(repository, revision);
+    }
+
+    repositories() { return Array.from(this._revisionListByRepository.keys()); }
+    revisionForRepository(repository) { return this._revisionListByRepository.get(repository); }
+
+}
+
+if (typeof module != 'undefined') {
+    module.exports.CommitSet = CommitSet;
+    module.exports.MeasurementCommitSet = MeasurementCommitSet;
+    module.exports.CustomCommitSet = CustomCommitSet;
+}
</ins></span></pre></div>
<a id="trunkWebsitesperfwebkitorgpublicv3modelsmeasurementadaptorjs"></a>
<div class="modfile"><h4>Modified: trunk/Websites/perf.webkit.org/public/v3/models/measurement-adaptor.js (213951 => 213952)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Websites/perf.webkit.org/public/v3/models/measurement-adaptor.js        2017-03-14 23:03:47 UTC (rev 213951)
+++ trunk/Websites/perf.webkit.org/public/v3/models/measurement-adaptor.js        2017-03-14 23:06:40 UTC (rev 213952)
</span><span class="lines">@@ -59,7 +59,7 @@
</span><span class="cx">             buildId: buildId,
</span><span class="cx">             metricId: null,
</span><span class="cx">             configType: null,
</span><del>-            rootSet: function () { return MeasurementRootSet.ensureSingleton(id, row[self._revisionsIndex]); },
</del><ins>+            commitSet: function () { return MeasurementCommitSet.ensureSingleton(id, row[self._revisionsIndex]); },
</ins><span class="cx">             build: function () {
</span><span class="cx">                 if (cachedBuild == null &amp;&amp; builderId)
</span><span class="cx">                     cachedBuild = new Build(buildId, Builder.findById(builderId), row[self._buildNumberIndex], row[self._buildTimeIndex]);
</span></span></pre></div>
<a id="trunkWebsitesperfwebkitorgpublicv3modelsrootsetjs"></a>
<div class="delfile"><h4>Deleted: trunk/Websites/perf.webkit.org/public/v3/models/root-set.js (213951 => 213952)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Websites/perf.webkit.org/public/v3/models/root-set.js        2017-03-14 23:03:47 UTC (rev 213951)
+++ trunk/Websites/perf.webkit.org/public/v3/models/root-set.js        2017-03-14 23:06:40 UTC (rev 213952)
</span><span class="lines">@@ -1,126 +0,0 @@
</span><del>-'use strict';
-
-class RootSet extends DataModelObject {
-
-    constructor(id, object)
-    {
-        super(id);
-        this._repositories = [];
-        this._repositoryToCommitMap = {};
-        this._latestCommitTime = null;
-
-        if (!object)
-            return;
-
-        for (var row of object.roots) {
-            var repositoryId = row.repository.id();
-            console.assert(!this._repositoryToCommitMap[repositoryId]);
-            this._repositoryToCommitMap[repositoryId] = CommitLog.ensureSingleton(row.id, row);
-            this._repositories.push(row.repository);
-        }
-    }
-
-    repositories() { return this._repositories; }
-    commitForRepository(repository) { return this._repositoryToCommitMap[repository.id()]; }
-
-    revisionForRepository(repository)
-    {
-        var commit = this._repositoryToCommitMap[repository.id()];
-        return commit ? commit.revision() : null;
-    }
-
-    // FIXME: This should return a Date object.
-    latestCommitTime()
-    {
-        if (this._latestCommitTime == null) {
-            var maxTime = 0;
-            for (var repositoryId in this._repositoryToCommitMap)
-                maxTime = Math.max(maxTime, +this._repositoryToCommitMap[repositoryId].time());
-            this._latestCommitTime = maxTime;
-        }
-        return this._latestCommitTime;
-    }
-
-    equals(other)
-    {
-        if (this._repositories.length != other._repositories.length)
-            return false;
-        for (var repositoryId in this._repositoryToCommitMap) {
-            if (this._repositoryToCommitMap[repositoryId] != other._repositoryToCommitMap[repositoryId])
-                return false;
-        }
-        return true;
-    }
-
-    static containsMultipleCommitsForRepository(rootSets, repository)
-    {
-        console.assert(repository instanceof Repository);
-        if (rootSets.length &lt; 2)
-            return false;
-        var firstCommit = rootSets[0].commitForRepository(repository);
-        for (var set of rootSets) {
-            var anotherCommit = set.commitForRepository(repository);
-            if (!firstCommit != !anotherCommit || (firstCommit &amp;&amp; firstCommit.revision() != anotherCommit.revision()))
-                return true;
-        }
-        return false;
-    }
-}
-
-class MeasurementRootSet extends RootSet {
-
-    constructor(id, revisionList)
-    {
-        super(id, null);
-        for (var values of revisionList) {
-            // [&lt;commit-id&gt;, &lt;repository-id&gt;, &lt;revision&gt;, &lt;time&gt;]
-            var commitId = values[0];
-            var repositoryId = values[1];
-            var revision = values[2];
-            var time = values[3];
-            var repository = Repository.findById(repositoryId);
-            if (!repository)
-                continue;
-
-            this._repositoryToCommitMap[repositoryId] = CommitLog.ensureSingleton(commitId, {repository: repository, revision: revision, time: time});
-            this._repositories.push(repository);
-        }
-    }
-
-    // Use RootSet's static maps because MeasurementRootSet and RootSet are logically of the same type.
-    // FIXME: Idaelly, DataModel should take care of this but traversing prototype chain is expensive.
-    namedStaticMap(name) { return RootSet.namedStaticMap(name); }
-    ensureNamedStaticMap(name) { return RootSet.ensureNamedStaticMap(name); }
-    static namedStaticMap(name) { return RootSet.namedStaticMap(name); }
-    static ensureNamedStaticMap(name) { return RootSet.ensureNamedStaticMap(name); }
-
-    static ensureSingleton(measurementId, revisionList)
-    {
-        var rootSetId = measurementId + '-rootset';
-        return RootSet.findById(rootSetId) || (new MeasurementRootSet(rootSetId, revisionList));
-    }
-}
-
-class CustomRootSet {
-
-    constructor()
-    {
-        this._revisionListByRepository = new Map;
-    }
-
-    setRevisionForRepository(repository, revision)
-    {
-        console.assert(repository instanceof Repository);
-        this._revisionListByRepository.set(repository, revision);
-    }
-
-    repositories() { return Array.from(this._revisionListByRepository.keys()); }
-    revisionForRepository(repository) { return this._revisionListByRepository.get(repository); }
-
-}
-
-if (typeof module != 'undefined') {
-    module.exports.RootSet = RootSet;
-    module.exports.MeasurementRootSet = MeasurementRootSet;
-    module.exports.CustomRootSet = CustomRootSet;
-}
</del></span></pre></div>
<a id="trunkWebsitesperfwebkitorgpublicv3modelstestgroupjs"></a>
<div class="modfile"><h4>Modified: trunk/Websites/perf.webkit.org/public/v3/models/test-group.js (213951 => 213952)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Websites/perf.webkit.org/public/v3/models/test-group.js        2017-03-14 23:03:47 UTC (rev 213951)
+++ trunk/Websites/perf.webkit.org/public/v3/models/test-group.js        2017-03-14 23:06:40 UTC (rev 213952)
</span><span class="lines">@@ -12,9 +12,9 @@
</span><span class="cx">         this._buildRequests = [];
</span><span class="cx">         this._requestsAreInOrder = false;
</span><span class="cx">         this._repositories = null;
</span><del>-        this._requestedRootSets = null;
-        this._rootSetToLabel = new Map;
-        this._allRootSets = null;
</del><ins>+        this._requestedCommitSets = null;
+        this._commitSetToLabel = new Map;
+        this._allCommitSets = null;
</ins><span class="cx">         console.assert(!object.platform || object.platform instanceof Platform);
</span><span class="cx">         this._platform = object.platform;
</span><span class="cx">     }
</span><span class="lines">@@ -37,8 +37,8 @@
</span><span class="cx">     {
</span><span class="cx">         this._buildRequests.push(request);
</span><span class="cx">         this._requestsAreInOrder = false;
</span><del>-        this._requestedRootSets = null;
-        this._rootSetToLabel.clear();
</del><ins>+        this._requestedCommitSets = null;
+        this._commitSetToLabel.clear();
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     repetitionCount()
</span><span class="lines">@@ -45,46 +45,46 @@
</span><span class="cx">     {
</span><span class="cx">         if (!this._buildRequests.length)
</span><span class="cx">             return 0;
</span><del>-        var rootSet = this._buildRequests[0].rootSet();
</del><ins>+        var commitSet = this._buildRequests[0].commitSet();
</ins><span class="cx">         var count = 0;
</span><span class="cx">         for (var request of this._buildRequests) {
</span><del>-            if (request.rootSet() == rootSet)
</del><ins>+            if (request.commitSet() == commitSet)
</ins><span class="cx">                 count++;
</span><span class="cx">         }
</span><span class="cx">         return count;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    requestedRootSets()
</del><ins>+    requestedCommitSets()
</ins><span class="cx">     {
</span><del>-        if (!this._requestedRootSets) {
</del><ins>+        if (!this._requestedCommitSets) {
</ins><span class="cx">             this._orderBuildRequests();
</span><del>-            this._requestedRootSets = [];
</del><ins>+            this._requestedCommitSets = [];
</ins><span class="cx">             for (var request of this._buildRequests) {
</span><del>-                var set = request.rootSet();
-                if (!this._requestedRootSets.includes(set))
-                    this._requestedRootSets.push(set);
</del><ins>+                var set = request.commitSet();
+                if (!this._requestedCommitSets.includes(set))
+                    this._requestedCommitSets.push(set);
</ins><span class="cx">             }
</span><del>-            this._requestedRootSets.sort(function (a, b) { return a.latestCommitTime() - b.latestCommitTime(); });
</del><ins>+            this._requestedCommitSets.sort(function (a, b) { return a.latestCommitTime() - b.latestCommitTime(); });
</ins><span class="cx">             var setIndex = 0;
</span><del>-            for (var set of this._requestedRootSets) {
-                this._rootSetToLabel.set(set, String.fromCharCode('A'.charCodeAt(0) + setIndex));
</del><ins>+            for (var set of this._requestedCommitSets) {
+                this._commitSetToLabel.set(set, String.fromCharCode('A'.charCodeAt(0) + setIndex));
</ins><span class="cx">                 setIndex++;
</span><span class="cx">             }
</span><span class="cx"> 
</span><span class="cx">         }
</span><del>-        return this._requestedRootSets;
</del><ins>+        return this._requestedCommitSets;
</ins><span class="cx">     }
</span><span class="cx"> 
</span><del>-    requestsForRootSet(rootSet)
</del><ins>+    requestsForCommitSet(commitSet)
</ins><span class="cx">     {
</span><span class="cx">         this._orderBuildRequests();
</span><del>-        return this._buildRequests.filter(function (request) { return request.rootSet() == rootSet; });
</del><ins>+        return this._buildRequests.filter(function (request) { return request.commitSet() == commitSet; });
</ins><span class="cx">     }
</span><span class="cx"> 
</span><del>-    labelForRootSet(rootSet)
</del><ins>+    labelForCommitSet(commitSet)
</ins><span class="cx">     {
</span><del>-        console.assert(this._requestedRootSets);
-        return this._rootSetToLabel.get(rootSet);
</del><ins>+        console.assert(this._requestedCommitSets);
+        return this._commitSetToLabel.get(commitSet);
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     _orderBuildRequests()
</span><span class="lines">@@ -97,7 +97,7 @@
</span><span class="cx"> 
</span><span class="cx">     didSetResult(request)
</span><span class="cx">     {
</span><del>-        this._allRootSets = null;
</del><ins>+        this._allCommitSets = null;
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     hasFinished()
</span><span class="lines">@@ -115,12 +115,12 @@
</span><span class="cx">         return this._buildRequests.some(function (request) { return request.isPending(); });
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    compareTestResults(rootSetA, rootSetB)
</del><ins>+    compareTestResults(commitSetA, commitSetB)
</ins><span class="cx">     {
</span><del>-        var beforeValues = this._valuesForRootSet(rootSetA);
-        var afterValues = this._valuesForRootSet(rootSetB);
-        var beforeMean = Statistics.sum(beforeValues) / beforeValues.length;
-        var afterMean = Statistics.sum(afterValues) / afterValues.length;
</del><ins>+        const beforeValues = this._valuesForCommitSet(commitSetA);
+        const afterValues = this._valuesForCommitSet(commitSetB);
+        const beforeMean = Statistics.sum(beforeValues) / beforeValues.length;
+        const afterMean = Statistics.sum(afterValues) / afterValues.length;
</ins><span class="cx"> 
</span><span class="cx">         var metric = AnalysisTask.findById(this._taskId).metric();
</span><span class="cx">         console.assert(metric);
</span><span class="lines">@@ -160,11 +160,11 @@
</span><span class="cx">         return result;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    _valuesForRootSet(rootSet)
</del><ins>+    _valuesForCommitSet(commitSet)
</ins><span class="cx">     {
</span><del>-        var requests = this.requestsForRootSet(rootSet);
-        var values = [];
-        for (var request of requests) {
</del><ins>+        const requests = this.requestsForCommitSet(commitSet);
+        const values = [];
+        for (let request of requests) {
</ins><span class="cx">             if (request.result())
</span><span class="cx">                 values.push(request.result().value);
</span><span class="cx">         }
</span><span class="lines">@@ -197,16 +197,15 @@
</span><span class="cx">         });
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    static createAndRefetchTestGroups(task, name, repetitionCount, rootSets)
</del><ins>+    static createAndRefetchTestGroups(task, name, repetitionCount, commitSets)
</ins><span class="cx">     {
</span><del>-        var self = this;
</del><span class="cx">         return PrivilegedAPI.sendRequest('create-test-group', {
</span><span class="cx">             task: task.id(),
</span><span class="cx">             name: name,
</span><span class="cx">             repetitionCount: repetitionCount,
</span><del>-            rootSets: rootSets,
-        }).then(function (data) {
-            return self.cachedFetch('../api/test-groups', {task: task.id()}, true).then(self._createModelsFromFetchedTestGroups.bind(self));
</del><ins>+            commitSets: commitSets,
+        }).then((data) =&gt; {
+            return this.cachedFetch('../api/test-groups', {task: task.id()}, true).then((data) =&gt; this._createModelsFromFetchedTestGroups(data));
</ins><span class="cx">         });
</span><span class="cx">     }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkWebsitesperfwebkitorgpublicv3pagesanalysistaskpagejs"></a>
<div class="modfile"><h4>Modified: trunk/Websites/perf.webkit.org/public/v3/pages/analysis-task-page.js (213951 => 213952)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Websites/perf.webkit.org/public/v3/pages/analysis-task-page.js        2017-03-14 23:03:47 UTC (rev 213951)
+++ trunk/Websites/perf.webkit.org/public/v3/pages/analysis-task-page.js        2017-03-14 23:06:40 UTC (rev 213952)
</span><span class="lines">@@ -249,8 +249,8 @@
</span><span class="cx"> 
</span><span class="cx">         var repositoryList;
</span><span class="cx">         if (this._startPoint) {
</span><del>-            var rootSet = this._startPoint.rootSet();
-            repositoryList = Repository.sortByNamePreferringOnesWithURL(rootSet.repositories());
</del><ins>+            var commitSet = this._startPoint.commitSet();
+            repositoryList = Repository.sortByNamePreferringOnesWithURL(commitSet.repositories());
</ins><span class="cx">         } else
</span><span class="cx">             repositoryList = Repository.sortByNamePreferringOnesWithURL(Repository.all());
</span><span class="cx"> 
</span><span class="lines">@@ -285,7 +285,7 @@
</span><span class="cx">         var selectedRange = this._analysisResultsViewer.selectedRange();
</span><span class="cx">         var a = selectedRange['A'];
</span><span class="cx">         var b = selectedRange['B'];
</span><del>-        this._newTestGroupFormForViewer.setRootSetMap(a &amp;&amp; b ? {'A': a.rootSet(), 'B': b.rootSet()} : null);
</del><ins>+        this._newTestGroupFormForViewer.setCommitSetMap(a &amp;&amp; b ? {'A': a.commitSet(), 'B': b.commitSet()} : null);
</ins><span class="cx">         this._newTestGroupFormForViewer.enqueueToRender();
</span><span class="cx">         this._newTestGroupFormForViewer.element().style.display = this._triggerable ? null : 'none';
</span><span class="cx"> 
</span><span class="lines">@@ -296,8 +296,8 @@
</span><span class="cx">             this._chartPane.setMainSelection([this._startPoint.time, this._endPoint.time]);
</span><span class="cx"> 
</span><span class="cx">         var points = this._chartPane.selectedPoints();
</span><del>-        this._newTestGroupFormForChart.setRootSetMap(points &amp;&amp; points.length() &gt;= 2 ?
-                {'A': points.firstPoint().rootSet(), 'B': points.lastPoint().rootSet()} : null);
</del><ins>+        this._newTestGroupFormForChart.setCommitSetMap(points &amp;&amp; points.length() &gt;= 2 ?
+                {'A': points.firstPoint().commitSet(), 'B': points.lastPoint().commitSet()} : null);
</ins><span class="cx">         this._newTestGroupFormForChart.enqueueToRender();
</span><span class="cx">         this._newTestGroupFormForChart.element().style.display = this._triggerable ? null : 'none';
</span><span class="cx"> 
</span><span class="lines">@@ -377,9 +377,9 @@
</span><span class="cx"> 
</span><span class="cx">             this._chartPane.setMainSelection(null);
</span><span class="cx">             if (this._currentTestGroup) {
</span><del>-                var rootSetsInTestGroup = this._currentTestGroup.requestedRootSets();
-                var startTime = rootSetsInTestGroup[0].latestCommitTime();
-                var endTime = rootSetsInTestGroup[rootSetsInTestGroup.length - 1].latestCommitTime();
</del><ins>+                const commitSetsInTestGroup = this._currentTestGroup.requestedCommitSets();
+                const startTime = commitSetsInTestGroup[0].latestCommitTime();
+                const endTime = commitSetsInTestGroup[commitSetsInTestGroup.length - 1].latestCommitTime();
</ins><span class="cx">                 if (startTime != endTime)
</span><span class="cx">                     this._chartPane.setMainSelection([startTime, endTime]);
</span><span class="cx">             }
</span><span class="lines">@@ -512,15 +512,15 @@
</span><span class="cx">     _retryCurrentTestGroup(repetitionCount)
</span><span class="cx">     {
</span><span class="cx">         console.assert(this._currentTestGroup);
</span><del>-        var testGroup = this._currentTestGroup;
-        var newName = this._createRetryNameForTestGroup(testGroup.name());
-        var rootSetList = testGroup.requestedRootSets();
</del><ins>+        const testGroup = this._currentTestGroup;
+        const newName = this._createRetryNameForTestGroup(testGroup.name());
+        const commitSetList = testGroup.requestedCommitSets();
</ins><span class="cx"> 
</span><del>-        var rootSetMap = {};
-        for (var rootSet of rootSetList)
-            rootSetMap[testGroup.labelForRootSet(rootSet)] = rootSet;
</del><ins>+        const commitSetMap = {};
+        for (let commitSet of commitSetList)
+            commitSetMap[testGroup.labelForCommitSet(commitSet)] = commitSet;
</ins><span class="cx"> 
</span><del>-        return this._createTestGroupAfterVerifyingRootSetList(newName, repetitionCount, rootSetMap);
</del><ins>+        return this._createTestGroupAfterVerifyingCommitSetList(newName, repetitionCount, commitSetMap);
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     _chartSelectionDidChange()
</span><span class="lines">@@ -529,9 +529,9 @@
</span><span class="cx">         this.enqueueToRender();
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    _createNewTestGroupFromChart(name, repetitionCount, rootSetMap)
</del><ins>+    _createNewTestGroupFromChart(name, repetitionCount, commitSetMap)
</ins><span class="cx">     {
</span><del>-        return this._createTestGroupAfterVerifyingRootSetList(name, repetitionCount, rootSetMap);
</del><ins>+        return this._createTestGroupAfterVerifyingCommitSetList(name, repetitionCount, commitSetMap);
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     _selectedRowInAnalysisResultsViewer()
</span><span class="lines">@@ -539,39 +539,39 @@
</span><span class="cx">         this.enqueueToRender();
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    _createNewTestGroupFromViewer(name, repetitionCount, rootSetMap)
</del><ins>+    _createNewTestGroupFromViewer(name, repetitionCount, commitSetMap)
</ins><span class="cx">     {
</span><del>-        return this._createTestGroupAfterVerifyingRootSetList(name, repetitionCount, rootSetMap);
</del><ins>+        return this._createTestGroupAfterVerifyingCommitSetList(name, repetitionCount, commitSetMap);
</ins><span class="cx">     }
</span><span class="cx"> 
</span><del>-    _createTestGroupAfterVerifyingRootSetList(testGroupName, repetitionCount, rootSetMap)
</del><ins>+    _createTestGroupAfterVerifyingCommitSetList(testGroupName, repetitionCount, commitSetMap)
</ins><span class="cx">     {
</span><span class="cx">         if (this._hasDuplicateTestGroupName(testGroupName))
</span><span class="cx">             alert(`There is already a test group named &quot;${testGroupName}&quot;`);
</span><span class="cx"> 
</span><del>-        var rootSetsByName = {};
-        var firstLabel;
-        for (firstLabel in rootSetMap) {
-            var rootSet = rootSetMap[firstLabel];
-            for (var repository of rootSet.repositories())
-                rootSetsByName[repository.name()] = [];
</del><ins>+        const commitSetsByName = {};
+        let firstLabel;
+        for (firstLabel in commitSetMap) {
+            const commitSet = commitSetMap[firstLabel];
+            for (let repository of commitSet.repositories())
+                commitSetsByName[repository.name()] = [];
</ins><span class="cx">             break;
</span><span class="cx">         }
</span><span class="cx"> 
</span><del>-        var setIndex = 0;
-        for (var label in rootSetMap) {
-            var rootSet = rootSetMap[label];
-            for (var repository of rootSet.repositories()) {
-                var list = rootSetsByName[repository.name()];
</del><ins>+        let setIndex = 0;
+        for (let label in commitSetMap) {
+            const commitSet = commitSetMap[label];
+            for (let repository of commitSet.repositories()) {
+                const list = commitSetsByName[repository.name()];
</ins><span class="cx">                 if (!list) {
</span><span class="cx">                     alert(`Set ${label} specifies ${repository.label()} but set ${firstLabel} does not.`);
</span><span class="cx">                     return null;
</span><span class="cx">                 }
</span><del>-                list.push(rootSet.revisionForRepository(repository));
</del><ins>+                list.push(commitSet.revisionForRepository(repository));
</ins><span class="cx">             }
</span><span class="cx">             setIndex++;
</span><del>-            for (var name in rootSetsByName) {
-                var list = rootSetsByName[name];
</del><ins>+            for (let name in commitSetsByName) {
+                const list = commitSetsByName[name];
</ins><span class="cx">                 if (list.length &lt; setIndex) {
</span><span class="cx">                     alert(`Set ${firstLabel} specifies ${name} but set ${label} does not.`);
</span><span class="cx">                     return null;
</span><span class="lines">@@ -579,7 +579,7 @@
</span><span class="cx">             }
</span><span class="cx">         }
</span><span class="cx"> 
</span><del>-        TestGroup.createAndRefetchTestGroups(this._task, testGroupName, repetitionCount, rootSetsByName)
</del><ins>+        TestGroup.createAndRefetchTestGroups(this._task, testGroupName, repetitionCount, commitSetsByName)
</ins><span class="cx">             .then(this._didFetchTestGroups.bind(this), function (error) {
</span><span class="cx">             alert('Failed to create a new test group: ' + error);
</span><span class="cx">         });
</span></span></pre></div>
<a id="trunkWebsitesperfwebkitorgservertestsapibuildrequeststestsjs"></a>
<div class="modfile"><h4>Modified: trunk/Websites/perf.webkit.org/server-tests/api-build-requests-tests.js (213951 => 213952)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Websites/perf.webkit.org/server-tests/api-build-requests-tests.js        2017-03-14 23:03:47 UTC (rev 213951)
+++ trunk/Websites/perf.webkit.org/server-tests/api-build-requests-tests.js        2017-03-14 23:06:40 UTC (rev 213952)
</span><span class="lines">@@ -28,14 +28,14 @@
</span><span class="cx">         }).then(function (content) {
</span><span class="cx">             assert.equal(content['status'], 'OK');
</span><span class="cx">             assert.deepEqual(content['buildRequests'], []);
</span><del>-            assert.deepEqual(content['rootSets'], []);
-            assert.deepEqual(content['roots'], []);
-            assert.deepEqual(Object.keys(content).sort(), ['buildRequests', 'rootSets', 'roots', 'status']);
</del><ins>+            assert.deepEqual(content['commitSets'], []);
+            assert.deepEqual(content['commits'], []);
+            assert.deepEqual(Object.keys(content).sort(), ['buildRequests', 'commitSets', 'commits', 'status']);
</ins><span class="cx">             done();
</span><span class="cx">         }).catch(done);
</span><span class="cx">     });
</span><span class="cx"> 
</span><del>-    it('should return build requets associated with a given triggerable with appropriate roots and rootSets', function (done) {
</del><ins>+    it('should return build requets associated with a given triggerable with appropriate commits and commitSets', function (done) {
</ins><span class="cx">         let db = TestServer.database();
</span><span class="cx">         db.connect().then(function () {
</span><span class="cx">             return MockData.addMockData(db);
</span><span class="lines">@@ -42,30 +42,30 @@
</span><span class="cx">         }).then(function () {
</span><span class="cx">             return TestServer.remoteAPI().getJSONWithStatus('/api/build-requests/build-webkit');
</span><span class="cx">         }).then(function (content) {
</span><del>-            assert.deepEqual(Object.keys(content).sort(), ['buildRequests', 'rootSets', 'roots', 'status']);
</del><ins>+            assert.deepEqual(Object.keys(content).sort(), ['buildRequests', 'commitSets', 'commits', 'status']);
</ins><span class="cx"> 
</span><del>-            assert.equal(content['rootSets'].length, 2);
-            assert.equal(content['rootSets'][0].id, 401);
-            assert.deepEqual(content['rootSets'][0].roots, ['87832', '93116']);
-            assert.equal(content['rootSets'][1].id, 402);
-            assert.deepEqual(content['rootSets'][1].roots, ['87832', '96336']);
</del><ins>+            assert.equal(content['commitSets'].length, 2);
+            assert.equal(content['commitSets'][0].id, 401);
+            assert.deepEqual(content['commitSets'][0].commits, ['87832', '93116']);
+            assert.equal(content['commitSets'][1].id, 402);
+            assert.deepEqual(content['commitSets'][1].commits, ['87832', '96336']);
</ins><span class="cx"> 
</span><del>-            assert.equal(content['roots'].length, 3);
-            assert.equal(content['roots'][0].id, 87832);
-            assert.equal(content['roots'][0].repository, '9');
-            assert.equal(content['roots'][0].revision, '10.11 15A284');
-            assert.equal(content['roots'][1].id, 93116);
-            assert.equal(content['roots'][1].repository, '11');
-            assert.equal(content['roots'][1].revision, '191622');
-            assert.equal(content['roots'][2].id, 96336);
-            assert.equal(content['roots'][2].repository, '11');
-            assert.equal(content['roots'][2].revision, '192736');
</del><ins>+            assert.equal(content['commits'].length, 3);
+            assert.equal(content['commits'][0].id, 87832);
+            assert.equal(content['commits'][0].repository, '9');
+            assert.equal(content['commits'][0].revision, '10.11 15A284');
+            assert.equal(content['commits'][1].id, 93116);
+            assert.equal(content['commits'][1].repository, '11');
+            assert.equal(content['commits'][1].revision, '191622');
+            assert.equal(content['commits'][2].id, 96336);
+            assert.equal(content['commits'][2].repository, '11');
+            assert.equal(content['commits'][2].revision, '192736');
</ins><span class="cx"> 
</span><span class="cx">             assert.equal(content['buildRequests'].length, 4);
</span><span class="cx">             assert.deepEqual(content['buildRequests'][0].id, 700);
</span><span class="cx">             assert.deepEqual(content['buildRequests'][0].order, 0);
</span><span class="cx">             assert.deepEqual(content['buildRequests'][0].platform, '65');
</span><del>-            assert.deepEqual(content['buildRequests'][0].rootSet, 401);
</del><ins>+            assert.deepEqual(content['buildRequests'][0].commitSet, 401);
</ins><span class="cx">             assert.deepEqual(content['buildRequests'][0].status, 'pending');
</span><span class="cx">             assert.deepEqual(content['buildRequests'][0].test, '200');
</span><span class="cx"> 
</span><span class="lines">@@ -72,7 +72,7 @@
</span><span class="cx">             assert.deepEqual(content['buildRequests'][1].id, 701);
</span><span class="cx">             assert.deepEqual(content['buildRequests'][1].order, 1);
</span><span class="cx">             assert.deepEqual(content['buildRequests'][1].platform, '65');
</span><del>-            assert.deepEqual(content['buildRequests'][1].rootSet, 402);
</del><ins>+            assert.deepEqual(content['buildRequests'][1].commitSet, 402);
</ins><span class="cx">             assert.deepEqual(content['buildRequests'][1].status, 'pending');
</span><span class="cx">             assert.deepEqual(content['buildRequests'][1].test, '200');
</span><span class="cx"> 
</span><span class="lines">@@ -79,7 +79,7 @@
</span><span class="cx">             assert.deepEqual(content['buildRequests'][2].id, 702);
</span><span class="cx">             assert.deepEqual(content['buildRequests'][2].order, 2);
</span><span class="cx">             assert.deepEqual(content['buildRequests'][2].platform, '65');
</span><del>-            assert.deepEqual(content['buildRequests'][2].rootSet, 401);
</del><ins>+            assert.deepEqual(content['buildRequests'][2].commitSet, 401);
</ins><span class="cx">             assert.deepEqual(content['buildRequests'][2].status, 'pending');
</span><span class="cx">             assert.deepEqual(content['buildRequests'][2].test, '200');
</span><span class="cx"> 
</span><span class="lines">@@ -86,7 +86,7 @@
</span><span class="cx">             assert.deepEqual(content['buildRequests'][3].id, 703);
</span><span class="cx">             assert.deepEqual(content['buildRequests'][3].order, 3);
</span><span class="cx">             assert.deepEqual(content['buildRequests'][3].platform, '65');
</span><del>-            assert.deepEqual(content['buildRequests'][3].rootSet, 402);
</del><ins>+            assert.deepEqual(content['buildRequests'][3].commitSet, 402);
</ins><span class="cx">             assert.deepEqual(content['buildRequests'][3].status, 'pending');
</span><span class="cx">             assert.deepEqual(content['buildRequests'][3].test, '200');
</span><span class="cx">             done();
</span><span class="lines">@@ -100,30 +100,30 @@
</span><span class="cx">         }).then(function () {
</span><span class="cx">             return TestServer.remoteAPI().getJSONWithStatus('/api/build-requests/build-webkit?useLegacyIdResolution=true');
</span><span class="cx">         }).then(function (content) {
</span><del>-            assert.deepEqual(Object.keys(content).sort(), ['buildRequests', 'rootSets', 'roots', 'status']);
</del><ins>+            assert.deepEqual(Object.keys(content).sort(), ['buildRequests', 'commitSets', 'commits', 'status']);
</ins><span class="cx"> 
</span><del>-            assert.equal(content['rootSets'].length, 2);
-            assert.equal(content['rootSets'][0].id, 401);
-            assert.deepEqual(content['rootSets'][0].roots, ['87832', '93116']);
-            assert.equal(content['rootSets'][1].id, 402);
-            assert.deepEqual(content['rootSets'][1].roots, ['87832', '96336']);
</del><ins>+            assert.equal(content['commitSets'].length, 2);
+            assert.equal(content['commitSets'][0].id, 401);
+            assert.deepEqual(content['commitSets'][0].commits, ['87832', '93116']);
+            assert.equal(content['commitSets'][1].id, 402);
+            assert.deepEqual(content['commitSets'][1].commits, ['87832', '96336']);
</ins><span class="cx"> 
</span><del>-            assert.equal(content['roots'].length, 3);
-            assert.equal(content['roots'][0].id, 87832);
-            assert.equal(content['roots'][0].repository, 'OS X');
-            assert.equal(content['roots'][0].revision, '10.11 15A284');
-            assert.equal(content['roots'][1].id, 93116);
-            assert.equal(content['roots'][1].repository, 'WebKit');
-            assert.equal(content['roots'][1].revision, '191622');
-            assert.equal(content['roots'][2].id, 96336);
-            assert.equal(content['roots'][2].repository, 'WebKit');
-            assert.equal(content['roots'][2].revision, '192736');
</del><ins>+            assert.equal(content['commits'].length, 3);
+            assert.equal(content['commits'][0].id, 87832);
+            assert.equal(content['commits'][0].repository, 'OS X');
+            assert.equal(content['commits'][0].revision, '10.11 15A284');
+            assert.equal(content['commits'][1].id, 93116);
+            assert.equal(content['commits'][1].repository, 'WebKit');
+            assert.equal(content['commits'][1].revision, '191622');
+            assert.equal(content['commits'][2].id, 96336);
+            assert.equal(content['commits'][2].repository, 'WebKit');
+            assert.equal(content['commits'][2].revision, '192736');
</ins><span class="cx"> 
</span><span class="cx">             assert.equal(content['buildRequests'].length, 4);
</span><span class="cx">             assert.deepEqual(content['buildRequests'][0].id, 700);
</span><span class="cx">             assert.deepEqual(content['buildRequests'][0].order, 0);
</span><span class="cx">             assert.deepEqual(content['buildRequests'][0].platform, 'some platform');
</span><del>-            assert.deepEqual(content['buildRequests'][0].rootSet, 401);
</del><ins>+            assert.deepEqual(content['buildRequests'][0].commitSet, 401);
</ins><span class="cx">             assert.deepEqual(content['buildRequests'][0].status, 'pending');
</span><span class="cx">             assert.deepEqual(content['buildRequests'][0].test, ['some test']);
</span><span class="cx"> 
</span><span class="lines">@@ -130,7 +130,7 @@
</span><span class="cx">             assert.deepEqual(content['buildRequests'][1].id, 701);
</span><span class="cx">             assert.deepEqual(content['buildRequests'][1].order, 1);
</span><span class="cx">             assert.deepEqual(content['buildRequests'][1].platform, 'some platform');
</span><del>-            assert.deepEqual(content['buildRequests'][1].rootSet, 402);
</del><ins>+            assert.deepEqual(content['buildRequests'][1].commitSet, 402);
</ins><span class="cx">             assert.deepEqual(content['buildRequests'][1].status, 'pending');
</span><span class="cx">             assert.deepEqual(content['buildRequests'][1].test, ['some test']);
</span><span class="cx"> 
</span><span class="lines">@@ -137,7 +137,7 @@
</span><span class="cx">             assert.deepEqual(content['buildRequests'][2].id, 702);
</span><span class="cx">             assert.deepEqual(content['buildRequests'][2].order, 2);
</span><span class="cx">             assert.deepEqual(content['buildRequests'][2].platform, 'some platform');
</span><del>-            assert.deepEqual(content['buildRequests'][2].rootSet, 401);
</del><ins>+            assert.deepEqual(content['buildRequests'][2].commitSet, 401);
</ins><span class="cx">             assert.deepEqual(content['buildRequests'][2].status, 'pending');
</span><span class="cx">             assert.deepEqual(content['buildRequests'][2].test, ['some test']);
</span><span class="cx"> 
</span><span class="lines">@@ -144,7 +144,7 @@
</span><span class="cx">             assert.deepEqual(content['buildRequests'][3].id, 703);
</span><span class="cx">             assert.deepEqual(content['buildRequests'][3].order, 3);
</span><span class="cx">             assert.deepEqual(content['buildRequests'][3].platform, 'some platform');
</span><del>-            assert.deepEqual(content['buildRequests'][3].rootSet, 402);
</del><ins>+            assert.deepEqual(content['buildRequests'][3].commitSet, 402);
</ins><span class="cx">             assert.deepEqual(content['buildRequests'][3].status, 'pending');
</span><span class="cx">             assert.deepEqual(content['buildRequests'][3].test, ['some test']);
</span><span class="cx">             done();
</span><span class="lines">@@ -173,7 +173,7 @@
</span><span class="cx">             assert.equal(buildRequests[0].test(), test);
</span><span class="cx">             assert.equal(buildRequests[0].platform(), platform);
</span><span class="cx">             assert.equal(buildRequests[0].order(), 0);
</span><del>-            assert.ok(buildRequests[0].rootSet() instanceof RootSet);
</del><ins>+            assert.ok(buildRequests[0].commitSet() instanceof CommitSet);
</ins><span class="cx">             assert.ok(!buildRequests[0].hasFinished());
</span><span class="cx">             assert.ok(!buildRequests[0].hasStarted());
</span><span class="cx">             assert.ok(buildRequests[0].isPending());
</span><span class="lines">@@ -184,7 +184,7 @@
</span><span class="cx">             assert.equal(buildRequests[1].test(), test);
</span><span class="cx">             assert.equal(buildRequests[1].platform(), platform);
</span><span class="cx">             assert.equal(buildRequests[1].order(), 1);
</span><del>-            assert.ok(buildRequests[1].rootSet() instanceof RootSet);
</del><ins>+            assert.ok(buildRequests[1].commitSet() instanceof CommitSet);
</ins><span class="cx">             assert.ok(!buildRequests[1].hasFinished());
</span><span class="cx">             assert.ok(!buildRequests[1].hasStarted());
</span><span class="cx">             assert.ok(buildRequests[1].isPending());
</span><span class="lines">@@ -195,7 +195,7 @@
</span><span class="cx">             assert.equal(buildRequests[2].test(), test);
</span><span class="cx">             assert.equal(buildRequests[2].platform(), platform);
</span><span class="cx">             assert.equal(buildRequests[2].order(), 2);
</span><del>-            assert.ok(buildRequests[2].rootSet() instanceof RootSet);
</del><ins>+            assert.ok(buildRequests[2].commitSet() instanceof CommitSet);
</ins><span class="cx">             assert.ok(!buildRequests[2].hasFinished());
</span><span class="cx">             assert.ok(!buildRequests[2].hasStarted());
</span><span class="cx">             assert.ok(buildRequests[2].isPending());
</span><span class="lines">@@ -206,7 +206,7 @@
</span><span class="cx">             assert.equal(buildRequests[3].test(), test);
</span><span class="cx">             assert.equal(buildRequests[3].platform(), platform);
</span><span class="cx">             assert.equal(buildRequests[3].order(), 3);
</span><del>-            assert.ok(buildRequests[3].rootSet() instanceof RootSet);
</del><ins>+            assert.ok(buildRequests[3].commitSet() instanceof CommitSet);
</ins><span class="cx">             assert.ok(!buildRequests[3].hasFinished());
</span><span class="cx">             assert.ok(!buildRequests[3].hasStarted());
</span><span class="cx">             assert.ok(buildRequests[3].isPending());
</span><span class="lines">@@ -218,27 +218,27 @@
</span><span class="cx">             let webkit = Repository.findById(11);
</span><span class="cx">             assert.equal(webkit.name(), 'WebKit');
</span><span class="cx"> 
</span><del>-            let firstRootSet = buildRequests[0].rootSet();
-            assert.equal(buildRequests[2].rootSet(), firstRootSet);
</del><ins>+            let firstCommitSet = buildRequests[0].commitSet();
+            assert.equal(buildRequests[2].commitSet(), firstCommitSet);
</ins><span class="cx"> 
</span><del>-            let secondRootSet = buildRequests[1].rootSet();
-            assert.equal(buildRequests[3].rootSet(), secondRootSet);
</del><ins>+            let secondCommitSet = buildRequests[1].commitSet();
+            assert.equal(buildRequests[3].commitSet(), secondCommitSet);
</ins><span class="cx"> 
</span><del>-            assert.equal(firstRootSet.revisionForRepository(osx), '10.11 15A284');
-            assert.equal(firstRootSet.revisionForRepository(webkit), '191622');
</del><ins>+            assert.equal(firstCommitSet.revisionForRepository(osx), '10.11 15A284');
+            assert.equal(firstCommitSet.revisionForRepository(webkit), '191622');
</ins><span class="cx"> 
</span><del>-            assert.equal(secondRootSet.revisionForRepository(osx), '10.11 15A284');
-            assert.equal(secondRootSet.revisionForRepository(webkit), '192736');
</del><ins>+            assert.equal(secondCommitSet.revisionForRepository(osx), '10.11 15A284');
+            assert.equal(secondCommitSet.revisionForRepository(webkit), '192736');
</ins><span class="cx"> 
</span><del>-            let osxCommit = firstRootSet.commitForRepository(osx);
</del><ins>+            let osxCommit = firstCommitSet.commitForRepository(osx);
</ins><span class="cx">             assert.equal(osxCommit.revision(), '10.11 15A284');
</span><del>-            assert.equal(osxCommit, secondRootSet.commitForRepository(osx));
</del><ins>+            assert.equal(osxCommit, secondCommitSet.commitForRepository(osx));
</ins><span class="cx"> 
</span><del>-            let firstWebKitCommit = firstRootSet.commitForRepository(webkit);
</del><ins>+            let firstWebKitCommit = firstCommitSet.commitForRepository(webkit);
</ins><span class="cx">             assert.equal(firstWebKitCommit.revision(), '191622');
</span><span class="cx">             assert.equal(+firstWebKitCommit.time(), 1445945816878);
</span><span class="cx"> 
</span><del>-            let secondWebKitCommit = secondRootSet.commitForRepository(webkit);
</del><ins>+            let secondWebKitCommit = secondCommitSet.commitForRepository(webkit);
</ins><span class="cx">             assert.equal(secondWebKitCommit.revision(), '192736');
</span><span class="cx">             assert.equal(+secondWebKitCommit.time(), 1448225325650);
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkWebsitesperfwebkitorgservertestsresourcesmockdatajs"></a>
<div class="modfile"><h4>Modified: trunk/Websites/perf.webkit.org/server-tests/resources/mock-data.js (213951 => 213952)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Websites/perf.webkit.org/server-tests/resources/mock-data.js        2017-03-14 23:03:47 UTC (rev 213951)
+++ trunk/Websites/perf.webkit.org/server-tests/resources/mock-data.js        2017-03-14 23:06:40 UTC (rev 213952)
</span><span class="lines">@@ -12,7 +12,7 @@
</span><span class="cx">         Metric.clearStaticMap();
</span><span class="cx">         Platform.clearStaticMap();
</span><span class="cx">         Repository.clearStaticMap();
</span><del>-        RootSet.clearStaticMap();
</del><ins>+        CommitSet.clearStaticMap();
</ins><span class="cx">         Test.clearStaticMap();
</span><span class="cx">         TestGroup.clearStaticMap();
</span><span class="cx">         Triggerable.clearStaticMap();
</span><span class="lines">@@ -35,18 +35,18 @@
</span><span class="cx">             db.insert('tests', {id: MockData.someTestId(), name: 'some test'}),
</span><span class="cx">             db.insert('test_metrics', {id: 300, test: 200, name: 'some metric'}),
</span><span class="cx">             db.insert('test_configurations', {id: 301, metric: 300, platform: 65, type: 'current'}),
</span><del>-            db.insert('root_sets', {id: 401}),
-            db.insert('roots', {set: 401, commit: 87832}),
-            db.insert('roots', {set: 401, commit: 93116}),
-            db.insert('root_sets', {id: 402}),
-            db.insert('roots', {set: 402, commit: 87832}),
-            db.insert('roots', {set: 402, commit: 96336}),
</del><ins>+            db.insert('commit_sets', {id: 401}),
+            db.insert('commit_set_relationships', {set: 401, commit: 87832}),
+            db.insert('commit_set_relationships', {set: 401, commit: 93116}),
+            db.insert('commit_sets', {id: 402}),
+            db.insert('commit_set_relationships', {set: 402, commit: 87832}),
+            db.insert('commit_set_relationships', {set: 402, commit: 96336}),
</ins><span class="cx">             db.insert('analysis_tasks', {id: 500, platform: 65, metric: 300, name: 'some task'}),
</span><span class="cx">             db.insert('analysis_test_groups', {id: 600, task: 500, name: 'some test group'}),
</span><del>-            db.insert('build_requests', {id: 700, status: statusList[0], triggerable: 1, platform: 65, test: 200, group: 600, order: 0, root_set: 401}),
-            db.insert('build_requests', {id: 701, status: statusList[1], triggerable: 1, platform: 65, test: 200, group: 600, order: 1, root_set: 402}),
-            db.insert('build_requests', {id: 702, status: statusList[2], triggerable: 1, platform: 65, test: 200, group: 600, order: 2, root_set: 401}),
-            db.insert('build_requests', {id: 703, status: statusList[3], triggerable: 1, platform: 65, test: 200, group: 600, order: 3, root_set: 402}),
</del><ins>+            db.insert('build_requests', {id: 700, status: statusList[0], triggerable: 1, platform: 65, test: 200, group: 600, order: 0, commit_set: 401}),
+            db.insert('build_requests', {id: 701, status: statusList[1], triggerable: 1, platform: 65, test: 200, group: 600, order: 1, commit_set: 402}),
+            db.insert('build_requests', {id: 702, status: statusList[2], triggerable: 1, platform: 65, test: 200, group: 600, order: 2, commit_set: 401}),
+            db.insert('build_requests', {id: 703, status: statusList[3], triggerable: 1, platform: 65, test: 200, group: 600, order: 3, commit_set: 402}),
</ins><span class="cx">         ]);
</span><span class="cx">     },
</span><span class="cx">     addAnotherMockTestGroup: function (db, statusList, author)
</span><span class="lines">@@ -55,10 +55,10 @@
</span><span class="cx">             statusList = ['pending', 'pending', 'pending', 'pending'];
</span><span class="cx">         return Promise.all([
</span><span class="cx">             db.insert('analysis_test_groups', {id: 601, task: 500, name: 'another test group', author: author}),
</span><del>-            db.insert('build_requests', {id: 713, status: statusList[3], triggerable: 1, platform: 65, test: 200, group: 601, order: 3, root_set: 402}),
-            db.insert('build_requests', {id: 710, status: statusList[0], triggerable: 1, platform: 65, test: 200, group: 601, order: 0, root_set: 401}),
-            db.insert('build_requests', {id: 712, status: statusList[2], triggerable: 1, platform: 65, test: 200, group: 601, order: 2, root_set: 401}),
-            db.insert('build_requests', {id: 711, status: statusList[1], triggerable: 1, platform: 65, test: 200, group: 601, order: 1, root_set: 402}),
</del><ins>+            db.insert('build_requests', {id: 713, status: statusList[3], triggerable: 1, platform: 65, test: 200, group: 601, order: 3, commit_set: 402}),
+            db.insert('build_requests', {id: 710, status: statusList[0], triggerable: 1, platform: 65, test: 200, group: 601, order: 0, commit_set: 401}),
+            db.insert('build_requests', {id: 712, status: statusList[2], triggerable: 1, platform: 65, test: 200, group: 601, order: 2, commit_set: 401}),
+            db.insert('build_requests', {id: 711, status: statusList[1], triggerable: 1, platform: 65, test: 200, group: 601, order: 1, commit_set: 402}),
</ins><span class="cx">         ]);
</span><span class="cx">     },
</span><span class="cx">     mockTestSyncConfigWithSingleBuilder: function ()
</span></span></pre></div>
<a id="trunkWebsitesperfwebkitorgtoolsdetectchangesjs"></a>
<div class="modfile"><h4>Modified: trunk/Websites/perf.webkit.org/tools/detect-changes.js (213951 => 213952)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Websites/perf.webkit.org/tools/detect-changes.js        2017-03-14 23:03:47 UTC (rev 213951)
+++ trunk/Websites/perf.webkit.org/tools/detect-changes.js        2017-03-14 23:06:40 UTC (rev 213952)
</span><span class="lines">@@ -252,19 +252,19 @@
</span><span class="cx">                 throw response;
</span><span class="cx"> 
</span><span class="cx">             var triggerable = response['triggerables'][0];
</span><del>-            var rootSets = {};
</del><ins>+            var commitSets = {};
</ins><span class="cx">             for (var repositoryId of triggerable['acceptedRepositories']) {
</span><span class="cx">                 var startRevision = range.startMeasurement.revisionForRepository(repositoryId);
</span><span class="cx">                 var endRevision = range.endMeasurement.revisionForRepository(repositoryId);
</span><span class="cx">                 if (startRevision == null || endRevision == null)
</span><span class="cx">                     continue;
</span><del>-                rootSets[config.repositories[repositoryId].name] = [startRevision, endRevision];
</del><ins>+                commitSets[config.repositories[repositoryId].name] = [startRevision, endRevision];
</ins><span class="cx">             }
</span><span class="cx"> 
</span><span class="cx">             var testData = {
</span><span class="cx">                 task: analysisTaskId,
</span><span class="cx">                 name: 'Confirming the ' + changeType,
</span><del>-                rootSets: rootSets,
</del><ins>+                commitSets: commitSets,
</ins><span class="cx">                 repetitionCount: Math.max(2, Math.min(8, Math.floor((range.endIndex - range.startIndex) / 4))),
</span><span class="cx"> 
</span><span class="cx">                 slaveName: settings.slave.name,
</span></span></pre></div>
<a id="trunkWebsitesperfwebkitorgtoolsjsbuildbotsyncerjs"></a>
<div class="modfile"><h4>Modified: trunk/Websites/perf.webkit.org/tools/js/buildbot-syncer.js (213951 => 213952)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Websites/perf.webkit.org/tools/js/buildbot-syncer.js        2017-03-14 23:03:47 UTC (rev 213951)
+++ trunk/Websites/perf.webkit.org/tools/js/buildbot-syncer.js        2017-03-14 23:06:40 UTC (rev 213952)
</span><span class="lines">@@ -200,11 +200,11 @@
</span><span class="cx">     {
</span><span class="cx">         assert(buildRequest instanceof BuildRequest);
</span><span class="cx"> 
</span><del>-        let rootSet = buildRequest.rootSet();
-        assert(rootSet instanceof RootSet);
</del><ins>+        const commitSet = buildRequest.commitSet();
+        assert(commitSet instanceof CommitSet);
</ins><span class="cx"> 
</span><del>-        let repositoryByName = {};
-        for (let repository of rootSet.repositories())
</del><ins>+        const repositoryByName = {};
+        for (let repository of commitSet.repositories())
</ins><span class="cx">             repositoryByName[repository.name()] = repository;
</span><span class="cx"> 
</span><span class="cx">         let propertiesTemplate = null;
</span><span class="lines">@@ -223,14 +223,14 @@
</span><span class="cx">                 let repositoryName = value['root'];
</span><span class="cx">                 let repository = repositoryByName[repositoryName];
</span><span class="cx">                 assert(repository, `&quot;${repositoryName}&quot; must be specified`);
</span><del>-                properties[key] = rootSet.revisionForRepository(repository);
</del><ins>+                properties[key] = commitSet.revisionForRepository(repository);
</ins><span class="cx">             } else if ('rootOptions' in value) {
</span><span class="cx">                 const filteredOptions = value['rootOptions'].filter((option) =&gt; option in repositoryByName);
</span><span class="cx">                 assert.equal(filteredOptions.length, 1, `There should be exactly one valid root among &quot;${value['rootOptions']}&quot;.`);
</span><del>-                properties[key] = rootSet.revisionForRepository(repositoryByName[filteredOptions[0]]);
</del><ins>+                properties[key] = commitSet.revisionForRepository(repositoryByName[filteredOptions[0]]);
</ins><span class="cx">             }
</span><span class="cx">             else if ('rootsExcluding' in value) {
</span><del>-                let revisionSet = this._revisionSetFromRootSetWithExclusionList(rootSet, value['rootsExcluding']);
</del><ins>+                let revisionSet = this._revisionSetFromCommitSetWithExclusionList(commitSet, value['rootsExcluding']);
</ins><span class="cx">                 properties[key] = JSON.stringify(revisionSet);
</span><span class="cx">             }
</span><span class="cx">         }
</span><span class="lines">@@ -240,13 +240,13 @@
</span><span class="cx">         return properties;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    _revisionSetFromRootSetWithExclusionList(rootSet, exclusionList)
</del><ins>+    _revisionSetFromCommitSetWithExclusionList(commitSet, exclusionList)
</ins><span class="cx">     {
</span><del>-        let revisionSet = {};
-        for (let repository of rootSet.repositories()) {
</del><ins>+        const revisionSet = {};
+        for (let repository of commitSet.repositories()) {
</ins><span class="cx">             if (exclusionList.indexOf(repository.name()) &gt;= 0)
</span><span class="cx">                 continue;
</span><del>-            let commit = rootSet.commitForRepository(repository);
</del><ins>+            const commit = commitSet.commitForRepository(repository);
</ins><span class="cx">             revisionSet[repository.name()] = {
</span><span class="cx">                 id: commit.id(),
</span><span class="cx">                 time: +commit.time(),
</span></span></pre></div>
<a id="trunkWebsitesperfwebkitorgtoolsjsdatabasejs"></a>
<div class="modfile"><h4>Modified: trunk/Websites/perf.webkit.org/tools/js/database.js (213951 => 213952)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Websites/perf.webkit.org/tools/js/database.js        2017-03-14 23:03:47 UTC (rev 213951)
+++ trunk/Websites/perf.webkit.org/tools/js/database.js        2017-03-14 23:06:40 UTC (rev 213952)
</span><span class="lines">@@ -148,8 +148,8 @@
</span><span class="cx">     'platforms': 'platform',
</span><span class="cx">     'reports': 'report',
</span><span class="cx">     'repositories': 'repository',
</span><del>-    'root_sets': 'rootset',
-    'roots': 'root',
</del><ins>+    'commit_sets': 'commitset',
+    'commit_set_relationships': 'commitset',
</ins><span class="cx">     'run_iterations': 'iteration',
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkWebsitesperfwebkitorgtoolsjsv3modelsjs"></a>
<div class="modfile"><h4>Modified: trunk/Websites/perf.webkit.org/tools/js/v3-models.js (213951 => 213952)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Websites/perf.webkit.org/tools/js/v3-models.js        2017-03-14 23:03:47 UTC (rev 213951)
+++ trunk/Websites/perf.webkit.org/tools/js/v3-models.js        2017-03-14 23:06:40 UTC (rev 213952)
</span><span class="lines">@@ -22,8 +22,8 @@
</span><span class="cx"> importFromV3('models/metric.js', 'Metric');
</span><span class="cx"> importFromV3('models/platform.js', 'Platform');
</span><span class="cx"> importFromV3('models/repository.js', 'Repository');
</span><del>-importFromV3('models/root-set.js', 'MeasurementRootSet');
-importFromV3('models/root-set.js', 'RootSet');
</del><ins>+importFromV3('models/commit-set.js', 'MeasurementCommitSet');
+importFromV3('models/commit-set.js', 'CommitSet');
</ins><span class="cx"> importFromV3('models/test.js', 'Test');
</span><span class="cx"> importFromV3('models/test-group.js', 'TestGroup');
</span><span class="cx"> importFromV3('models/time-series.js', 'TimeSeries');
</span></span></pre></div>
<a id="trunkWebsitesperfwebkitorgtoolssyncbuildbotjs"></a>
<div class="modfile"><h4>Modified: trunk/Websites/perf.webkit.org/tools/sync-buildbot.js (213951 => 213952)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Websites/perf.webkit.org/tools/sync-buildbot.js        2017-03-14 23:03:47 UTC (rev 213951)
+++ trunk/Websites/perf.webkit.org/tools/sync-buildbot.js        2017-03-14 23:06:40 UTC (rev 213952)
</span><span class="lines">@@ -29,7 +29,7 @@
</span><span class="cx">     global.Metric.clearStaticMap();
</span><span class="cx">     global.Platform.clearStaticMap();
</span><span class="cx">     global.Repository.clearStaticMap();
</span><del>-    global.RootSet.clearStaticMap();
</del><ins>+    global.CommitSet.clearStaticMap();
</ins><span class="cx">     global.Test.clearStaticMap();
</span><span class="cx">     global.TestGroup.clearStaticMap();
</span><span class="cx">     global.Triggerable.clearStaticMap();
</span></span></pre></div>
<a id="trunkWebsitesperfwebkitorgtoolssyncwithbuildbotpy"></a>
<div class="delfile"><h4>Deleted: trunk/Websites/perf.webkit.org/tools/sync-with-buildbot.py (213951 => 213952)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Websites/perf.webkit.org/tools/sync-with-buildbot.py        2017-03-14 23:03:47 UTC (rev 213951)
+++ trunk/Websites/perf.webkit.org/tools/sync-with-buildbot.py        2017-03-14 23:06:40 UTC (rev 213952)
</span><span class="lines">@@ -1,244 +0,0 @@
</span><del>-#!/usr/bin/python
-
-import argparse
-import base64
-import copy
-import json
-import sys
-import time
-import urllib
-import urllib2
-
-from util import load_server_config
-
-
-def main():
-    parser = argparse.ArgumentParser()
-    parser.add_argument('--triggerable', required=True, help='The name of the triggerable to process. e.g. build-webkit')
-    parser.add_argument('--buildbot-url', required=True, help='URL for a buildbot builder; e.g. &quot;https://build.webkit.org/&quot;')
-    parser.add_argument('--builder-config-json', required=True, help='The path to a JSON file that specifies which test and platform will be posted to which builder. '
-        'The JSON should contain an array of dictionaries with keys &quot;platform&quot;, &quot;test&quot;, and &quot;builder&quot; '
-        'with the platform name (e.g. mountainlion), the test path (e.g. [&quot;Parser&quot;, &quot;html5-full-render&quot;]), and the builder name (e.g. Apple MountainLion Release (Perf)) as values.')
-    parser.add_argument('--server-config-json', required=True, help='The path to a JSON file that specifies the perf dashboard.')
-
-    parser.add_argument('--lookback-count', type=int, default=10, help='The number of builds to look back when finding in-progress builds on the buildbot')
-    parser.add_argument('--seconds-to-sleep', type=float, default=120, help='The seconds to sleep between iterations')
-    args = parser.parse_args()
-
-    configurations = load_config(args.builder_config_json, args.buildbot_url.strip('/'))
-
-    request_updates = {}
-    while True:
-        server_config = load_server_config(args.server_config_json)
-        request_updates.update(find_request_updates(configurations, args.lookback_count))
-        if request_updates:
-            print 'Updating the build requests %s...' % ', '.join(map(str, request_updates.keys()))
-        else:
-            print 'No updates...'
-
-        payload = {
-            'buildRequestUpdates': request_updates,
-            'slaveName': server_config['slave']['name'],
-            'slavePassword': server_config['slave']['password']}
-
-        build_requests_url = server_config['server']['url'] + '/api/build-requests/' + args.triggerable + '?useLegacyIdResolution=true'
-        response = update_and_fetch_build_requests(build_requests_url, payload)
-        open_requests = response.get('buildRequests', [])
-
-        root_sets = organize_root_sets_by_id_and_repository_names(response.get('rootSets', {}), response.get('roots', []))
-
-        for request in filter(lambda request: request['status'] == 'pending', open_requests):
-            config = config_for_request(configurations, request)
-            if not config:
-                print &gt;&gt; sys.stderr, &quot;Failed to find the configuration for request %s: %s&quot; % (str(request['id']), json.dumps(request))
-                continue
-            if config and len(config['scheduledRequests']) &lt; 1:
-                print &quot;Scheduling the build request %s...&quot; % str(request['id'])
-                schedule_request(config, request, root_sets)
-
-        request_updates = find_stale_request_updates(configurations, open_requests, request_updates.keys())
-        if request_updates:
-            print &quot;Found stale build requests %s...&quot; % ', '.join(map(str, request_updates.keys()))
-
-        time.sleep(args.seconds_to_sleep)
-
-
-def load_config(config_json_path, buildbot_url):
-    with open(config_json_path) as config_json:
-        options = json.load(config_json)
-
-    shared_config = options['shared']
-    type_config = options['types']
-    builder_config = options['builders']
-
-    def merge(config, config_to_merge):
-        for key, value in config_to_merge.iteritems():
-            if isinstance(value, dict):
-                config.setdefault(key, {})
-                config[key].update(value)
-            else:
-                config[key] = value
-
-    scheduled_requests_by_builder = {}
-
-    configurations = options['configurations']
-    for config in configurations:
-
-        merge(config, shared_config)
-        merge(config, type_config[config.pop('type')])
-        merge(config, builder_config[config.pop('builder')])
-
-        escaped_builder_name = urllib.quote(config['builder'])
-        config['url'] = '%s/builders/%s/' % (buildbot_url, escaped_builder_name)
-        config['jsonURL'] = '%s/json/builders/%s/' % (buildbot_url, escaped_builder_name)
-
-        scheduled_requests_by_builder.setdefault(config['builder'], set())
-        config['scheduledRequests'] = scheduled_requests_by_builder[config['builder']]
-
-    return configurations
-
-
-def find_request_updates(configurations, lookback_count):
-    request_updates = {}
-
-    for config in configurations:
-        config['scheduledRequests'].clear()
-
-    for config in configurations:
-        try:
-            pending_builds = fetch_json(config['jsonURL'] + 'pendingBuilds')
-            scheduled_requests = filter(None, [request_id_from_build(config, build) for build in pending_builds])
-            for request_id in scheduled_requests:
-                request_updates[request_id] = {'status': 'scheduled', 'url': config['url']}
-                config['scheduledRequests'].add(request_id)
-        except (IOError, ValueError) as error:
-            print &gt;&gt; sys.stderr, &quot;Failed to fetch pending builds for %s: %s&quot; % (config['builder'], str(error))
-
-    for config in configurations:
-        for i in range(1, lookback_count + 1):
-            build_error = None
-            build_index = -i
-            try:
-                build = fetch_json(config['jsonURL'] + 'builds/%d' % build_index)
-                request_id = request_id_from_build(config, build)
-                if not request_id:
-                    continue
-
-                in_progress = build.get('currentStep')
-                if in_progress:
-                    request_updates[request_id] = {'status': 'running', 'url': config['url']}
-                    config['scheduledRequests'].discard(request_id)
-                else:
-                    url = config['url'] + 'builds/' + str(build['number'])
-                    request_updates[request_id] = {'status': 'failedIfNotCompleted', 'url': url}
-            except urllib2.HTTPError as error:
-                if error.code == 404:
-                    break
-                else:
-                    build_error = error
-            except ValueError as error:
-                build_error = error
-            if build_error:
-                print &gt;&gt; sys.stderr, &quot;Failed to fetch build %d for %s: %s&quot; % (build_index, config['builder'], str(build_error))
-
-    return request_updates
-
-
-def update_and_fetch_build_requests(build_requests_url, payload):
-    try:
-        response = fetch_json(build_requests_url, payload=json.dumps(payload))
-        if response['status'] != 'OK':
-            raise ValueError(response['status'])
-        return response
-    except (IOError, ValueError) as error:
-        print &gt;&gt; sys.stderr, 'Failed to update or fetch build requests at %s: %s' % (build_requests_url, str(error))
-    return {}
-
-
-def find_stale_request_updates(configurations, open_requests, requests_on_buildbot):
-    request_updates = {}
-    for request in open_requests:
-        request_id = int(request['id'])
-        should_be_on_buildbot = request['status'] in ('scheduled', 'running')
-        if should_be_on_buildbot and request_id not in requests_on_buildbot:
-            config = config_for_request(configurations, request)
-            if config:
-                request_updates[request_id] = {'status': 'failed', 'url': config['url']}
-    return request_updates
-
-
-def organize_root_sets_by_id_and_repository_names(root_sets, roots):
-    result = {}
-    root_by_id = {}
-    for root in roots:
-        root_by_id[root['id']] = root
-
-    for root_set in root_sets:
-        roots_by_repository = {}
-        for root_id in root_set['roots']:
-            root = root_by_id[root_id]
-            roots_by_repository[root['repository']] = root
-        result[root_set['id']] = roots_by_repository
-
-    return result
-
-
-def schedule_request(config, request, root_sets):
-    roots = root_sets[request['rootSet']]
-    payload = {}
-    for property_name, property_value in config['arguments'].iteritems():
-        if not isinstance(property_value, dict):
-            payload[property_name] = property_value
-        elif 'root' in property_value:
-            repository_name = property_value['root']
-            if repository_name in roots:
-                payload[property_name] = roots[repository_name]['revision']
-        elif 'rootsExcluding' in property_value:
-            excluded_roots = property_value['rootsExcluding']
-            filtered_roots = {}
-            for root_name in roots:
-                if root_name not in excluded_roots:
-                    filtered_roots[root_name] = roots[root_name]
-            payload[property_name] = json.dumps(filtered_roots)
-        else:
-            print &gt;&gt; sys.stderr, &quot;Failed to process an argument %s: %s&quot; % (property_name, property_value)
-            return
-    payload[config['buildRequestArgument']] = request['id']
-
-    try:
-        urllib2.urlopen(urllib2.Request(config['url'] + 'force'), urllib.urlencode(payload))
-        config['scheduledRequests'].add(request['id'])
-    except (IOError, ValueError) as error:
-        print &gt;&gt; sys.stderr, &quot;Failed to fetch pending builds for %s: %s&quot; % (config['builder'], str(error))
-
-
-def config_for_request(configurations, request):
-    for config in configurations:
-        if config['platform'] == request['platform'] and config['test'] == request['test']:
-            return config
-    return None
-
-
-def fetch_json(url, payload=None):
-    request = urllib2.Request(url)
-    response = urllib2.urlopen(request, payload).read()
-    try:
-        return json.loads(response)
-    except ValueError as error:
-        raise ValueError(str(error) + '\n' + response)
-
-
-def property_value_from_build(build, name):
-    for prop in build.get('properties', []):
-        if prop[0] == name:
-            return prop[1]
-    return None
-
-
-def request_id_from_build(config, build):
-    job_id = property_value_from_build(build, config['buildRequestArgument'])
-    return int(job_id) if job_id and job_id.isdigit() else None
-
-
-if __name__ == &quot;__main__&quot;:
-    main()
</del></span></pre></div>
<a id="trunkWebsitesperfwebkitorgunittestsanalysistasktestsjs"></a>
<div class="modfile"><h4>Modified: trunk/Websites/perf.webkit.org/unit-tests/analysis-task-tests.js (213951 => 213952)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Websites/perf.webkit.org/unit-tests/analysis-task-tests.js        2017-03-14 23:03:47 UTC (rev 213951)
+++ trunk/Websites/perf.webkit.org/unit-tests/analysis-task-tests.js        2017-03-14 23:06:40 UTC (rev 213952)
</span><span class="lines">@@ -207,7 +207,7 @@
</span><span class="cx">             var adaptor = new MeasurementAdaptor(measurementCluster().formatMap);
</span><span class="cx">             var adaptedMeasurement = adaptor.applyTo(measurementCluster().configurations.current[0]);
</span><span class="cx">             assert.equal(adaptedMeasurement.id, 37188161);
</span><del>-            assert.equal(adaptedMeasurement.rootSet().commitForRepository(MockModels.webkit).revision(), '196051');
</del><ins>+            assert.equal(adaptedMeasurement.commitSet().commitForRepository(MockModels.webkit).revision(), '196051');
</ins><span class="cx"> 
</span><span class="cx">             var promise = AnalysisTask.fetchAll();
</span><span class="cx">             requests[0].resolve(sampleAnalysisTask());
</span></span></pre></div>
<a id="trunkWebsitesperfwebkitorgunittestsbuildrequesttestsjs"></a>
<div class="modfile"><h4>Modified: trunk/Websites/perf.webkit.org/unit-tests/build-request-tests.js (213951 => 213952)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Websites/perf.webkit.org/unit-tests/build-request-tests.js        2017-03-14 23:03:47 UTC (rev 213951)
+++ trunk/Websites/perf.webkit.org/unit-tests/build-request-tests.js        2017-03-14 23:06:40 UTC (rev 213952)
</span><span class="lines">@@ -15,20 +15,20 @@
</span><span class="cx">             &quot;platform&quot;: &quot;31&quot;,
</span><span class="cx">             &quot;testGroup&quot;: &quot;2128&quot;,
</span><span class="cx">             &quot;order&quot;: &quot;0&quot;,
</span><del>-            &quot;rootSet&quot;: &quot;4255&quot;,
</del><ins>+            &quot;commitSet&quot;: &quot;4255&quot;,
</ins><span class="cx">             &quot;status&quot;: &quot;pending&quot;,
</span><span class="cx">             &quot;url&quot;: null,
</span><span class="cx">             &quot;build&quot;: null,
</span><span class="cx">             &quot;createdAt&quot;: 1458688514000
</span><span class="cx">         }],
</span><del>-        &quot;rootSets&quot;: [{
</del><ins>+        &quot;commitSets&quot;: [{
</ins><span class="cx">             &quot;id&quot;: &quot;4255&quot;,
</span><del>-            &quot;roots&quot;: [&quot;87832&quot;, &quot;93116&quot;]
</del><ins>+            &quot;commits&quot;: [&quot;87832&quot;, &quot;93116&quot;]
</ins><span class="cx">         }, {
</span><span class="cx">             &quot;id&quot;: &quot;4256&quot;,
</span><del>-            &quot;roots&quot;: [&quot;87832&quot;, &quot;96336&quot;]
</del><ins>+            &quot;commits&quot;: [&quot;87832&quot;, &quot;96336&quot;]
</ins><span class="cx">         }],
</span><del>-        &quot;roots&quot;: [{
</del><ins>+        &quot;commits&quot;: [{
</ins><span class="cx">             &quot;id&quot;: &quot;87832&quot;,
</span><span class="cx">             &quot;repository&quot;: &quot;9&quot;,
</span><span class="cx">             &quot;revision&quot;: &quot;10.11 15A284&quot;,
</span></span></pre></div>
<a id="trunkWebsitesperfwebkitorgunittestsbuildbotsyncertestsjs"></a>
<div class="modfile"><h4>Modified: trunk/Websites/perf.webkit.org/unit-tests/buildbot-syncer-tests.js (213951 => 213952)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Websites/perf.webkit.org/unit-tests/buildbot-syncer-tests.js        2017-03-14 23:03:47 UTC (rev 213951)
+++ trunk/Websites/perf.webkit.org/unit-tests/buildbot-syncer-tests.js        2017-03-14 23:06:40 UTC (rev 213952)
</span><span class="lines">@@ -110,7 +110,7 @@
</span><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-let sampleRootSetData = {
</del><ins>+let sampleCommitSetData = {
</ins><span class="cx">     'WebKit': {
</span><span class="cx">         'id': '111127',
</span><span class="cx">         'time': 1456955807334,
</span><span class="lines">@@ -207,7 +207,7 @@
</span><span class="cx">     assert(platform instanceof Platform);
</span><span class="cx">     assert(test instanceof Test);
</span><span class="cx"> 
</span><del>-    let rootSet = RootSet.ensureSingleton('4197', {roots: [
</del><ins>+    let commitSet = CommitSet.ensureSingleton('4197', {commits: [
</ins><span class="cx">         {'id': '111127', 'time': 1456955807334, 'repository': MockModels.webkit, 'revision': '197463'},
</span><span class="cx">         {'id': '111237', 'time': 1456931874000, 'repository': MockModels.sharedRepository, 'revision': '80229'},
</span><span class="cx">         {'id': '111239', 'time': 1456931874000, 'repository': MockModels.webkitGit, 'revision': '9abcdef'},
</span><span class="lines">@@ -214,7 +214,7 @@
</span><span class="cx">         {'id': '88930', 'time': 0, 'repository': MockModels.ios, 'revision': '13A452'},
</span><span class="cx">     ]});
</span><span class="cx"> 
</span><del>-    let request = BuildRequest.ensureSingleton('16733-' + platform.id(), {'rootSet': rootSet, 'status': 'pending', 'platform': platform, 'test': test});
</del><ins>+    let request = BuildRequest.ensureSingleton('16733-' + platform.id(), {'commitSet': commitSet, 'status': 'pending', 'platform': platform, 'test': test});
</ins><span class="cx">     return request;
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -231,7 +231,7 @@
</span><span class="cx">             ['reason', 'force build','Force Build Form'],
</span><span class="cx">             [
</span><span class="cx">                 'roots_dict',
</span><del>-                JSON.stringify(sampleRootSetData),
</del><ins>+                JSON.stringify(sampleCommitSetData),
</ins><span class="cx">                 'Force Build Form'
</span><span class="cx">             ],
</span><span class="cx">             ['slavename', slaveName, ''],
</span><span class="lines">@@ -280,7 +280,7 @@
</span><span class="cx">             ['desired_image', '13A452', 'Force Build Form'],
</span><span class="cx">             ['owner', '&lt;unknown&gt;', 'Force Build Form'],
</span><span class="cx">             ['reason', 'force build', 'Force Build Form'],
</span><del>-            ['roots_dict', JSON.stringify(sampleRootSetData), 'Force Build Form'],
</del><ins>+            ['roots_dict', JSON.stringify(sampleCommitSetData), 'Force Build Form'],
</ins><span class="cx">             ['scheduler', 'ABTest-iPad-RunBenchmark-Tests-ForceScheduler', 'Scheduler'],
</span><span class="cx">             ['slavename', slaveName || 'ABTest-iPad-0', 'BuildSlave'],
</span><span class="cx">         ],
</span><span class="lines">@@ -356,7 +356,7 @@
</span><span class="cx">             ['desired_image', '13A452', 'Force Build Form'],
</span><span class="cx">             ['owner', '&lt;unknown&gt;', 'Force Build Form'],
</span><span class="cx">             ['reason', 'force build', 'Force Build Form'],
</span><del>-            ['roots_dict', JSON.stringify(sampleRootSetData), 'Force Build Form'],
</del><ins>+            ['roots_dict', JSON.stringify(sampleCommitSetData), 'Force Build Form'],
</ins><span class="cx">             ['scheduler', 'ABTest-iPad-RunBenchmark-Tests-ForceScheduler', 'Scheduler'],
</span><span class="cx">             ['slavename', slaveName || 'ABTest-iPad-0', 'BuildSlave'],
</span><span class="cx">         ],
</span><span class="lines">@@ -594,13 +594,13 @@
</span><span class="cx">         it('should resolve &quot;rootOptions&quot;', function () {
</span><span class="cx">             let syncers = BuildbotSyncer._loadConfig(RemoteAPI, sampleiOSConfig());
</span><span class="cx">             let properties = syncers[0]._propertiesForBuildRequest(createSampleBuildRequest(MockModels.iphone, MockModels.speedometer));
</span><del>-            assert.equal(properties['roots_dict'], JSON.stringify(sampleRootSetData));
</del><ins>+            assert.equal(properties['roots_dict'], JSON.stringify(sampleCommitSetData));
</ins><span class="cx">         });
</span><span class="cx"> 
</span><span class="cx">         it('should resolve &quot;rootsExcluding&quot;', function () {
</span><span class="cx">             let syncers = BuildbotSyncer._loadConfig(RemoteAPI, sampleiOSConfig());
</span><span class="cx">             let properties = syncers[0]._propertiesForBuildRequest(createSampleBuildRequest(MockModels.iphone, MockModels.speedometer));
</span><del>-            assert.equal(properties['roots_dict'], JSON.stringify(sampleRootSetData));
</del><ins>+            assert.equal(properties['roots_dict'], JSON.stringify(sampleCommitSetData));
</ins><span class="cx">         });
</span><span class="cx"> 
</span><span class="cx">         it('should set the property for the build request id', function () {
</span></span></pre></div>
<a id="trunkWebsitesperfwebkitorgunittestsmeasurementadaptortestsjs"></a>
<div class="modfile"><h4>Modified: trunk/Websites/perf.webkit.org/unit-tests/measurement-adaptor-tests.js (213951 => 213952)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Websites/perf.webkit.org/unit-tests/measurement-adaptor-tests.js        2017-03-14 23:03:47 UTC (rev 213951)
+++ trunk/Websites/perf.webkit.org/unit-tests/measurement-adaptor-tests.js        2017-03-14 23:06:40 UTC (rev 213952)
</span><span class="lines">@@ -66,23 +66,23 @@
</span><span class="cx">             assert.equal(adaptor.applyTo(sampleCustomBaselineData).build(), null);
</span><span class="cx">         });
</span><span class="cx"> 
</span><del>-        it('should adapt revision information as a RootSet object', function () {
</del><ins>+        it('should adapt revision information as a CommitSet object', function () {
</ins><span class="cx">             var adaptor = new MeasurementAdaptor(sampleCluster.formatMap);
</span><del>-            var rootSet = adaptor.applyTo(sampleData).rootSet();
-            assert.ok(rootSet instanceof RootSet);
-            assert.equal(rootSet.latestCommitTime(), 1447707055576);
</del><ins>+            var commitSet = adaptor.applyTo(sampleData).commitSet();
+            assert.ok(commitSet instanceof CommitSet);
+            assert.equal(commitSet.latestCommitTime(), 1447707055576);
</ins><span class="cx">         });
</span><span class="cx"> 
</span><span class="cx">         it('should adapt OS X version as a CommitLog object', function () {
</span><span class="cx">             var adaptor = new MeasurementAdaptor(sampleCluster.formatMap);
</span><del>-            var rootSet = adaptor.applyTo(sampleData).rootSet();
-            assert.ok(rootSet instanceof RootSet);
-            assert.equal(rootSet.latestCommitTime(), 1447707055576);
</del><ins>+            var commitSet = adaptor.applyTo(sampleData).commitSet();
+            assert.ok(commitSet instanceof CommitSet);
+            assert.equal(commitSet.latestCommitTime(), 1447707055576);
</ins><span class="cx"> 
</span><del>-            assert.ok(rootSet.repositories().indexOf(MockModels.osx) &gt;= 0);
-            assert.equal(rootSet.revisionForRepository(MockModels.osx), '10.11 15D21');
</del><ins>+            assert.ok(commitSet.repositories().indexOf(MockModels.osx) &gt;= 0);
+            assert.equal(commitSet.revisionForRepository(MockModels.osx), '10.11 15D21');
</ins><span class="cx"> 
</span><del>-            var commit = rootSet.commitForRepository(MockModels.osx);
</del><ins>+            var commit = commitSet.commitForRepository(MockModels.osx);
</ins><span class="cx">             assert.ok(commit instanceof CommitLog);
</span><span class="cx">             assert.equal(commit.repository(), MockModels.osx);
</span><span class="cx">             assert.ok(commit.time() instanceof Date);
</span><span class="lines">@@ -95,12 +95,12 @@
</span><span class="cx"> 
</span><span class="cx">         it('should adapt WebKit revision as a CommitLog object', function () {
</span><span class="cx">             var adaptor = new MeasurementAdaptor(sampleCluster.formatMap);
</span><del>-            var rootSet = adaptor.applyTo(sampleData).rootSet();
</del><ins>+            var commitSet = adaptor.applyTo(sampleData).commitSet();
</ins><span class="cx"> 
</span><del>-            assert.ok(rootSet.repositories().indexOf(MockModels.webkit) &gt;= 0);
-            assert.equal(rootSet.revisionForRepository(MockModels.webkit), '192483');
</del><ins>+            assert.ok(commitSet.repositories().indexOf(MockModels.webkit) &gt;= 0);
+            assert.equal(commitSet.revisionForRepository(MockModels.webkit), '192483');
</ins><span class="cx"> 
</span><del>-            var commit = rootSet.commitForRepository(MockModels.webkit);
</del><ins>+            var commit = commitSet.commitForRepository(MockModels.webkit);
</ins><span class="cx">             assert.ok(commit instanceof CommitLog);
</span><span class="cx">             assert.equal(commit.repository(), MockModels.webkit);
</span><span class="cx">             assert.ok(commit.time() instanceof Date);
</span><span class="lines">@@ -114,11 +114,11 @@
</span><span class="cx"> 
</span><span class="cx">         it('should not create separate CommitLog object for the same revision', function () {
</span><span class="cx">             var adaptor = new MeasurementAdaptor(sampleCluster.formatMap);
</span><del>-            assert.equal(adaptor.applyTo(sampleData).rootSet().commitForRepository(MockModels.webkit),
-                adaptor.applyTo(sampleData).rootSet().commitForRepository(MockModels.webkit));
</del><ins>+            assert.equal(adaptor.applyTo(sampleData).commitSet().commitForRepository(MockModels.webkit),
+                adaptor.applyTo(sampleData).commitSet().commitForRepository(MockModels.webkit));
</ins><span class="cx"> 
</span><del>-            assert.equal(adaptor.applyTo(sampleData).rootSet().commitForRepository(MockModels.osx),
-                adaptor.applyTo(sampleData).rootSet().commitForRepository(MockModels.osx));
</del><ins>+            assert.equal(adaptor.applyTo(sampleData).commitSet().commitForRepository(MockModels.osx),
+                adaptor.applyTo(sampleData).commitSet().commitForRepository(MockModels.osx));
</ins><span class="cx">         });
</span><span class="cx"> 
</span><span class="cx">     });
</span></span></pre></div>
<a id="trunkWebsitesperfwebkitorgunittestsmeasurementsettestsjs"></a>
<div class="modfile"><h4>Modified: trunk/Websites/perf.webkit.org/unit-tests/measurement-set-tests.js (213951 => 213952)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Websites/perf.webkit.org/unit-tests/measurement-set-tests.js        2017-03-14 23:03:47 UTC (rev 213951)
+++ trunk/Websites/perf.webkit.org/unit-tests/measurement-set-tests.js        2017-03-14 23:06:40 UTC (rev 213952)
</span><span class="lines">@@ -802,11 +802,11 @@
</span><span class="cx">                 assert.equal(point.id, 26530031);
</span><span class="cx"> 
</span><span class="cx">                 const commitTime = 1482398562950;
</span><del>-                const rootSet = point.rootSet();
-                assert.equal(point.rootSet(), rootSet);
-                assert.deepEqual(rootSet.repositories(), [webkit]);
-                assert.equal(rootSet.revisionForRepository(webkit), '210096');
-                const commit = rootSet.commitForRepository(webkit);
</del><ins>+                const commitSet = point.commitSet();
+                assert.equal(point.commitSet(), commitSet);
+                assert.deepEqual(commitSet.repositories(), [webkit]);
+                assert.equal(commitSet.revisionForRepository(webkit), '210096');
+                const commit = commitSet.commitForRepository(webkit);
</ins><span class="cx">                 assert.equal(commit.repository(), webkit);
</span><span class="cx">                 assert.equal(+commit.time(), commitTime);
</span><span class="cx">                 assert.equal(commit.author(), null);
</span><span class="lines">@@ -815,7 +815,7 @@
</span><span class="cx">                 assert.equal(commit.url(), 'http://trac.webkit.org/changeset/210096');
</span><span class="cx">                 assert.equal(commit.label(), 'r210096');
</span><span class="cx">                 assert.equal(commit.title(), 'WebKit at r210096');
</span><del>-                assert.equal(rootSet.latestCommitTime(), commitTime);
</del><ins>+                assert.equal(commitSet.latestCommitTime(), commitTime);
</ins><span class="cx"> 
</span><span class="cx">                 const build = point.build();
</span><span class="cx">                 assert.equal(point.build(), build);
</span><span class="lines">@@ -836,12 +836,12 @@
</span><span class="cx">                 assert.equal(point.id, 26530779);
</span><span class="cx"> 
</span><span class="cx">                 const commitTime = 1482424870729;
</span><del>-                const rootSet = point.rootSet();
-                assert.equal(rootSet.revisionForRepository(webkit), '210097');
-                const commit = rootSet.commitForRepository(webkit);
</del><ins>+                const commitSet = point.commitSet();
+                assert.equal(commitSet.revisionForRepository(webkit), '210097');
+                const commit = commitSet.commitForRepository(webkit);
</ins><span class="cx">                 assert.equal(+commit.time(), commitTime);
</span><span class="cx">                 assert.equal(commit.revision(), '210097');
</span><del>-                assert.equal(rootSet.latestCommitTime(), commitTime);
</del><ins>+                assert.equal(commitSet.latestCommitTime(), commitTime);
</ins><span class="cx"> 
</span><span class="cx">                 const build = point.build();
</span><span class="cx">                 assert.equal(build.builder(), builder);
</span><span class="lines">@@ -856,7 +856,7 @@
</span><span class="cx">                 assert.equal(point.markedOutlier, true);
</span><span class="cx">             }).then(() =&gt; {
</span><span class="cx">                 assert.equal(points[2].id, 26532275);
</span><del>-                assert.equal(points[2].rootSet().revisionForRepository(webkit), '210102');
</del><ins>+                assert.equal(points[2].commitSet().revisionForRepository(webkit), '210102');
</ins><span class="cx">                 assert.equal(+points[2].build().buildTime(), 1482436041865);
</span><span class="cx">                 assert.equal(points[2].build().buildNumber(), 10879);
</span><span class="cx">                 assert.equal(points[2].time, 1482431464371);
</span><span class="lines">@@ -863,7 +863,7 @@
</span><span class="cx">                 assert.equal(points[2].value, 134.2725);
</span><span class="cx"> 
</span><span class="cx">                 assert.equal(points[3].id, 26547226);
</span><del>-                assert.equal(points[3].rootSet().revisionForRepository(webkit), '210168');
</del><ins>+                assert.equal(points[3].commitSet().revisionForRepository(webkit), '210168');
</ins><span class="cx">                 assert.equal(+points[3].build().buildTime(), 1482852452143);
</span><span class="cx">                 assert.equal(points[3].build().buildNumber(), 10902);
</span><span class="cx">                 assert.equal(points[3].time, 1482852412735);
</span><span class="lines">@@ -870,7 +870,7 @@
</span><span class="cx">                 assert.equal(points[3].value, 150.9625);
</span><span class="cx"> 
</span><span class="cx">                 assert.equal(points[4].id, 26559915);
</span><del>-                assert.equal(points[4].rootSet().revisionForRepository(webkit), '210222');
</del><ins>+                assert.equal(points[4].commitSet().revisionForRepository(webkit), '210222');
</ins><span class="cx">                 assert.equal(+points[4].build().buildTime(), 1483347926429);
</span><span class="cx">                 assert.equal(points[4].build().buildNumber(), 10924);
</span><span class="cx">                 assert.equal(points[4].time, 1483347732051);
</span><span class="lines">@@ -877,7 +877,7 @@
</span><span class="cx">                 assert.equal(points[4].value, 141.72);
</span><span class="cx"> 
</span><span class="cx">                 assert.equal(points[5].id, 26564388);
</span><del>-                assert.equal(points[5].rootSet().revisionForRepository(webkit), '210231');
</del><ins>+                assert.equal(points[5].commitSet().revisionForRepository(webkit), '210231');
</ins><span class="cx">                 assert.equal(+points[5].build().buildTime(), 1483415426049);
</span><span class="cx">                 assert.equal(points[5].build().buildNumber(), 10930);
</span><span class="cx">                 assert.equal(points[5].time, 1483412171531);
</span><span class="lines">@@ -884,7 +884,7 @@
</span><span class="cx">                 assert.equal(points[5].value, 138.13125);
</span><span class="cx"> 
</span><span class="cx">                 assert.equal(points[6].id, 26568867);
</span><del>-                assert.equal(points[6].rootSet().revisionForRepository(webkit), '210240');
</del><ins>+                assert.equal(points[6].commitSet().revisionForRepository(webkit), '210240');
</ins><span class="cx">                 assert.equal(+points[6].build().buildTime(), 1483469642993);
</span><span class="cx">                 assert.equal(points[6].build().buildNumber(), 10935);
</span><span class="cx">                 assert.equal(points[6].time, 1483469584347);
</span><span class="lines">@@ -904,7 +904,7 @@
</span><span class="cx">                     points[i] = fullSeries.findPointByIndex(i);
</span><span class="cx"> 
</span><span class="cx">                 assert.equal(points[0].id, 26530031);
</span><del>-                assert.equal(points[0].rootSet().revisionForRepository(webkit), '210096');
</del><ins>+                assert.equal(points[0].commitSet().revisionForRepository(webkit), '210096');
</ins><span class="cx">                 assert.equal(+points[0].build().buildTime(), 1482413222311);
</span><span class="cx">                 assert.equal(points[0].build().buildNumber(), 10877);
</span><span class="cx">                 assert.equal(points[0].time, 1482398562950);
</span><span class="lines">@@ -911,7 +911,7 @@
</span><span class="cx">                 assert.equal(points[0].value, 135.26375);
</span><span class="cx"> 
</span><span class="cx">                 assert.equal(points[1].id, 26532275);
</span><del>-                assert.equal(points[1].rootSet().revisionForRepository(webkit), '210102');
</del><ins>+                assert.equal(points[1].commitSet().revisionForRepository(webkit), '210102');
</ins><span class="cx">                 assert.equal(+points[1].build().buildTime(), 1482436041865);
</span><span class="cx">                 assert.equal(points[1].build().buildNumber(), 10879);
</span><span class="cx">                 assert.equal(points[1].time, 1482431464371);
</span><span class="lines">@@ -918,7 +918,7 @@
</span><span class="cx">                 assert.equal(points[1].value, 134.2725);
</span><span class="cx"> 
</span><span class="cx">                 assert.equal(points[2].id, 26547226);
</span><del>-                assert.equal(points[2].rootSet().revisionForRepository(webkit), '210168');
</del><ins>+                assert.equal(points[2].commitSet().revisionForRepository(webkit), '210168');
</ins><span class="cx">                 assert.equal(+points[2].build().buildTime(), 1482852452143);
</span><span class="cx">                 assert.equal(points[2].build().buildNumber(), 10902);
</span><span class="cx">                 assert.equal(points[2].time, 1482852412735);
</span><span class="lines">@@ -925,7 +925,7 @@
</span><span class="cx">                 assert.equal(points[2].value, 150.9625);
</span><span class="cx"> 
</span><span class="cx">                 assert.equal(points[3].id, 26559915);
</span><del>-                assert.equal(points[3].rootSet().revisionForRepository(webkit), '210222');
</del><ins>+                assert.equal(points[3].commitSet().revisionForRepository(webkit), '210222');
</ins><span class="cx">                 assert.equal(+points[3].build().buildTime(), 1483347926429);
</span><span class="cx">                 assert.equal(points[3].build().buildNumber(), 10924);
</span><span class="cx">                 assert.equal(points[3].time, 1483347732051);
</span><span class="lines">@@ -932,7 +932,7 @@
</span><span class="cx">                 assert.equal(points[3].value, 141.72);
</span><span class="cx"> 
</span><span class="cx">                 assert.equal(points[4].id, 26564388);
</span><del>-                assert.equal(points[4].rootSet().revisionForRepository(webkit), '210231');
</del><ins>+                assert.equal(points[4].commitSet().revisionForRepository(webkit), '210231');
</ins><span class="cx">                 assert.equal(+points[4].build().buildTime(), 1483415426049);
</span><span class="cx">                 assert.equal(points[4].build().buildNumber(), 10930);
</span><span class="cx">                 assert.equal(points[4].time, 1483412171531);
</span><span class="lines">@@ -939,7 +939,7 @@
</span><span class="cx">                 assert.equal(points[4].value, 138.13125);
</span><span class="cx"> 
</span><span class="cx">                 assert.equal(points[5].id, 26568867);
</span><del>-                assert.equal(points[5].rootSet().revisionForRepository(webkit), '210240');
</del><ins>+                assert.equal(points[5].commitSet().revisionForRepository(webkit), '210240');
</ins><span class="cx">                 assert.equal(+points[5].build().buildTime(), 1483469642993);
</span><span class="cx">                 assert.equal(points[5].build().buildNumber(), 10935);
</span><span class="cx">                 assert.equal(points[5].time, 1483469584347);
</span></span></pre></div>
<a id="trunkWebsitesperfwebkitorgunittestsresourcesmockv3modelsjs"></a>
<div class="modfile"><h4>Modified: trunk/Websites/perf.webkit.org/unit-tests/resources/mock-v3-models.js (213951 => 213952)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Websites/perf.webkit.org/unit-tests/resources/mock-v3-models.js        2017-03-14 23:03:47 UTC (rev 213951)
+++ trunk/Websites/perf.webkit.org/unit-tests/resources/mock-v3-models.js        2017-03-14 23:06:40 UTC (rev 213952)
</span><span class="lines">@@ -9,7 +9,7 @@
</span><span class="cx">             Metric.clearStaticMap();
</span><span class="cx">             Platform.clearStaticMap();
</span><span class="cx">             Repository.clearStaticMap();
</span><del>-            RootSet.clearStaticMap();
</del><ins>+            CommitSet.clearStaticMap();
</ins><span class="cx">             Test.clearStaticMap();
</span><span class="cx">             TestGroup.clearStaticMap();
</span><span class="cx">             BuildRequest.clearStaticMap();
</span></span></pre></div>
<a id="trunkWebsitesperfwebkitorgunitteststestgroupstestsjs"></a>
<div class="modfile"><h4>Modified: trunk/Websites/perf.webkit.org/unit-tests/test-groups-tests.js (213951 => 213952)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Websites/perf.webkit.org/unit-tests/test-groups-tests.js        2017-03-14 23:03:47 UTC (rev 213951)
+++ trunk/Websites/perf.webkit.org/unit-tests/test-groups-tests.js        2017-03-14 23:06:40 UTC (rev 213952)
</span><span class="lines">@@ -15,7 +15,7 @@
</span><span class="cx">             &quot;createdAt&quot;: 1458688514000,
</span><span class="cx">             &quot;hidden&quot;: false,
</span><span class="cx">             &quot;buildRequests&quot;: [&quot;16985&quot;, &quot;16986&quot;, &quot;16987&quot;, &quot;16988&quot;, &quot;16989&quot;, &quot;16990&quot;, &quot;16991&quot;, &quot;16992&quot;],
</span><del>-            &quot;rootSets&quot;: [&quot;4255&quot;, &quot;4256&quot;, &quot;4255&quot;, &quot;4256&quot;, &quot;4255&quot;, &quot;4256&quot;, &quot;4255&quot;, &quot;4256&quot;]
</del><ins>+            &quot;commitSets&quot;: [&quot;4255&quot;, &quot;4256&quot;, &quot;4255&quot;, &quot;4256&quot;, &quot;4255&quot;, &quot;4256&quot;, &quot;4255&quot;, &quot;4256&quot;]
</ins><span class="cx">         }
</span><span class="cx">         ],
</span><span class="cx">         &quot;buildRequests&quot;: [{
</span><span class="lines">@@ -25,7 +25,7 @@
</span><span class="cx">             &quot;platform&quot;: &quot;31&quot;,
</span><span class="cx">             &quot;testGroup&quot;: &quot;2128&quot;,
</span><span class="cx">             &quot;order&quot;: &quot;0&quot;,
</span><del>-            &quot;rootSet&quot;: &quot;4255&quot;,
</del><ins>+            &quot;commitSet&quot;: &quot;4255&quot;,
</ins><span class="cx">             &quot;status&quot;: &quot;pending&quot;,
</span><span class="cx">             &quot;url&quot;: null,
</span><span class="cx">             &quot;build&quot;: null,
</span><span class="lines">@@ -37,7 +37,7 @@
</span><span class="cx">             &quot;platform&quot;: &quot;31&quot;,
</span><span class="cx">             &quot;testGroup&quot;: &quot;2128&quot;,
</span><span class="cx">             &quot;order&quot;: &quot;1&quot;,
</span><del>-            &quot;rootSet&quot;: &quot;4256&quot;,
</del><ins>+            &quot;commitSet&quot;: &quot;4256&quot;,
</ins><span class="cx">             &quot;status&quot;: &quot;pending&quot;,
</span><span class="cx">             &quot;url&quot;: null,
</span><span class="cx">             &quot;build&quot;: null,
</span><span class="lines">@@ -50,7 +50,7 @@
</span><span class="cx">             &quot;platform&quot;: &quot;31&quot;,
</span><span class="cx">             &quot;testGroup&quot;: &quot;2128&quot;,
</span><span class="cx">             &quot;order&quot;: &quot;2&quot;,
</span><del>-            &quot;rootSet&quot;: &quot;4255&quot;,
</del><ins>+            &quot;commitSet&quot;: &quot;4255&quot;,
</ins><span class="cx">             &quot;status&quot;: &quot;pending&quot;,
</span><span class="cx">             &quot;url&quot;: null,
</span><span class="cx">             &quot;build&quot;: null,
</span><span class="lines">@@ -62,7 +62,7 @@
</span><span class="cx">             &quot;platform&quot;: &quot;31&quot;,
</span><span class="cx">             &quot;testGroup&quot;: &quot;2128&quot;,
</span><span class="cx">             &quot;order&quot;: &quot;3&quot;,
</span><del>-            &quot;rootSet&quot;: &quot;4256&quot;,
</del><ins>+            &quot;commitSet&quot;: &quot;4256&quot;,
</ins><span class="cx">             &quot;status&quot;: &quot;pending&quot;,
</span><span class="cx">             &quot;url&quot;: null,
</span><span class="cx">             &quot;build&quot;: null,
</span><span class="lines">@@ -69,15 +69,15 @@
</span><span class="cx">             &quot;createdAt&quot;: 1458688514000
</span><span class="cx">         }
</span><span class="cx">         ],
</span><del>-        &quot;rootSets&quot;: [{
</del><ins>+        &quot;commitSets&quot;: [{
</ins><span class="cx">             &quot;id&quot;: &quot;4255&quot;,
</span><del>-            &quot;roots&quot;: [&quot;87832&quot;, &quot;93116&quot;]
</del><ins>+            &quot;commits&quot;: [&quot;87832&quot;, &quot;93116&quot;]
</ins><span class="cx">         }, {
</span><span class="cx">             &quot;id&quot;: &quot;4256&quot;,
</span><del>-            &quot;roots&quot;: [&quot;87832&quot;, &quot;96336&quot;]
</del><ins>+            &quot;commits&quot;: [&quot;87832&quot;, &quot;96336&quot;]
</ins><span class="cx">         }
</span><span class="cx">         ],
</span><del>-        &quot;roots&quot;: [{
</del><ins>+        &quot;commits&quot;: [{
</ins><span class="cx">             &quot;id&quot;: &quot;87832&quot;,
</span><span class="cx">             &quot;repository&quot;: &quot;9&quot;,
</span><span class="cx">             &quot;revision&quot;: &quot;10.11 15A284&quot;,
</span><span class="lines">@@ -157,18 +157,18 @@
</span><span class="cx">         it('should create root sets for each group', function () {
</span><span class="cx">             var buildRequests = TestGroup._createModelsFromFetchedTestGroups(sampleTestGroup())[0].buildRequests();
</span><span class="cx"> 
</span><del>-            var firstSet = buildRequests[0].rootSet();
-            assert.ok(firstSet instanceof RootSet);
-            assert.equal(firstSet, buildRequests[2].rootSet());
</del><ins>+            var firstSet = buildRequests[0].commitSet();
+            assert.ok(firstSet instanceof CommitSet);
+            assert.equal(firstSet, buildRequests[2].commitSet());
</ins><span class="cx"> 
</span><del>-            var secondSet = buildRequests[1].rootSet();
-            assert.ok(secondSet instanceof RootSet);
-            assert.equal(secondSet, buildRequests[3].rootSet());
</del><ins>+            var secondSet = buildRequests[1].commitSet();
+            assert.ok(secondSet instanceof CommitSet);
+            assert.equal(secondSet, buildRequests[3].commitSet());
</ins><span class="cx"> 
</span><span class="cx">             assert.equal(firstSet.revisionForRepository(MockModels.webkit), '191622');
</span><span class="cx">             var firstWebKitCommit = firstSet.commitForRepository(MockModels.webkit);
</span><span class="cx">             assert.ok(firstWebKitCommit instanceof CommitLog);
</span><del>-            assert.ok(firstWebKitCommit, buildRequests[2].rootSet().commitForRepository(MockModels.webkit));
</del><ins>+            assert.ok(firstWebKitCommit, buildRequests[2].commitSet().commitForRepository(MockModels.webkit));
</ins><span class="cx">             assert.ok(firstWebKitCommit.repository(), MockModels.webkit);
</span><span class="cx">             assert.ok(firstWebKitCommit.revision(), '191622');
</span><span class="cx">             assert.ok(firstWebKitCommit.time() instanceof Date);
</span><span class="lines">@@ -177,7 +177,7 @@
</span><span class="cx">             assert.equal(secondSet.revisionForRepository(MockModels.webkit), '192736');
</span><span class="cx">             var secondWebKitCommit = secondSet.commitForRepository(MockModels.webkit);
</span><span class="cx">             assert.ok(secondWebKitCommit instanceof CommitLog);
</span><del>-            assert.ok(secondWebKitCommit, buildRequests[3].rootSet().commitForRepository(MockModels.webkit));
</del><ins>+            assert.ok(secondWebKitCommit, buildRequests[3].commitSet().commitForRepository(MockModels.webkit));
</ins><span class="cx">             assert.ok(secondWebKitCommit.repository(), MockModels.webkit);
</span><span class="cx">             assert.ok(secondWebKitCommit.revision(), '192736');
</span><span class="cx">             assert.ok(secondWebKitCommit.time() instanceof Date);
</span><span class="lines">@@ -186,9 +186,9 @@
</span><span class="cx">             assert.equal(firstSet.revisionForRepository(MockModels.osx), '10.11 15A284');
</span><span class="cx">             var osxCommit = firstSet.commitForRepository(MockModels.osx);
</span><span class="cx">             assert.ok(osxCommit instanceof CommitLog);
</span><del>-            assert.equal(osxCommit, buildRequests[1].rootSet().commitForRepository(MockModels.osx));
-            assert.equal(osxCommit, buildRequests[2].rootSet().commitForRepository(MockModels.osx));
-            assert.equal(osxCommit, buildRequests[3].rootSet().commitForRepository(MockModels.osx));
</del><ins>+            assert.equal(osxCommit, buildRequests[1].commitSet().commitForRepository(MockModels.osx));
+            assert.equal(osxCommit, buildRequests[2].commitSet().commitForRepository(MockModels.osx));
+            assert.equal(osxCommit, buildRequests[3].commitSet().commitForRepository(MockModels.osx));
</ins><span class="cx">             assert.ok(osxCommit.repository(), MockModels.osx);
</span><span class="cx">             assert.ok(osxCommit.revision(), '10.11 15A284');
</span><span class="cx">         });
</span></span></pre>
</div>
</div>

</body>
</html>