import { execSync } from 'child_process'; import fs from 'fs'; import { AUTOMATION_TYPE } from './constants'; function getDiffByAutomationType( automationType: AUTOMATION_TYPE, ): string | undefined { if (!Object.values(AUTOMATION_TYPE).includes(automationType)) { console.error('Invalid automation type.'); process.exit(1); } let diff; if (automationType === AUTOMATION_TYPE.CI) { const optionalArguments = process.argv.slice(3); if (optionalArguments.length !== 1) { console.error('Invalid number of arguments.'); process.exit(1); } diff = getCIDiff(optionalArguments[0]); } else if (automationType === AUTOMATION_TYPE.PRE_COMMIT_HOOK) { diff = getPreCommitHookDiff(); } else if (automationType === AUTOMATION_TYPE.PRE_PUSH_HOOK) { diff = getPrePushHookDiff(); } return diff; } function getCIDiff(path: string): string { return fs.readFileSync(path, { encoding: 'utf8', flag: 'r', }); } function getPreCommitHookDiff(): string { return execSync(`git diff --cached HEAD`).toString().trim(); } function getPrePushHookDiff(): string { const currentBranch = execSync(`git rev-parse --abbrev-ref HEAD`) .toString() .trim(); return execSync( `git diff ${currentBranch} origin/${currentBranch} -- . ':(exclude)development/fitness-functions/'`, ) .toString() .trim(); } export { getDiffByAutomationType };