feat: add support for fetching additional history for submodules (#1476)

Co-authored-by: GitHub Action <action@github.com>
This commit is contained in:
Tonye Jack 2023-08-23 15:04:44 -06:00 committed by GitHub
parent 785218258b
commit 569361586a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 243 additions and 161 deletions

View File

@ -82,7 +82,6 @@ jobs:
- name: Verify Changed files - name: Verify Changed files
uses: tj-actions/verify-changed-files@v16 uses: tj-actions/verify-changed-files@v16
id: changed_files id: changed_files
if: github.event_name == 'pull_request'
with: with:
files: | files: |
src src

View File

@ -136,6 +136,10 @@ inputs:
description: "Skip the initial fetch to improve performance for shallow repositories. **NOTE**: This could lead to errors with missing history and the intended use is limited to when you've fetched the history necessary to perform the diff." description: "Skip the initial fetch to improve performance for shallow repositories. **NOTE**: This could lead to errors with missing history and the intended use is limited to when you've fetched the history necessary to perform the diff."
required: false required: false
default: "false" default: "false"
fetch_additional_submodule_history:
description: "Fetch additional history for submodules."
required: false
default: "false"
since_last_remote_commit: since_last_remote_commit:
description: "Use the last commit on the remote branch as the `base_sha`. Defaults to the last non-merge commit on the target branch for pull request events and the previous remote commit of the current branch for push events." description: "Use the last commit on the remote branch as the `base_sha`. Defaults to the last non-merge commit on the target branch for pull request events and the previous remote commit of the current branch for push events."
required: false required: false

43
dist/index.js generated vendored
View File

@ -82,6 +82,7 @@ const getRenamedFiles = ({ inputs, workingDirectory, hasSubmodule, diffResult, s
sha2: submoduleShaResult.currentSha, sha2: submoduleShaResult.currentSha,
diff diff
}))) { }))) {
core.warning(`Set 'fetch_additional_submodule_history: true' to fetch additional submodule history for: ${submodulePath}, Note you can control the fetch depth using 'fetch_depth' input`);
diff = '..'; diff = '..';
} }
const submoduleRenamedFiles = yield (0, utils_1.gitRenamedFiles)({ const submoduleRenamedFiles = yield (0, utils_1.gitRenamedFiles)({
@ -146,6 +147,7 @@ const getAllDiffFiles = ({ workingDirectory, hasSubmodule, diffResult, submodule
sha2: submoduleShaResult.currentSha, sha2: submoduleShaResult.currentSha,
diff diff
}))) { }))) {
core.warning(`Set 'fetch_additional_submodule_history: true' to fetch additional submodule history for: ${submodulePath}, Note you can control the fetch depth using 'fetch_depth' input`);
diff = '..'; diff = '..';
} }
const submoduleFiles = yield (0, utils_1.getAllChangedFiles)({ const submoduleFiles = yield (0, utils_1.getAllChangedFiles)({
@ -753,7 +755,8 @@ const getSHAForNonPullRequestEvent = (inputs, env, workingDirectory, isShallow,
let targetBranch = env.GITHUB_REF_NAME; let targetBranch = env.GITHUB_REF_NAME;
const currentBranch = targetBranch; const currentBranch = targetBranch;
let initialCommit = false; let initialCommit = false;
if (isShallow && !inputs.skipInitialFetch) { if (!inputs.skipInitialFetch) {
if (isShallow) {
core.info('Repository is shallow, fetching more history...'); core.info('Repository is shallow, fetching more history...');
if (isTag) { if (isTag) {
let sourceBranch = ''; let sourceBranch = '';
@ -800,6 +803,20 @@ const getSHAForNonPullRequestEvent = (inputs, env, workingDirectory, isShallow,
}); });
} }
} }
else {
if (hasSubmodule && inputs.fetchSubmoduleHistory) {
yield (0, utils_1.gitFetchSubmodules)({
cwd: workingDirectory,
args: [
...gitFetchExtraArgs,
'-u',
'--progress',
`--deepen=${inputs.fetchDepth}`
]
});
}
}
}
const currentSha = yield getCurrentSHA({ inputs, workingDirectory }); const currentSha = yield getCurrentSHA({ inputs, workingDirectory });
let previousSha = inputs.baseSha; let previousSha = inputs.baseSha;
const diff = '..'; const diff = '..';
@ -910,8 +927,9 @@ const getSHAForPullRequestEvent = (inputs, env, workingDirectory, isShallow, has
if (inputs.sinceLastRemoteCommit) { if (inputs.sinceLastRemoteCommit) {
targetBranch = currentBranch; targetBranch = currentBranch;
} }
if (isShallow && !inputs.skipInitialFetch) { if (!inputs.skipInitialFetch) {
core.info('Repository is shallow, fetching more history...'); core.info('Repository is shallow, fetching more history...');
if (isShallow) {
let prFetchExitCode = yield (0, utils_1.gitFetch)({ let prFetchExitCode = yield (0, utils_1.gitFetch)({
cwd: workingDirectory, cwd: workingDirectory,
args: [ args: [
@ -963,6 +981,20 @@ const getSHAForPullRequestEvent = (inputs, env, workingDirectory, isShallow, has
}); });
} }
} }
}
else {
if (hasSubmodule && inputs.fetchSubmoduleHistory) {
yield (0, utils_1.gitFetchSubmodules)({
cwd: workingDirectory,
args: [
...gitFetchExtraArgs,
'-u',
'--progress',
`--deepen=${inputs.fetchDepth}`
]
});
}
}
core.info('Completed fetching more history.'); core.info('Completed fetching more history.');
} }
const currentSha = yield getCurrentSHA({ inputs, workingDirectory }); const currentSha = yield getCurrentSHA({ inputs, workingDirectory });
@ -1288,6 +1320,9 @@ const getInputs = () => {
const skipInitialFetch = core.getBooleanInput('skip_initial_fetch', { const skipInitialFetch = core.getBooleanInput('skip_initial_fetch', {
required: false required: false
}); });
const fetchSubmoduleHistory = core.getBooleanInput('fetch_additional_submodule_history', {
required: false
});
const inputs = { const inputs = {
files, files,
filesSeparator, filesSeparator,
@ -1323,6 +1358,7 @@ const getInputs = () => {
oldNewSeparator, oldNewSeparator,
oldNewFilesSeparator, oldNewFilesSeparator,
skipInitialFetch, skipInitialFetch,
fetchSubmoduleHistory,
// End Not Supported via REST API // End Not Supported via REST API
dirNames, dirNames,
dirNamesExcludeCurrentDir, dirNamesExcludeCurrentDir,
@ -1596,7 +1632,8 @@ function run() {
'recoverFiles', 'recoverFiles',
'recoverFilesIgnore', 'recoverFilesIgnore',
'includeAllOldNewRenamedFiles', 'includeAllOldNewRenamedFiles',
'skipInitialFetch' 'skipInitialFetch',
'fetchSubmoduleHistory'
]; ];
for (const input of unsupportedInputs) { for (const input of unsupportedInputs) {
if (inputs[input]) { if (inputs[input]) {

2
dist/index.js.map generated vendored

File diff suppressed because one or more lines are too long

View File

@ -65,6 +65,9 @@ export const getRenamedFiles = async ({
diff diff
})) }))
) { ) {
core.warning(
`Set 'fetch_additional_submodule_history: true' to fetch additional submodule history for: ${submodulePath}, Note you can control the fetch depth using 'fetch_depth' input`
)
diff = '..' diff = '..'
} }
@ -157,6 +160,9 @@ export const getAllDiffFiles = async ({
diff diff
})) }))
) { ) {
core.warning(
`Set 'fetch_additional_submodule_history: true' to fetch additional submodule history for: ${submodulePath}, Note you can control the fetch depth using 'fetch_depth' input`
)
diff = '..' diff = '..'
} }

View File

@ -93,7 +93,8 @@ export const getSHAForNonPullRequestEvent = async (
const currentBranch = targetBranch const currentBranch = targetBranch
let initialCommit = false let initialCommit = false
if (isShallow && !inputs.skipInitialFetch) { if (!inputs.skipInitialFetch) {
if (isShallow) {
core.info('Repository is shallow, fetching more history...') core.info('Repository is shallow, fetching more history...')
if (isTag) { if (isTag) {
@ -144,6 +145,19 @@ export const getSHAForNonPullRequestEvent = async (
] ]
}) })
} }
} else {
if (hasSubmodule && inputs.fetchSubmoduleHistory) {
await gitFetchSubmodules({
cwd: workingDirectory,
args: [
...gitFetchExtraArgs,
'-u',
'--progress',
`--deepen=${inputs.fetchDepth}`
]
})
}
}
} }
const currentSha = await getCurrentSHA({inputs, workingDirectory}) const currentSha = await getCurrentSHA({inputs, workingDirectory})
@ -288,9 +302,9 @@ export const getSHAForPullRequestEvent = async (
targetBranch = currentBranch targetBranch = currentBranch
} }
if (isShallow && !inputs.skipInitialFetch) { if (!inputs.skipInitialFetch) {
core.info('Repository is shallow, fetching more history...') core.info('Repository is shallow, fetching more history...')
if (isShallow) {
let prFetchExitCode = await gitFetch({ let prFetchExitCode = await gitFetch({
cwd: workingDirectory, cwd: workingDirectory,
args: [ args: [
@ -348,6 +362,19 @@ export const getSHAForPullRequestEvent = async (
}) })
} }
} }
} else {
if (hasSubmodule && inputs.fetchSubmoduleHistory) {
await gitFetchSubmodules({
cwd: workingDirectory,
args: [
...gitFetchExtraArgs,
'-u',
'--progress',
`--deepen=${inputs.fetchDepth}`
]
})
}
}
core.info('Completed fetching more history.') core.info('Completed fetching more history.')
} }

