mirror of
				https://github.com/actions/checkout.git
				synced 2025-11-01 02:28:40 +08:00 
			
		
		
		
	Merge e60e249777 into 96f53100ba
				
					
				
			This commit is contained in:
		
						commit
						8d587e4a47
					
				|  | @ -87,6 +87,11 @@ When Git 2.18 or higher is not in your PATH, falls back to the REST API to downl | ||||||
|     # Default: 1 |     # Default: 1 | ||||||
|     fetch-depth: '' |     fetch-depth: '' | ||||||
| 
 | 
 | ||||||
|  |     # Path to a local bare git [reference repository to minimize network | ||||||
|  |     # usage](https://git-scm.com/docs/git-clone#Documentation/git-clone.txt---reference-if-ableltrepositorygt). | ||||||
|  |     # If the directory doesn't exists this option will ignore it and log a message. | ||||||
|  |     reference: '' | ||||||
|  | 
 | ||||||
|     # Whether to download Git-LFS files |     # Whether to download Git-LFS files | ||||||
|     # Default: false |     # Default: false | ||||||
|     lfs: '' |     lfs: '' | ||||||
|  |  | ||||||
|  | @ -762,6 +762,7 @@ async function setup(testName: string): Promise<void> { | ||||||
|     lfsInstall: jest.fn(), |     lfsInstall: jest.fn(), | ||||||
|     log1: jest.fn(), |     log1: jest.fn(), | ||||||
|     remoteAdd: jest.fn(), |     remoteAdd: jest.fn(), | ||||||
|  |     referenceAdd: jest.fn(), | ||||||
|     removeEnvironmentVariable: jest.fn((name: string) => delete git.env[name]), |     removeEnvironmentVariable: jest.fn((name: string) => delete git.env[name]), | ||||||
|     revParse: jest.fn(), |     revParse: jest.fn(), | ||||||
|     setEnvironmentVariable: jest.fn((name: string, value: string) => { |     setEnvironmentVariable: jest.fn((name: string, value: string) => { | ||||||
|  | @ -818,7 +819,8 @@ async function setup(testName: string): Promise<void> { | ||||||
|     sshStrict: true, |     sshStrict: true, | ||||||
|     workflowOrganizationId: 123456, |     workflowOrganizationId: 123456, | ||||||
|     setSafeDirectory: true, |     setSafeDirectory: true, | ||||||
|     githubServerUrl: githubServerUrl |     githubServerUrl: githubServerUrl, | ||||||
|  |     reference: '/some/path' | ||||||
|   } |   } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -477,6 +477,7 @@ async function setup(testName: string): Promise<void> { | ||||||
|     lfsInstall: jest.fn(), |     lfsInstall: jest.fn(), | ||||||
|     log1: jest.fn(), |     log1: jest.fn(), | ||||||
|     remoteAdd: jest.fn(), |     remoteAdd: jest.fn(), | ||||||
|  |     referenceAdd: jest.fn(), | ||||||
|     removeEnvironmentVariable: jest.fn(), |     removeEnvironmentVariable: jest.fn(), | ||||||
|     revParse: jest.fn(), |     revParse: jest.fn(), | ||||||
|     setEnvironmentVariable: jest.fn(), |     setEnvironmentVariable: jest.fn(), | ||||||
|  |  | ||||||
|  | @ -88,6 +88,7 @@ describe('input-helper tests', () => { | ||||||
|     expect(settings.repositoryOwner).toBe('some-owner') |     expect(settings.repositoryOwner).toBe('some-owner') | ||||||
|     expect(settings.repositoryPath).toBe(gitHubWorkspace) |     expect(settings.repositoryPath).toBe(gitHubWorkspace) | ||||||
|     expect(settings.setSafeDirectory).toBe(true) |     expect(settings.setSafeDirectory).toBe(true) | ||||||
|  |     expect(settings.reference).toBe(undefined) | ||||||
|   }) |   }) | ||||||
| 
 | 
 | ||||||
|   it('qualifies ref', async () => { |   it('qualifies ref', async () => { | ||||||
|  |  | ||||||
|  | @ -65,6 +65,12 @@ inputs: | ||||||
|   fetch-depth: |   fetch-depth: | ||||||
|     description: 'Number of commits to fetch. 0 indicates all history for all branches and tags.' |     description: 'Number of commits to fetch. 0 indicates all history for all branches and tags.' | ||||||
|     default: 1 |     default: 1 | ||||||
|  |   reference: | ||||||
|  |     required: false | ||||||
|  |     description: > | ||||||
|  |       Path to a local bare git [reference repository to minimize network usage](https://git-scm.com/docs/git-clone#Documentation/git-clone.txt---reference-if-ableltrepositorygt). | ||||||
|  |        | ||||||
|  |       If the directory doesn't exists this option will ignore it and log a message. | ||||||
|   lfs: |   lfs: | ||||||
|     description: 'Whether to download Git-LFS files' |     description: 'Whether to download Git-LFS files' | ||||||
|     default: false |     default: false | ||||||
|  |  | ||||||
							
								
								
									
										20
									
								
								dist/index.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										20
									
								
								dist/index.js
									
									
									
									
										vendored
									
									
								
							|  | @ -729,6 +729,13 @@ class GitCommandManager { | ||||||
|             yield this.execGit(['remote', 'add', remoteName, remoteUrl]); |             yield this.execGit(['remote', 'add', remoteName, remoteUrl]); | ||||||
|         }); |         }); | ||||||
|     } |     } | ||||||
|  |     referenceAdd(alternateObjects) { | ||||||
|  |         return __awaiter(this, void 0, void 0, function* () { | ||||||
|  |             const alternatePath = path.join(this.workingDirectory, '.git/objects/info/alternates'); | ||||||
|  |             core.info(`Adding a git alternate to reference repo at ${alternateObjects}`); | ||||||
|  |             yield fs.promises.writeFile(alternatePath, `${alternateObjects}\n`); | ||||||
|  |         }); | ||||||
|  |     } | ||||||
|     removeEnvironmentVariable(name) { |     removeEnvironmentVariable(name) { | ||||||
|         delete this.gitEnv[name]; |         delete this.gitEnv[name]; | ||||||
|     } |     } | ||||||
|  | @ -1208,6 +1215,17 @@ function getSource(settings) { | ||||||
|                 yield git.init(); |                 yield git.init(); | ||||||
|                 yield git.remoteAdd('origin', repositoryUrl); |                 yield git.remoteAdd('origin', repositoryUrl); | ||||||
|                 core.endGroup(); |                 core.endGroup(); | ||||||
|  |                 if (settings.reference !== undefined) { | ||||||
|  |                     const alternateObjects = path.join(settings.reference, '/objects'); | ||||||
|  |                     if (fsHelper.directoryExistsSync(alternateObjects, false)) { | ||||||
|  |                         core.startGroup('Adding a reference repository'); | ||||||
|  |                         yield git.referenceAdd(alternateObjects); | ||||||
|  |                         core.endGroup(); | ||||||
|  |                     } | ||||||
|  |                     else { | ||||||
|  |                         core.warning(`Reference repository was specified, but directory ${alternateObjects} does not exists`); | ||||||
|  |                     } | ||||||
|  |                 } | ||||||
|             } |             } | ||||||
|             // Disable automatic garbage collection
 |             // Disable automatic garbage collection
 | ||||||
|             core.startGroup('Disabling automatic garbage collection'); |             core.startGroup('Disabling automatic garbage collection'); | ||||||
|  | @ -1768,6 +1786,8 @@ function getInputs() { | ||||||
|         // Determine the GitHub URL that the repository is being hosted from
 |         // Determine the GitHub URL that the repository is being hosted from
 | ||||||
|         result.githubServerUrl = core.getInput('github-server-url'); |         result.githubServerUrl = core.getInput('github-server-url'); | ||||||
|         core.debug(`GitHub Host URL = ${result.githubServerUrl}`); |         core.debug(`GitHub Host URL = ${result.githubServerUrl}`); | ||||||
|  |         result.reference = core.getInput('reference'); | ||||||
|  |         core.debug(`Reference repository = ${result.reference}`); | ||||||
|         return result; |         return result; | ||||||
|     }); |     }); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -43,6 +43,7 @@ export interface IGitCommandManager { | ||||||
|   lfsInstall(): Promise<void> |   lfsInstall(): Promise<void> | ||||||
|   log1(format?: string): Promise<string> |   log1(format?: string): Promise<string> | ||||||
|   remoteAdd(remoteName: string, remoteUrl: string): Promise<void> |   remoteAdd(remoteName: string, remoteUrl: string): Promise<void> | ||||||
|  |   referenceAdd(reference: string): Promise<void> | ||||||
|   removeEnvironmentVariable(name: string): void |   removeEnvironmentVariable(name: string): void | ||||||
|   revParse(ref: string): Promise<string> |   revParse(ref: string): Promise<string> | ||||||
|   setEnvironmentVariable(name: string, value: string): void |   setEnvironmentVariable(name: string, value: string): void | ||||||
|  | @ -343,6 +344,15 @@ class GitCommandManager { | ||||||
|     await this.execGit(['remote', 'add', remoteName, remoteUrl]) |     await this.execGit(['remote', 'add', remoteName, remoteUrl]) | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|  |   async referenceAdd(alternateObjects: string): Promise<void> { | ||||||
|  |     const alternatePath = path.join( | ||||||
|  |       this.workingDirectory, | ||||||
|  |       '.git/objects/info/alternates' | ||||||
|  |     ) | ||||||
|  |     core.info(`Adding a git alternate to reference repo at ${alternateObjects}`) | ||||||
|  |     await fs.promises.writeFile(alternatePath, `${alternateObjects}\n`) | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|   removeEnvironmentVariable(name: string): void { |   removeEnvironmentVariable(name: string): void { | ||||||
|     delete this.gitEnv[name] |     delete this.gitEnv[name] | ||||||
|   } |   } | ||||||
|  |  | ||||||
|  | @ -110,6 +110,18 @@ export async function getSource(settings: IGitSourceSettings): Promise<void> { | ||||||
|       await git.init() |       await git.init() | ||||||
|       await git.remoteAdd('origin', repositoryUrl) |       await git.remoteAdd('origin', repositoryUrl) | ||||||
|       core.endGroup() |       core.endGroup() | ||||||
|  | 
 | ||||||
|  |       if (settings.reference !== undefined) { | ||||||
|  |         const alternateObjects = path.join(settings.reference, '/objects') | ||||||
|  | 
 | ||||||
|  |         if (fsHelper.directoryExistsSync(alternateObjects, false)) { | ||||||
|  |           core.startGroup('Adding a reference repository') | ||||||
|  |           await git.referenceAdd(alternateObjects) | ||||||
|  |           core.endGroup() | ||||||
|  |         } else { | ||||||
|  |           core.warning(`Reference repository was specified, but directory ${alternateObjects} does not exists`); | ||||||
|  |         } | ||||||
|  |       } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     // Disable automatic garbage collection
 |     // Disable automatic garbage collection
 | ||||||
|  |  | ||||||
|  | @ -44,6 +44,11 @@ export interface IGitSourceSettings { | ||||||
|    */ |    */ | ||||||
|   fetchDepth: number |   fetchDepth: number | ||||||
| 
 | 
 | ||||||
|  |   /** | ||||||
|  |    * The local reference repository | ||||||
|  |    */ | ||||||
|  |   reference: string | undefined | ||||||
|  | 
 | ||||||
|   /** |   /** | ||||||
|    * Indicates whether to fetch LFS objects |    * Indicates whether to fetch LFS objects | ||||||
|    */ |    */ | ||||||
|  |  | ||||||
|  | @ -141,5 +141,8 @@ export async function getInputs(): Promise<IGitSourceSettings> { | ||||||
|   result.githubServerUrl = core.getInput('github-server-url') |   result.githubServerUrl = core.getInput('github-server-url') | ||||||
|   core.debug(`GitHub Host URL = ${result.githubServerUrl}`) |   core.debug(`GitHub Host URL = ${result.githubServerUrl}`) | ||||||
| 
 | 
 | ||||||
|  |   result.reference = core.getInput('reference') | ||||||
|  |   core.debug(`Reference repository = ${result.reference}`) | ||||||
|  | 
 | ||||||
|   return result |   return result | ||||||
| } | } | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Diego Dompe
						Diego Dompe