Skip to content

Commit 57d3d6b

Browse files
author
Tobias Fuhrimann
committed
parse multiple pages of gitlab repos
1 parent 152a5ec commit 57d3d6b

File tree

2 files changed

+38
-1
lines changed

2 files changed

+38
-1
lines changed

lib/api.js

Lines changed: 37 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,42 @@ 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+
function(err, n) {
85+
if(err) return done(err);
86+
87+
return done(null, results, res);
88+
}
89+
);
90+
} else {
91+
return done(null, results, res);
92+
}
5793
});
5894
}
5995

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)