in all_missing_uplifts.js [200:347]
function buildTable() {
return getVersion(getOption("channel")).then((full_version) => {
let version = getMajor(full_version);
let versionEnd = version;
if (getOption("channel") == "beta") {
versionEnd += 1;
} else if (getOption("channel") == "release") {
versionEnd += 2;
}
let query =
"https://bugzilla.mozilla.org/rest/bug?f1=cf_crash_signature&o1=isnotempty&";
let fieldNum = 2;
query += "j" + fieldNum + "=AND&f" + fieldNum + "=OP&";
fieldNum++;
query +=
"f" +
fieldNum +
"=cf_status_firefox" +
version +
"&o" +
fieldNum +
"=notequals&v" +
fieldNum +
"=fixed&";
fieldNum++;
query +=
"f" +
fieldNum +
"=cf_status_firefox" +
version +
"&o" +
fieldNum +
"=notequals&v" +
fieldNum +
"=verified&";
fieldNum++;
query +=
"f" +
fieldNum +
"=cf_status_firefox" +
version +
"&o" +
fieldNum +
"=notequals&v" +
fieldNum +
"=unaffected&";
fieldNum++;
if (!getOption("wontfix")) {
query +=
"f" +
fieldNum +
"=cf_status_firefox" +
version +
"&o" +
fieldNum +
"=notequals&v" +
fieldNum +
"=wontfix&";
fieldNum++;
}
query += "f" + fieldNum + "=CP&";
fieldNum++;
query += "j" + fieldNum + "=OR&f" + fieldNum + "=OP&";
fieldNum++;
for (v = version + 1; v <= versionEnd; v++) {
query += "j" + fieldNum + "=OR&f" + fieldNum + "=OP&";
fieldNum++;
query +=
"f" +
fieldNum +
"=cf_status_firefox" +
v +
"&o" +
fieldNum +
"=equals&v" +
fieldNum +
"=verified&";
fieldNum++;
query +=
"f" +
fieldNum +
"=cf_status_firefox" +
v +
"&o" +
fieldNum +
"=equals&v" +
fieldNum +
"=fixed&";
fieldNum++;
query += "f" + fieldNum + "=CP&";
fieldNum++;
}
query += "f" + fieldNum + "=CP&";
fieldNum++;
query += "include_fields=id,last_change_time,cf_crash_signature";
for (v = version; v <= versionEnd; v++) {
query += ",cf_status_firefox" + v;
}
return fetchWithRetry(query)
.then((response) => response.json())
.then((data) => data["bugs"])
.then((bugs) =>
Promise.all(
bugs.map((bug) => {
let signatures = bug["cf_crash_signature"]
.split(/\s*]\s*/)
.map((signature) => signature.substring(2).trim());
signatures = signatures.filter((signature) => signature != "");
let count = 0;
return Promise.all(
signatures.map((signature) =>
fetchWithRetry(
"https://crash-stats.mozilla.org/api/SuperSearch/?version=" +
full_version +
"&signature=%3D" +
encodeURIComponent(signature) +
"&product=Firefox&_results_number=0&_facets_size=0"
)
.then((response) => response.json())
.then((result) => {
count += result["total"];
})
)
).then(() => {
bug["signatures"] = signatures;
bug["crashes_count"] = count;
return bug;
});
})
)
)
.then((bugs) => bugs.filter((bug) => bug["crashes_count"] > 0))
.then((bugs) =>
bugs.sort((a, b) => b["crashes_count"] - a["crashes_count"])
)
.then((bugs) => bugs.forEach((bug) => addRow(bug, version)));
});
}