UNPKG

gitmoji-cli

Version:

A gitmoji client for using emojis on commit messages.

75 lines (58 loc) 2.45 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = exports.cancelIfNeeded = exports.cancelIfAmending = exports.COMMIT_MESSAGE_SOURCE = exports.cancelIfRebasing = exports.registerHookInterruptionHandler = void 0; var _execa = _interopRequireDefault(require("execa")); var _fs = _interopRequireDefault(require("fs")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } const withHook = answers => { try { const scope = answers.scope ? `(${answers.scope}): ` : ''; const title = `${answers.gitmoji} ${scope}${answers.title}`; const commitMessage = `${title}\n\n${answers.message}`; _fs.default.writeFileSync(process.argv[3], commitMessage); } catch (error) { console.error(error); process.exit(1); } finally { process.exit(0); } }; const registerHookInterruptionHandler = () => { // Allow to interrupt the hook without cancelling the commit process.on('SIGINT', () => { console.warn('gitmoji-cli was interrupted'); process.exit(0); }); }; exports.registerHookInterruptionHandler = registerHookInterruptionHandler; const cancelIfRebasing = () => (0, _execa.default)('git', ['rev-parse', '--absolute-git-dir']).then(({ stdout: gitDirectory }) => { // see https://stackoverflow.com/questions/3921409/how-to-know-if-there-is-a-git-rebase-in-progress // to understand how a rebase is detected if (_fs.default.existsSync(gitDirectory + '/rebase-merge') || _fs.default.existsSync(gitDirectory + '/rebase-apply')) { process.exit(0); } }); exports.cancelIfRebasing = cancelIfRebasing; const COMMIT_MESSAGE_SOURCE = 4; exports.COMMIT_MESSAGE_SOURCE = COMMIT_MESSAGE_SOURCE; const cancelIfAmending = () => new Promise(resolve => { /* from https://git-scm.com/docs/githooks#_prepare_commit_msg the commit message source is passed as second argument and corresponding 4 for gitmoji-cli `gitmoji --hook $1 $2` */ const commitMessageSource = process.argv[COMMIT_MESSAGE_SOURCE]; if (commitMessageSource && commitMessageSource.startsWith('commit')) { process.exit(0); } resolve(); }); // I avoid Promise.all to avoid race condition in future cancel callbacks exports.cancelIfAmending = cancelIfAmending; const cancelIfNeeded = () => cancelIfAmending().then(cancelIfRebasing); exports.cancelIfNeeded = cancelIfNeeded; var _default = withHook; exports.default = _default;