From 2721abb4d0f6454e830f5c0b86bce40e6bc189ff Mon Sep 17 00:00:00 2001 From: Peter Evans <18365890+peter-evans@users.noreply.github.com> Date: Thu, 18 Aug 2022 17:20:00 +0900 Subject: [PATCH] fix: handle nothing to commit when autocrlf is set (#1211) --- dist/index.js | 11 ++++++++--- src/create-or-update-branch.ts | 10 +++++++++- src/git-command-manager.ts | 7 +++++-- 3 files changed, 22 insertions(+), 6 deletions(-) diff --git a/dist/index.js b/dist/index.js index 795756e4d..83c6b2f38 100644 --- a/dist/index.js +++ b/dist/index.js @@ -39,6 +39,7 @@ exports.createOrUpdateBranch = exports.tryFetch = exports.getWorkingBaseAndType const core = __importStar(__nccwpck_require__(2186)); const uuid_1 = __nccwpck_require__(5840); const CHERRYPICK_EMPTY = 'The previous cherry-pick is now empty, possibly due to conflict resolution.'; +const NOTHING_TO_COMMIT = 'nothing to commit, working tree clean'; var WorkingBaseType; (function (WorkingBaseType) { WorkingBaseType["Branch"] = "branch"; @@ -138,7 +139,11 @@ function createOrUpdateBranch(git, commitMessage, base, branch, branchRemoteName if (signoff) { popts.push('--signoff'); } - yield git.commit(popts); + const commitResult = yield git.commit(popts, true); + // 'nothing to commit' can occur when core.autocrlf is set to true + if (commitResult.exitCode != 0 && !commitResult.stdout.includes(NOTHING_TO_COMMIT)) { + throw new Error(`Unexpected error: ${commitResult.stderr}`); + } } // Remove uncommitted tracked and untracked changes yield git.exec(['reset', '--hard']); @@ -674,7 +679,7 @@ class GitCommandManager { return yield this.exec(args, allowAllExitCodes); }); } - commit(options) { + commit(options, allowAllExitCodes = false) { return __awaiter(this, void 0, void 0, function* () { const args = ['commit']; if (this.identityGitOptions) { @@ -683,7 +688,7 @@ class GitCommandManager { if (options) { args.push(...options); } - yield this.exec(args); + return yield this.exec(args, allowAllExitCodes); }); } config(configKey, configValue, globalConfig) { diff --git a/src/create-or-update-branch.ts b/src/create-or-update-branch.ts index 460f43cd8..7dcd9fcdf 100644 --- a/src/create-or-update-branch.ts +++ b/src/create-or-update-branch.ts @@ -4,6 +4,7 @@ import {v4 as uuidv4} from 'uuid' const CHERRYPICK_EMPTY = 'The previous cherry-pick is now empty, possibly due to conflict resolution.' +const NOTHING_TO_COMMIT = 'nothing to commit, working tree clean' export enum WorkingBaseType { Branch = 'branch', @@ -134,7 +135,14 @@ export async function createOrUpdateBranch( if (signoff) { popts.push('--signoff') } - await git.commit(popts) + const commitResult = await git.commit(popts, true) + // 'nothing to commit' can occur when core.autocrlf is set to true + if ( + commitResult.exitCode != 0 && + !commitResult.stdout.includes(NOTHING_TO_COMMIT) + ) { + throw new Error(`Unexpected error: ${commitResult.stderr}`) + } } // Remove uncommitted tracked and untracked changes diff --git a/src/git-command-manager.ts b/src/git-command-manager.ts index d9c91648f..87a6dd9d7 100644 --- a/src/git-command-manager.ts +++ b/src/git-command-manager.ts @@ -53,7 +53,10 @@ export class GitCommandManager { return await this.exec(args, allowAllExitCodes) } - async commit(options?: string[]): Promise { + async commit( + options?: string[], + allowAllExitCodes = false + ): Promise { const args = ['commit'] if (this.identityGitOptions) { args.unshift(...this.identityGitOptions) @@ -63,7 +66,7 @@ export class GitCommandManager { args.push(...options) } - await this.exec(args) + return await this.exec(args, allowAllExitCodes) } async config(