Skip to content

Commit

Permalink
Port to the new contributors field
Browse files Browse the repository at this point in the history
  • Loading branch information
jeroen committed Feb 24, 2025
1 parent 4c034f6 commit 12b4bbc
Show file tree
Hide file tree
Showing 4 changed files with 13 additions and 14 deletions.
4 changes: 2 additions & 2 deletions routes/packages.js
Original file line number Diff line number Diff line change
Expand Up @@ -288,8 +288,8 @@ function calculate_score(description){
add_score(description._datasets.length);
if(Array.isArray(description._updates))
add_score(description._updates.length);
if(typeof description._contributions === 'object')
add_score(Object.keys(description._contributions).length - 1)
if(Array.isArray(description._contributors))
add_score(description._contributors.length - 1)
if(description._cranurl || description._bioc)
add_score(10); //on cran/bioc ~ 10 stars
if(description._readme)
Expand Down
20 changes: 9 additions & 11 deletions routes/repos.js
Original file line number Diff line number Diff line change
Expand Up @@ -440,7 +440,7 @@ router.get("/:user/api/scores", function(req, res, next) {
scripts: "$_searchresults",
dependents: '$_usedby',
commits: {$sum: '$_updates.n'},
contributors: array_size({$objectToArray: '$_contributions'}),
contributors: array_size('$_contributors'),
datasets: array_size('$_datasets'),
vignettes: array_size('$_vignettes'),
releases: array_size('$_releases')
Expand Down Expand Up @@ -797,22 +797,20 @@ router.get("/:user/stats/universes", function(req, res, next) {

router.get("/:user/stats/contributions", function(req, res, next) {
var limit = parseInt(req.query.limit) || 100000;
var cutoff = parseInt(req.query.cutoff) || 0;
var user = req.params.user;
var query = {_type: 'src', '_indexed' : true};
var contribfield = `_contributions.${user}`;
query[contribfield] = { $gt: cutoff };
var query = {_type: 'src', '_contributors.user': user, '_indexed' : true};
if(req.query.skipself){
query['_maintainer.login'] = {$ne: user};
}
var cursor = packages.aggregate([
{$match: query},
{$addFields: {contrib: {$arrayElemAt:['$_contributors', { $indexOfArray: [ "$_contributors.user", user ]}]}}},
{$group: {
_id: "$_upstream",
owner: {$first: '$_user'}, //equals upstream org
packages: {$addToSet: '$Package'},
maintainers: {$addToSet: '$_maintainer.login'}, //upstreams can have multiple pkgs and maintainers
contributions: {$max: '$' + contribfield}
contributions: {$max: '$contrib.count'}
}},
{$project: {_id:0, contributions:'$contributions', upstream: '$_id', owner: '$owner', packages: '$packages', maintainers: '$maintainers'}},
{$sort:{ contributions: -1}},
Expand All @@ -833,19 +831,19 @@ router.get("/:user/stats/contributors", function(req, res, next) {
{$match: qf(query, req.query.all)},
{$project: {
_id: 0,
contributions: '$_contributions',
contributors: '$_contributors',
upstream: '$_upstream'
}},
{$addFields: {contributions: {$objectToArray:"$contributions"}}},
{$unwind: "$contributions"},
{$group: {_id: "$contributions.k", repos: {$addToSet: {upstream: '$upstream', count: '$contributions.v'}}}},
{$unwind: "$contributors"},
{$group: {_id: "$contributors.user", repos: {$addToSet: {upstream: '$upstream', count: '$contributors.count'}}}},
{$project: {_id:0, login: '$_id', total: {$sum: '$repos.count'}, repos: 1}},
{$sort:{ total: -1}},
{$limit: limit}
]);
return send_results(cursor, res.type('text/plain'), true);
});


router.get("/:user/stats/updates", function(req, res, next) {
var query = {_user: req.params.user, _type: 'src', '_registered' : true};
var cursor = packages.aggregate([
Expand Down Expand Up @@ -1081,7 +1079,7 @@ router.get('/:user/stats/summary', function(req, res, next){
var p3 = summary_count('_vignettes.source', query);
var p4 = summary_count('_datasets.name', query);
var p5 = summary_unique('_user', {'_userbio.type': 'organization', ...query});
var p6 = summary_object('_contributions', query);
var p6 = summary_unique('_contributors.user', query);
var promises = [p1, p2, p3, p4, p5, p6].map(function(p){
return p.next().then(res => res ? res.total : 0);
})
Expand Down
2 changes: 1 addition & 1 deletion routes/search.js
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ function build_query(query, str){
match_partial('maintainer', 'Maintainer');
match_exact('needs', '_rundeps');
match_exact('package', '_nocasepkg'); //always case insenstive
match_exists('contributor', '_contributions');
match_exact('contributor', '_contributor.login');
match_exact('topic', '_topics');
match_exact('exports', '_exports');
match_exact('owner', '_owner');
Expand Down
1 change: 1 addition & 0 deletions src/db.js
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@ async function rebuild_indexes(){
await make_index({"_user":1, "_type":1, "_registered":1, "_commit.time":1});
await make_index({"_type":1, "_rundeps":1});
await make_index({"_type":1, "_dependencies.package":1});
await make_index({"_type":1, "_contributors.user":1});

/* The text search index (only one is allowed) */
//await packages.dropIndex("textsearch").catch(console.log);
Expand Down

0 comments on commit 12b4bbc

Please sign in to comment.