Skip to content

Commit 2614e85

Browse files
author
Ilya Radchenko
committed
Merge pull request #44 from mastertinner/master
parse multiple pages of gitlab repos
2 parents abeb480 + c0b7d76 commit 2614e85

File tree

2 files changed

+40
-1
lines changed

2 files changed

+40
-1
lines changed

lib/api.js

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ var async = require('async');
33
var superagent = require('superagent');
44
var debug = require('debug')('strider-gitlab:api');
55
var util = require('util');
6+
var parseLinkHeader = require('parse-link-header');
67

78
module.exports = {
89
get: get,
@@ -53,7 +54,44 @@ function get(config, uri, done) {
5354
if (!res.body) {
5455
return done(undefined, res.body, res);
5556
}
56-
done(null, res.body, res);
57+
58+
var results = res.body;
59+
60+
if (res.headers.link) {
61+
var numberOfPages = parseLinkHeader(res.headers.link).last.page;
62+
var i = 1;
63+
64+
async.whilst(
65+
function() {
66+
return i < numberOfPages;
67+
},
68+
function(callback) {
69+
superagent
70+
.get(url)
71+
.query({
72+
private_token: config.api_key,
73+
per_page: 100,
74+
page: i
75+
})
76+
.set('User-Agent', 'StriderCD (http://stridercd.com)')
77+
.end(function(err, res) {
78+
if (err) return callback(err);
79+
80+
results = results.concat(res.body);
81+
callback(null, i);
82+
});
83+
84+
i++;
85+
},
86+
function(err, n) {
87+
if(err) return done(err);
88+
89+
return done(null, results, res);
90+
}
91+
);
92+
} else {
93+
return done(null, results, res);
94+
}
5795
});
5896
}
5997

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@
4747
"debug": "~0.7.3",
4848
"gravatar": "^1.0.6",
4949
"lodash": "~2.2.0",
50+
"parse-link-header": "^0.4.1",
5051
"proxyquire": "^1.7.1",
5152
"step": "0.0.5",
5253
"strider-git": "^0.2.4",

0 commit comments

Comments
 (0)