mirror of
				https://github.com/actions/checkout.git
				synced 2025-10-31 19:23:59 +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
	 Simon Baird
					Simon Baird