Code coverage report for lib/git.js

Statements: 98.28% (57 / 58)      Branches: 75% (6 / 8)      Functions: 100% (13 / 13)      Lines: 98.28% (57 / 58)      Ignored: 4 statements, 2 functions, 1 branch     

All files » lib/ » git.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132              1   1   1   1   1   1       1   1   1 1 1   4 4       1 1   1 1 12   12                     1     8 21     8 8 8 8                       11   11 7     4 4   4   4   4 4 4   4     4 1 1     4 4 3 3   3 3       4 26 26     4 3 3     4           1     1 1 1  
/**
 * @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==