| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146 |
- 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;
- }
|