/**
* @file git 运行辅助类
* @author chris<wfsr@foxmail.com>
*/
'use strict';
var _createClass = require('babel-runtime/helpers/create-class')['default'];
var _classCallCheck = require('babel-runtime/helpers/class-call-check')['default'];
var _slicedToArray = require('babel-runtime/helpers/sliced-to-array')['default'];
var _Symbol = require('babel-runtime/core-js/symbol')['default'];
var _Promise = require('babel-runtime/core-js/promise')['default'];
Object.defineProperty(exports, '__esModule', {
value: true
});
var _config = require('./config');
var spawn = (function () {
// istanbul ignore next
return process.env.comspec ? function (command, args, options) {
var spawn = require('child_process').spawn;
return spawn(process.env.comspec, ['/c', command].concat(args), options);
} : function (command, args, options) {
var spawn = require('child_process').spawn;
return spawn(command, args, options);
};
})();
var queue = _Symbol('queue');
var _run = _Symbol('run');
var Git = (function () {
function Git() {
_classCallCheck(this, Git);
this[queue] = [];
}
/**
* 执行 git 子命令
*
* @public
* @param {string[]} args 命令参数
* @return {Promise.<string>}
*/
_createClass(Git, [{
key: 'run',
value: function run() {
for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
var self = this;
return new _Promise(function (resolve, reject) {
self[queue].push([resolve, reject, args]);
self[_run]();
});
}
/**
* 执行命令队列
*
* @private
*/
}, {
key: _run,
value: function value() {
var list = this[queue];
if (!list.length || list.child) {
return;
}
var buffer = [];
var length = 0;
var _list$shift = list.shift();
var _list$shift2 = _slicedToArray(_list$shift, 3);
var resolve = _list$shift2[0];
var reject = _list$shift2[1];
var args = _list$shift2[2];
var child = list.child = spawn('git', args);
// istanbul ignore next
child.on('error', function (error) {
child.stdout.removeAllListeners();
reject(error);
});
var self = this;
child.on('exit', function () {
child.removeAllListeners();
list.child = null;
process.nextTick(function () {
self[_run]();
});
});
child.stdout.on('data', function (data) {
buffer.push(data);
length += data.length;
});
child.stdout.on('finish', function () {
child.stdout.removeAllListeners();
resolve(Buffer.concat(buffer, length).toString());
});
if (_config.options.logit) {
console.log('git', args.join(' '));
}
}
}]);
return Git;
})();
exports['default'] = Git;
var git = new Git();
exports.git = git;
//# sourceMappingURL=data:application/json;base64,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RSxDQUFDLE1BQU0sRUFBRSxVQUFVLElBQUksRUFBRTtBQUNwQyxzQkFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNsQixzQkFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUM7YUFDekIsQ0FBQyxDQUFDOztBQUVILGlCQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUUsWUFBWTtBQUNsQyxxQkFBSyxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO0FBQ2xDLHVCQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQzthQUNyRCxDQUFDLENBQUM7O0FBRUgsZ0JBQUksZ0JBQVEsS0FBSyxFQUFFO0FBQ2YsdUJBQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQzthQUN0QztTQUNKOzs7V0FwRWdCLEdBQUc7OztxQkFBSCxHQUFHO0FBd0VqQixJQUFJLEdBQUcsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDIiwiZmlsZSI6ImdpdC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGUgZ2l0IOi/kOihjOi+heWKqeexu1xuICogQGF1dGhvciBjaHJpczx3ZnNyQGZveG1haWwuY29tPlxuICovXG5cbmltcG9ydCB7b3B0aW9uc30gZnJvbSAnLi9jb25maWcnO1xuXG5sZXQgc3Bhd24gPSAoZnVuY3Rpb24gKCkge1xuICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG4gICAgcmV0dXJuIHByb2Nlc3MuZW52LmNvbXNwZWNcbiAgICA/IGZ1bmN0aW9uIChjb21tYW5kLCBhcmdzLCBvcHRpb25zKSB7XG4gICAgICAgIHZhciBzcGF3biA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5zcGF3bjtcbiAgICAgICAgcmV0dXJuIHNwYXduKFxuICAgICAgICAgICAgcHJvY2Vzcy5lbnYuY29tc3BlYyxcbiAgICAgICAgICAgIFsnL2MnLCBjb21tYW5kXS5jb25jYXQoYXJncyksXG4gICAgICAgICAgICBvcHRpb25zXG4gICAgICAgICk7XG4gICAgfVxuICAgIDogZnVuY3Rpb24gKGNvbW1hbmQsIGFyZ3MsIG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIHNwYXduID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLnNwYXduO1xuICAgICAgICByZXR1cm4gc3Bhd24oY29tbWFuZCwgYXJncywgb3B0aW9ucyk7XG4gICAgfTtcbn0pKCk7XG5cbmxldCBxdWV1ZSA9IFN5bWJvbCgncXVldWUnKTtcbmxldCBydW4gPSBTeW1ib2woJ3J1bicpO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBHaXQge1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXNbcXVldWVdID0gW107XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5omn6KGMIGdpdCDlrZDlkb3ku6RcbiAgICAgKlxuICAgICAqIEBwdWJsaWNcbiAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBhcmdzICDlkb3ku6Tlj4LmlbBcbiAgICAgKiBAcmV0dXJuIHtQcm9taXNlLjxzdHJpbmc+fVxuICAgICAqL1xuICAgIHJ1biguLi5hcmdzKSB7XG4gICAgICAgIGxldCBzZWxmID0gdGhpcztcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgIHNlbGZbcXVldWVdLnB1c2goW3Jlc29sdmUsIHJlamVjdCwgYXJnc10pO1xuICAgICAgICAgICAgc2VsZltydW5dKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOaJp+ihjOWRveS7pOmYn+WIl1xuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBbcnVuXSgpIHtcbiAgICAgICAgbGV0IGxpc3QgPSB0aGlzW3F1ZXVlXTtcblxuICAgICAgICBpZiAoIWxpc3QubGVuZ3RoIHx8IGxpc3QuY2hpbGQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBidWZmZXIgPSBbXTtcbiAgICAgICAgbGV0IGxlbmd0aCA9IDA7XG4gICAgICAgIGxldCBbcmVzb2x2ZSwgcmVqZWN0LCBhcmdzXSA9IGxpc3Quc2hpZnQoKTtcblxuICAgICAgICBsZXQgY2hpbGQgPSBsaXN0LmNoaWxkID0gc3Bhd24oJ2dpdCcsIGFyZ3MpO1xuXG4gICAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG4gICAgICAgIGNoaWxkLm9uKCdlcnJvcicsIGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgICAgY2hpbGQuc3Rkb3V0LnJlbW92ZUFsbExpc3RlbmVycygpO1xuICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgICAgICBjaGlsZC5vbignZXhpdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNoaWxkLnJlbW92ZUFsbExpc3RlbmVycygpO1xuICAgICAgICAgICAgbGlzdC5jaGlsZCA9IG51bGw7XG5cbiAgICAgICAgICAgIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHNlbGZbcnVuXSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNoaWxkLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgICAgICBidWZmZXIucHVzaChkYXRhKTtcbiAgICAgICAgICAgIGxlbmd0aCArPSBkYXRhLmxlbmd0aDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY2hpbGQuc3Rkb3V0Lm9uKCdmaW5pc2gnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjaGlsZC5zdGRvdXQucmVtb3ZlQWxsTGlzdGVuZXJzKCk7XG4gICAgICAgICAgICByZXNvbHZlKEJ1ZmZlci5jb25jYXQoYnVmZmVyLCBsZW5ndGgpLnRvU3RyaW5nKCkpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAob3B0aW9ucy5sb2dpdCkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ2dpdCcsIGFyZ3Muam9pbignICcpKTtcbiAgICAgICAgfVxuICAgIH1cblxufVxuXG5leHBvcnQgbGV0IGdpdCA9IG5ldyBHaXQoKTtcbiJdfQ== |