From 656b4ef8263848a38ec468288a4192bae917f502 Mon Sep 17 00:00:00 2001 From: Robert Wieczoreck <1175008+RobertWieczoreck@users.noreply.github.com> Date: Wed, 16 Aug 2023 22:34:54 +0200 Subject: Add option to fetch tags even if fetch-depth > 0 (#579) * Add option to fetch tags even if fetch-depth > 0 * Add jest tests for fetchDepth and fetchTags options --- __test__/git-auth-helper.test.ts | 1 + __test__/git-command-manager.test.ts | 176 +++++++++++++++++++++++++++++++++++ __test__/input-helper.test.ts | 1 + 3 files changed, 178 insertions(+) (limited to '__test__') diff --git a/__test__/git-auth-helper.test.ts b/__test__/git-auth-helper.test.ts index fec6573..8e580c1 100644 --- a/__test__/git-auth-helper.test.ts +++ b/__test__/git-auth-helper.test.ts @@ -805,6 +805,7 @@ async function setup(testName: string): Promise { sparseCheckout: [], sparseCheckoutConeMode: true, fetchDepth: 1, + fetchTags: false, lfs: false, submodules: false, nestedSubmodules: false, diff --git a/__test__/git-command-manager.test.ts b/__test__/git-command-manager.test.ts index 1c31ef9..16c348f 100644 --- a/__test__/git-command-manager.test.ts +++ b/__test__/git-command-manager.test.ts @@ -88,3 +88,179 @@ describe('git-auth-helper tests', () => { expect(branches.sort()).toEqual(['foo'].sort()) }) }) + +describe('Test fetchDepth and fetchTags options', () => { + beforeEach(async () => { + jest.spyOn(fshelper, 'fileExistsSync').mockImplementation(jest.fn()) + jest.spyOn(fshelper, 'directoryExistsSync').mockImplementation(jest.fn()) + mockExec.mockImplementation((path, args, options) => { + console.log(args, options.listeners.stdout) + + if (args.includes('version')) { + options.listeners.stdout(Buffer.from('2.18')) + } + + return 0 + }) + }) + + afterEach(() => { + jest.restoreAllMocks() + }) + + it('should call execGit with the correct arguments when fetchDepth is 0 and fetchTags is true', async () => { + jest.spyOn(exec, 'exec').mockImplementation(mockExec) + const workingDirectory = 'test' + const lfs = false + const doSparseCheckout = false + git = await commandManager.createCommandManager( + workingDirectory, + lfs, + doSparseCheckout + ) + + const refSpec = ['refspec1', 'refspec2'] + const options = { + filter: 'filterValue', + fetchDepth: 0, + fetchTags: true + } + + await git.fetch(refSpec, options) + + expect(mockExec).toHaveBeenCalledWith( + expect.any(String), + [ + '-c', + 'protocol.version=2', + 'fetch', + '--prune', + '--progress', + '--no-recurse-submodules', + '--filter=filterValue', + 'origin', + 'refspec1', + 'refspec2' + ], + expect.any(Object) + ) + }) + + it('should call execGit with the correct arguments when fetchDepth is 0 and fetchTags is false', async () => { + jest.spyOn(exec, 'exec').mockImplementation(mockExec) + + const workingDirectory = 'test' + const lfs = false + const doSparseCheckout = false + git = await commandManager.createCommandManager( + workingDirectory, + lfs, + doSparseCheckout + ) + const refSpec = ['refspec1', 'refspec2'] + const options = { + filter: 'filterValue', + fetchDepth: 0, + fetchTags: false + } + + await git.fetch(refSpec, options) + + expect(mockExec).toHaveBeenCalledWith( + expect.any(String), + [ + '-c', + 'protocol.version=2', + 'fetch', + '--no-tags', + '--prune', + '--progress', + '--no-recurse-submodules', + '--filter=filterValue', + 'origin', + 'refspec1', + 'refspec2' + ], + expect.any(Object) + ) + }) + + it('should call execGit with the correct arguments when fetchDepth is 1 and fetchTags is false', async () => { + jest.spyOn(exec, 'exec').mockImplementation(mockExec) + + const workingDirectory = 'test' + const lfs = false + const doSparseCheckout = false + git = await commandManager.createCommandManager( + workingDirectory, + lfs, + doSparseCheckout + ) + const refSpec = ['refspec1', 'refspec2'] + const options = { + filter: 'filterValue', + fetchDepth: 1, + fetchTags: false + } + + await git.fetch(refSpec, options) + + expect(mockExec).toHaveBeenCalledWith( + expect.any(String), + [ + '-c', + 'protocol.version=2', + 'fetch', + '--no-tags', + '--prune', + '--progress', + '--no-recurse-submodules', + '--filter=filterValue', + '--depth=1', + 'origin', + 'refspec1', + 'refspec2' + ], + expect.any(Object) + ) + }) + + it('should call execGit with the correct arguments when fetchDepth is 1 and fetchTags is true', async () => { + jest.spyOn(exec, 'exec').mockImplementation(mockExec) + + const workingDirectory = 'test' + const lfs = false + const doSparseCheckout = false + git = await commandManager.createCommandManager( + workingDirectory, + lfs, + doSparseCheckout + ) + const refSpec = ['refspec1', 'refspec2'] + const options = { + filter: 'filterValue', + fetchDepth: 1, + fetchTags: true + } + + await git.fetch(refSpec, options) + + expect(mockExec).toHaveBeenCalledWith( + expect.any(String), + [ + '-c', + 'protocol.version=2', + 'fetch', + '--prune', + '--progress', + '--no-recurse-submodules', + '--filter=filterValue', + '--depth=1', + 'origin', + 'refspec1', + 'refspec2' + ], + expect.any(Object) + ) + }) +}) diff --git a/__test__/input-helper.test.ts b/__test__/input-helper.test.ts index 069fda4..aa58415 100644 --- a/__test__/input-helper.test.ts +++ b/__test__/input-helper.test.ts @@ -82,6 +82,7 @@ describe('input-helper tests', () => { expect(settings.sparseCheckout).toBe(undefined) expect(settings.sparseCheckoutConeMode).toBe(true) 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') -- cgit v1.2.3