Support fetching without the --progress option (#1067)
Setting the `show-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 using --quiet would suppress some other more useful output that would be better left visible. Signed-off-by: Simon Baird <sbaird@redhat.com>
This commit is contained in:
parent
97a652b800
commit
8b5e8b7687
10 changed files with 155 additions and 7 deletions
|
@ -91,6 +91,10 @@ When Git 2.18 or higher is not in your PATH, falls back to the REST API to downl
|
||||||
# Default: false
|
# Default: false
|
||||||
fetch-tags: ''
|
fetch-tags: ''
|
||||||
|
|
||||||
|
# Whether to show progress status output when fetching.
|
||||||
|
# Default: true
|
||||||
|
show-progress: ''
|
||||||
|
|
||||||
# Whether to download Git-LFS files
|
# Whether to download Git-LFS files
|
||||||
# Default: false
|
# Default: false
|
||||||
lfs: ''
|
lfs: ''
|
||||||
|
|
|
@ -806,6 +806,7 @@ async function setup(testName: string): Promise<void> {
|
||||||
sparseCheckoutConeMode: true,
|
sparseCheckoutConeMode: true,
|
||||||
fetchDepth: 1,
|
fetchDepth: 1,
|
||||||
fetchTags: false,
|
fetchTags: false,
|
||||||
|
showProgress: true,
|
||||||
lfs: false,
|
lfs: false,
|
||||||
submodules: false,
|
submodules: false,
|
||||||
nestedSubmodules: false,
|
nestedSubmodules: false,
|
||||||
|
|
|
@ -135,7 +135,6 @@ describe('Test fetchDepth and fetchTags options', () => {
|
||||||
'protocol.version=2',
|
'protocol.version=2',
|
||||||
'fetch',
|
'fetch',
|
||||||
'--prune',
|
'--prune',
|
||||||
'--progress',
|
|
||||||
'--no-recurse-submodules',
|
'--no-recurse-submodules',
|
||||||
'--filter=filterValue',
|
'--filter=filterValue',
|
||||||
'origin',
|
'origin',
|
||||||
|
@ -174,7 +173,6 @@ describe('Test fetchDepth and fetchTags options', () => {
|
||||||
'fetch',
|
'fetch',
|
||||||
'--no-tags',
|
'--no-tags',
|
||||||
'--prune',
|
'--prune',
|
||||||
'--progress',
|
|
||||||
'--no-recurse-submodules',
|
'--no-recurse-submodules',
|
||||||
'--filter=filterValue',
|
'--filter=filterValue',
|
||||||
'origin',
|
'origin',
|
||||||
|
@ -213,7 +211,6 @@ describe('Test fetchDepth and fetchTags options', () => {
|
||||||
'fetch',
|
'fetch',
|
||||||
'--no-tags',
|
'--no-tags',
|
||||||
'--prune',
|
'--prune',
|
||||||
'--progress',
|
|
||||||
'--no-recurse-submodules',
|
'--no-recurse-submodules',
|
||||||
'--filter=filterValue',
|
'--filter=filterValue',
|
||||||
'--depth=1',
|
'--depth=1',
|
||||||
|
@ -252,7 +249,6 @@ describe('Test fetchDepth and fetchTags options', () => {
|
||||||
'protocol.version=2',
|
'protocol.version=2',
|
||||||
'fetch',
|
'fetch',
|
||||||
'--prune',
|
'--prune',
|
||||||
'--progress',
|
|
||||||
'--no-recurse-submodules',
|
'--no-recurse-submodules',
|
||||||
'--filter=filterValue',
|
'--filter=filterValue',
|
||||||
'--depth=1',
|
'--depth=1',
|
||||||
|
@ -263,4 +259,120 @@ describe('Test fetchDepth and fetchTags options', () => {
|
||||||
expect.any(Object)
|
expect.any(Object)
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
it('should call execGit with the correct arguments when showProgress is true', async () => {
|
||||||
|
jest.spyOn(exec, 'exec').mockImplementation(mockExec)
|
||||||
|
|
||||||
|
const workingDirectory = 'test'
|
||||||
|
const lfs = false
|
||||||
|
const doSparseCheckout = false
|
||||||
|
git = await commandManager.createCommandManager(
|
||||||
|
workingDirectory,
|
||||||
|
lfs,
|
||||||
|
doSparseCheckout
|
||||||
|
)
|
||||||
|
const refSpec = ['refspec1', 'refspec2']
|
||||||
|
const options = {
|
||||||
|
filter: 'filterValue',
|
||||||
|
showProgress: true
|
||||||
|
}
|
||||||
|
|
||||||
|
await git.fetch(refSpec, options)
|
||||||
|
|
||||||
|
expect(mockExec).toHaveBeenCalledWith(
|
||||||
|
expect.any(String),
|
||||||
|
[
|
||||||
|
'-c',
|
||||||
|
'protocol.version=2',
|
||||||
|
'fetch',
|
||||||
|
'--no-tags',
|
||||||
|
'--prune',
|
||||||
|
'--no-recurse-submodules',
|
||||||
|
'--progress',
|
||||||
|
'--filter=filterValue',
|
||||||
|
'origin',
|
||||||
|
'refspec1',
|
||||||
|
'refspec2'
|
||||||
|
],
|
||||||
|
expect.any(Object)
|
||||||
|
)
|
||||||
|
})
|
||||||
|
|
||||||
|
it('should call execGit with the correct arguments when fetchDepth is 42 and showProgress is true', async () => {
|
||||||
|
jest.spyOn(exec, 'exec').mockImplementation(mockExec)
|
||||||
|
|
||||||
|
const workingDirectory = 'test'
|
||||||
|
const lfs = false
|
||||||
|
const doSparseCheckout = false
|
||||||
|
git = await commandManager.createCommandManager(
|
||||||
|
workingDirectory,
|
||||||
|
lfs,
|
||||||
|
doSparseCheckout
|
||||||
|
)
|
||||||
|
const refSpec = ['refspec1', 'refspec2']
|
||||||
|
const options = {
|
||||||
|
filter: 'filterValue',
|
||||||
|
fetchDepth: 42,
|
||||||
|
showProgress: true
|
||||||
|
}
|
||||||
|
|
||||||
|
await git.fetch(refSpec, options)
|
||||||
|
|
||||||
|
expect(mockExec).toHaveBeenCalledWith(
|
||||||
|
expect.any(String),
|
||||||
|
[
|
||||||
|
'-c',
|
||||||
|
'protocol.version=2',
|
||||||
|
'fetch',
|
||||||
|
'--no-tags',
|
||||||
|
'--prune',
|
||||||
|
'--no-recurse-submodules',
|
||||||
|
'--progress',
|
||||||
|
'--filter=filterValue',
|
||||||
|
'--depth=42',
|
||||||
|
'origin',
|
||||||
|
'refspec1',
|
||||||
|
'refspec2'
|
||||||
|
],
|
||||||
|
expect.any(Object)
|
||||||
|
)
|
||||||
|
})
|
||||||
|
|
||||||
|
it('should call execGit with the correct arguments when fetchTags is true and showProgress is true', async () => {
|
||||||
|
jest.spyOn(exec, 'exec').mockImplementation(mockExec)
|
||||||
|
|
||||||
|
const workingDirectory = 'test'
|
||||||
|
const lfs = false
|
||||||
|
const doSparseCheckout = false
|
||||||
|
git = await commandManager.createCommandManager(
|
||||||
|
workingDirectory,
|
||||||
|
lfs,
|
||||||
|
doSparseCheckout
|
||||||
|
)
|
||||||
|
const refSpec = ['refspec1', 'refspec2']
|
||||||
|
const options = {
|
||||||
|
filter: 'filterValue',
|
||||||
|
fetchTags: true,
|
||||||
|
showProgress: true
|
||||||
|
}
|
||||||
|
|
||||||
|
await git.fetch(refSpec, options)
|
||||||
|
|
||||||
|
expect(mockExec).toHaveBeenCalledWith(
|
||||||
|
expect.any(String),
|
||||||
|
[
|
||||||
|
'-c',
|
||||||
|
'protocol.version=2',
|
||||||
|
'fetch',
|
||||||
|
'--prune',
|
||||||
|
'--no-recurse-submodules',
|
||||||
|
'--progress',
|
||||||
|
'--filter=filterValue',
|
||||||
|
'origin',
|
||||||
|
'refspec1',
|
||||||
|
'refspec2'
|
||||||
|
],
|
||||||
|
expect.any(Object)
|
||||||
|
)
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
|
|
@ -83,6 +83,7 @@ describe('input-helper tests', () => {
|
||||||
expect(settings.sparseCheckoutConeMode).toBe(true)
|
expect(settings.sparseCheckoutConeMode).toBe(true)
|
||||||
expect(settings.fetchDepth).toBe(1)
|
expect(settings.fetchDepth).toBe(1)
|
||||||
expect(settings.fetchTags).toBe(false)
|
expect(settings.fetchTags).toBe(false)
|
||||||
|
expect(settings.showProgress).toBe(true)
|
||||||
expect(settings.lfs).toBe(false)
|
expect(settings.lfs).toBe(false)
|
||||||
expect(settings.ref).toBe('refs/heads/some-ref')
|
expect(settings.ref).toBe('refs/heads/some-ref')
|
||||||
expect(settings.repositoryName).toBe('some-repo')
|
expect(settings.repositoryName).toBe('some-repo')
|
||||||
|
|
|
@ -68,6 +68,9 @@ inputs:
|
||||||
fetch-tags:
|
fetch-tags:
|
||||||
description: 'Whether to fetch tags, even if fetch-depth > 0.'
|
description: 'Whether to fetch tags, even if fetch-depth > 0.'
|
||||||
default: false
|
default: false
|
||||||
|
show-progress:
|
||||||
|
description: 'Whether to show progress status output when fetching.'
|
||||||
|
default: true
|
||||||
lfs:
|
lfs:
|
||||||
description: 'Whether to download Git-LFS files'
|
description: 'Whether to download Git-LFS files'
|
||||||
default: false
|
default: false
|
||||||
|
|
9
dist/index.js
vendored
9
dist/index.js
vendored
|
@ -640,7 +640,10 @@ class GitCommandManager {
|
||||||
if (!refSpec.some(x => x === refHelper.tagsRefSpec) && !options.fetchTags) {
|
if (!refSpec.some(x => x === refHelper.tagsRefSpec) && !options.fetchTags) {
|
||||||
args.push('--no-tags');
|
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) {
|
if (options.filter) {
|
||||||
args.push(`--filter=${options.filter}`);
|
args.push(`--filter=${options.filter}`);
|
||||||
}
|
}
|
||||||
|
@ -1739,6 +1742,10 @@ function getInputs() {
|
||||||
result.fetchTags =
|
result.fetchTags =
|
||||||
(core.getInput('fetch-tags') || 'false').toUpperCase() === 'TRUE';
|
(core.getInput('fetch-tags') || 'false').toUpperCase() === 'TRUE';
|
||||||
core.debug(`fetch tags = ${result.fetchTags}`);
|
core.debug(`fetch tags = ${result.fetchTags}`);
|
||||||
|
// Show fetch progress
|
||||||
|
result.showProgress =
|
||||||
|
(core.getInput('show-progress') || 'true').toUpperCase() === 'TRUE';
|
||||||
|
core.debug(`show progress = ${result.showProgress}`);
|
||||||
// LFS
|
// LFS
|
||||||
result.lfs = (core.getInput('lfs') || 'false').toUpperCase() === 'TRUE';
|
result.lfs = (core.getInput('lfs') || 'false').toUpperCase() === 'TRUE';
|
||||||
core.debug(`lfs = ${result.lfs}`);
|
core.debug(`lfs = ${result.lfs}`);
|
||||||
|
|
|
@ -34,6 +34,7 @@ export interface IGitCommandManager {
|
||||||
filter?: string
|
filter?: string
|
||||||
fetchDepth?: number
|
fetchDepth?: number
|
||||||
fetchTags?: boolean
|
fetchTags?: boolean
|
||||||
|
showProgress?: boolean
|
||||||
}
|
}
|
||||||
): Promise<void>
|
): Promise<void>
|
||||||
getDefaultBranch(repositoryUrl: string): Promise<string>
|
getDefaultBranch(repositoryUrl: string): Promise<string>
|
||||||
|
@ -241,14 +242,22 @@ class GitCommandManager {
|
||||||
|
|
||||||
async fetch(
|
async fetch(
|
||||||
refSpec: string[],
|
refSpec: string[],
|
||||||
options: {filter?: string; fetchDepth?: number; fetchTags?: boolean}
|
options: {
|
||||||
|
filter?: string
|
||||||
|
fetchDepth?: number
|
||||||
|
fetchTags?: boolean
|
||||||
|
showProgress?: boolean
|
||||||
|
}
|
||||||
): Promise<void> {
|
): Promise<void> {
|
||||||
const args = ['-c', 'protocol.version=2', 'fetch']
|
const args = ['-c', 'protocol.version=2', 'fetch']
|
||||||
if (!refSpec.some(x => x === refHelper.tagsRefSpec) && !options.fetchTags) {
|
if (!refSpec.some(x => x === refHelper.tagsRefSpec) && !options.fetchTags) {
|
||||||
args.push('--no-tags')
|
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) {
|
if (options.filter) {
|
||||||
args.push(`--filter=${options.filter}`)
|
args.push(`--filter=${options.filter}`)
|
||||||
|
|
|
@ -157,6 +157,7 @@ export async function getSource(settings: IGitSourceSettings): Promise<void> {
|
||||||
filter?: string
|
filter?: string
|
||||||
fetchDepth?: number
|
fetchDepth?: number
|
||||||
fetchTags?: boolean
|
fetchTags?: boolean
|
||||||
|
showProgress?: boolean
|
||||||
} = {}
|
} = {}
|
||||||
if (settings.sparseCheckout) fetchOptions.filter = 'blob:none'
|
if (settings.sparseCheckout) fetchOptions.filter = 'blob:none'
|
||||||
if (settings.fetchDepth <= 0) {
|
if (settings.fetchDepth <= 0) {
|
||||||
|
|
|
@ -49,6 +49,11 @@ export interface IGitSourceSettings {
|
||||||
*/
|
*/
|
||||||
fetchTags: boolean
|
fetchTags: boolean
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Indicates whether to use the --progress option when fetching
|
||||||
|
*/
|
||||||
|
showProgress: boolean
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Indicates whether to fetch LFS objects
|
* Indicates whether to fetch LFS objects
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -105,6 +105,11 @@ export async function getInputs(): Promise<IGitSourceSettings> {
|
||||||
(core.getInput('fetch-tags') || 'false').toUpperCase() === 'TRUE'
|
(core.getInput('fetch-tags') || 'false').toUpperCase() === 'TRUE'
|
||||||
core.debug(`fetch tags = ${result.fetchTags}`)
|
core.debug(`fetch tags = ${result.fetchTags}`)
|
||||||
|
|
||||||
|
// Show fetch progress
|
||||||
|
result.showProgress =
|
||||||
|
(core.getInput('show-progress') || 'true').toUpperCase() === 'TRUE'
|
||||||
|
core.debug(`show progress = ${result.showProgress}`)
|
||||||
|
|
||||||
// LFS
|
// LFS
|
||||||
result.lfs = (core.getInput('lfs') || 'false').toUpperCase() === 'TRUE'
|
result.lfs = (core.getInput('lfs') || 'false').toUpperCase() === 'TRUE'
|
||||||
core.debug(`lfs = ${result.lfs}`)
|
core.debug(`lfs = ${result.lfs}`)
|
||||||
|
|
Loading…
Reference in a new issue