From b9d6ac43b8b251913ae7710900b7e6c29b6f52e3 Mon Sep 17 00:00:00 2001 From: Robert Wieczoreck Date: Tue, 7 Sep 2021 22:49:58 +0200 Subject: [PATCH] Add option to fetch tags even if fetch-depth > 0 --- README.md | 4 ++++ __test__/git-auth-helper.test.ts | 1 + __test__/input-helper.test.ts | 1 + action.yml | 3 +++ dist/index.js | 14 +++++++++----- src/git-command-manager.ts | 19 ++++++++++++++----- src/git-source-provider.ts | 2 +- src/git-source-settings.ts | 5 +++++ src/input-helper.ts | 5 +++++ 9 files changed, 43 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index 8fe140f55..671c30b10 100644 --- a/README.md +++ b/README.md @@ -78,6 +78,10 @@ When Git 2.18 or higher is not in your PATH, falls back to the REST API to downl # Default: 1 fetch-depth: '' + # Whether to fetch tags, even if fetch-depth > 0. + # Default: false + fetch-tags: '' + # Whether to download Git-LFS files # Default: false lfs: '' diff --git a/__test__/git-auth-helper.test.ts b/__test__/git-auth-helper.test.ts index 2acec38f8..b073db0cf 100644 --- a/__test__/git-auth-helper.test.ts +++ b/__test__/git-auth-helper.test.ts @@ -798,6 +798,7 @@ async function setup(testName: string): Promise { clean: true, commit: '', fetchDepth: 1, + fetchTags: false, lfs: false, submodules: false, nestedSubmodules: false, diff --git a/__test__/input-helper.test.ts b/__test__/input-helper.test.ts index 1a8e5c96d..1885ea5a8 100644 --- a/__test__/input-helper.test.ts +++ b/__test__/input-helper.test.ts @@ -80,6 +80,7 @@ describe('input-helper tests', () => { expect(settings.commit).toBeTruthy() expect(settings.commit).toBe('1234567890123456789012345678901234567890') expect(settings.fetchDepth).toBe(1) + expect(settings.fetchTags).toBe(false) expect(settings.lfs).toBe(false) expect(settings.ref).toBe('refs/heads/some-ref') expect(settings.repositoryName).toBe('some-repo') diff --git a/action.yml b/action.yml index cab09ebd3..3df33d8d6 100644 --- a/action.yml +++ b/action.yml @@ -56,6 +56,9 @@ inputs: fetch-depth: description: 'Number of commits to fetch. 0 indicates all history for all branches and tags.' default: 1 + fetch-tags: + description: 'Whether to fetch tags, even if fetch-depth > 0.' + default: false lfs: description: 'Whether to download Git-LFS files' default: false diff --git a/dist/index.js b/dist/index.js index 0a33ea19d..e25bc2d82 100644 --- a/dist/index.js +++ b/dist/index.js @@ -7533,10 +7533,10 @@ class GitCommandManager { return output.exitCode === 0; }); } - fetch(refSpec, fetchDepth) { + fetch(refSpec, fetchDepth, fetchTags) { return __awaiter(this, void 0, void 0, function* () { const args = ['-c', 'protocol.version=2', 'fetch']; - if (!refSpec.some(x => x === refHelper.tagsRefSpec)) { + if (!refSpec.some(x => x === refHelper.tagsRefSpec) && !fetchTags) { args.push('--no-tags'); } args.push('--prune', '--progress', '--no-recurse-submodules'); @@ -7614,8 +7614,8 @@ class GitCommandManager { } log1(format) { return __awaiter(this, void 0, void 0, function* () { - var args = format ? ['log', '-1', format] : ['log', '-1']; - var silent = format ? false : true; + const args = format ? ['log', '-1', format] : ['log', '-1']; + const silent = format ? false : true; const output = yield this.execGit(args, false, silent); return output.stdout; }); @@ -18521,6 +18521,10 @@ function getInputs() { result.fetchDepth = 0; } core.debug(`fetch depth = ${result.fetchDepth}`); + // Fetch tags + result.fetchTags = + (core.getInput('fetch-tags') || 'false').toUpperCase() === 'TRUE'; + core.debug(`fetch tags = ${result.fetchTags}`); // LFS result.lfs = (core.getInput('lfs') || 'false').toUpperCase() === 'TRUE'; core.debug(`lfs = ${result.lfs}`); @@ -31981,7 +31985,7 @@ function getSource(settings) { } else { const refSpec = refHelper.getRefSpec(settings.ref, settings.commit); - yield git.fetch(refSpec, settings.fetchDepth); + yield git.fetch(refSpec, settings.fetchDepth, settings.fetchTags); } core.endGroup(); // Checkout info diff --git a/src/git-command-manager.ts b/src/git-command-manager.ts index 01aedfe55..98bc811cb 100644 --- a/src/git-command-manager.ts +++ b/src/git-command-manager.ts @@ -25,7 +25,11 @@ export interface IGitCommandManager { add?: boolean ): Promise configExists(configKey: string, globalConfig?: boolean): Promise - fetch(refSpec: string[], fetchDepth?: number): Promise + fetch( + refSpec: string[], + fetchDepth?: number, + fetchTags?: boolean + ): Promise getDefaultBranch(repositoryUrl: string): Promise getWorkingDirectory(): string init(): Promise @@ -201,9 +205,14 @@ class GitCommandManager { return output.exitCode === 0 } - async fetch(refSpec: string[], fetchDepth?: number): Promise { + async fetch( + refSpec: string[], + fetchDepth?: number, + fetchTags?: boolean + ): Promise { const args = ['-c', 'protocol.version=2', 'fetch'] - if (!refSpec.some(x => x === refHelper.tagsRefSpec)) { + + if (!refSpec.some(x => x === refHelper.tagsRefSpec) && !fetchTags) { args.push('--no-tags') } @@ -288,8 +297,8 @@ class GitCommandManager { } async log1(format?: string): Promise { - var args = format ? ['log', '-1', format] : ['log', '-1'] - var silent = format ? false : true + const args = format ? ['log', '-1', format] : ['log', '-1'] + const silent = format ? false : true const output = await this.execGit(args, false, silent) return output.stdout } diff --git a/src/git-source-provider.ts b/src/git-source-provider.ts index 48f20da28..4204a3fec 100644 --- a/src/git-source-provider.ts +++ b/src/git-source-provider.ts @@ -169,7 +169,7 @@ export async function getSource(settings: IGitSourceSettings): Promise { } } else { const refSpec = refHelper.getRefSpec(settings.ref, settings.commit) - await git.fetch(refSpec, settings.fetchDepth) + await git.fetch(refSpec, settings.fetchDepth, settings.fetchTags) } core.endGroup() diff --git a/src/git-source-settings.ts b/src/git-source-settings.ts index 2da562266..93dc9009b 100644 --- a/src/git-source-settings.ts +++ b/src/git-source-settings.ts @@ -34,6 +34,11 @@ export interface IGitSourceSettings { */ fetchDepth: number + /** + * Fetch tags, even if fetchDepth > 0 (default: false) + */ + fetchTags: boolean + /** * Indicates whether to fetch LFS objects */ diff --git a/src/input-helper.ts b/src/input-helper.ts index 237b06aff..d3b9e7766 100644 --- a/src/input-helper.ts +++ b/src/input-helper.ts @@ -89,6 +89,11 @@ export async function getInputs(): Promise { } core.debug(`fetch depth = ${result.fetchDepth}`) + // Fetch tags + result.fetchTags = + (core.getInput('fetch-tags') || 'false').toUpperCase() === 'TRUE' + core.debug(`fetch tags = ${result.fetchTags}`) + // LFS result.lfs = (core.getInput('lfs') || 'false').toUpperCase() === 'TRUE' core.debug(`lfs = ${result.lfs}`)