-
Notifications
You must be signed in to change notification settings - Fork 1.8k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Implement branch list using callbacks from exec function (#1045)
When trying to list local branches to figure out what needs cleaned up during runs on non-ephemeral Actions Runners, we use git rev-parse --symbolic-full-name to get a list of branches. This can lead to ambiguous ref name errors when there are branches and tags with similar names. Part of the reason we use rev-parse --symbolic-full-name vs git branch --list or git rev-parse --symbolic seems to related to a bug in Git 2.18. Until we can deprecate our usage of Git 2.18, I think we need to keep --symbolic-full-name. Since part of the problem is that these ambiguous ref name errors clog the Actions annotation limits, this is a mitigation to suppress those messages until we can get rid of the workaround.
- Loading branch information
1 parent
755da8c
commit 8856415
Showing
5 changed files
with
240 additions
and
54 deletions.
There are no files selected for viewing
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,80 @@ | ||
import * as exec from '@actions/exec' | ||
import * as fshelper from '../lib/fs-helper' | ||
import * as commandManager from '../lib/git-command-manager' | ||
|
||
let git: commandManager.IGitCommandManager | ||
let mockExec = jest.fn() | ||
|
||
describe('git-auth-helper tests', () => { | ||
beforeAll(async () => {}) | ||
|
||
beforeEach(async () => { | ||
jest.spyOn(fshelper, 'fileExistsSync').mockImplementation(jest.fn()) | ||
jest.spyOn(fshelper, 'directoryExistsSync').mockImplementation(jest.fn()) | ||
}) | ||
|
||
afterEach(() => { | ||
jest.restoreAllMocks() | ||
}) | ||
|
||
afterAll(() => {}) | ||
|
||
it('branch list matches', async () => { | ||
mockExec.mockImplementation((path, args, options) => { | ||
console.log(args, options.listeners.stdout) | ||
|
||
if (args.includes('version')) { | ||
options.listeners.stdout(Buffer.from('2.18')) | ||
return 0 | ||
} | ||
|
||
if (args.includes('rev-parse')) { | ||
options.listeners.stdline(Buffer.from('refs/heads/foo')) | ||
options.listeners.stdline(Buffer.from('refs/heads/bar')) | ||
return 0 | ||
} | ||
|
||
return 1 | ||
}) | ||
jest.spyOn(exec, 'exec').mockImplementation(mockExec) | ||
const workingDirectory = 'test' | ||
const lfs = false | ||
git = await commandManager.createCommandManager(workingDirectory, lfs) | ||
|
||
let branches = await git.branchList(false) | ||
|
||
expect(branches).toHaveLength(2) | ||
expect(branches.sort()).toEqual(['foo', 'bar'].sort()) | ||
}) | ||
|
||
it('ambiguous ref name output is captured', async () => { | ||
mockExec.mockImplementation((path, args, options) => { | ||
console.log(args, options.listeners.stdout) | ||
|
||
if (args.includes('version')) { | ||
options.listeners.stdout(Buffer.from('2.18')) | ||
return 0 | ||
} | ||
|
||
if (args.includes('rev-parse')) { | ||
options.listeners.stdline(Buffer.from('refs/heads/foo')) | ||
// If refs/tags/v1 and refs/heads/tags/v1 existed on this repository | ||
options.listeners.errline( | ||
Buffer.from("error: refname 'tags/v1' is ambiguous") | ||
) | ||
return 0 | ||
} | ||
|
||
return 1 | ||
}) | ||
jest.spyOn(exec, 'exec').mockImplementation(mockExec) | ||
const workingDirectory = 'test' | ||
const lfs = false | ||
git = await commandManager.createCommandManager(workingDirectory, lfs) | ||
|
||
let branches = await git.branchList(false) | ||
|
||
expect(branches).toHaveLength(1) | ||
expect(branches.sort()).toEqual(['foo'].sort()) | ||
}) | ||
}) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
Oops, something went wrong.