diff --git a/src/commands/config.ts b/src/commands/config.ts index 4af9f52d..c5d01de0 100644 --- a/src/commands/config.ts +++ b/src/commands/config.ts @@ -27,7 +27,8 @@ export enum CONFIG_KEYS { OCO_API_URL = 'OCO_API_URL', OCO_API_CUSTOM_HEADERS = 'OCO_API_CUSTOM_HEADERS', OCO_OMIT_SCOPE = 'OCO_OMIT_SCOPE', - OCO_GITPUSH = 'OCO_GITPUSH' // todo: deprecate + OCO_GITPUSH = 'OCO_GITPUSH', // todo: deprecate + OCO_HOOK_AUTO_UNCOMMENT = 'OCO_HOOK_AUTO_UNCOMMENT' } export enum CONFIG_MODES { @@ -711,6 +712,14 @@ export const configValidators = { 'Must be true or false' ); return value; + }, + + [CONFIG_KEYS.OCO_HOOK_AUTO_UNCOMMENT](value: any) { + validateConfig( + CONFIG_KEYS.OCO_HOOK_AUTO_UNCOMMENT, + typeof value === 'boolean', + 'Must be true or false' + ); } }; @@ -747,6 +756,7 @@ export type ConfigType = { [CONFIG_KEYS.OCO_ONE_LINE_COMMIT]: boolean; [CONFIG_KEYS.OCO_OMIT_SCOPE]: boolean; [CONFIG_KEYS.OCO_TEST_MOCK_TYPE]: string; + [CONFIG_KEYS.OCO_HOOK_AUTO_UNCOMMENT]: boolean; }; export const defaultConfigPath = pathJoin(homedir(), '.opencommit'); @@ -794,7 +804,8 @@ export const DEFAULT_CONFIG = { OCO_TEST_MOCK_TYPE: 'commit-message', OCO_WHY: false, OCO_OMIT_SCOPE: false, - OCO_GITPUSH: true // todo: deprecate + OCO_GITPUSH: true, // todo: deprecate + OCO_HOOK_AUTO_UNCOMMENT: false }; const initGlobalConfig = (configPath: string = defaultConfigPath) => { @@ -1046,6 +1057,11 @@ function getConfigKeyDetails(key) { description: 'Message template placeholder', values: ['String (must start with $)'] }; + case CONFIG_KEYS.OCO_HOOK_AUTO_UNCOMMENT: + return { + description: 'Automatically uncomment the commit message in the hook', + values: ['true', 'false'] + }; default: return { description: 'String value', diff --git a/src/commands/prepare-commit-msg-hook.ts b/src/commands/prepare-commit-msg-hook.ts index 36e3f6d5..776bf90a 100644 --- a/src/commands/prepare-commit-msg-hook.ts +++ b/src/commands/prepare-commit-msg-hook.ts @@ -56,12 +56,14 @@ export const prepareCommitMessageHook = async ( const fileContent = await fs.readFile(messageFilePath); - const divider = '# ---------- [OpenCommit] ---------- #'; + const messageWithComment = `# ${commitMessage}\n\n# ---------- [OpenCommit] ---------- #\n# Remove the # above to use this generated commit message.\n# To cancel the commit, just close this window without making any changes.\n\n${fileContent.toString()}`; + const messageWithoutComment = `${commitMessage}\n\n${fileContent.toString()}`; - await fs.writeFile( - messageFilePath, - `# ${commitMessage}\n\n${divider}\n# Remove the # above to use this generated commit message.\n# To cancel the commit, just close this window without making any changes.\n\n${fileContent.toString()}` - ); + const message = config.OCO_HOOK_AUTO_UNCOMMENT + ? messageWithoutComment + : messageWithComment; + + await fs.writeFile(messageFilePath, message); } catch (error) { outro(`${chalk.red('✖')} ${error}`); process.exit(1); diff --git a/src/migrations/_run.ts b/src/migrations/_run.ts index 30d9fd34..989a71ac 100644 --- a/src/migrations/_run.ts +++ b/src/migrations/_run.ts @@ -43,7 +43,7 @@ export const runMigrations = async () => { OCO_AI_PROVIDER_ENUM.GROQ, OCO_AI_PROVIDER_ENUM.MISTRAL, OCO_AI_PROVIDER_ENUM.MLX, - OCO_AI_PROVIDER_ENUM.OPENROUTER, + OCO_AI_PROVIDER_ENUM.OPENROUTER ].includes(config.OCO_AI_PROVIDER) ) { return;