Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
66 changes: 66 additions & 0 deletions __test__/git-command-manager.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -403,6 +403,72 @@ describe('Test fetchDepth and fetchTags options', () => {
})
})

describe('Test submoduleUpdate filter option', () => {
beforeEach(async () => {
mockFileExistsSync.mockReset()
mockDirectoryExistsSync.mockReset()
mockExec.mockImplementation((path: any, args: any, options: any) => {
if (args.includes('version')) {
options.listeners.stdout(Buffer.from('2.18'))
}

return 0
})
})

afterEach(() => {
jest.clearAllMocks()
})

it('should call execGit with --filter when a filter option is provided', async () => {
const workingDirectory = 'test'
const lfs = false
const doSparseCheckout = false
git = await commandManager.createCommandManager(
workingDirectory,
lfs,
doSparseCheckout
)

await git.submoduleUpdate(1, true, 'blob:none')

expect(mockExec).toHaveBeenCalledWith(
expect.any(String),
[
'-c',
'protocol.version=2',
'submodule',
'update',
'--init',
'--force',
'--depth=1',
'--recursive',
'--filter=blob:none'
],
expect.any(Object)
)
})

it('should call execGit without --filter when no filter option is provided', async () => {
const workingDirectory = 'test'
const lfs = false
const doSparseCheckout = false
git = await commandManager.createCommandManager(
workingDirectory,
lfs,
doSparseCheckout
)

await git.submoduleUpdate(0, false, undefined)

expect(mockExec).toHaveBeenCalledWith(
expect.any(String),
['-c', 'protocol.version=2', 'submodule', 'update', '--init', '--force'],
expect.any(Object)
)
})
})

describe('repository initialization object format', () => {
beforeEach(async () => {
mockFileExistsSync.mockReset()
Expand Down
7 changes: 5 additions & 2 deletions dist/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -35872,7 +35872,7 @@ class GitCommandManager {
}
await this.execGit(args);
}
async submoduleUpdate(fetchDepth, recursive) {
async submoduleUpdate(fetchDepth, recursive, filter) {
const args = ['-c', 'protocol.version=2'];
args.push('submodule', 'update', '--init', '--force');
if (fetchDepth > 0) {
Expand All @@ -35881,6 +35881,9 @@ class GitCommandManager {
if (recursive) {
args.push('--recursive');
}
if (filter) {
args.push(`--filter=${filter}`);
}
await this.execGit(args);
}
async submoduleStatus() {
Expand Down Expand Up @@ -41888,7 +41891,7 @@ async function getSource(settings) {
// Checkout submodules
startGroup('Fetching submodules');
await git.submoduleSync(settings.nestedSubmodules);
await git.submoduleUpdate(settings.fetchDepth, settings.nestedSubmodules);
await git.submoduleUpdate(settings.fetchDepth, settings.nestedSubmodules, fetchOptions.filter);
await git.submoduleForeach('git config --local gc.auto 0', settings.nestedSubmodules);
endGroup();
// Persist credentials
Expand Down
16 changes: 14 additions & 2 deletions src/git-command-manager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,11 @@ export interface IGitCommandManager {
shaExists(sha: string): Promise<boolean>
submoduleForeach(command: string, recursive: boolean): Promise<string>
submoduleSync(recursive: boolean): Promise<void>
submoduleUpdate(fetchDepth: number, recursive: boolean): Promise<void>
submoduleUpdate(
fetchDepth: number,
recursive: boolean,
filter: string | undefined
): Promise<void>
submoduleStatus(): Promise<boolean>
tagExists(pattern: string): Promise<boolean>
tryClean(): Promise<boolean>
Expand Down Expand Up @@ -452,7 +456,11 @@ class GitCommandManager {
await this.execGit(args)
}

async submoduleUpdate(fetchDepth: number, recursive: boolean): Promise<void> {
async submoduleUpdate(
fetchDepth: number,
recursive: boolean,
filter: string | undefined
): Promise<void> {
const args = ['-c', 'protocol.version=2']
args.push('submodule', 'update', '--init', '--force')
if (fetchDepth > 0) {
Expand All @@ -463,6 +471,10 @@ class GitCommandManager {
args.push('--recursive')
}

if (filter) {
args.push(`--filter=${filter}`)
}

await this.execGit(args)
}

Expand Down
6 changes: 5 additions & 1 deletion src/git-source-provider.ts
Original file line number Diff line number Diff line change
Expand Up @@ -281,7 +281,11 @@ export async function getSource(settings: IGitSourceSettings): Promise<void> {
// Checkout submodules
core.startGroup('Fetching submodules')
await git.submoduleSync(settings.nestedSubmodules)
await git.submoduleUpdate(settings.fetchDepth, settings.nestedSubmodules)
await git.submoduleUpdate(
settings.fetchDepth,
settings.nestedSubmodules,
fetchOptions.filter
)
await git.submoduleForeach(
'git config --local gc.auto 0',
settings.nestedSubmodules
Expand Down