fix(diff): handle ambiguous revision in diff --stat command

This commit is contained in:
BLACKBOX Agent 2025-11-07 23:42:39 +00:00
parent 0edc001d28
commit f9b11b729c
2 changed files with 28 additions and 19 deletions

18
dist/index.js vendored
View File

@ -56,7 +56,6 @@ exports.buildBranchCommits = buildBranchCommits;
exports.createOrUpdateBranch = createOrUpdateBranch;
const core = __importStar(__nccwpck_require__(7484));
const uuid_1 = __nccwpck_require__(2048);
const utils = __importStar(__nccwpck_require__(9277));
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';
const FETCH_DEPTH_MARGIN = 10;
@ -150,16 +149,19 @@ function commitsHaveDiff(git, branch1, branch2, depth) {
// Some action use cases lead to the depth being a very large number and the diff fails.
// I've made this check optional for now because it was a fix for an edge case that is
// very rare, anyway.
try {
const diff1 = (yield git.exec(['diff', '--stat', `${branch1}..${branch1}~${depth}`])).stdout.trim();
const diff2 = (yield git.exec(['diff', '--stat', `${branch2}..${branch2}~${depth}`])).stdout.trim();
return diff1 !== diff2;
}
catch (error) {
const result1 = yield git.exec(['diff', '--stat', `${branch1}..${branch1}~${depth}`], { allowAllExitCodes: true });
if (result1.exitCode !== 0) {
core.info('Failed optional check of commits diff; Skipping.');
core.debug(utils.getErrorMessage(error));
core.debug(result1.stderr);
return false;
}
const result2 = yield git.exec(['diff', '--stat', `${branch2}..${branch2}~${depth}`], { allowAllExitCodes: true });
if (result2.exitCode !== 0) {
core.info('Failed optional check of commits diff; Skipping.');
core.debug(result2.stderr);
return false;
}
return result1.stdout.trim() !== result2.stdout.trim();
});
}
function splitLines(multilineString) {

View File

@ -1,7 +1,6 @@
import * as core from '@actions/core'
import {GitCommandManager, Commit} from './git-command-manager'
import {v4 as uuidv4} from 'uuid'
import * as utils from './utils'
const CHERRYPICK_EMPTY =
'The previous cherry-pick is now empty, possibly due to conflict resolution.'
@ -135,19 +134,27 @@ async function commitsHaveDiff(
// Some action use cases lead to the depth being a very large number and the diff fails.
// I've made this check optional for now because it was a fix for an edge case that is
// very rare, anyway.
try {
const diff1 = (
await git.exec(['diff', '--stat', `${branch1}..${branch1}~${depth}`])
).stdout.trim()
const diff2 = (
await git.exec(['diff', '--stat', `${branch2}..${branch2}~${depth}`])
).stdout.trim()
return diff1 !== diff2
} catch (error) {
const result1 = await git.exec(
['diff', '--stat', `${branch1}..${branch1}~${depth}`],
{allowAllExitCodes: true}
)
if (result1.exitCode !== 0) {
core.info('Failed optional check of commits diff; Skipping.')
core.debug(utils.getErrorMessage(error))
core.debug(result1.stderr)
return false
}
const result2 = await git.exec(
['diff', '--stat', `${branch2}..${branch2}~${depth}`],
{allowAllExitCodes: true}
)
if (result2.exitCode !== 0) {
core.info('Failed optional check of commits diff; Skipping.')
core.debug(result2.stderr)
return false
}
return result1.stdout.trim() !== result2.stdout.trim()
}
function splitLines(multilineString: string): string[] {