Add support for partial checkout filters (#1396)
* added filter option & tests * added build file * fix test oversight * added exit 1 * updated docs to specify override * undo unneeded readme change * set to undefined rather than empty string * run git config in correct di --------- Co-authored-by: Cory Miller <13227161+cory-miller@users.noreply.github.com>
This commit is contained in:
		
							parent
							
								
									72f2cec99f
								
							
						
					
					
						commit
						c533a0a4cf
					
				
							
								
								
									
										10
									
								
								.github/workflows/test.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										10
									
								
								.github/workflows/test.yml
									
									
									
									
										vendored
									
									
								
							|  | @ -72,6 +72,16 @@ jobs: | |||
|         shell: bash | ||||
|         run: __test__/verify-side-by-side.sh | ||||
| 
 | ||||
|       # Filter | ||||
|       - name: Fetch filter | ||||
|         uses: ./ | ||||
|         with: | ||||
|           filter: 'blob:none' | ||||
|           path: fetch-filter | ||||
| 
 | ||||
|       - name: Verify fetch filter | ||||
|         run: __test__/verify-fetch-filter.sh | ||||
| 
 | ||||
|       # Sparse checkout | ||||
|       - name: Sparse checkout | ||||
|         uses: ./ | ||||
|  |  | |||
|  | @ -75,8 +75,12 @@ When Git 2.18 or higher is not in your PATH, falls back to the REST API to downl | |||
|     # Default: true | ||||
|     clean: '' | ||||
| 
 | ||||
|     # Partially clone against a given filter. Overrides sparse-checkout if set. | ||||
|     # Default: null | ||||
|     filter: '' | ||||
| 
 | ||||
|     # Do a sparse checkout on given patterns. Each pattern should be separated with | ||||
|     # new lines | ||||
|     # new lines. | ||||
|     # Default: null | ||||
|     sparse-checkout: '' | ||||
| 
 | ||||
|  |  | |||
|  | @ -802,6 +802,7 @@ async function setup(testName: string): Promise<void> { | |||
|     authToken: 'some auth token', | ||||
|     clean: true, | ||||
|     commit: '', | ||||
|     filter: undefined, | ||||
|     sparseCheckout: [], | ||||
|     sparseCheckoutConeMode: true, | ||||
|     fetchDepth: 1, | ||||
|  |  | |||
|  | @ -79,6 +79,7 @@ describe('input-helper tests', () => { | |||
|     expect(settings.clean).toBe(true) | ||||
|     expect(settings.commit).toBeTruthy() | ||||
|     expect(settings.commit).toBe('1234567890123456789012345678901234567890') | ||||
|     expect(settings.filter).toBe(undefined) | ||||
|     expect(settings.sparseCheckout).toBe(undefined) | ||||
|     expect(settings.sparseCheckoutConeMode).toBe(true) | ||||
|     expect(settings.fetchDepth).toBe(1) | ||||
|  |  | |||
							
								
								
									
										16
									
								
								__test__/verify-fetch-filter.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										16
									
								
								__test__/verify-fetch-filter.sh
									
									
									
									
									
										Executable file
									
								
							|  | @ -0,0 +1,16 @@ | |||
| #!/bin/bash | ||||
| 
 | ||||
| # Verify .git folder | ||||
| if [ ! -d "./fetch-filter/.git" ]; then | ||||
|   echo "Expected ./fetch-filter/.git folder to exist" | ||||
|   exit 1 | ||||
| fi | ||||
| 
 | ||||
| # Verify .git/config contains partialclonefilter | ||||
| 
 | ||||
| CLONE_FILTER=$(git -C fetch-filter config --local --get remote.origin.partialclonefilter) | ||||
| 
 | ||||
| if [ "$CLONE_FILTER" != "blob:none" ]; then | ||||
|   echo "Expected ./fetch-filter/.git/config to have 'remote.origin.partialclonefilter' set to 'blob:none'" | ||||
|   exit 1 | ||||
| fi | ||||
|  | @ -53,10 +53,15 @@ inputs: | |||
|   clean: | ||||
|     description: 'Whether to execute `git clean -ffdx && git reset --hard HEAD` before fetching' | ||||
|     default: true | ||||
|   filter: | ||||
|     description: > | ||||
|       Partially clone against a given filter. | ||||
|       Overrides sparse-checkout if set. | ||||
|     default: null | ||||
|   sparse-checkout: | ||||
|     description: > | ||||
|       Do a sparse checkout on given patterns. | ||||
|       Each pattern should be separated with new lines | ||||
|       Each pattern should be separated with new lines. | ||||
|     default: null | ||||
|   sparse-checkout-cone-mode: | ||||
|     description: > | ||||
|  |  | |||
							
								
								
									
										12
									
								
								dist/index.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										12
									
								
								dist/index.js
									
									
									
									
										vendored
									
									
								
							|  | @ -1244,8 +1244,12 @@ function getSource(settings) { | |||
|             // Fetch
 | ||||
|             core.startGroup('Fetching the repository'); | ||||
|             const fetchOptions = {}; | ||||
|             if (settings.sparseCheckout) | ||||
|             if (settings.filter) { | ||||
|                 fetchOptions.filter = settings.filter; | ||||
|             } | ||||
|             else if (settings.sparseCheckout) { | ||||
|                 fetchOptions.filter = 'blob:none'; | ||||
|             } | ||||
|             if (settings.fetchDepth <= 0) { | ||||
|                 // Fetch all branches and tags
 | ||||
|                 let refSpec = refHelper.getRefSpecForAllHistory(settings.ref, settings.commit); | ||||
|  | @ -1723,6 +1727,12 @@ function getInputs() { | |||
|         // Clean
 | ||||
|         result.clean = (core.getInput('clean') || 'true').toUpperCase() === 'TRUE'; | ||||
|         core.debug(`clean = ${result.clean}`); | ||||
|         // Filter
 | ||||
|         const filter = core.getInput('filter'); | ||||
|         if (filter) { | ||||
|             result.filter = filter; | ||||
|         } | ||||
|         core.debug(`filter = ${result.filter}`); | ||||
|         // Sparse checkout
 | ||||
|         const sparseCheckout = core.getMultilineInput('sparse-checkout'); | ||||
|         if (sparseCheckout.length) { | ||||
|  |  | |||
|  | @ -159,7 +159,13 @@ export async function getSource(settings: IGitSourceSettings): Promise<void> { | |||
|       fetchTags?: boolean | ||||
|       showProgress?: boolean | ||||
|     } = {} | ||||
|     if (settings.sparseCheckout) fetchOptions.filter = 'blob:none' | ||||
| 
 | ||||
|     if (settings.filter) { | ||||
|       fetchOptions.filter = settings.filter | ||||
|     } else if (settings.sparseCheckout) { | ||||
|       fetchOptions.filter = 'blob:none' | ||||
|     } | ||||
| 
 | ||||
|     if (settings.fetchDepth <= 0) { | ||||
|       // Fetch all branches and tags
 | ||||
|       let refSpec = refHelper.getRefSpecForAllHistory( | ||||
|  |  | |||
|  | @ -29,6 +29,11 @@ export interface IGitSourceSettings { | |||
|    */ | ||||
|   clean: boolean | ||||
| 
 | ||||
|   /** | ||||
|    * The filter determining which objects to include | ||||
|    */ | ||||
|   filter: string | undefined | ||||
| 
 | ||||
|   /** | ||||
|    * The array of folders to make the sparse checkout | ||||
|    */ | ||||
|  |  | |||
|  | @ -82,6 +82,14 @@ export async function getInputs(): Promise<IGitSourceSettings> { | |||
|   result.clean = (core.getInput('clean') || 'true').toUpperCase() === 'TRUE' | ||||
|   core.debug(`clean = ${result.clean}`) | ||||
| 
 | ||||
|   // Filter
 | ||||
|   const filter = core.getInput('filter') | ||||
|   if (filter) { | ||||
|     result.filter = filter | ||||
|   } | ||||
| 
 | ||||
|   core.debug(`filter = ${result.filter}`) | ||||
| 
 | ||||
|   // Sparse checkout
 | ||||
|   const sparseCheckout = core.getMultilineInput('sparse-checkout') | ||||
|   if (sparseCheckout.length) { | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Finley Garton
						Finley Garton