mirror of
				https://github.com/actions/checkout.git
				synced 2025-11-04 13:29:15 +08:00 
			
		
		
		
	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
This commit is contained in:
		
				
					committed by
					
						
						GitHub
					
				
			
			
				
	
			
			
			
						parent
						
							96f53100ba
						
					
				
				
					commit
					7739b9ba2e
				
			@@ -805,6 +805,7 @@ async function setup(testName: string): Promise<void> {
 | 
			
		||||
    sparseCheckout: [],
 | 
			
		||||
    sparseCheckoutConeMode: true,
 | 
			
		||||
    fetchDepth: 1,
 | 
			
		||||
    fetchTags: false,
 | 
			
		||||
    lfs: false,
 | 
			
		||||
    submodules: false,
 | 
			
		||||
    nestedSubmodules: false,
 | 
			
		||||
 
 | 
			
		||||
@@ -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)
 | 
			
		||||
    )
 | 
			
		||||
  })
 | 
			
		||||
})
 | 
			
		||||
 
 | 
			
		||||
@@ -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')
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user