Skip to content

Instantly share code, notes, and snippets.

@justinline
Last active November 16, 2018 14:34
Show Gist options
  • Select an option

  • Save justinline/68ced6002606b060fc7087de24f7ab7d to your computer and use it in GitHub Desktop.

Select an option

Save justinline/68ced6002606b060fc7087de24f7ab7d to your computer and use it in GitHub Desktop.
// Run on bitbucket PR overview page for an idea of metrics: qty, authors, reviewers
function getPRAuthors(){
return document.querySelectorAll('td.pull-request-author');
}
function getPRReviewers(){
return document.querySelectorAll('td.reviewers');
}
function countPRs(){
const elems = getPRAuthors();
return elems.length;
}
function tableReviewers(){
const rows = getPRReviewers();
let outstandingResults = [];
let approvedResults = [];
let users = new Object;
for(let i = 0; i < rows.length; i++) {
let avatars = rows[i].querySelectorAll('span.aui-avatar');
let avatarsDimmed = [...avatars].filter(avatar => avatar.querySelector('span.approved'));
for(let j = 0; j < avatars.length; j++) {
outstandingResults.push(avatars[j].dataset.username);
}
for(let j = 0; j < avatarsDimmed.length; j++) {
approvedResults.push(avatarsDimmed[j].dataset.username);
}
}
for (var i = 0, j = outstandingResults.length; i < j; i++) {
users[outstandingResults[i]] = {'outstanding': 0, 'approved': 0, 'total': 0};
}
for (var i = 0, j = outstandingResults.length; i < j; i++) {
users[outstandingResults[i]]['total'] = (users[outstandingResults[i]]['total'] || 0) + 1;
}
for (var i = 0, j = approvedResults.length; i < j; i++) {
users[approvedResults[i]]['approved'] = (users[approvedResults[i]]['approved'] || 0) + 1;
}
for (var i = 0, j = outstandingResults.length; i < j; i++) {
users[outstandingResults[i]]['outstanding'] = users[outstandingResults[i]]['total'] - users[outstandingResults[i]]['approved'];
}
return users
}
function tableAuthors(){
const rows = getPRAuthors();
let results = [];
for(let i = 0; i < rows.length; i++) {
let avatars = rows[i].querySelectorAll('span>span>img');
for(let j = 0; j < avatars.length; j++) {
results.push(avatars[j].title);
}
}
var occurrences = { };
for (var i = 0, j = results.length; i < j; i++) {
occurrences[results[i]] = (occurrences[results[i]] || 0) + 1;
}
return occurrences
}
const repo = getRepoName();
console.log(`PR's for ${repo}`);
console.log(`${countPRs()} currently outstanding`);
console.log('AUTHORS');
console.table(tableAuthors());
console.log('REVIEWERS');
console.table(tableReviewers());
function getRepoName(){
const url = window.location.href;
let args = url.split('/')
// Get repo name
return args[4];
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment