From ce4272e8dccc783758512e134fb2a3f8a578d8bd Mon Sep 17 00:00:00 2001 From: Simon Baird Date: Wed, 4 Jan 2023 22:27:46 -0500 Subject: [PATCH] Support fetching without the --progress option Setting the `progress` option to false in the `with` section of the workflow step will cause git fetch to run without `--progress`. The motivation is to be able to suppress the noisy progress status output which adds many hundreds of "remote: Counting objects: 85% (386/453)" and similar lines in the workflow log. This should be sufficient to resolve #894 and its older friends, though the solution is different to the one proposed there because it doesn't use the --quiet flag. IIUC git doesn't show the progress status by default since the output is not a terminal, so that's why removing the --progress option is all that's needed. Adding the --quiet flag doesn't make a lot of difference once the --progress flag is removed, and actually I think it would suppress some other useful output that would be better to show. Signed-off-by: Simon Baird --- README.md | 4 ++++ __test__/git-auth-helper.test.ts | 1 + __test__/input-helper.test.ts | 1 + action.yml | 3 +++ dist/index.js | 9 ++++++++- src/git-command-manager.ts | 8 ++++++-- src/git-source-provider.ts | 2 +- src/git-source-settings.ts | 5 +++++ src/input-helper.ts | 5 +++++ 9 files changed, 34 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 5427a500a..38a95dcc8 100644 --- a/README.md +++ b/README.md @@ -87,6 +87,10 @@ When Git 2.18 or higher is not in your PATH, falls back to the REST API to downl # Default: 1 fetch-depth: '' + # Whether to show progress status output when fetching. + # Default: true + show-progress: '' + # Whether to download Git-LFS files # Default: false lfs: '' diff --git a/__test__/git-auth-helper.test.ts b/__test__/git-auth-helper.test.ts index fec657394..f669aa435 100644 --- a/__test__/git-auth-helper.test.ts +++ b/__test__/git-auth-helper.test.ts @@ -805,6 +805,7 @@ async function setup(testName: string): Promise { sparseCheckout: [], sparseCheckoutConeMode: true, fetchDepth: 1, + showProgress: true, lfs: false, submodules: false, nestedSubmodules: false, diff --git a/__test__/input-helper.test.ts b/__test__/input-helper.test.ts index 069fda4be..7d5d4b055 100644 --- a/__test__/input-helper.test.ts +++ b/__test__/input-helper.test.ts @@ -82,6 +82,7 @@ describe('input-helper tests', () => { expect(settings.sparseCheckout).toBe(undefined) expect(settings.sparseCheckoutConeMode).toBe(true) expect(settings.fetchDepth).toBe(1) + expect(settings.showProgress).toBe(true) expect(settings.lfs).toBe(false) expect(settings.ref).toBe('refs/heads/some-ref') expect(settings.repositoryName).toBe('some-repo') diff --git a/action.yml b/action.yml index e562b569f..14a32f353 100644 --- a/action.yml +++ b/action.yml @@ -65,6 +65,9 @@ inputs: fetch-depth: description: 'Number of commits to fetch. 0 indicates all history for all branches and tags.' default: 1 + show-progress: + description: 'Whether to show progress status output when fetching.' + default: true lfs: description: 'Whether to download Git-LFS files' default: false diff --git a/dist/index.js b/dist/index.js index 455629582..1a7974153 100644 --- a/dist/index.js +++ b/dist/index.js @@ -640,7 +640,10 @@ class GitCommandManager { if (!refSpec.some(x => x === refHelper.tagsRefSpec)) { args.push('--no-tags'); } - args.push('--prune', '--progress', '--no-recurse-submodules'); + args.push('--prune', '--no-recurse-submodules'); + if (options.showProgress) { + args.push('--progress'); + } if (options.filter) { args.push(`--filter=${options.filter}`); } @@ -1734,6 +1737,10 @@ function getInputs() { result.fetchDepth = 0; } core.debug(`fetch depth = ${result.fetchDepth}`); + // Show fetch progress + result.showProgress = + (core.getInput('show-progress') || 'true').toUpperCase() === 'TRUE'; + core.debug(`show progress = ${result.showProgress}`); // LFS result.lfs = (core.getInput('lfs') || 'false').toUpperCase() === 'TRUE'; core.debug(`lfs = ${result.lfs}`); diff --git a/src/git-command-manager.ts b/src/git-command-manager.ts index e684dba43..a3917ce35 100644 --- a/src/git-command-manager.ts +++ b/src/git-command-manager.ts @@ -33,6 +33,7 @@ export interface IGitCommandManager { options: { filter?: string fetchDepth?: number + showProgress?: boolean } ): Promise getDefaultBranch(repositoryUrl: string): Promise @@ -240,14 +241,17 @@ class GitCommandManager { async fetch( refSpec: string[], - options: {filter?: string; fetchDepth?: number} + options: {filter?: string; fetchDepth?: number, showProgress?: boolean} ): Promise { const args = ['-c', 'protocol.version=2', 'fetch'] if (!refSpec.some(x => x === refHelper.tagsRefSpec)) { args.push('--no-tags') } - args.push('--prune', '--progress', '--no-recurse-submodules') + args.push('--prune', '--no-recurse-submodules') + if (options.showProgress) { + args.push('--progress') + } if (options.filter) { args.push(`--filter=${options.filter}`) diff --git a/src/git-source-provider.ts b/src/git-source-provider.ts index 8f9d63f55..150f5d522 100644 --- a/src/git-source-provider.ts +++ b/src/git-source-provider.ts @@ -153,7 +153,7 @@ export async function getSource(settings: IGitSourceSettings): Promise { // Fetch core.startGroup('Fetching the repository') - const fetchOptions: {filter?: string; fetchDepth?: number} = {} + const fetchOptions: {filter?: string; fetchDepth?: number, showProgress?: boolean} = {} if (settings.sparseCheckout) fetchOptions.filter = 'blob:none' if (settings.fetchDepth <= 0) { // Fetch all branches and tags diff --git a/src/git-source-settings.ts b/src/git-source-settings.ts index 3272e638c..50cb1300b 100644 --- a/src/git-source-settings.ts +++ b/src/git-source-settings.ts @@ -44,6 +44,11 @@ export interface IGitSourceSettings { */ fetchDepth: number + /** + * Indicates whether to use the --progress option when fetching + */ + showProgress: boolean + /** * Indicates whether to fetch LFS objects */ diff --git a/src/input-helper.ts b/src/input-helper.ts index 410e48032..e6a5b539c 100644 --- a/src/input-helper.ts +++ b/src/input-helper.ts @@ -100,6 +100,11 @@ export async function getInputs(): Promise { } core.debug(`fetch depth = ${result.fetchDepth}`) + // Show fetch progress + result.showProgress = + (core.getInput('show-progress') || 'true').toUpperCase() === 'TRUE' + core.debug(`show progress = ${result.showProgress}`) + // LFS result.lfs = (core.getInput('lfs') || 'false').toUpperCase() === 'TRUE' core.debug(`lfs = ${result.lfs}`)