conventional-changelog-lint
Version:
Lint commit messages against a conventional-changelog preset and ruleset
162 lines (123 loc) • 4.22 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true
});
var _regenerator = require('babel-runtime/regenerator');
var _regenerator2 = _interopRequireDefault(_regenerator);
var _asyncToGenerator2 = require('babel-runtime/helpers/asyncToGenerator');
var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);
// Get commit messages
// Object => Promise<Array<String>>
var getCommitMessages = function () {
var _ref = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee(settings) {
var from, to, edit;
return _regenerator2.default.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
from = settings.from, to = settings.to, edit = settings.edit;
if (!edit) {
_context.next = 3;
break;
}
return _context.abrupt('return', getEditCommit());
case 3:
_context.next = 5;
return isShallow();
case 5:
if (!_context.sent) {
_context.next = 7;
break;
}
throw new Error(SHALLOW_MESSAGE);
case 7:
return _context.abrupt('return', getHistoryCommits({ from, to }));
case 8:
case 'end':
return _context.stop();
}
}
}, _callee, this);
}));
return function getCommitMessages(_x) {
return _ref.apply(this, arguments);
};
}();
// Get commit messages from history
// Object => Promise<Array<String>>
// Check if the current repository is shallow
// () => Promise<Boolean>
var isShallow = function () {
var _ref2 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee2() {
var top, shallow;
return _regenerator2.default.wrap(function _callee2$(_context2) {
while (1) {
switch (_context2.prev = _context2.next) {
case 0:
_context2.next = 2;
return (0, _gitToplevel2.default)();
case 2:
top = _context2.sent;
shallow = (0, _path.join)(top, '.git/shallow');
return _context2.abrupt('return', (0, _pathExists2.default)(shallow));
case 5:
case 'end':
return _context2.stop();
}
}
}, _callee2, this);
}));
return function isShallow() {
return _ref2.apply(this, arguments);
};
}();
// Get recently edited commit message
// () => Promise<Array<String>>
var getEditCommit = function () {
var _ref3 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee3() {
var top, editFilePath, editFile;
return _regenerator2.default.wrap(function _callee3$(_context3) {
while (1) {
switch (_context3.prev = _context3.next) {
case 0:
_context3.next = 2;
return (0, _gitToplevel2.default)();
case 2:
top = _context3.sent;
editFilePath = (0, _path.join)(top, '.git/COMMIT_EDITMSG');
_context3.next = 6;
return (0, _fs.readFile)(editFilePath);
case 6:
editFile = _context3.sent;
return _context3.abrupt('return', [`${editFile.toString('utf-8')}\n`]);
case 8:
case 'end':
return _context3.stop();
}
}
}, _callee3, this);
}));
return function getEditCommit() {
return _ref3.apply(this, arguments);
};
}();
var _path = require('path');
var _pathExists = require('path-exists');
var _pathExists2 = _interopRequireDefault(_pathExists);
var _gitRawCommits = require('git-raw-commits');
var _gitRawCommits2 = _interopRequireDefault(_gitRawCommits);
var _gitToplevel = require('git-toplevel');
var _gitToplevel2 = _interopRequireDefault(_gitToplevel);
var _fs = require('mz/fs');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
exports.default = getCommitMessages;
var SHALLOW_MESSAGE = ['Could not get git history from shallow clone.', 'Use git fetch --shallow before linting.', 'Original issue: https://git.io/vyKMq\n Refer to https://git.io/vyKMv for details.'].join('\n');function getHistoryCommits(options) {
return new Promise(function (resolve, reject) {
var data = [];
(0, _gitRawCommits2.default)(options).on('data', function (chunk) {
return data.push(chunk.toString('utf-8'));
}).on('error', reject).on('end', function () {
resolve(data);
});
});
}module.exports = exports['default'];
;