mirror of
				https://github.com/actions/checkout.git
				synced 2025-11-04 05:19:14 +08:00 
			
		
		
		
	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:
		@@ -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}`)
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user