2014-05-27 15:07:38 +03:00
|
|
|
// Copyright (c) 2014 VMware, Inc.
|
refactor of hideci for readability and modularity
This is a refactors the hideci code into much smaller functions,
making the whole thing a bit more readable for fixing this going
forward. This was done in order to add a couple of new features. The
smaller functions should also make this code much easier to review.
After the refactor we now do a top down parsing of all comments in a
review, classifying them as 'is_ci' and 'is_trusted_ci' so that we can
more easily compute the results we want going forward.
In the process a few additional features were added.
1) CI results are only shown for the latest patch set, even if no CI
system has reported on it. This is accomplished via
ci_latest_patchset.
2) If CI system is in merge conflict, that's displayed in the results
box.
3) Test results records are lifted in total to the test results
display panel, and each set of test results includes the date that we
got it from. This means that for patches that get 'rechecked' a lot,
you'll see the whole history of test results on current patch. You
will also be able to quickly realize that the current test results are
older than the last recheck comment.
The UX for part 3 is different, and may need tweaking going forward,
however the merge of results from different runs was creating a lot of
confusion to reviewers, so this errors on the side of more clarity.
Because of the largely inconvenient workflow for development (the fact
that you basically need to copy / paste function definitions into
chrome dev console) this isn't broken up as smaller patches. This
should, hopefully, make future patches much easier on this code
though.
Change-Id: I3f128a449756fd6988f3810863cd1d49c476b0dd
2014-09-28 09:32:51 -04:00
|
|
|
// Copyright (c) 2014 Hewlett-Packard Development Company, L.P.
|
2014-05-27 15:07:38 +03:00
|
|
|
//
|
|
|
|
// Licensed under the Apache License, Version 2.0 (the "License"); you may
|
|
|
|
// not use this file except in compliance with the License. You may obtain
|
|
|
|
// a copy of the License at
|
|
|
|
//
|
|
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
//
|
|
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
|
|
// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
|
|
// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
|
|
// License for the specific language governing permissions and limitations
|
|
|
|
// under the License.
|
|
|
|
|
|
|
|
// this regex matches the hash part of review pages
|
2015-12-23 13:28:37 -08:00
|
|
|
var hashRegex = /^\#\/c\/([\d]+)((\/\d+)([.][.](\d+))?)?\/?$/;
|
2014-05-27 15:07:38 +03:00
|
|
|
// this regex matches CI comments
|
2016-06-16 09:13:39 -07:00
|
|
|
var ciRegex = /^(.* CI|Jenkins|Zuul)$/;
|
2014-07-09 12:59:28 -07:00
|
|
|
// this regex matches "Patch set #"
|
2014-10-28 13:01:54 -04:00
|
|
|
var psRegex = /^(Uploaded patch set|Patch Set) (\d+)(:|\.)/;
|
2014-08-16 15:40:00 -07:00
|
|
|
// this regex matches merge failure messages
|
refactor of hideci for readability and modularity
This is a refactors the hideci code into much smaller functions,
making the whole thing a bit more readable for fixing this going
forward. This was done in order to add a couple of new features. The
smaller functions should also make this code much easier to review.
After the refactor we now do a top down parsing of all comments in a
review, classifying them as 'is_ci' and 'is_trusted_ci' so that we can
more easily compute the results we want going forward.
In the process a few additional features were added.
1) CI results are only shown for the latest patch set, even if no CI
system has reported on it. This is accomplished via
ci_latest_patchset.
2) If CI system is in merge conflict, that's displayed in the results
box.
3) Test results records are lifted in total to the test results
display panel, and each set of test results includes the date that we
got it from. This means that for patches that get 'rechecked' a lot,
you'll see the whole history of test results on current patch. You
will also be able to quickly realize that the current test results are
older than the last recheck comment.
The UX for part 3 is different, and may need tweaking going forward,
however the merge of results from different runs was creating a lot of
confusion to reviewers, so this errors on the side of more clarity.
Because of the largely inconvenient workflow for development (the fact
that you basically need to copy / paste function definitions into
chrome dev console) this isn't broken up as smaller patches. This
should, hopefully, make future patches much easier on this code
though.
Change-Id: I3f128a449756fd6988f3810863cd1d49c476b0dd
2014-09-28 09:32:51 -04:00
|
|
|
var mergeFailedRegex = /Merge Failed\./;
|
2014-08-16 15:40:00 -07:00
|
|
|
// this regex matches the name of CI systems we trust to report merge failures
|
2016-06-16 09:13:39 -07:00
|
|
|
var trustedCIRegex = /^(OpenStack CI|Jenkins|Zuul)$/;
|
2016-05-12 13:00:52 -04:00
|
|
|
// this regex matches the name+pipeline that we want at the top of the CI list
|
2016-06-16 09:13:39 -07:00
|
|
|
var firstPartyCI = /^(Jenkins|Zuul)/;
|
2014-10-27 15:10:18 -04:00
|
|
|
// this regex matches the pipeline markup
|
|
|
|
var pipelineNameRegex = /Build \w+ \((\w+) pipeline\)/;
|
2015-05-01 08:35:26 -04:00
|
|
|
// The url to full status information on running jobs
|
|
|
|
var zuulStatusURL = 'http://status.openstack.org/zuul';
|
|
|
|
// The json URL to check for running jobs
|
2015-04-06 12:58:21 -04:00
|
|
|
var zuulStatusJSON = 'https://zuul.openstack.org/status/change/';
|
2014-05-27 15:07:38 +03:00
|
|
|
|
2015-05-02 06:43:42 -04:00
|
|
|
// This is a variable to determine if we're in debugging mode, which
|
|
|
|
// lets you globally set it to see what's going on in the flow.
|
|
|
|
var hideci_debug = false;
|
2015-05-01 08:35:26 -04:00
|
|
|
// This is a variable to enable zuul integration, we default it off so
|
|
|
|
// that it creates no additional load, and that it's easy to turn off
|
|
|
|
// the feature.
|
|
|
|
var zuul_inline = false;
|
2015-05-02 06:43:42 -04:00
|
|
|
|
|
|
|
/**
|
|
|
|
dbg(...) - prints a list of items out to the javascript
|
|
|
|
console.log. This allows us to leave tracing in this file which is a
|
|
|
|
no-op by default, but can be triggered if you enter a javascript
|
|
|
|
console and set hideci_debug = true.
|
|
|
|
*/
|
|
|
|
function dbg () {
|
|
|
|
if (hideci_debug == true) {
|
|
|
|
for (var i = 0; i < arguments.length; i++) {
|
|
|
|
console.log(arguments[i]);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2015-05-01 08:35:26 -04:00
|
|
|
|
|
|
|
function format_time(ms, words) {
|
|
|
|
if (ms == null) {
|
|
|
|
return "unknown";
|
|
|
|
}
|
|
|
|
var seconds = (+ms)/1000;
|
|
|
|
var minutes = Math.floor(seconds/60);
|
|
|
|
var hours = Math.floor(minutes/60);
|
|
|
|
seconds = Math.floor(seconds % 60);
|
|
|
|
minutes = Math.floor(minutes % 60);
|
|
|
|
r = '';
|
|
|
|
if (words) {
|
|
|
|
if (hours) {
|
|
|
|
r += hours;
|
|
|
|
r += ' hr ';
|
|
|
|
}
|
|
|
|
r += minutes + ' min';
|
|
|
|
} else {
|
|
|
|
if (hours < 10) r += '0';
|
|
|
|
r += hours + ':';
|
|
|
|
if (minutes < 10) r += '0';
|
|
|
|
r += minutes + ':';
|
|
|
|
if (seconds < 10) r += '0';
|
|
|
|
r += seconds;
|
|
|
|
}
|
|
|
|
return r;
|
|
|
|
}
|
|
|
|
|
|
|
|
var ci_parse_psnum = function($panel) {
|
|
|
|
var match = psRegex.exec($panel.html());
|
|
|
|
if (match !== null) {
|
|
|
|
return parseInt(match[2]);
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
};
|
|
|
|
|
refactor of hideci for readability and modularity
This is a refactors the hideci code into much smaller functions,
making the whole thing a bit more readable for fixing this going
forward. This was done in order to add a couple of new features. The
smaller functions should also make this code much easier to review.
After the refactor we now do a top down parsing of all comments in a
review, classifying them as 'is_ci' and 'is_trusted_ci' so that we can
more easily compute the results we want going forward.
In the process a few additional features were added.
1) CI results are only shown for the latest patch set, even if no CI
system has reported on it. This is accomplished via
ci_latest_patchset.
2) If CI system is in merge conflict, that's displayed in the results
box.
3) Test results records are lifted in total to the test results
display panel, and each set of test results includes the date that we
got it from. This means that for patches that get 'rechecked' a lot,
you'll see the whole history of test results on current patch. You
will also be able to quickly realize that the current test results are
older than the last recheck comment.
The UX for part 3 is different, and may need tweaking going forward,
however the merge of results from different runs was creating a lot of
confusion to reviewers, so this errors on the side of more clarity.
Because of the largely inconvenient workflow for development (the fact
that you basically need to copy / paste function definitions into
chrome dev console) this isn't broken up as smaller patches. This
should, hopefully, make future patches much easier on this code
though.
Change-Id: I3f128a449756fd6988f3810863cd1d49c476b0dd
2014-09-28 09:32:51 -04:00
|
|
|
var ci_parse_is_merge_conflict = function($panel) {
|
|
|
|
return (mergeFailedRegex.exec($panel.html()) !== null);
|
|
|
|
};
|
|
|
|
|
2014-10-27 15:10:18 -04:00
|
|
|
var ci_find_pipeline = function($panel) {
|
|
|
|
var match = pipelineNameRegex.exec($panel.html());
|
|
|
|
if (match !== null) {
|
|
|
|
return match[1];
|
|
|
|
} else {
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
refactor of hideci for readability and modularity
This is a refactors the hideci code into much smaller functions,
making the whole thing a bit more readable for fixing this going
forward. This was done in order to add a couple of new features. The
smaller functions should also make this code much easier to review.
After the refactor we now do a top down parsing of all comments in a
review, classifying them as 'is_ci' and 'is_trusted_ci' so that we can
more easily compute the results we want going forward.
In the process a few additional features were added.
1) CI results are only shown for the latest patch set, even if no CI
system has reported on it. This is accomplished via
ci_latest_patchset.
2) If CI system is in merge conflict, that's displayed in the results
box.
3) Test results records are lifted in total to the test results
display panel, and each set of test results includes the date that we
got it from. This means that for patches that get 'rechecked' a lot,
you'll see the whole history of test results on current patch. You
will also be able to quickly realize that the current test results are
older than the last recheck comment.
The UX for part 3 is different, and may need tweaking going forward,
however the merge of results from different runs was creating a lot of
confusion to reviewers, so this errors on the side of more clarity.
Because of the largely inconvenient workflow for development (the fact
that you basically need to copy / paste function definitions into
chrome dev console) this isn't broken up as smaller patches. This
should, hopefully, make future patches much easier on this code
though.
Change-Id: I3f128a449756fd6988f3810863cd1d49c476b0dd
2014-09-28 09:32:51 -04:00
|
|
|
var ci_parse_results = function($panel) {
|
|
|
|
var result_list = [];
|
|
|
|
var test_results = $panel.find("li.comment_test");
|
2014-10-27 15:10:18 -04:00
|
|
|
var pipeline = null;
|
refactor of hideci for readability and modularity
This is a refactors the hideci code into much smaller functions,
making the whole thing a bit more readable for fixing this going
forward. This was done in order to add a couple of new features. The
smaller functions should also make this code much easier to review.
After the refactor we now do a top down parsing of all comments in a
review, classifying them as 'is_ci' and 'is_trusted_ci' so that we can
more easily compute the results we want going forward.
In the process a few additional features were added.
1) CI results are only shown for the latest patch set, even if no CI
system has reported on it. This is accomplished via
ci_latest_patchset.
2) If CI system is in merge conflict, that's displayed in the results
box.
3) Test results records are lifted in total to the test results
display panel, and each set of test results includes the date that we
got it from. This means that for patches that get 'rechecked' a lot,
you'll see the whole history of test results on current patch. You
will also be able to quickly realize that the current test results are
older than the last recheck comment.
The UX for part 3 is different, and may need tweaking going forward,
however the merge of results from different runs was creating a lot of
confusion to reviewers, so this errors on the side of more clarity.
Because of the largely inconvenient workflow for development (the fact
that you basically need to copy / paste function definitions into
chrome dev console) this isn't broken up as smaller patches. This
should, hopefully, make future patches much easier on this code
though.
Change-Id: I3f128a449756fd6988f3810863cd1d49c476b0dd
2014-09-28 09:32:51 -04:00
|
|
|
if (test_results !== null) {
|
|
|
|
test_results.each(function(i, li) {
|
|
|
|
var result = {};
|
|
|
|
result["name"] = $(li).find("span.comment_test_name").find("a")[0].innerHTML;
|
|
|
|
result["link"] = $(li).find("span.comment_test_name").find("a")[0];
|
|
|
|
result["result"] = $(li).find("span.comment_test_result")[0];
|
|
|
|
result_list.push(result);
|
|
|
|
});
|
2014-08-16 15:40:00 -07:00
|
|
|
}
|
refactor of hideci for readability and modularity
This is a refactors the hideci code into much smaller functions,
making the whole thing a bit more readable for fixing this going
forward. This was done in order to add a couple of new features. The
smaller functions should also make this code much easier to review.
After the refactor we now do a top down parsing of all comments in a
review, classifying them as 'is_ci' and 'is_trusted_ci' so that we can
more easily compute the results we want going forward.
In the process a few additional features were added.
1) CI results are only shown for the latest patch set, even if no CI
system has reported on it. This is accomplished via
ci_latest_patchset.
2) If CI system is in merge conflict, that's displayed in the results
box.
3) Test results records are lifted in total to the test results
display panel, and each set of test results includes the date that we
got it from. This means that for patches that get 'rechecked' a lot,
you'll see the whole history of test results on current patch. You
will also be able to quickly realize that the current test results are
older than the last recheck comment.
The UX for part 3 is different, and may need tweaking going forward,
however the merge of results from different runs was creating a lot of
confusion to reviewers, so this errors on the side of more clarity.
Because of the largely inconvenient workflow for development (the fact
that you basically need to copy / paste function definitions into
chrome dev console) this isn't broken up as smaller patches. This
should, hopefully, make future patches much easier on this code
though.
Change-Id: I3f128a449756fd6988f3810863cd1d49c476b0dd
2014-09-28 09:32:51 -04:00
|
|
|
return result_list;
|
2014-07-09 12:59:28 -07:00
|
|
|
};
|
|
|
|
|
2014-10-27 15:10:18 -04:00
|
|
|
/***
|
2016-05-11 22:42:26 +10:00
|
|
|
* function ci_group_by_ci_pipeline - create a group by structure for
|
|
|
|
* iterating on CI's pipelines
|
2014-10-27 15:10:18 -04:00
|
|
|
*
|
|
|
|
* This function takes the full list of comments, the current patch
|
2016-05-11 22:42:26 +10:00
|
|
|
* number, and builds an array of (ci_name_pipelinename, comments array)
|
2014-10-27 15:10:18 -04:00
|
|
|
* tuples. That makes it very easy to process during the display
|
2016-05-11 22:42:26 +10:00
|
|
|
* phase to ensure we only display the latest result for every CI
|
2014-10-27 15:10:18 -04:00
|
|
|
* pipeline.
|
|
|
|
*
|
|
|
|
* Comments that do not have a parsable pipeline (3rd party ci
|
|
|
|
* systems) get collapsed by name, and we specify 'check' for their
|
|
|
|
* pipeline.
|
|
|
|
*
|
|
|
|
**/
|
|
|
|
|
2016-05-11 22:42:26 +10:00
|
|
|
var ci_group_by_ci_pipeline = function(current, comments) {
|
|
|
|
var ci_pipelines = [];
|
|
|
|
var ci_pipeline_comments = [];
|
2014-10-27 15:10:18 -04:00
|
|
|
for (var i = 0; i < comments.length; i++) {
|
|
|
|
var comment = comments[i];
|
|
|
|
if ((comment.psnum != current) || !comment.is_ci || (comment.results.length == 0)) {
|
|
|
|
continue;
|
|
|
|
}
|
2016-05-11 22:42:26 +10:00
|
|
|
var name_pipeline = comment.name;
|
|
|
|
if (comment.pipeline !== null) {
|
|
|
|
name_pipeline += ' ' + comment.pipeline;
|
|
|
|
}
|
|
|
|
|
|
|
|
var index = ci_pipelines.indexOf(name_pipeline);
|
|
|
|
if (index == -1) {
|
|
|
|
// not found, so create new entries
|
|
|
|
ci_pipelines.push(name_pipeline);
|
|
|
|
ci_pipeline_comments.push([comment]);
|
2014-10-27 15:10:18 -04:00
|
|
|
} else {
|
2016-05-12 12:45:27 -04:00
|
|
|
ci_pipeline_comments[index].push(comment);
|
2014-10-27 15:10:18 -04:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2016-05-12 13:00:52 -04:00
|
|
|
function sort_by_name(a,b) {
|
|
|
|
if (a[0] < b[0])
|
|
|
|
return -1;
|
|
|
|
else if (a[0] > b[0])
|
|
|
|
return 1;
|
|
|
|
else
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
2014-10-27 15:10:18 -04:00
|
|
|
var results = [];
|
2016-05-12 13:00:52 -04:00
|
|
|
var notfirstparty = [];
|
|
|
|
// we want to separate out first party CI results to always be the
|
|
|
|
// top of the list, and third party CI to come after, so that
|
|
|
|
// hunting for first party CI isn't tough.
|
2016-05-11 22:42:26 +10:00
|
|
|
for (i = 0; i < ci_pipelines.length; i++) {
|
2016-05-12 13:00:52 -04:00
|
|
|
if (firstPartyCI.test(ci_pipelines[i])) {
|
|
|
|
results.push([ci_pipelines[i], ci_pipeline_comments[i]]);
|
|
|
|
} else {
|
|
|
|
notfirstparty.push([ci_pipelines[i], ci_pipeline_comments[i]]);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
notfirstparty.sort(sort_by_name);
|
|
|
|
|
|
|
|
for (i = 0; i < notfirstparty.length; i++) {
|
|
|
|
results.push(notfirstparty[i]);
|
2014-10-27 15:10:18 -04:00
|
|
|
}
|
|
|
|
return results;
|
|
|
|
};
|
|
|
|
|
refactor of hideci for readability and modularity
This is a refactors the hideci code into much smaller functions,
making the whole thing a bit more readable for fixing this going
forward. This was done in order to add a couple of new features. The
smaller functions should also make this code much easier to review.
After the refactor we now do a top down parsing of all comments in a
review, classifying them as 'is_ci' and 'is_trusted_ci' so that we can
more easily compute the results we want going forward.
In the process a few additional features were added.
1) CI results are only shown for the latest patch set, even if no CI
system has reported on it. This is accomplished via
ci_latest_patchset.
2) If CI system is in merge conflict, that's displayed in the results
box.
3) Test results records are lifted in total to the test results
display panel, and each set of test results includes the date that we
got it from. This means that for patches that get 'rechecked' a lot,
you'll see the whole history of test results on current patch. You
will also be able to quickly realize that the current test results are
older than the last recheck comment.
The UX for part 3 is different, and may need tweaking going forward,
however the merge of results from different runs was creating a lot of
confusion to reviewers, so this errors on the side of more clarity.
Because of the largely inconvenient workflow for development (the fact
that you basically need to copy / paste function definitions into
chrome dev console) this isn't broken up as smaller patches. This
should, hopefully, make future patches much easier on this code
though.
Change-Id: I3f128a449756fd6988f3810863cd1d49c476b0dd
2014-09-28 09:32:51 -04:00
|
|
|
var ci_parse_comments = function() {
|
|
|
|
var comments = [];
|
2014-10-28 13:01:54 -04:00
|
|
|
$("p").each(function() {
|
|
|
|
var match = psRegex.exec($(this).html());
|
|
|
|
if (match !== null) {
|
|
|
|
var psnum = parseInt(match[2]);
|
|
|
|
var top = $(this).parent().parent().parent();
|
|
|
|
// old change screen
|
|
|
|
var name = top.attr("name");
|
|
|
|
if (!name) {
|
|
|
|
// new change screen
|
2015-12-16 20:41:53 -05:00
|
|
|
name = $(this).parent().parent().parent().children().children()[0].innerHTML;
|
|
|
|
top = $(this).parent().parent().parent().parent();
|
2014-10-28 13:01:54 -04:00
|
|
|
}
|
|
|
|
var comment = {};
|
|
|
|
comment.name = name;
|
|
|
|
|
|
|
|
var date_cell = top.find(".commentPanelDateCell");
|
|
|
|
if (date_cell.attr("title")) {
|
|
|
|
// old change screen
|
|
|
|
comment.date = date_cell.attr("title");
|
|
|
|
} else {
|
|
|
|
// new change screen
|
2015-10-14 21:22:50 -07:00
|
|
|
comment.date = $(this).parent().parent().parent().children().children()[2].innerHTML
|
2014-10-28 13:01:54 -04:00
|
|
|
}
|
|
|
|
var comment_panel = $(this).parent();
|
|
|
|
comment.psnum = psnum;
|
|
|
|
comment.merge_conflict = ci_parse_is_merge_conflict(comment_panel);
|
|
|
|
comment.pipeline = ci_find_pipeline(comment_panel);
|
|
|
|
comment.results = ci_parse_results(comment_panel);
|
|
|
|
comment.is_ci = (ciRegex.exec(comment.name) !== null);
|
|
|
|
comment.is_trusted_ci = (trustedCIRegex.exec(comment.name) !== null);
|
|
|
|
comment.ref = top;
|
2015-05-02 06:43:42 -04:00
|
|
|
dbg("Found comment", comment);
|
2014-10-28 13:01:54 -04:00
|
|
|
comments.push(comment);
|
|
|
|
}
|
refactor of hideci for readability and modularity
This is a refactors the hideci code into much smaller functions,
making the whole thing a bit more readable for fixing this going
forward. This was done in order to add a couple of new features. The
smaller functions should also make this code much easier to review.
After the refactor we now do a top down parsing of all comments in a
review, classifying them as 'is_ci' and 'is_trusted_ci' so that we can
more easily compute the results we want going forward.
In the process a few additional features were added.
1) CI results are only shown for the latest patch set, even if no CI
system has reported on it. This is accomplished via
ci_latest_patchset.
2) If CI system is in merge conflict, that's displayed in the results
box.
3) Test results records are lifted in total to the test results
display panel, and each set of test results includes the date that we
got it from. This means that for patches that get 'rechecked' a lot,
you'll see the whole history of test results on current patch. You
will also be able to quickly realize that the current test results are
older than the last recheck comment.
The UX for part 3 is different, and may need tweaking going forward,
however the merge of results from different runs was creating a lot of
confusion to reviewers, so this errors on the side of more clarity.
Because of the largely inconvenient workflow for development (the fact
that you basically need to copy / paste function definitions into
chrome dev console) this isn't broken up as smaller patches. This
should, hopefully, make future patches much easier on this code
though.
Change-Id: I3f128a449756fd6988f3810863cd1d49c476b0dd
2014-09-28 09:32:51 -04:00
|
|
|
});
|
|
|
|
return comments;
|
|
|
|
};
|
2014-07-09 12:59:28 -07:00
|
|
|
|
refactor of hideci for readability and modularity
This is a refactors the hideci code into much smaller functions,
making the whole thing a bit more readable for fixing this going
forward. This was done in order to add a couple of new features. The
smaller functions should also make this code much easier to review.
After the refactor we now do a top down parsing of all comments in a
review, classifying them as 'is_ci' and 'is_trusted_ci' so that we can
more easily compute the results we want going forward.
In the process a few additional features were added.
1) CI results are only shown for the latest patch set, even if no CI
system has reported on it. This is accomplished via
ci_latest_patchset.
2) If CI system is in merge conflict, that's displayed in the results
box.
3) Test results records are lifted in total to the test results
display panel, and each set of test results includes the date that we
got it from. This means that for patches that get 'rechecked' a lot,
you'll see the whole history of test results on current patch. You
will also be able to quickly realize that the current test results are
older than the last recheck comment.
The UX for part 3 is different, and may need tweaking going forward,
however the merge of results from different runs was creating a lot of
confusion to reviewers, so this errors on the side of more clarity.
Because of the largely inconvenient workflow for development (the fact
that you basically need to copy / paste function definitions into
chrome dev console) this isn't broken up as smaller patches. This
should, hopefully, make future patches much easier on this code
though.
Change-Id: I3f128a449756fd6988f3810863cd1d49c476b0dd
2014-09-28 09:32:51 -04:00
|
|
|
var ci_latest_patchset = function(comments) {
|
|
|
|
var psnum = 0;
|
|
|
|
for (var i = 0; i < comments.length; i++) {
|
|
|
|
psnum = Math.max(psnum, comments[i].psnum);
|
|
|
|
}
|
|
|
|
return psnum;
|
|
|
|
};
|
2014-07-09 12:59:28 -07:00
|
|
|
|
refactor of hideci for readability and modularity
This is a refactors the hideci code into much smaller functions,
making the whole thing a bit more readable for fixing this going
forward. This was done in order to add a couple of new features. The
smaller functions should also make this code much easier to review.
After the refactor we now do a top down parsing of all comments in a
review, classifying them as 'is_ci' and 'is_trusted_ci' so that we can
more easily compute the results we want going forward.
In the process a few additional features were added.
1) CI results are only shown for the latest patch set, even if no CI
system has reported on it. This is accomplished via
ci_latest_patchset.
2) If CI system is in merge conflict, that's displayed in the results
box.
3) Test results records are lifted in total to the test results
display panel, and each set of test results includes the date that we
got it from. This means that for patches that get 'rechecked' a lot,
you'll see the whole history of test results on current patch. You
will also be able to quickly realize that the current test results are
older than the last recheck comment.
The UX for part 3 is different, and may need tweaking going forward,
however the merge of results from different runs was creating a lot of
confusion to reviewers, so this errors on the side of more clarity.
Because of the largely inconvenient workflow for development (the fact
that you basically need to copy / paste function definitions into
chrome dev console) this isn't broken up as smaller patches. This
should, hopefully, make future patches much easier on this code
though.
Change-Id: I3f128a449756fd6988f3810863cd1d49c476b0dd
2014-09-28 09:32:51 -04:00
|
|
|
var ci_is_merge_conflict = function(comments) {
|
|
|
|
var latest = ci_latest_patchset(comments);
|
|
|
|
var conflict = false;
|
|
|
|
for (var i = 0; i < comments.length; i++) {
|
|
|
|
var comment = comments[i];
|
|
|
|
// only if we are actually talking about the latest patch set
|
|
|
|
if (comment.psnum == latest) {
|
|
|
|
if (comment.is_trusted_ci) {
|
|
|
|
conflict = comment.merge_conflict;
|
2014-07-09 12:59:28 -07:00
|
|
|
}
|
|
|
|
}
|
refactor of hideci for readability and modularity
This is a refactors the hideci code into much smaller functions,
making the whole thing a bit more readable for fixing this going
forward. This was done in order to add a couple of new features. The
smaller functions should also make this code much easier to review.
After the refactor we now do a top down parsing of all comments in a
review, classifying them as 'is_ci' and 'is_trusted_ci' so that we can
more easily compute the results we want going forward.
In the process a few additional features were added.
1) CI results are only shown for the latest patch set, even if no CI
system has reported on it. This is accomplished via
ci_latest_patchset.
2) If CI system is in merge conflict, that's displayed in the results
box.
3) Test results records are lifted in total to the test results
display panel, and each set of test results includes the date that we
got it from. This means that for patches that get 'rechecked' a lot,
you'll see the whole history of test results on current patch. You
will also be able to quickly realize that the current test results are
older than the last recheck comment.
The UX for part 3 is different, and may need tweaking going forward,
however the merge of results from different runs was creating a lot of
confusion to reviewers, so this errors on the side of more clarity.
Because of the largely inconvenient workflow for development (the fact
that you basically need to copy / paste function definitions into
chrome dev console) this isn't broken up as smaller patches. This
should, hopefully, make future patches much easier on this code
though.
Change-Id: I3f128a449756fd6988f3810863cd1d49c476b0dd
2014-09-28 09:32:51 -04:00
|
|
|
}
|
|
|
|
return conflict;
|
|
|
|
};
|
2014-07-09 12:59:28 -07:00
|
|
|
|
refactor of hideci for readability and modularity
This is a refactors the hideci code into much smaller functions,
making the whole thing a bit more readable for fixing this going
forward. This was done in order to add a couple of new features. The
smaller functions should also make this code much easier to review.
After the refactor we now do a top down parsing of all comments in a
review, classifying them as 'is_ci' and 'is_trusted_ci' so that we can
more easily compute the results we want going forward.
In the process a few additional features were added.
1) CI results are only shown for the latest patch set, even if no CI
system has reported on it. This is accomplished via
ci_latest_patchset.
2) If CI system is in merge conflict, that's displayed in the results
box.
3) Test results records are lifted in total to the test results
display panel, and each set of test results includes the date that we
got it from. This means that for patches that get 'rechecked' a lot,
you'll see the whole history of test results on current patch. You
will also be able to quickly realize that the current test results are
older than the last recheck comment.
The UX for part 3 is different, and may need tweaking going forward,
however the merge of results from different runs was creating a lot of
confusion to reviewers, so this errors on the side of more clarity.
Because of the largely inconvenient workflow for development (the fact
that you basically need to copy / paste function definitions into
chrome dev console) this isn't broken up as smaller patches. This
should, hopefully, make future patches much easier on this code
though.
Change-Id: I3f128a449756fd6988f3810863cd1d49c476b0dd
2014-09-28 09:32:51 -04:00
|
|
|
var ci_prepare_results_table = function() {
|
|
|
|
// Create a table and insert it after the approval table
|
|
|
|
var table = $("table.test_result_table")[0];
|
|
|
|
if (!table) {
|
|
|
|
table = document.createElement("table");
|
|
|
|
$(table).addClass("test_result_table");
|
|
|
|
$(table).addClass("infoTable").css({"margin-top":"1em", "margin-bottom":"1em"});
|
2015-05-01 08:35:26 -04:00
|
|
|
|
refactor of hideci for readability and modularity
This is a refactors the hideci code into much smaller functions,
making the whole thing a bit more readable for fixing this going
forward. This was done in order to add a couple of new features. The
smaller functions should also make this code much easier to review.
After the refactor we now do a top down parsing of all comments in a
review, classifying them as 'is_ci' and 'is_trusted_ci' so that we can
more easily compute the results we want going forward.
In the process a few additional features were added.
1) CI results are only shown for the latest patch set, even if no CI
system has reported on it. This is accomplished via
ci_latest_patchset.
2) If CI system is in merge conflict, that's displayed in the results
box.
3) Test results records are lifted in total to the test results
display panel, and each set of test results includes the date that we
got it from. This means that for patches that get 'rechecked' a lot,
you'll see the whole history of test results on current patch. You
will also be able to quickly realize that the current test results are
older than the last recheck comment.
The UX for part 3 is different, and may need tweaking going forward,
however the merge of results from different runs was creating a lot of
confusion to reviewers, so this errors on the side of more clarity.
Because of the largely inconvenient workflow for development (the fact
that you basically need to copy / paste function definitions into
chrome dev console) this isn't broken up as smaller patches. This
should, hopefully, make future patches much easier on this code
though.
Change-Id: I3f128a449756fd6988f3810863cd1d49c476b0dd
2014-09-28 09:32:51 -04:00
|
|
|
var approval_table = $("div.approvalTable");
|
|
|
|
if (approval_table.length) {
|
|
|
|
var outer_table = document.createElement("table");
|
|
|
|
$(outer_table).insertBefore(approval_table);
|
|
|
|
var outer_table_row = document.createElement("tr");
|
|
|
|
$(outer_table).append(outer_table_row);
|
|
|
|
var td = document.createElement("td");
|
|
|
|
$(outer_table_row).append(td);
|
|
|
|
$(td).css({"vertical-align":"top"});
|
|
|
|
$(td).append(approval_table);
|
|
|
|
td = document.createElement("td");
|
|
|
|
$(outer_table_row).append(td);
|
|
|
|
$(td).css({"vertical-align":"top"});
|
|
|
|
$(td).append(table);
|
2014-07-09 12:59:28 -07:00
|
|
|
} else {
|
refactor of hideci for readability and modularity
This is a refactors the hideci code into much smaller functions,
making the whole thing a bit more readable for fixing this going
forward. This was done in order to add a couple of new features. The
smaller functions should also make this code much easier to review.
After the refactor we now do a top down parsing of all comments in a
review, classifying them as 'is_ci' and 'is_trusted_ci' so that we can
more easily compute the results we want going forward.
In the process a few additional features were added.
1) CI results are only shown for the latest patch set, even if no CI
system has reported on it. This is accomplished via
ci_latest_patchset.
2) If CI system is in merge conflict, that's displayed in the results
box.
3) Test results records are lifted in total to the test results
display panel, and each set of test results includes the date that we
got it from. This means that for patches that get 'rechecked' a lot,
you'll see the whole history of test results on current patch. You
will also be able to quickly realize that the current test results are
older than the last recheck comment.
The UX for part 3 is different, and may need tweaking going forward,
however the merge of results from different runs was creating a lot of
confusion to reviewers, so this errors on the side of more clarity.
Because of the largely inconvenient workflow for development (the fact
that you basically need to copy / paste function definitions into
chrome dev console) this isn't broken up as smaller patches. This
should, hopefully, make future patches much easier on this code
though.
Change-Id: I3f128a449756fd6988f3810863cd1d49c476b0dd
2014-09-28 09:32:51 -04:00
|
|
|
var big_table_row = $("div.screen>div>div>table>tbody>tr");
|
|
|
|
var td = $(big_table_row).children()[1];
|
|
|
|
$(td).append(table);
|
2014-07-09 12:59:28 -07:00
|
|
|
}
|
refactor of hideci for readability and modularity
This is a refactors the hideci code into much smaller functions,
making the whole thing a bit more readable for fixing this going
forward. This was done in order to add a couple of new features. The
smaller functions should also make this code much easier to review.
After the refactor we now do a top down parsing of all comments in a
review, classifying them as 'is_ci' and 'is_trusted_ci' so that we can
more easily compute the results we want going forward.
In the process a few additional features were added.
1) CI results are only shown for the latest patch set, even if no CI
system has reported on it. This is accomplished via
ci_latest_patchset.
2) If CI system is in merge conflict, that's displayed in the results
box.
3) Test results records are lifted in total to the test results
display panel, and each set of test results includes the date that we
got it from. This means that for patches that get 'rechecked' a lot,
you'll see the whole history of test results on current patch. You
will also be able to quickly realize that the current test results are
older than the last recheck comment.
The UX for part 3 is different, and may need tweaking going forward,
however the merge of results from different runs was creating a lot of
confusion to reviewers, so this errors on the side of more clarity.
Because of the largely inconvenient workflow for development (the fact
that you basically need to copy / paste function definitions into
chrome dev console) this isn't broken up as smaller patches. This
should, hopefully, make future patches much easier on this code
though.
Change-Id: I3f128a449756fd6988f3810863cd1d49c476b0dd
2014-09-28 09:32:51 -04:00
|
|
|
} else {
|
|
|
|
$(table).empty();
|
|
|
|
}
|
|
|
|
return table;
|
|
|
|
};
|
|
|
|
|
|
|
|
var ci_display_results = function(comments) {
|
|
|
|
var table = ci_prepare_results_table();
|
|
|
|
if (ci_is_merge_conflict(comments)) {
|
|
|
|
var mc_header = $("<tr>").append($('<td class="merge_conflict" colpsan="2">Patch in Merge Conflict</td>'));
|
|
|
|
mc_header.css('width', '400');
|
|
|
|
mc_header.css('font-weight', 'bold');
|
|
|
|
mc_header.css('color', 'red');
|
|
|
|
mc_header.css('padding-left', '2em');
|
|
|
|
$(table).append(mc_header);
|
|
|
|
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
var current = ci_latest_patchset(comments);
|
2016-05-11 22:42:26 +10:00
|
|
|
var ci_pipelines = ci_group_by_ci_pipeline(current, comments);
|
|
|
|
for (var i = 0; i < ci_pipelines.length; i++) {
|
|
|
|
var ci_pipeline_name = ci_pipelines[i][0];
|
|
|
|
var ci_pipeline_comments = ci_pipelines[i][1];
|
2014-10-27 15:10:18 -04:00
|
|
|
// the most recent comment on a pipeline
|
2016-05-11 22:42:26 +10:00
|
|
|
var last = ci_pipeline_comments.length - 1;
|
|
|
|
var comment = ci_pipeline_comments[last];
|
2014-10-27 15:10:18 -04:00
|
|
|
var rechecks = "";
|
|
|
|
if (last > 0) {
|
|
|
|
rechecks = " (" + last + " rechecks)";
|
|
|
|
}
|
|
|
|
|
2016-05-11 22:42:26 +10:00
|
|
|
var header = $("<tr>").append($('<td class="header">' + ci_pipeline_name + rechecks + '</td>'));
|
2014-10-27 15:10:18 -04:00
|
|
|
header.append('<td class="header ci_date">' + comment.date + '</td>');
|
|
|
|
$(table).append(header);
|
|
|
|
for (var j = 0; j < comment.results.length; j++) {
|
|
|
|
var result = comment.results[j];
|
|
|
|
var tr = $("<tr>");
|
|
|
|
tr.append($("<td>").append($(result["link"]).clone()));
|
|
|
|
tr.append($("<td>").append($(result["result"]).clone()));
|
|
|
|
$(table).append(tr);
|
2014-08-16 15:40:00 -07:00
|
|
|
}
|
2014-05-27 15:07:38 +03:00
|
|
|
}
|
|
|
|
};
|
|
|
|
|
2014-10-01 23:40:13 -04:00
|
|
|
var set_cookie = function (name, value) {
|
|
|
|
document.cookie = name + "=" + value + "; path=/";
|
|
|
|
};
|
|
|
|
|
|
|
|
var read_cookie = function (name) {
|
|
|
|
var nameEQ = name + "=";
|
|
|
|
var ca = document.cookie.split(';');
|
|
|
|
for (var i = 0; i < ca.length; i++) {
|
|
|
|
var c = ca[i];
|
|
|
|
while (c.charAt(0) == ' ') {
|
|
|
|
c = c.substring(1, c.length);
|
|
|
|
}
|
|
|
|
if (c.indexOf(nameEQ) == 0) {
|
|
|
|
return c.substring(nameEQ.length, c.length);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return null;
|
|
|
|
};
|
|
|
|
|
|
|
|
var ci_toggle_visibility = function(comments, showOrHide) {
|
refactor of hideci for readability and modularity
This is a refactors the hideci code into much smaller functions,
making the whole thing a bit more readable for fixing this going
forward. This was done in order to add a couple of new features. The
smaller functions should also make this code much easier to review.
After the refactor we now do a top down parsing of all comments in a
review, classifying them as 'is_ci' and 'is_trusted_ci' so that we can
more easily compute the results we want going forward.
In the process a few additional features were added.
1) CI results are only shown for the latest patch set, even if no CI
system has reported on it. This is accomplished via
ci_latest_patchset.
2) If CI system is in merge conflict, that's displayed in the results
box.
3) Test results records are lifted in total to the test results
display panel, and each set of test results includes the date that we
got it from. This means that for patches that get 'rechecked' a lot,
you'll see the whole history of test results on current patch. You
will also be able to quickly realize that the current test results are
older than the last recheck comment.
The UX for part 3 is different, and may need tweaking going forward,
however the merge of results from different runs was creating a lot of
confusion to reviewers, so this errors on the side of more clarity.
Because of the largely inconvenient workflow for development (the fact
that you basically need to copy / paste function definitions into
chrome dev console) this isn't broken up as smaller patches. This
should, hopefully, make future patches much easier on this code
though.
Change-Id: I3f128a449756fd6988f3810863cd1d49c476b0dd
2014-09-28 09:32:51 -04:00
|
|
|
if (!comments) {
|
|
|
|
comments = ci_parse_comments();
|
2014-05-27 15:07:38 +03:00
|
|
|
}
|
refactor of hideci for readability and modularity
This is a refactors the hideci code into much smaller functions,
making the whole thing a bit more readable for fixing this going
forward. This was done in order to add a couple of new features. The
smaller functions should also make this code much easier to review.
After the refactor we now do a top down parsing of all comments in a
review, classifying them as 'is_ci' and 'is_trusted_ci' so that we can
more easily compute the results we want going forward.
In the process a few additional features were added.
1) CI results are only shown for the latest patch set, even if no CI
system has reported on it. This is accomplished via
ci_latest_patchset.
2) If CI system is in merge conflict, that's displayed in the results
box.
3) Test results records are lifted in total to the test results
display panel, and each set of test results includes the date that we
got it from. This means that for patches that get 'rechecked' a lot,
you'll see the whole history of test results on current patch. You
will also be able to quickly realize that the current test results are
older than the last recheck comment.
The UX for part 3 is different, and may need tweaking going forward,
however the merge of results from different runs was creating a lot of
confusion to reviewers, so this errors on the side of more clarity.
Because of the largely inconvenient workflow for development (the fact
that you basically need to copy / paste function definitions into
chrome dev console) this isn't broken up as smaller patches. This
should, hopefully, make future patches much easier on this code
though.
Change-Id: I3f128a449756fd6988f3810863cd1d49c476b0dd
2014-09-28 09:32:51 -04:00
|
|
|
$.each(comments, function(i, comment) {
|
|
|
|
if (comment.is_ci) {
|
2014-10-01 23:40:13 -04:00
|
|
|
$(comment.ref).toggle(showOrHide);
|
refactor of hideci for readability and modularity
This is a refactors the hideci code into much smaller functions,
making the whole thing a bit more readable for fixing this going
forward. This was done in order to add a couple of new features. The
smaller functions should also make this code much easier to review.
After the refactor we now do a top down parsing of all comments in a
review, classifying them as 'is_ci' and 'is_trusted_ci' so that we can
more easily compute the results we want going forward.
In the process a few additional features were added.
1) CI results are only shown for the latest patch set, even if no CI
system has reported on it. This is accomplished via
ci_latest_patchset.
2) If CI system is in merge conflict, that's displayed in the results
box.
3) Test results records are lifted in total to the test results
display panel, and each set of test results includes the date that we
got it from. This means that for patches that get 'rechecked' a lot,
you'll see the whole history of test results on current patch. You
will also be able to quickly realize that the current test results are
older than the last recheck comment.
The UX for part 3 is different, and may need tweaking going forward,
however the merge of results from different runs was creating a lot of
confusion to reviewers, so this errors on the side of more clarity.
Because of the largely inconvenient workflow for development (the fact
that you basically need to copy / paste function definitions into
chrome dev console) this isn't broken up as smaller patches. This
should, hopefully, make future patches much easier on this code
though.
Change-Id: I3f128a449756fd6988f3810863cd1d49c476b0dd
2014-09-28 09:32:51 -04:00
|
|
|
}
|
|
|
|
});
|
2014-05-27 15:07:38 +03:00
|
|
|
};
|
2014-07-09 12:59:28 -07:00
|
|
|
|
refactor of hideci for readability and modularity
This is a refactors the hideci code into much smaller functions,
making the whole thing a bit more readable for fixing this going
forward. This was done in order to add a couple of new features. The
smaller functions should also make this code much easier to review.
After the refactor we now do a top down parsing of all comments in a
review, classifying them as 'is_ci' and 'is_trusted_ci' so that we can
more easily compute the results we want going forward.
In the process a few additional features were added.
1) CI results are only shown for the latest patch set, even if no CI
system has reported on it. This is accomplished via
ci_latest_patchset.
2) If CI system is in merge conflict, that's displayed in the results
box.
3) Test results records are lifted in total to the test results
display panel, and each set of test results includes the date that we
got it from. This means that for patches that get 'rechecked' a lot,
you'll see the whole history of test results on current patch. You
will also be able to quickly realize that the current test results are
older than the last recheck comment.
The UX for part 3 is different, and may need tweaking going forward,
however the merge of results from different runs was creating a lot of
confusion to reviewers, so this errors on the side of more clarity.
Because of the largely inconvenient workflow for development (the fact
that you basically need to copy / paste function definitions into
chrome dev console) this isn't broken up as smaller patches. This
should, hopefully, make future patches much easier on this code
though.
Change-Id: I3f128a449756fd6988f3810863cd1d49c476b0dd
2014-09-28 09:32:51 -04:00
|
|
|
var ci_hide_ci_comments = function(comments) {
|
2014-07-09 12:59:28 -07:00
|
|
|
if (!comments) {
|
refactor of hideci for readability and modularity
This is a refactors the hideci code into much smaller functions,
making the whole thing a bit more readable for fixing this going
forward. This was done in order to add a couple of new features. The
smaller functions should also make this code much easier to review.
After the refactor we now do a top down parsing of all comments in a
review, classifying them as 'is_ci' and 'is_trusted_ci' so that we can
more easily compute the results we want going forward.
In the process a few additional features were added.
1) CI results are only shown for the latest patch set, even if no CI
system has reported on it. This is accomplished via
ci_latest_patchset.
2) If CI system is in merge conflict, that's displayed in the results
box.
3) Test results records are lifted in total to the test results
display panel, and each set of test results includes the date that we
got it from. This means that for patches that get 'rechecked' a lot,
you'll see the whole history of test results on current patch. You
will also be able to quickly realize that the current test results are
older than the last recheck comment.
The UX for part 3 is different, and may need tweaking going forward,
however the merge of results from different runs was creating a lot of
confusion to reviewers, so this errors on the side of more clarity.
Because of the largely inconvenient workflow for development (the fact
that you basically need to copy / paste function definitions into
chrome dev console) this isn't broken up as smaller patches. This
should, hopefully, make future patches much easier on this code
though.
Change-Id: I3f128a449756fd6988f3810863cd1d49c476b0dd
2014-09-28 09:32:51 -04:00
|
|
|
comments = ci_parse_comments();
|
2014-07-09 12:59:28 -07:00
|
|
|
}
|
|
|
|
$.each(comments, function(i, comment) {
|
refactor of hideci for readability and modularity
This is a refactors the hideci code into much smaller functions,
making the whole thing a bit more readable for fixing this going
forward. This was done in order to add a couple of new features. The
smaller functions should also make this code much easier to review.
After the refactor we now do a top down parsing of all comments in a
review, classifying them as 'is_ci' and 'is_trusted_ci' so that we can
more easily compute the results we want going forward.
In the process a few additional features were added.
1) CI results are only shown for the latest patch set, even if no CI
system has reported on it. This is accomplished via
ci_latest_patchset.
2) If CI system is in merge conflict, that's displayed in the results
box.
3) Test results records are lifted in total to the test results
display panel, and each set of test results includes the date that we
got it from. This means that for patches that get 'rechecked' a lot,
you'll see the whole history of test results on current patch. You
will also be able to quickly realize that the current test results are
older than the last recheck comment.
The UX for part 3 is different, and may need tweaking going forward,
however the merge of results from different runs was creating a lot of
confusion to reviewers, so this errors on the side of more clarity.
Because of the largely inconvenient workflow for development (the fact
that you basically need to copy / paste function definitions into
chrome dev console) this isn't broken up as smaller patches. This
should, hopefully, make future patches much easier on this code
though.
Change-Id: I3f128a449756fd6988f3810863cd1d49c476b0dd
2014-09-28 09:32:51 -04:00
|
|
|
if (comment.is_ci) {
|
|
|
|
$(comment.ref).hide();
|
2014-07-09 12:59:28 -07:00
|
|
|
}
|
|
|
|
});
|
|
|
|
};
|
|
|
|
|
refactor of hideci for readability and modularity
This is a refactors the hideci code into much smaller functions,
making the whole thing a bit more readable for fixing this going
forward. This was done in order to add a couple of new features. The
smaller functions should also make this code much easier to review.
After the refactor we now do a top down parsing of all comments in a
review, classifying them as 'is_ci' and 'is_trusted_ci' so that we can
more easily compute the results we want going forward.
In the process a few additional features were added.
1) CI results are only shown for the latest patch set, even if no CI
system has reported on it. This is accomplished via
ci_latest_patchset.
2) If CI system is in merge conflict, that's displayed in the results
box.
3) Test results records are lifted in total to the test results
display panel, and each set of test results includes the date that we
got it from. This means that for patches that get 'rechecked' a lot,
you'll see the whole history of test results on current patch. You
will also be able to quickly realize that the current test results are
older than the last recheck comment.
The UX for part 3 is different, and may need tweaking going forward,
however the merge of results from different runs was creating a lot of
confusion to reviewers, so this errors on the side of more clarity.
Because of the largely inconvenient workflow for development (the fact
that you basically need to copy / paste function definitions into
chrome dev console) this isn't broken up as smaller patches. This
should, hopefully, make future patches much easier on this code
though.
Change-Id: I3f128a449756fd6988f3810863cd1d49c476b0dd
2014-09-28 09:32:51 -04:00
|
|
|
var ci_page_loaded = function() {
|
|
|
|
if (hashRegex.test(window.location.hash)) {
|
2015-05-02 06:43:42 -04:00
|
|
|
dbg("Searching for ci results on " + window.location.hash);
|
refactor of hideci for readability and modularity
This is a refactors the hideci code into much smaller functions,
making the whole thing a bit more readable for fixing this going
forward. This was done in order to add a couple of new features. The
smaller functions should also make this code much easier to review.
After the refactor we now do a top down parsing of all comments in a
review, classifying them as 'is_ci' and 'is_trusted_ci' so that we can
more easily compute the results we want going forward.
In the process a few additional features were added.
1) CI results are only shown for the latest patch set, even if no CI
system has reported on it. This is accomplished via
ci_latest_patchset.
2) If CI system is in merge conflict, that's displayed in the results
box.
3) Test results records are lifted in total to the test results
display panel, and each set of test results includes the date that we
got it from. This means that for patches that get 'rechecked' a lot,
you'll see the whole history of test results on current patch. You
will also be able to quickly realize that the current test results are
older than the last recheck comment.
The UX for part 3 is different, and may need tweaking going forward,
however the merge of results from different runs was creating a lot of
confusion to reviewers, so this errors on the side of more clarity.
Because of the largely inconvenient workflow for development (the fact
that you basically need to copy / paste function definitions into
chrome dev console) this isn't broken up as smaller patches. This
should, hopefully, make future patches much easier on this code
though.
Change-Id: I3f128a449756fd6988f3810863cd1d49c476b0dd
2014-09-28 09:32:51 -04:00
|
|
|
$("#toggleci").show();
|
|
|
|
var comments = ci_parse_comments();
|
|
|
|
ci_display_results(comments);
|
2014-10-01 23:40:13 -04:00
|
|
|
var showOrHide = 'true' == read_cookie('show-ci-comments');
|
|
|
|
if (!showOrHide) {
|
|
|
|
ci_hide_ci_comments(comments);
|
|
|
|
}
|
2015-05-01 08:35:26 -04:00
|
|
|
if (zuul_inline === true) {
|
|
|
|
ci_zuul_for_change(comments);
|
|
|
|
}
|
refactor of hideci for readability and modularity
This is a refactors the hideci code into much smaller functions,
making the whole thing a bit more readable for fixing this going
forward. This was done in order to add a couple of new features. The
smaller functions should also make this code much easier to review.
After the refactor we now do a top down parsing of all comments in a
review, classifying them as 'is_ci' and 'is_trusted_ci' so that we can
more easily compute the results we want going forward.
In the process a few additional features were added.
1) CI results are only shown for the latest patch set, even if no CI
system has reported on it. This is accomplished via
ci_latest_patchset.
2) If CI system is in merge conflict, that's displayed in the results
box.
3) Test results records are lifted in total to the test results
display panel, and each set of test results includes the date that we
got it from. This means that for patches that get 'rechecked' a lot,
you'll see the whole history of test results on current patch. You
will also be able to quickly realize that the current test results are
older than the last recheck comment.
The UX for part 3 is different, and may need tweaking going forward,
however the merge of results from different runs was creating a lot of
confusion to reviewers, so this errors on the side of more clarity.
Because of the largely inconvenient workflow for development (the fact
that you basically need to copy / paste function definitions into
chrome dev console) this isn't broken up as smaller patches. This
should, hopefully, make future patches much easier on this code
though.
Change-Id: I3f128a449756fd6988f3810863cd1d49c476b0dd
2014-09-28 09:32:51 -04:00
|
|
|
} else {
|
|
|
|
$("#toggleci").hide();
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
2015-05-01 08:35:26 -04:00
|
|
|
var ci_current_change = function() {
|
|
|
|
var change = hashRegex.exec(window.location.hash);
|
|
|
|
if (change.length > 1) {
|
|
|
|
return change[1];
|
|
|
|
}
|
|
|
|
return null;
|
|
|
|
};
|
|
|
|
|
|
|
|
// recursively find the zuul status change, will be much more
|
|
|
|
// efficient once zuul supports since json status.
|
|
|
|
var ci_find_zuul_status = function (data, change_psnum) {
|
|
|
|
var objects = [];
|
|
|
|
for (var i in data) {
|
|
|
|
if (!data.hasOwnProperty(i)) continue;
|
|
|
|
if (typeof data[i] == 'object') {
|
|
|
|
objects = objects.concat(ci_find_zuul_status(data[i],
|
|
|
|
change_psnum));
|
|
|
|
} else if (i == 'id' && data.id == change_psnum) {
|
|
|
|
objects.push(data);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return objects;
|
|
|
|
};
|
|
|
|
|
|
|
|
var ci_zuul_all_status = function(jobs) {
|
|
|
|
var status = "passing";
|
|
|
|
for (var i = 0; i < jobs.length; i++) {
|
|
|
|
if (jobs[i].result && jobs[i].result != "SUCCESS") {
|
|
|
|
status = "failing";
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return status;
|
|
|
|
};
|
|
|
|
|
|
|
|
var ci_zuul_display_status = function(status) {
|
|
|
|
var zuul_table = $("table.zuul_result_table")[0];
|
|
|
|
if (!zuul_table) {
|
|
|
|
var test_results = $("table.test_result_table")[0];
|
|
|
|
zuul_table = document.createElement("table");
|
|
|
|
$(zuul_table).addClass("zuul_result_table");
|
|
|
|
$(zuul_table).addClass("infoTable").css({"margin-bottom":"1em"});
|
|
|
|
if (test_results) {
|
|
|
|
$(test_results).prepend(zuul_table);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
$(zuul_table).empty();
|
|
|
|
$(zuul_table).show();
|
2015-04-01 15:15:01 -07:00
|
|
|
$(zuul_table).append("<tr><td class='header'>Change currently being tested (<a href='" + zuulStatusURL + "'>full status</a>)</td></tr>");
|
2015-05-01 08:35:26 -04:00
|
|
|
for (var i = 0; i < status.length; i++) {
|
|
|
|
var item = status[i];
|
|
|
|
var pipeline = item.jobs[0].pipeline;
|
|
|
|
var passing = (item.failing_reasons && item.failing_reasons.length > 0) ? "failing" : "passing";
|
|
|
|
var timeleft = item.remaining_time;
|
|
|
|
var row = "<tr><td>";
|
|
|
|
if (pipeline != null) {
|
|
|
|
row += pipeline + " pipeline: " + passing;
|
|
|
|
row += " (" + format_time(timeleft, false) + " left)";
|
|
|
|
} else {
|
|
|
|
row += "in between pipelines, status should update shortly";
|
|
|
|
}
|
|
|
|
row += "</td></tr>";
|
|
|
|
|
|
|
|
$(zuul_table).append(row);
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
var ci_zuul_clear_status = function () {
|
|
|
|
var zuul_table = $("table.zuul_result_table")[0];
|
|
|
|
if (zuul_table) {
|
|
|
|
$(zuul_table).hide();
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
var ci_zuul_process_changes = function(data, change_psnum) {
|
|
|
|
var zuul_status = ci_find_zuul_status(data, change_psnum);
|
|
|
|
if (zuul_status.length) {
|
|
|
|
ci_zuul_display_status(zuul_status);
|
|
|
|
} else {
|
|
|
|
ci_zuul_clear_status();
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
var ci_zuul_for_change = function(comments) {
|
|
|
|
if (!comments) {
|
|
|
|
comments = ci_parse_comments();
|
|
|
|
}
|
|
|
|
var change = ci_current_change();
|
|
|
|
var psnum = ci_latest_patchset(comments);
|
|
|
|
var change_psnum = change + "," + psnum;
|
2015-04-06 12:58:21 -04:00
|
|
|
|
|
|
|
// do the loop recursively in ajax
|
|
|
|
(function poll() {
|
|
|
|
$.ajax({
|
|
|
|
url: zuulStatusJSON + change_psnum,
|
|
|
|
type: "GET",
|
|
|
|
success: function(data) {
|
|
|
|
dbg("Found zuul data for " + change_psnum, data);
|
|
|
|
ci_zuul_process_changes(data, change_psnum);
|
|
|
|
},
|
|
|
|
dataType: "json",
|
|
|
|
complete: setTimeout(function() {
|
|
|
|
// once we are done with this cycle in the loop we
|
|
|
|
// schedule ourselves again in the future with
|
|
|
|
// setTimeout. However, by the time the function
|
|
|
|
// actually gets called, other things might have
|
|
|
|
// happened, and we may want to just dump the data
|
|
|
|
// instead.
|
|
|
|
//
|
|
|
|
// the UI might have gone hidden (user was bored,
|
|
|
|
// switched to another tab / window).
|
|
|
|
//
|
|
|
|
// the user may have navigated to another review url,
|
|
|
|
// so the data returned is not relevant.
|
|
|
|
//
|
|
|
|
// both cases are recoverable when the user navigates
|
|
|
|
// around, because a new "thread" gets started on
|
|
|
|
// ci_page_load.
|
|
|
|
//
|
|
|
|
// BUG(sdague): there is the possibility that the user
|
|
|
|
// navigates away from a page and back fast enough
|
|
|
|
// that the first "thread" is not dead, and a second
|
|
|
|
// one is started. greghaynes totally said he'd come
|
|
|
|
// up with a way to fix that.
|
|
|
|
if (window.zuul_enable_status_updates == false) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
var current = ci_current_change();
|
|
|
|
if (current && change_psnum.indexOf(current) != 0) {
|
|
|
|
// window url is dead, so don't schedule any more future
|
|
|
|
// updates for this url.
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
poll();
|
|
|
|
}, 15000),
|
|
|
|
timeout: 5000
|
|
|
|
});
|
|
|
|
})();
|
2015-05-01 08:35:26 -04:00
|
|
|
};
|
refactor of hideci for readability and modularity
This is a refactors the hideci code into much smaller functions,
making the whole thing a bit more readable for fixing this going
forward. This was done in order to add a couple of new features. The
smaller functions should also make this code much easier to review.
After the refactor we now do a top down parsing of all comments in a
review, classifying them as 'is_ci' and 'is_trusted_ci' so that we can
more easily compute the results we want going forward.
In the process a few additional features were added.
1) CI results are only shown for the latest patch set, even if no CI
system has reported on it. This is accomplished via
ci_latest_patchset.
2) If CI system is in merge conflict, that's displayed in the results
box.
3) Test results records are lifted in total to the test results
display panel, and each set of test results includes the date that we
got it from. This means that for patches that get 'rechecked' a lot,
you'll see the whole history of test results on current patch. You
will also be able to quickly realize that the current test results are
older than the last recheck comment.
The UX for part 3 is different, and may need tweaking going forward,
however the merge of results from different runs was creating a lot of
confusion to reviewers, so this errors on the side of more clarity.
Because of the largely inconvenient workflow for development (the fact
that you basically need to copy / paste function definitions into
chrome dev console) this isn't broken up as smaller patches. This
should, hopefully, make future patches much easier on this code
though.
Change-Id: I3f128a449756fd6988f3810863cd1d49c476b0dd
2014-09-28 09:32:51 -04:00
|
|
|
|
2015-04-06 12:58:21 -04:00
|
|
|
|
2014-07-09 12:59:28 -07:00
|
|
|
window.onload = function() {
|
|
|
|
var input = document.createElement("input");
|
|
|
|
input.id = "toggleci";
|
|
|
|
input.type = "button";
|
|
|
|
input.className = "gwt-Button";
|
|
|
|
input.value = "Toggle CI";
|
2014-10-01 23:40:13 -04:00
|
|
|
input.onclick = function () {
|
|
|
|
// Flip the cookie
|
|
|
|
var showOrHide = 'true' == read_cookie('show-ci-comments');
|
|
|
|
set_cookie('show-ci-comments', showOrHide ? 'false' : 'true');
|
|
|
|
// Hide or Show existing comments based on cookie
|
|
|
|
ci_toggle_visibility(null, !showOrHide);
|
|
|
|
};
|
2014-07-09 12:59:28 -07:00
|
|
|
document.body.appendChild(input);
|
|
|
|
|
|
|
|
MutationObserver = window.MutationObserver || window.WebKitMutationObserver;
|
|
|
|
var observer = new MutationObserver(function(mutations, observer) {
|
|
|
|
var span = $("span.rpcStatus");
|
|
|
|
$.each(mutations, function(i, mutation) {
|
|
|
|
if (mutation.target === span[0] &&
|
2014-10-01 08:34:42 +01:00
|
|
|
mutation.attributeName === "style" &&
|
2014-07-09 12:59:28 -07:00
|
|
|
(!(span.is(":visible:")))) {
|
|
|
|
ci_page_loaded();
|
|
|
|
}
|
|
|
|
});
|
|
|
|
});
|
|
|
|
observer.observe(document, {
|
|
|
|
subtree: true,
|
|
|
|
attributes: true
|
|
|
|
});
|
2015-04-06 12:58:21 -04:00
|
|
|
|
|
|
|
$(document).on({
|
|
|
|
'show.visibility': function() {
|
|
|
|
window.zuul_enable_status_updates = true;
|
|
|
|
ci_page_loaded();
|
|
|
|
},
|
|
|
|
'hide.visibility': function() {
|
|
|
|
window.zuul_enable_status_updates = false;
|
|
|
|
}
|
|
|
|
});
|
2014-07-09 12:59:28 -07:00
|
|
|
};
|