diff --git a/src/commands/prepare-commit-msg-hook.ts b/src/commands/prepare-commit-msg-hook.ts index 776bf90a..e1f7348b 100644 --- a/src/commands/prepare-commit-msg-hook.ts +++ b/src/commands/prepare-commit-msg-hook.ts @@ -49,9 +49,16 @@ export const prepareCommitMessageHook = async ( const spin = spinner(); spin.start('Generating commit message'); - const commitMessage = await generateCommitMessageByDiff( - await getDiff({ files: staged }) - ); + let commitMessage: string; + try { + commitMessage = await generateCommitMessageByDiff( + await getDiff({ files: staged }) + ); + } catch (error) { + spin.stop('Done'); + throw error; + } + spin.stop('Done'); const fileContent = await fs.readFile(messageFilePath); @@ -65,7 +72,17 @@ export const prepareCommitMessageHook = async ( await fs.writeFile(messageFilePath, message); } catch (error) { - outro(`${chalk.red('✖')} ${error}`); - process.exit(1); + try { + outro(`${chalk.red('✖')} ${error}`); + const fileContent = await fs.readFile(messageFilePath); + + const commentedError = String(error).replace(new RegExp('^', 'gm'), '# '); + const message = `\n\n# ---------- [OpenCommit] ---------- #\n# Failed to generate the commit message.\n# To cancel the commit, just close this window without making any changes.\n\n${commentedError}\n\n${fileContent.toString()}` + + await fs.writeFile(messageFilePath, message); + } catch (error) { + outro(`${chalk.red('✖')} ${error}`); + process.exit(1); + } } }; diff --git a/src/generateCommitMessageFromGitDiff.ts b/src/generateCommitMessageFromGitDiff.ts index 2f1f7c6e..01f04a67 100644 --- a/src/generateCommitMessageFromGitDiff.ts +++ b/src/generateCommitMessageFromGitDiff.ts @@ -166,11 +166,7 @@ export const generateCommitMessageByDiff = async ( context ); - const commitMessages = [] as string[]; - for (const promise of commitMessagePromises) { - commitMessages.push((await promise) as string); - await delay(2000); - } + const commitMessages = await Promise.all(commitMessagePromises); return commitMessages.join('\n\n'); }