UNPKG

affiance

Version:

A configurable and extendable Git hook manager for node projects

63 lines (53 loc) 1.72 kB
'use strict'; const _ = require('lodash'); const fse = require('fs-extra'); const gitRepo = require('../gitRepo'); const HookContextBase = require('./base'); module.exports = class HookContextCommitMsg extends HookContextBase { constructor(config, argv, input) { super(config, argv, input); this.hookScriptName = 'commit-msg'; this.hookConfigName = 'CommitMsg'; } isEmptyMessage() { return !this.commitMessage().trim(); } commitMessage() { return this.commitMessageLines().join('\n'); } commitMessageLines() { if(!this._commitMessageLines) { this._commitMessageLines = []; let rawCommitMessageLines = this.rawCommitMessageLines(); let commentCharacter = gitRepo.commentCharacter(); for (let i in rawCommitMessageLines) { let line = rawCommitMessageLines[i]; // Skip lines that are comments. if(line[0] === commentCharacter) { continue; } // We've reached the diffs displayed in `-v` mode. Stop adding lines. if(line.match(/^diff --git/)) { break; } this._commitMessageLines.push(line); } } return this._commitMessageLines; } rawCommitMessageLines() { if (!this._rawCommitMessageLines) { this._rawCommitMessageLines = []; let rawCommitMessage = this.rawCommitMessage(); if(rawCommitMessage) { this._rawCommitMessageLines = rawCommitMessage.split('\n'); } } return this._rawCommitMessageLines; } rawCommitMessage() { if (!this._rawCommitMessage) { this._rawCommitMessage = fse.readFileSync(this.commitMessageFile(), 'utf8'); } return this._rawCommitMessage; } commitMessageFile() { return this.argv[0]; } };