in gulpfile.js [165:257]
function(err, httpResponse, versions) {
// Abort on error
if (err) {
console.log('Error when trying to request URL: ', requestUrl);
console.log(err);
return cb(err);
}
var unreleasedVersions = versions.filter(function(n) {
return !n.released;
}).sort(function(a,b) {
return semver.compare(a.name, b.name);
});
var apiRequest = {
jql: 'project = ' + project.name + ' AND labels in (roadmap) AND resolution = Unresolved AND fixVersion in (EMPTY, unreleasedVersions())',
startAt: 0,
maxResults: 1000,
fields: ['summary','priority','status','fixVersions','description']
};
request.post({
url: project.apiUrl + 'search',
json: apiRequest
},
function(err, httpResponse, jiras) {
// Abort on error
if (err) {
return cb(err);
}
var pageCount = (jiras.total && jiras.maxResults) ? Math.ceil(jiras.total / jiras.maxResults) : 1;
var pageSize = jiras.maxResults;
console.log(project.name, 'matching jiras:', jiras.total, 'pageSize:', pageSize, 'pages:', pageCount);
// Iterate over multiple pages if more than one page is available
if (pageCount > 1) {
var apiRequests = [];
for (var i = 1; i < pageCount; i++) {
apiRequests[i-1] = _.extend({},
apiRequest,
{
startAt: i * pageSize,
maxResults: pageSize
}
);
}
// Execute async page loads for jiras spanning multiple pages
async.concat(apiRequests, function(apiPageRequest, pageCb){
request.post({
url: project.apiUrl + 'search',
json: apiPageRequest
},
function(err, httpResponse, pageJiras) {
// Abort on error
if (err) {
return pageCb(err);
}
pageCb(null, pageJiras.issues);
});
}, function(err, remainingJiras){
// Abort if error occurred somewhere
if (err) {
return cb(err);
}
cb(null, _.extend({}, project, {
jiras: jiras.issues.concat(remainingJiras).sort(function(a,b) {return naturalSort(a.key, b.key); }),
versions: unreleasedVersions
}));
});
} else {
// Return with a new project object with jiras. cb is from async.map call above
cb(null, _.extend({}, project, {
jiras: jiras.issues.sort(function(a,b) {return naturalSort(a.key, b.key); }),
versions: unreleasedVersions
}));
}
});
});