in src/main/resources/static/find-owners.js [539:587]
function createGroups() {
var owners2group = {}; // owner list to group name
var firstNoOwnerFile = null;
var keysOfFile2Owners = Object.keys(result.file2owners);
keysOfFile2Owners.sort().forEach(function(name) {
var splitOwners = result.file2owners[name];
var owners = splitOwners.join(' ');
if (owners in owners2group) {
groups[owners2group[owners]].size += 1;
} else {
owners2group[owners] = name;
var type;
if (!hasNamedOwner(splitOwners)) {
firstNoOwnerFile = name;
type = GROUP_TYPE.HAS_NO_OWNER;
} else if (hasOwnerApproval(reviewerVote, splitOwners)) {
type = GROUP_TYPE.OWNER_APPROVED;
} else if (hasStar(splitOwners)) {
type = GROUP_TYPE.STAR_APPROVED;
} else if (!hasOwnerReviewer(reviewerId, splitOwners)) {
type = GROUP_TYPE.NEED_REVIEWER;
} else {
type = GROUP_TYPE.NEED_APPROVAL;
}
groups[name] = {'type': type, 'size': 1, 'owners': owners};
}
});
var numNoOwnerFiles = result.files.length - keysOfFile2Owners.length;
if (keysOfFile2Owners.length > 0 && numNoOwnerFiles > 0) {
if (!!firstNoOwnerFile) {
// count other files as HAS_NO_OWNER
groups[firstNoOwnerFile].size += numNoOwnerFiles;
} else {
// use one of the no-owner-file as group name
for (var i = 0; i < result.files.length; i++) {
var name = result.files[i];
if (!(name in result.file2owners) &&
!(('./' + name) in result.file2owners)) {
groups[name] = {
'type': GROUP_TYPE.HAS_NO_OWNER,
'size': numNoOwnerFiles,
'owners': '*',
};
break;
}
}
}
}
}