feat: improve checking local branch history (#1436)

Co-authored-by: GitHub Action <action@github.com>
This commit is contained in:
Tonye Jack 2023-08-05 00:26:02 -06:00 committed by GitHub
parent 1e9cd5f299
commit d4e6e22e93
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 89 additions and 11 deletions

40
dist/index.js generated vendored
View File

@ -2198,18 +2198,48 @@ const getPreviousGitTag = ({ cwd }) => __awaiter(void 0, void 0, void 0, functio
});
exports.getPreviousGitTag = getPreviousGitTag;
const canDiffCommits = ({ cwd, sha1, sha2, diff }) => __awaiter(void 0, void 0, void 0, function* () {
const { exitCode, stderr } = yield exec.getExecOutput('git', ['diff', '--name-only', '--ignore-submodules=all', `${sha1}${diff}${sha2}`], {
if (diff === '...') {
const mergeBase = yield getMergeBase(cwd, sha1, sha2);
if (!mergeBase) {
core.warning(`Unable to find merge base between ${sha1} and ${sha2}`);
return false;
}
const { exitCode, stderr } = yield exec.getExecOutput('git', ['log', '--format=%H', `${mergeBase}..${sha2}`], {
cwd,
ignoreReturnCode: true,
silent: !core.isDebug()
});
if (exitCode !== 0) {
core.warning(stderr || `Error checking commit history`);
return false;
}
return true;
}
else {
const { exitCode, stderr } = yield exec.getExecOutput('git', ['diff', '--quiet', sha1, sha2], {
cwd,
ignoreReturnCode: true,
silent: !core.isDebug()
});
if (exitCode !== 0) {
core.warning(stderr || `Error checking commit history`);
return false;
}
return true;
}
});
exports.canDiffCommits = canDiffCommits;
const getMergeBase = (cwd, sha1, sha2) => __awaiter(void 0, void 0, void 0, function* () {
const { exitCode, stdout } = yield exec.getExecOutput('git', ['merge-base', sha1, sha2], {
cwd,
ignoreReturnCode: true,
silent: !core.isDebug()
});
if (exitCode !== 0) {
core.warning(stderr || `Unable find merge base between ${sha1} and ${sha2}`);
return false;
return null;
}
return true;
return stdout.trim();
});
exports.canDiffCommits = canDiffCommits;
const getDirnameMaxDepth = ({ relativePath, dirNamesMaxDepth, excludeCurrentDir }) => {
const pathArr = (0, exports.getDirname)(relativePath).split(path.sep);
const maxDepth = Math.min(dirNamesMaxDepth || pathArr.length, pathArr.length);

2
dist/index.js.map generated vendored

File diff suppressed because one or more lines are too long

View File

@ -786,9 +786,58 @@ export const canDiffCommits = async ({
sha2: string
diff: string
}): Promise<boolean> => {
const {exitCode, stderr} = await exec.getExecOutput(
if (diff === '...') {
const mergeBase = await getMergeBase(cwd, sha1, sha2)
if (!mergeBase) {
core.warning(`Unable to find merge base between ${sha1} and ${sha2}`)
return false
}
const {exitCode, stderr} = await exec.getExecOutput(
'git',
['log', '--format=%H', `${mergeBase}..${sha2}`],
{
cwd,
ignoreReturnCode: true,
silent: !core.isDebug()
}
)
if (exitCode !== 0) {
core.warning(stderr || `Error checking commit history`)
return false
}
return true
} else {
const {exitCode, stderr} = await exec.getExecOutput(
'git',
['diff', '--quiet', sha1, sha2],
{
cwd,
ignoreReturnCode: true,
silent: !core.isDebug()
}
)
if (exitCode !== 0) {
core.warning(stderr || `Error checking commit history`)
return false
}
return true
}
}
const getMergeBase = async (
cwd: string,
sha1: string,
sha2: string
): Promise<string | null> => {
const {exitCode, stdout} = await exec.getExecOutput(
'git',
['diff', '--name-only', '--ignore-submodules=all', `${sha1}${diff}${sha2}`],
['merge-base', sha1, sha2],
{
cwd,
ignoreReturnCode: true,
@ -797,11 +846,10 @@ export const canDiffCommits = async ({
)
if (exitCode !== 0) {
core.warning(stderr || `Unable find merge base between ${sha1} and ${sha2}`)
return false
return null
}
return true
return stdout.trim()
}
export const getDirnameMaxDepth = ({