diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/git-command-manager.ts | 26 | ||||
| -rw-r--r-- | src/git-source-provider.ts | 11 |
2 files changed, 25 insertions, 12 deletions
diff --git a/src/git-command-manager.ts b/src/git-command-manager.ts index 0f3fd25..fa50321 100644 --- a/src/git-command-manager.ts +++ b/src/git-command-manager.ts @@ -11,7 +11,9 @@ import {GitVersion} from './git-version' // Auth header not supported before 2.9 // Wire protocol v2 not supported before 2.18 +// sparse-checkout not [well-]supported before 2.28 (see https://github.com/actions/checkout/issues/1386) export const MinimumGitVersion = new GitVersion('2.18') +export const MinimumGitSparseCheckoutVersion = new GitVersion('2.28') export interface IGitCommandManager { branchDelete(remote: boolean, branch: string): Promise<void> @@ -60,6 +62,7 @@ export interface IGitCommandManager { tryDisableAutomaticGarbageCollection(): Promise<boolean> tryGetFetchUrl(): Promise<string> tryReset(): Promise<boolean> + version(): Promise<GitVersion> } export async function createCommandManager( @@ -83,6 +86,7 @@ class GitCommandManager { private lfs = false private doSparseCheckout = false private workingDirectory = '' + private gitVersion: GitVersion = new GitVersion() // Private constructor; use createCommandManager() private constructor() {} @@ -480,6 +484,10 @@ class GitCommandManager { return output.exitCode === 0 } + async version(): Promise<GitVersion> { + return this.gitVersion + } + static async createCommandManager( workingDirectory: string, lfs: boolean, @@ -556,23 +564,23 @@ class GitCommandManager { // Git version core.debug('Getting git version') - let gitVersion = new GitVersion() + this.gitVersion = new GitVersion() let gitOutput = await this.execGit(['version']) let stdout = gitOutput.stdout.trim() if (!stdout.includes('\n')) { const match = stdout.match(/\d+\.\d+(\.\d+)?/) if (match) { - gitVersion = new GitVersion(match[0]) + this.gitVersion = new GitVersion(match[0]) } } - if (!gitVersion.isValid()) { + if (!this.gitVersion.isValid()) { throw new Error('Unable to determine git version') } // Minimum git version - if (!gitVersion.checkMinimum(MinimumGitVersion)) { + if (!this.gitVersion.checkMinimum(MinimumGitVersion)) { throw new Error( - `Minimum required git version is ${MinimumGitVersion}. Your git ('${this.gitPath}') is ${gitVersion}` + `Minimum required git version is ${MinimumGitVersion}. Your git ('${this.gitPath}') is ${this.gitVersion}` ) } @@ -606,16 +614,14 @@ class GitCommandManager { this.doSparseCheckout = doSparseCheckout if (this.doSparseCheckout) { - // The `git sparse-checkout` command was introduced in Git v2.25.0 - const minimumGitSparseCheckoutVersion = new GitVersion('2.25') - if (!gitVersion.checkMinimum(minimumGitSparseCheckoutVersion)) { + if (!this.gitVersion.checkMinimum(MinimumGitSparseCheckoutVersion)) { throw new Error( - `Minimum Git version required for sparse checkout is ${minimumGitSparseCheckoutVersion}. Your git ('${this.gitPath}') is ${gitVersion}` + `Minimum Git version required for sparse checkout is ${MinimumGitSparseCheckoutVersion}. Your git ('${this.gitPath}') is ${this.gitVersion}` ) } } // Set the user agent - const gitHttpUserAgent = `git/${gitVersion} (github-actions-checkout)` + const gitHttpUserAgent = `git/${this.gitVersion} (github-actions-checkout)` core.debug(`Set git useragent to: ${gitHttpUserAgent}`) this.gitEnv['GIT_HTTP_USER_AGENT'] = gitHttpUserAgent } diff --git a/src/git-source-provider.ts b/src/git-source-provider.ts index 0589722..f723d94 100644 --- a/src/git-source-provider.ts +++ b/src/git-source-provider.ts @@ -9,7 +9,10 @@ import * as path from 'path' import * as refHelper from './ref-helper' import * as stateHelper from './state-helper' import * as urlHelper from './url-helper' -import {IGitCommandManager} from './git-command-manager' +import { + MinimumGitSparseCheckoutVersion, + IGitCommandManager +} from './git-command-manager' import {IGitSourceSettings} from './git-source-settings' export async function getSource(settings: IGitSourceSettings): Promise<void> { @@ -209,7 +212,11 @@ export async function getSource(settings: IGitSourceSettings): Promise<void> { // Sparse checkout if (!settings.sparseCheckout) { - await git.disableSparseCheckout() + let gitVersion = await git.version() + // no need to disable sparse-checkout if the installed git runtime doesn't even support it. + if (gitVersion.checkMinimum(MinimumGitSparseCheckoutVersion)) { + await git.disableSparseCheckout() + } } else { core.startGroup('Setting up sparse checkout') if (settings.sparseCheckoutConeMode) { |
