mirror of
				https://github.com/actions/checkout.git
				synced 2025-11-01 02:28:40 +08:00 
			
		
		
		
	Change git config scope from global to system
This commit is contained in:
		
							parent
							
								
									ac59398561
								
							
						
					
					
						commit
						dc3f9aa6d6
					
				|  | @ -5,6 +5,7 @@ import * as io from '@actions/io' | ||||||
| import * as os from 'os' | import * as os from 'os' | ||||||
| import * as path from 'path' | import * as path from 'path' | ||||||
| import * as stateHelper from '../lib/state-helper' | import * as stateHelper from '../lib/state-helper' | ||||||
|  | import {ConfigScope} from '../lib/git-command-manager' | ||||||
| import {IGitCommandManager} from '../lib/git-command-manager' | import {IGitCommandManager} from '../lib/git-command-manager' | ||||||
| import {IGitSourceSettings} from '../lib/git-source-settings' | import {IGitSourceSettings} from '../lib/git-source-settings' | ||||||
| 
 | 
 | ||||||
|  | @ -730,16 +731,16 @@ async function setup(testName: string): Promise<void> { | ||||||
|     checkout: jest.fn(), |     checkout: jest.fn(), | ||||||
|     checkoutDetach: jest.fn(), |     checkoutDetach: jest.fn(), | ||||||
|     config: jest.fn( |     config: jest.fn( | ||||||
|       async (key: string, value: string, globalConfig?: boolean) => { |       async (key: string, value: string, configScope?: ConfigScope) => { | ||||||
|         const configPath = globalConfig |         const configPath = configScope | ||||||
|           ? path.join(git.env['HOME'] || tempHomedir, '.gitconfig') |           ? path.join(git.env['HOME'] || tempHomedir, '.gitconfig') | ||||||
|           : localGitConfigPath |           : localGitConfigPath | ||||||
|         await fs.promises.appendFile(configPath, `\n${key} ${value}`) |         await fs.promises.appendFile(configPath, `\n${key} ${value}`) | ||||||
|       } |       } | ||||||
|     ), |     ), | ||||||
|     configExists: jest.fn( |     configExists: jest.fn( | ||||||
|       async (key: string, globalConfig?: boolean): Promise<boolean> => { |       async (key: string, configScope?: ConfigScope): Promise<boolean> => { | ||||||
|         const configPath = globalConfig |         const configPath = configScope | ||||||
|           ? path.join(git.env['HOME'] || tempHomedir, '.gitconfig') |           ? path.join(git.env['HOME'] || tempHomedir, '.gitconfig') | ||||||
|           : localGitConfigPath |           : localGitConfigPath | ||||||
|         const content = await fs.promises.readFile(configPath) |         const content = await fs.promises.readFile(configPath) | ||||||
|  | @ -774,8 +775,8 @@ async function setup(testName: string): Promise<void> { | ||||||
|     tagExists: jest.fn(), |     tagExists: jest.fn(), | ||||||
|     tryClean: jest.fn(), |     tryClean: jest.fn(), | ||||||
|     tryConfigUnset: jest.fn( |     tryConfigUnset: jest.fn( | ||||||
|       async (key: string, globalConfig?: boolean): Promise<boolean> => { |       async (key: string, configScope?: ConfigScope): Promise<boolean> => { | ||||||
|         const configPath = globalConfig |         const configPath = configScope | ||||||
|           ? path.join(git.env['HOME'] || tempHomedir, '.gitconfig') |           ? path.join(git.env['HOME'] || tempHomedir, '.gitconfig') | ||||||
|           : localGitConfigPath |           : localGitConfigPath | ||||||
|         let content = await fs.promises.readFile(configPath) |         let content = await fs.promises.readFile(configPath) | ||||||
|  |  | ||||||
|  | @ -9,6 +9,7 @@ import * as regexpHelper from './regexp-helper' | ||||||
| import * as stateHelper from './state-helper' | import * as stateHelper from './state-helper' | ||||||
| import * as urlHelper from './url-helper' | import * as urlHelper from './url-helper' | ||||||
| import {default as uuid} from 'uuid/v4' | import {default as uuid} from 'uuid/v4' | ||||||
|  | import {ConfigScope} from './git-command-manager' | ||||||
| import {IGitCommandManager} from './git-command-manager' | import {IGitCommandManager} from './git-command-manager' | ||||||
| import {IGitSourceSettings} from './git-source-settings' | import {IGitSourceSettings} from './git-source-settings' | ||||||
| 
 | 
 | ||||||
|  | @ -129,13 +130,13 @@ class GitAuthHelper { | ||||||
|     const newGitConfigPath = await this.configureTempGlobalConfig() |     const newGitConfigPath = await this.configureTempGlobalConfig() | ||||||
|     try { |     try { | ||||||
|       // Configure the token
 |       // Configure the token
 | ||||||
|       await this.configureToken(newGitConfigPath, true) |       await this.configureToken(newGitConfigPath, ConfigScope.System) | ||||||
| 
 | 
 | ||||||
|       // Configure HTTPS instead of SSH
 |       // Configure HTTPS instead of SSH
 | ||||||
|       await this.git.tryConfigUnset(this.insteadOfKey, true) |       await this.git.tryConfigUnset(this.insteadOfKey, ConfigScope.System) | ||||||
|       if (!this.settings.sshKey) { |       if (!this.settings.sshKey) { | ||||||
|         for (const insteadOfValue of this.insteadOfValues) { |         for (const insteadOfValue of this.insteadOfValues) { | ||||||
|           await this.git.config(this.insteadOfKey, insteadOfValue, true, true) |           await this.git.config(this.insteadOfKey, insteadOfValue, ConfigScope.System, true) | ||||||
|         } |         } | ||||||
|       } |       } | ||||||
|     } catch (err) { |     } catch (err) { | ||||||
|  | @ -143,7 +144,7 @@ class GitAuthHelper { | ||||||
|       core.info( |       core.info( | ||||||
|         'Encountered an error when attempting to configure token. Attempting unconfigure.' |         'Encountered an error when attempting to configure token. Attempting unconfigure.' | ||||||
|       ) |       ) | ||||||
|       await this.git.tryConfigUnset(this.tokenConfigKey, true) |       await this.git.tryConfigUnset(this.tokenConfigKey, ConfigScope.System) | ||||||
|       throw err |       throw err | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
|  | @ -274,16 +275,16 @@ class GitAuthHelper { | ||||||
| 
 | 
 | ||||||
|   private async configureToken( |   private async configureToken( | ||||||
|     configPath?: string, |     configPath?: string, | ||||||
|     globalConfig?: boolean |     configScope?: ConfigScope | ||||||
|   ): Promise<void> { |   ): Promise<void> { | ||||||
|     // Validate args
 |     // Validate args
 | ||||||
|     assert.ok( |     assert.ok( | ||||||
|       (configPath && globalConfig) || (!configPath && !globalConfig), |       (configPath && configScope) || (!configPath && !configScope), | ||||||
|       'Unexpected configureToken parameter combinations' |       'Unexpected configureToken parameter combinations' | ||||||
|     ) |     ) | ||||||
| 
 | 
 | ||||||
|     // Default config path
 |     // Default config path
 | ||||||
|     if (!configPath && !globalConfig) { |     if (!configPath && !configScope) { | ||||||
|       configPath = path.join(this.git.getWorkingDirectory(), '.git', 'config') |       configPath = path.join(this.git.getWorkingDirectory(), '.git', 'config') | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  | @ -293,7 +294,7 @@ class GitAuthHelper { | ||||||
|     await this.git.config( |     await this.git.config( | ||||||
|       this.tokenConfigKey, |       this.tokenConfigKey, | ||||||
|       this.tokenPlaceholderConfigValue, |       this.tokenPlaceholderConfigValue, | ||||||
|       globalConfig |       configScope, | ||||||
|     ) |     ) | ||||||
| 
 | 
 | ||||||
|     // Replace the placeholder
 |     // Replace the placeholder
 | ||||||
|  |  | ||||||
|  | @ -12,6 +12,12 @@ import {GitVersion} from './git-version' | ||||||
| // Wire protocol v2 not supported before 2.18
 | // Wire protocol v2 not supported before 2.18
 | ||||||
| export const MinimumGitVersion = new GitVersion('2.18') | export const MinimumGitVersion = new GitVersion('2.18') | ||||||
| 
 | 
 | ||||||
|  | export enum ConfigScope { | ||||||
|  |   Local = "local", | ||||||
|  |   Global = "global", | ||||||
|  |   System = "system", | ||||||
|  | } | ||||||
|  | 
 | ||||||
| export interface IGitCommandManager { | export interface IGitCommandManager { | ||||||
|   branchDelete(remote: boolean, branch: string): Promise<void> |   branchDelete(remote: boolean, branch: string): Promise<void> | ||||||
|   branchExists(remote: boolean, pattern: string): Promise<boolean> |   branchExists(remote: boolean, pattern: string): Promise<boolean> | ||||||
|  | @ -21,10 +27,10 @@ export interface IGitCommandManager { | ||||||
|   config( |   config( | ||||||
|     configKey: string, |     configKey: string, | ||||||
|     configValue: string, |     configValue: string, | ||||||
|     globalConfig?: boolean, |     configScope?: ConfigScope, | ||||||
|     add?: boolean |     add?: boolean | ||||||
|   ): Promise<void> |   ): Promise<void> | ||||||
|   configExists(configKey: string, globalConfig?: boolean): Promise<boolean> |   configExists(configKey: string, configScope?: ConfigScope): Promise<boolean> | ||||||
|   fetch(refSpec: string[], fetchDepth?: number): Promise<void> |   fetch(refSpec: string[], fetchDepth?: number): Promise<void> | ||||||
|   getDefaultBranch(repositoryUrl: string): Promise<string> |   getDefaultBranch(repositoryUrl: string): Promise<string> | ||||||
|   getWorkingDirectory(): string |   getWorkingDirectory(): string | ||||||
|  | @ -43,7 +49,7 @@ export interface IGitCommandManager { | ||||||
|   submoduleUpdate(fetchDepth: number, recursive: boolean): Promise<void> |   submoduleUpdate(fetchDepth: number, recursive: boolean): Promise<void> | ||||||
|   tagExists(pattern: string): Promise<boolean> |   tagExists(pattern: string): Promise<boolean> | ||||||
|   tryClean(): Promise<boolean> |   tryClean(): Promise<boolean> | ||||||
|   tryConfigUnset(configKey: string, globalConfig?: boolean): Promise<boolean> |   tryConfigUnset(configKey: string, configScope?: ConfigScope): Promise<boolean> | ||||||
|   tryDisableAutomaticGarbageCollection(): Promise<boolean> |   tryDisableAutomaticGarbageCollection(): Promise<boolean> | ||||||
|   tryGetFetchUrl(): Promise<string> |   tryGetFetchUrl(): Promise<string> | ||||||
|   tryReset(): Promise<boolean> |   tryReset(): Promise<boolean> | ||||||
|  | @ -172,10 +178,10 @@ class GitCommandManager { | ||||||
|   async config( |   async config( | ||||||
|     configKey: string, |     configKey: string, | ||||||
|     configValue: string, |     configValue: string, | ||||||
|     globalConfig?: boolean, |     configScope?: ConfigScope, | ||||||
|     add?: boolean |     add?: boolean | ||||||
|   ): Promise<void> { |   ): Promise<void> { | ||||||
|     const args: string[] = ['config', globalConfig ? '--global' : '--local'] |     const args: string[] = ['config', configScope ? `--${configScope}` : '--local'] | ||||||
|     if (add) { |     if (add) { | ||||||
|       args.push('--add') |       args.push('--add') | ||||||
|     } |     } | ||||||
|  | @ -185,13 +191,13 @@ class GitCommandManager { | ||||||
| 
 | 
 | ||||||
|   async configExists( |   async configExists( | ||||||
|     configKey: string, |     configKey: string, | ||||||
|     globalConfig?: boolean |     configScope?: ConfigScope | ||||||
|   ): Promise<boolean> { |   ): Promise<boolean> { | ||||||
|     const pattern = regexpHelper.escape(configKey) |     const pattern = regexpHelper.escape(configKey) | ||||||
|     const output = await this.execGit( |     const output = await this.execGit( | ||||||
|       [ |       [ | ||||||
|         'config', |         'config', | ||||||
|         globalConfig ? '--global' : '--local', |         configScope ? `--${configScope}` : '--local', | ||||||
|         '--name-only', |         '--name-only', | ||||||
|         '--get-regexp', |         '--get-regexp', | ||||||
|         pattern |         pattern | ||||||
|  | @ -369,12 +375,12 @@ class GitCommandManager { | ||||||
| 
 | 
 | ||||||
|   async tryConfigUnset( |   async tryConfigUnset( | ||||||
|     configKey: string, |     configKey: string, | ||||||
|     globalConfig?: boolean |     configScope?: ConfigScope | ||||||
|   ): Promise<boolean> { |   ): Promise<boolean> { | ||||||
|     const output = await this.execGit( |     const output = await this.execGit( | ||||||
|       [ |       [ | ||||||
|         'config', |         'config', | ||||||
|         globalConfig ? '--global' : '--local', |         configScope ? `--${configScope}` : '--local', | ||||||
|         '--unset-all', |         '--unset-all', | ||||||
|         configKey |         configKey | ||||||
|       ], |       ], | ||||||
|  |  | ||||||
|  | @ -9,6 +9,7 @@ import * as path from 'path' | ||||||
| import * as refHelper from './ref-helper' | import * as refHelper from './ref-helper' | ||||||
| import * as stateHelper from './state-helper' | import * as stateHelper from './state-helper' | ||||||
| import * as urlHelper from './url-helper' | import * as urlHelper from './url-helper' | ||||||
|  | import {ConfigScope} from './git-command-manager' | ||||||
| import {IGitCommandManager} from './git-command-manager' | import {IGitCommandManager} from './git-command-manager' | ||||||
| import {IGitSourceSettings} from './git-source-settings' | import {IGitSourceSettings} from './git-source-settings' | ||||||
| 
 | 
 | ||||||
|  | @ -49,7 +50,7 @@ export async function getSource(settings: IGitSourceSettings): Promise<void> { | ||||||
|         ) |         ) | ||||||
| 
 | 
 | ||||||
|         await git |         await git | ||||||
|           .config('safe.directory', settings.repositoryPath, true, true) |           .config('safe.directory', settings.repositoryPath, ConfigScope.System, true) | ||||||
|           .catch(error => { |           .catch(error => { | ||||||
|             core.info( |             core.info( | ||||||
|               `Failed to initialize safe directory with error: ${error}` |               `Failed to initialize safe directory with error: ${error}` | ||||||
|  | @ -278,7 +279,7 @@ export async function cleanup(repositoryPath: string): Promise<void> { | ||||||
|       ) |       ) | ||||||
| 
 | 
 | ||||||
|       await git |       await git | ||||||
|         .config('safe.directory', repositoryPath, true, true) |         .config('safe.directory', repositoryPath, ConfigScope.System, true) | ||||||
|         .catch(error => { |         .catch(error => { | ||||||
|           core.info(`Failed to initialize safe directory with error: ${error}`) |           core.info(`Failed to initialize safe directory with error: ${error}`) | ||||||
|         }) |         }) | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Milad Irannejad
						Milad Irannejad