in src/list-pulls.js [31:76]
function addLastCommentInfo (repo, pullRequests, callback) {
let remaining = pullRequests.length;
if (remaining === 0) {
callback();
}
pullRequests.forEach(function (pullRequest) {
const commentsUrl = pullRequest._links.comments && pullRequest._links.comments.href;
const reviewCommentsUrl = pullRequest._links.review_comments && pullRequest._links.review_comments.href;
if (commentsUrl && reviewCommentsUrl) {
// If comments and review_comments URLs are present, use them (more accurate than scraping)
getPullRequestComments(commentsUrl, function (comments) {
getPullRequestComments(reviewCommentsUrl, comments, function (comments) {
// If we have any comments, grab the user name from the most recent one. If not, we'll display the
// owner of the PR (the initial PR comment is not included in the list of comments we get).
comments = comments.sort(function (a, b) {
// For simplicity, we want to end up with the newest comment first, so reverse sort on create date.
return new Date(b.created_at) - new Date(a.created_at);
});
if (comments.length > 0) {
pullRequest.lastUpdatedBy = comments[0] ? comments[0].user.login : pullRequest.user.login;
}
if (--remaining === 0) {
callback();
}
});
});
} else {
// Otherwise, resort to scraping.
request.get({ url: 'https://github.com/apache/' + repo + '/pull/' + pullRequest.number, headers: { 'User-Agent': 'Cordova Coho' } }, function (err, res, payload) {
if (err) {
if (!commentFailed) {
commentFailed = true;
console.warn('Pull request scrape request failed: ' + err);
}
} else {
const m = /[\s\S]*timeline-comment-header[\s\S]*?"author".*?>(.*?)</.exec(payload);
(pullRequest.lastUpdatedBy = m && m[1]) || (''); // eslint-disable-line no-unused-expressions
}
if (--remaining === 0) {
callback();
}
});
}
});
}