UNPKG

conventional-changelog-lint

Version:

Lint commit messages against a conventional-changelog preset and ruleset

162 lines (123 loc) 4.22 kB
'use strict'; 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'];