View File

@ -34,6 +34,7 @@ export type Inputs = {
json: boolean json: boolean
escapeJson: boolean escapeJson: boolean
fetchDepth?: number fetchDepth?: number
fetchSubmoduleHistory?: boolean
sinceLastRemoteCommit: boolean sinceLastRemoteCommit: boolean
writeOutputFiles: boolean writeOutputFiles: boolean
outputDir: string outputDir: string
@ -189,6 +190,12 @@ export const getInputs = (): Inputs => {
const skipInitialFetch = core.getBooleanInput('skip_initial_fetch', { const skipInitialFetch = core.getBooleanInput('skip_initial_fetch', {
required: false required: false
}) })
const fetchSubmoduleHistory = core.getBooleanInput(
'fetch_additional_submodule_history',
{
required: false
}
)
const inputs: Inputs = { const inputs: Inputs = {
files, files,
@ -225,6 +232,7 @@ export const getInputs = (): Inputs => {
oldNewSeparator, oldNewSeparator,
oldNewFilesSeparator, oldNewFilesSeparator,
skipInitialFetch, skipInitialFetch,
fetchSubmoduleHistory,
// End Not Supported via REST API // End Not Supported via REST API
dirNames, dirNames,
dirNamesExcludeCurrentDir, dirNamesExcludeCurrentDir,

View File

@ -317,7 +317,8 @@ export async function run(): Promise<void> {
'recoverFiles', 'recoverFiles',
'recoverFilesIgnore', 'recoverFilesIgnore',
'includeAllOldNewRenamedFiles', 'includeAllOldNewRenamedFiles',
'skipInitialFetch' 'skipInitialFetch',
'fetchSubmoduleHistory'
] ]
for (const input of unsupportedInputs) { for (const input of unsupportedInputs) {