gitmoji-cli
Version:
A gitmoji client for using emojis on commit messages.
75 lines (58 loc) • 2.45 kB
JavaScript
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;
;