#!/usr/bin/env node
// clone all repos
function cloneAll() {
for (i = 0; i < repos.length; i++) {
console.log('Cloning ' + repos[i].description);
exec("git clone " + repos[i].url);
}
}
// retrieve new page of gists
function readPage(err, res, body) {
var gists = JSON.parse(body);
// break if no gists found
if (!gists || !gists.length === 0) {
console.log("No gists to clone");
process.exit();
// populate array with found gists
} else {
for (var i = 0; i < gists.length; i++) {
repos.push({description: gists[i].description, url: gists[i].html_url});
};
// clone repos if last page
if (gists.length < 30) {
cloneAll();
// turn page and rerun callback if not last page
} else {
page++;
options.url = "https://api.github.com/users/" + username + "/gists?page=" + page;
setTimeout(function() {
request(options, readPage);
}, 2000);
}
}
};
// break if no username given
if (process.argv.length < 3) {
console.log("Missing username argument");
process.exit();
// set global variables and run first request
} else {
var username = process.argv[2];
var request = require("request");
var exec = require("child_process").exec;
var endOfGists = false;
var page = 1;
var repos = [];
var options = {
url: "https://api.github.com/users/" + username + "/gists?page=" + page,
headers: {
"User-Agent": "node request"
}
};
request(options, readPage);
}