File: contributors.js

package info (click to toggle)
supercollider 1%3A3.10.0%2Brepack-1
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 45,496 kB
  • sloc: cpp: 283,513; lisp: 74,040; ansic: 72,252; sh: 23,016; python: 7,175; makefile: 1,087; perl: 766; java: 677; yacc: 314; lex: 175; ruby: 136; objc: 65; xml: 15
file content (85 lines) | stat: -rw-r--r-- 1,829 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
/**
 * Prints contributors list sorted by number of issues and pull requests.
 * Closed issues and successfully merged pull-requests only.
 */
var fs = require('fs');
var _ = require('lodash');
var ib = [];
var pb = [];

for (var i = 0; i < 10; i++) {
  var jsonPath = `./github-data/pulls-closed-${i}.json`;
  if (fs.existsSync(jsonPath)) {
    var d = require(jsonPath);
    pb.push(d);
  }

  var jsonPath2 = `./github-data/issues-closed-${i}.json`;
  if (fs.existsSync(jsonPath2)) {
    var d = require(jsonPath2);
    ib.push(d);
  }
}

// console.log(pb);

var pulls = _.flatten([].concat(pb));
var issues = _.flatten([].concat(ib));

var pullsMap = {};
_.each(pulls, (p) => {
  pullsMap[p.number] = p;
});

function shouldIncludePull(pull) {
  // has been merged
  return pull.merged_at && shouldIncludeIssue(pull);
}

function shouldIncludeIssue(issue) {
  // console.log({state: issue.state, milestone: issue.milestone && issue.milestone.title});
  var status = (issue.state === 'closed');
  if (!status) {
    return false;
  }

  // labels includes 'invalid' or 'wontfix'
  // if number is in pulls and there is no merged at
  var pull = pullsMap[issue.number];
  if (pull) {
    // was never merged
    if (!pull.merged_at) {
      return false;
    }
  }

  return true;
}

function mapIssueData(pull) {
  // console.log(pull.user);
  return {
    user: {
      name: pull.user.login,
      url: pull.user.html_url
    }
  };
}


var issuesData = issues.filter(shouldIncludeIssue).map(mapIssueData);

var users = {};
_.each(issuesData, (pull) => {
  if (users[pull.user.name]) {
    users[pull.user.name].count += 1;
  } else {
    pull.user.count = 1;
    users[pull.user.name] = pull.user;
  }
});

users = Object.keys(users);
users = _.sortBy(users, (user) => user.toLowerCase());

console.log(users.join(", "));