mirror of
				https://github.com/actions/checkout.git
				synced 2025-10-31 11:13:59 +08:00 
			
		
		
		
	Explicitly disable sparse checkout unless asked for (#1598)
When a worktree is reused by actions/checkout and the first time sparse checkout was enabled, we need to ensure that the second time it is only a sparse checkout if explicitly asked for. Otherwise, we need to disable the sparse checkout so that a full checkout is the outcome of this Action. ## Details * If no `sparse-checkout` parameter is specified, disable it This should allow users to reuse existing folders when running `actions/checkout` where a previous run asked for a sparse checkout but the current run does not ask for a sparse checkout. This fixes https://github.com/actions/checkout/issues/1475 There are use cases in particular with non-ephemeral (self-hosted) runners where an existing worktree (that has been initialized as a sparse checkout) is reused in subsequent CI runs (where `actions/checkout` is run _without_ any `sparse-checkout` parameter). In these scenarios, we need to make sure that the sparse checkout is disabled before checking out the files. ### Also includes: * npm run build * ci: verify that an existing sparse checkout can be made unsparse * Added a clarifying comment about test branches. * `test-proxy` now uses newly-minted `test-ubuntu-git` container image from ghcr.io --------- Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Co-authored-by: John Wesley Walker III <81404201+jww3@users.noreply.github.com>
This commit is contained in:
		 Johannes Schindelin
					Johannes Schindelin
				
			
				
					committed by
					
						 GitHub
						GitHub
					
				
			
			
				
	
			
			
			 GitHub
						GitHub
					
				
			
						parent
						
							df0bcddf6d
						
					
				
				
					commit
					aadec89964
				
			| @@ -17,6 +17,7 @@ export interface IGitCommandManager { | ||||
|   branchDelete(remote: boolean, branch: string): Promise<void> | ||||
|   branchExists(remote: boolean, pattern: string): Promise<boolean> | ||||
|   branchList(remote: boolean): Promise<string[]> | ||||
|   disableSparseCheckout(): Promise<void> | ||||
|   sparseCheckout(sparseCheckout: string[]): Promise<void> | ||||
|   sparseCheckoutNonConeMode(sparseCheckout: string[]): Promise<void> | ||||
|   checkout(ref: string, startPoint: string): Promise<void> | ||||
| @@ -171,6 +172,10 @@ class GitCommandManager { | ||||
|     return result | ||||
|   } | ||||
|  | ||||
|   async disableSparseCheckout(): Promise<void> { | ||||
|     await this.execGit(['sparse-checkout', 'disable']) | ||||
|   } | ||||
|  | ||||
|   async sparseCheckout(sparseCheckout: string[]): Promise<void> { | ||||
|     await this.execGit(['sparse-checkout', 'set', ...sparseCheckout]) | ||||
|   } | ||||
|   | ||||
| @@ -208,7 +208,9 @@ export async function getSource(settings: IGitSourceSettings): Promise<void> { | ||||
|     } | ||||
|  | ||||
|     // Sparse checkout | ||||
|     if (settings.sparseCheckout) { | ||||
|     if (!settings.sparseCheckout) { | ||||
|       await git.disableSparseCheckout() | ||||
|     } else { | ||||
|       core.startGroup('Setting up sparse checkout') | ||||
|       if (settings.sparseCheckoutConeMode) { | ||||
|         await git.sparseCheckout(settings.sparseCheckout) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user