From: Iskren Chernev Date: Mon, 21 Mar 2016 03:16:08 +0000 (-0700) Subject: Add find-commenters option to the script X-Git-Tag: 2.15.0~31^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=20e74aa00fe895a043c00ea7ecbf3fa30a335473;p=thirdparty%2Fmoment.git Add find-commenters option to the script --- diff --git a/scripts/locales.js b/scripts/locales.js index 3ce583285..135b300eb 100755 --- a/scripts/locales.js +++ b/scripts/locales.js @@ -1,15 +1,17 @@ var fs = require('fs'), - path = require('path'); + 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]'); + 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() { @@ -56,6 +58,74 @@ function mention() { }); } +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); @@ -68,6 +138,9 @@ switch (args[0]) { case 'mention': mention(); break; + case 'find-commenters': + findCommenters(args[1]); + break; default: console.log("unknown argument", args[0]); break;