2018-11-18 16:29:14 +08:00

50 lines
1.1 KiB
JavaScript

var spawn = require('child_process').spawn;
module.exports = function(repo, targetPath, opts, cb) {
if (typeof opts === 'function') {
cb = opts;
opts = null;
}
opts = opts || {};
var git = opts.git || 'git';
var args = ['clone'];
if (opts.shallow) {
args.push('--depth');
args.push('1');
}
args.push('--');
args.push(repo);
args.push(targetPath);
var process = spawn(git, args);
process.on('close', function(status) {
if (status == 0) {
if (opts.checkout) {
_checkout();
} else {
cb && cb();
}
} else {
cb && cb(new Error("'git clone' failed with status " + status));
}
});
function _checkout() {
var args = ['checkout', opts.checkout];
var process = spawn(git, args, { cwd: targetPath });
process.on('close', function(status) {
if (status == 0) {
cb && cb();
} else {
cb && cb(new Error("'git checkout' failed with status " + status));
}
});
}
}