git-release-manager
Version:
A tool to generate release notes from git commit history
50 lines • 2.01 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.listCommitsAsync = listCommitsAsync;
exports.getGitLogAsJson = getGitLogAsJson;
const regexHandlers_1 = require("./regexHandlers");
const simple_git_1 = __importDefault(require("simple-git"));
const _1 = require(".");
const cmd_1 = require("../../../utils/cmd");
async function listCommitsAsync(range, config) {
const commits = await getGitLogAsJson(range);
const commitMessageRegex = (0, regexHandlers_1.createCommitMessageRegex)(config.commitTypes);
if (!commitMessageRegex) {
return [];
}
const filteredCommits = commits.filter(commit => commitMessageRegex.test(commit.message));
const commitList = await Promise.all(filteredCommits.map(async (commit) => {
const parsedCommit = await (0, _1.enrichCommit)(commit, config);
const { stdout: filesOutput } = await (0, cmd_1.execWithErrorHandling)(`git log --pretty=format:"" --no-commit-id --name-only -r ${parsedCommit.raw.hash}`);
const files = filesOutput.split('\n').filter(Boolean);
return {
...parsedCommit,
files,
};
}));
return commitList;
}
async function getGitLogAsJson(range = null) {
const git = (0, simple_git_1.default)();
try {
const log = range ? await git.log([range]) : await git.log();
const jsonArray = log.all.map(commit => ({
hash: commit.hash,
shortHash: commit.hash.substring(0, 7),
message: commit.message,
body: commit.body,
authorName: commit.author_name,
authorEmail: commit.author_email,
date: commit.date,
}));
return jsonArray;
}
catch (error) {
console.error('Error fetching git log:', error);
return [];
}
}
//# sourceMappingURL=commitProcessor.js.map