You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
146 lines
4.5 KiB
146 lines
4.5 KiB
var fs = require('fs'),
|
|
path = require('path'),
|
|
https = require('https');
|
|
|
|
var localeDir = path.join('src', 'locale');
|
|
|
|
var args = process.argv.slice(2);
|
|
|
|
function help() {
|
|
console.log(process.argv[1], '[list|mention|find-commenters] ARGS');
|
|
console.log();
|
|
console.log(' list show all authors in all locales');
|
|
console.log(' mention show all authors in all locales, ready to copy-paste in github issue');
|
|
console.log(' find-commenters #ID finds all people that participated in a github conversation');
|
|
}
|
|
|
|
function extract() {
|
|
var authors = {};
|
|
fs.readdirSync(localeDir).forEach(function (locale) {
|
|
var content = fs.readFileSync(path.join(localeDir, locale), {encoding: 'utf-8'}),
|
|
localeCode = locale.split('.')[0],
|
|
localeAuthors = [];
|
|
content.split('\n').forEach(function (line) {
|
|
var match = line.match(/^\/\/! author.*github[.]com\/(.*)$/);
|
|
if (match !== null) {
|
|
// console.log(" ", line);
|
|
localeAuthors.push(match[1]);
|
|
}
|
|
});
|
|
if (localeAuthors.length === 0) {
|
|
// use to debug
|
|
content.split('\n').forEach(function (line) {
|
|
var match = line.match(/^\/\/! author(.*)$/);
|
|
if (match !== null) {
|
|
localeAuthors.push('---' + match[1]);
|
|
}
|
|
});
|
|
console.log(localeCode, localeAuthors);
|
|
} else {
|
|
authors[localeCode] = localeAuthors;
|
|
}
|
|
});
|
|
return authors;
|
|
}
|
|
|
|
function list() {
|
|
var authors = extract();
|
|
Object.keys(authors).forEach(function (localeCode) {
|
|
console.log(localeCode, authors[localeCode]);
|
|
});
|
|
}
|
|
|
|
function mention() {
|
|
var authors = extract();
|
|
Object.keys(authors).forEach(function (localeCode) {
|
|
console.log('- [ ]', localeCode, authors[localeCode].map(function (author) { return '@' + author; }).join(' '));
|
|
});
|
|
}
|
|
|
|
function findCommenters(postId) {
|
|
|
|
function fetchComments(page, callback) {
|
|
var options = {
|
|
hostname: 'api.github.com',
|
|
port: 443,
|
|
path: '/repos/moment/moment/issues/' + postId + '/comments?page=' + page,
|
|
method: 'GET',
|
|
headers: {
|
|
'User-Agent': 'node script'
|
|
}
|
|
},
|
|
links = {};
|
|
console.log('fetching', options.path);
|
|
https.get(options, function (res) {
|
|
if ('link' in res.headers) {
|
|
res.headers.link.split(', ').forEach(function(linkStr) {
|
|
var pieces = linkStr.split('; ');
|
|
var key = pieces[1].split('=')[1];
|
|
var link = pieces[0];
|
|
key = key.substr(1, key.length - 2);
|
|
link = link.substr(1, link.length - 2);
|
|
links[key] = link;
|
|
});
|
|
}
|
|
var bodyChunks = [], body;
|
|
res.on('data', function (chunk) {
|
|
bodyChunks.push(chunk);
|
|
});
|
|
res.on('end', function () {
|
|
body = bodyChunks.join('');
|
|
callback(page, JSON.parse(body), links);
|
|
});
|
|
});
|
|
}
|
|
|
|
var commenters = {};
|
|
var maxPage = 1;
|
|
fetchComments(1, function (page, body, links) {
|
|
handleBody(body, page);
|
|
if ('last' in links) {
|
|
maxPage = parseInt(links.last.split('=')[1], 10);
|
|
}
|
|
var pagesLeft = maxPage - 1;
|
|
for (var p = 2; p <= maxPage; p += 1) {
|
|
fetchComments(p, function (page, body, links) {
|
|
handleBody(body, page);
|
|
pagesLeft -= 1;
|
|
if (pagesLeft === 0) {
|
|
handleCommenters(Object.keys(commenters));
|
|
}
|
|
});
|
|
}
|
|
});
|
|
|
|
function handleBody(body, page) {
|
|
body.forEach(function (comment) {
|
|
console.log(page, comment.user.login);
|
|
commenters[comment.user.login] = 1;
|
|
});
|
|
}
|
|
|
|
function handleCommenters(commenters) {
|
|
console.log('len of commenters', commenters.length);
|
|
console.log(commenters);
|
|
}
|
|
}
|
|
|
|
if (args.length === 0) {
|
|
help();
|
|
process.exit(0);
|
|
}
|
|
|
|
switch (args[0]) {
|
|
case 'list':
|
|
list();
|
|
break;
|
|
case 'mention':
|
|
mention();
|
|
break;
|
|
case 'find-commenters':
|
|
findCommenters(args[1]);
|
|
break;
|
|
default:
|
|
console.log('unknown argument', args[0]);
|
|
break;
|
|
}
|
|
|