/**
* @file commit 处理
* @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 _Object$assign = require('babel-runtime/core-js/object/assign')['default'];
var _Promise = require('babel-runtime/core-js/promise')['default'];
var _interopRequireDefault = require('babel-runtime/helpers/interop-require-default')['default'];
Object.defineProperty(exports, '__esModule', {
value: true
});
var _git = require('./git');
var _file = require('./file');
var _file2 = _interopRequireDefault(_file);
/**
* 匹配文件路径的正则
*
* @const
* @type {RegExp}
*/
var FILE_REG = /^\s*\S+(?=\s*\|)/gm;
/**
* Commit
*
* @class
* @param {Object} options 配置项
* @param {string} options.id 提交的 id
* @param {string} options.date 提交时间
*/
var Commit = (function () {
function Commit() {
var options = arguments.length <= 0 || arguments[0] === undefined ? { id: '', date: new Date() } : arguments[0];
_classCallCheck(this, Commit);
_Object$assign(this, options);
}
/**
* 从 git-show 输出中获取提交的文件路径
*
* @param {string} output git-show 的输出
* @return {Promise.<File[]>}
*/
_createClass(Commit, [{
key: 'getFiles',
value: function getFiles(output) {
// istanbul ignore next
var _this = this;
var cid = this.id;
var date = this.date;
var files = (output.match(FILE_REG) || []).reduce(function (files, path) {
path = path.trim();
if (/.+\.(?:js|css|html)$/.test(path)) {
files.push(new _file2['default']({ cid: cid, path: path, date: date }));
}
return files;
}, []);
return _Promise.all(files.map(function (file) {
return file.read();
})).then(function (files) {
return _this.files = files;
});
}
/**
* 从 git-log 输出中分析生成提交实例
*
* @param {string} log git-log 的输出
* @return {?Commit}
*/
}], [{
key: 'from',
value: function from(log) {
var _log$replace$split = log.replace(/\s*(\r?\n)+/g, '').split(',');
var _log$replace$split2 = _slicedToArray(_log$replace$split, 2);
var id = _log$replace$split2[0];
var date = _log$replace$split2[1];
if (id && date) {
return new Commit({ id: id, date: new Date(date) });
}
return null;
}
/**
* 从 git-log 获取指定用户在某个时间段内的所有 Commit
*
* @param {string} name 提交代码的作者名字
* @param {string} since git 格式的时间段表示
* @return {Promise.<Commit[]>}
*/
}, {
key: 'getCommits',
value: function getCommits(name, since) {
return _git.git.run('log', '--author=' + name, '--since=\'' + since + '\'', '--pretty=format:%h,%ad').then(Commit.parse);
}
/**
* 从 git-show 获取所有 Commit 的相关文件
*
* @param {Commit[]} commits Commit 列表
* @return {Promise.<Array.<File[]>>}
*/
}, {
key: 'getFiles',
value: function getFiles(commits) {
return _Promise.all(commits.map(function (commit) {
return _git.git.run('show', commit.id, '--pretty=format:', '--diff-filter=AM', '--stat=1200', '--stat-graph-width=1').then(commit.getFiles.bind(commit));
}));
}
/**
* 解释出 Commit 列表
*
* @param {string} logs git-log 的输出
* @return {Commit[]}
*/
}, {
key: 'parse',
value: function parse(logs) {
return logs.split(/\r?\n/).map(function (log) {
return Commit.from(log);
}).filter(Boolean);
}
}]);
return Commit;
})();
exports['default'] = Commit;
module.exports = exports['default'];
//# sourceMappingURL=data:application/json;base64,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Q2YsbUJBQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsVUFBVSxHQUFHLEVBQUU7QUFDMUMsdUJBQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUMzQixDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQ3RCOzs7V0FqRmdCLE1BQU07OztxQkFBTixNQUFNIiwiZmlsZSI6ImNvbW1pdC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGUgY29tbWl0IOWkhOeQhlxuICogQGF1dGhvciBjaHJpczx3ZnNyQGZveG1haWwuY29tPlxuICovXG5cbmltcG9ydCB7Z2l0fSBmcm9tICcuL2dpdCc7XG5pbXBvcnQgRmlsZSBmcm9tICcuL2ZpbGUnO1xuXG4vKipcbiAqIOWMuemFjeaWh+S7tui3r+W+hOeahOato+WImVxuICpcbiAqIEBjb25zdFxuICogQHR5cGUge1JlZ0V4cH1cbiAqL1xuY29uc3QgRklMRV9SRUcgPSAvXlxccypcXFMrKD89XFxzKlxcfCkvZ207XG5cbi8qKlxuICogQ29tbWl0XG4gKlxuICogQGNsYXNzXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyDphY3nva7poblcbiAqIEBwYXJhbSB7c3RyaW5nfSBvcHRpb25zLmlkIOaPkOS6pOeahCBpZFxuICogQHBhcmFtIHtzdHJpbmd9IG9wdGlvbnMuZGF0ZSDmj5DkuqTml7bpl7RcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29tbWl0IHtcblxuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMgPSB7aWQ6ICcnLCBkYXRlOiBuZXcgRGF0ZSgpfSkge1xuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOS7jiBnaXQtc2hvdyDovpPlh7rkuK3ojrflj5bmj5DkuqTnmoTmlofku7bot6/lvoRcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBvdXRwdXQgZ2l0LXNob3cg55qE6L6T5Ye6XG4gICAgICogQHJldHVybiB7UHJvbWlzZS48RmlsZVtdPn1cbiAgICAgKi9cbiAgICBnZXRGaWxlcyhvdXRwdXQpIHtcbiAgICAgICAgbGV0IGNpZCA9IHRoaXMuaWQ7XG4gICAgICAgIGxldCBkYXRlID0gdGhpcy5kYXRlO1xuICAgICAgICBsZXQgZmlsZXMgPSAob3V0cHV0Lm1hdGNoKEZJTEVfUkVHKSB8fCBbXSkucmVkdWNlKGZ1bmN0aW9uIChmaWxlcywgcGF0aCkge1xuICAgICAgICAgICAgcGF0aCA9IHBhdGgudHJpbSgpO1xuICAgICAgICAgICAgaWYgKC8uK1xcLig/OmpzfGNzc3xodG1sKSQvLnRlc3QocGF0aCkpIHtcbiAgICAgICAgICAgICAgICBmaWxlcy5wdXNoKG5ldyBGaWxlKHtjaWQsIHBhdGgsIGRhdGV9KSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBmaWxlcztcbiAgICAgICAgfSwgW10pO1xuXG4gICAgICAgIHJldHVybiBQcm9taXNlLmFsbChmaWxlcy5tYXAoKGZpbGUpID0+IGZpbGUucmVhZCgpKSkudGhlbigoZmlsZXMpID0+IHRoaXMuZmlsZXMgPSBmaWxlcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5LuOIGdpdC1sb2cg6L6T5Ye65Lit5YiG5p6Q55Sf5oiQ5o+Q5Lqk5a6e5L6LXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbG9nIGdpdC1sb2cg55qE6L6T5Ye6XG4gICAgICogQHJldHVybiB7P0NvbW1pdH1cbiAgICAgKi9cbiAgICBzdGF0aWMgZnJvbShsb2cpIHtcbiAgICAgICAgbGV0IFtpZCwgZGF0ZV0gPSBsb2cucmVwbGFjZSgvXFxzKihcXHI/XFxuKSsvZywgJycpLnNwbGl0KCcsJyk7XG5cbiAgICAgICAgaWYgKGlkICYmIGRhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQ29tbWl0KHtpZCwgZGF0ZTogbmV3IERhdGUoZGF0ZSl9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOS7jiBnaXQtbG9nIOiOt+WPluaMh+WumueUqOaIt+WcqOafkOS4quaXtumXtOauteWGheeahOaJgOaciSBDb21taXRcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIOaPkOS6pOS7o+eggeeahOS9nOiAheWQjeWtl1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzaW5jZSBnaXQg5qC85byP55qE5pe26Ze05q616KGo56S6XG4gICAgICogQHJldHVybiB7UHJvbWlzZS48Q29tbWl0W10+fVxuICAgICAqL1xuICAgIHN0YXRpYyBnZXRDb21taXRzKG5hbWUsIHNpbmNlKSB7XG4gICAgICAgIHJldHVybiBnaXQucnVuKCdsb2cnLCAnLS1hdXRob3I9JyArIG5hbWUsICctLXNpbmNlPVxcJycgKyBzaW5jZSArICdcXCcnLCAnLS1wcmV0dHk9Zm9ybWF0OiVoLCVhZCcpXG4gICAgICAgICAgICAudGhlbihDb21taXQucGFyc2UpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOS7jiBnaXQtc2hvdyDojrflj5bmiYDmnIkgQ29tbWl0IOeahOebuOWFs+aWh+S7tlxuICAgICAqXG4gICAgICogQHBhcmFtIHtDb21taXRbXX0gY29tbWl0cyBDb21taXQg5YiX6KGoXG4gICAgICogQHJldHVybiB7UHJvbWlzZS48QXJyYXkuPEZpbGVbXT4+fVxuICAgICAqL1xuICAgIHN0YXRpYyBnZXRGaWxlcyhjb21taXRzKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLmFsbChjb21taXRzLm1hcChmdW5jdGlvbiAoY29tbWl0KSB7XG4gICAgICAgICAgICByZXR1cm4gZ2l0LnJ1bihcbiAgICAgICAgICAgICAgICAnc2hvdycsIGNvbW1pdC5pZCxcbiAgICAgICAgICAgICAgICAnLS1wcmV0dHk9Zm9ybWF0OicsICctLWRpZmYtZmlsdGVyPUFNJyxcbiAgICAgICAgICAgICAgICAnLS1zdGF0PTEyMDAnLCAnLS1zdGF0LWdyYXBoLXdpZHRoPTEnXG4gICAgICAgICAgICApLnRoZW4oY29tbWl0LmdldEZpbGVzLmJpbmQoY29tbWl0KSk7XG4gICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDop6Pph4rlh7ogQ29tbWl0IOWIl+ihqFxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGxvZ3MgZ2l0LWxvZyDnmoTovpPlh7pcbiAgICAgKiBAcmV0dXJuIHtDb21taXRbXX1cbiAgICAgKi9cbiAgICBzdGF0aWMgcGFyc2UobG9ncykge1xuICAgICAgICByZXR1cm4gbG9ncy5zcGxpdCgvXFxyP1xcbi8pLm1hcChmdW5jdGlvbiAobG9nKSB7XG4gICAgICAgICAgICByZXR1cm4gQ29tbWl0LmZyb20obG9nKTtcbiAgICAgICAgfSkuZmlsdGVyKEJvb2xlYW4pO1xuICAgIH1cblxufVxuIl19 |