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
36 changes: 36 additions & 0 deletions __test__/git-command-manager.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -572,3 +572,39 @@ describe('git user-agent with orchestration ID', () => {
)
})
})

describe('automatic garbage collection configuration', () => {
beforeEach(() => {
mockFileExistsSync.mockReset()
mockDirectoryExistsSync.mockReset()
mockExec.mockImplementation((path: any, args: any, options: any) => {
if (args.includes('version')) {
options.listeners.stdout(Buffer.from('git version 2.54.0'))
}
return 0
})
})

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

it('disables maintenance and legacy garbage collection', async () => {
git = await commandManager.createCommandManager('test', false, false)

await expect(git.tryDisableAutomaticGarbageCollection()).resolves.toBe(
true
)

expect(mockExec).toHaveBeenCalledWith(
expect.any(String),
['config', '--local', 'maintenance.auto', 'false'],
expect.objectContaining({ignoreReturnCode: true})
)
expect(mockExec).toHaveBeenCalledWith(
expect.any(String),
['config', '--local', 'gc.auto', '0'],
expect.objectContaining({ignoreReturnCode: true})
)
})
})
7 changes: 4 additions & 3 deletions dist/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -35918,8 +35918,9 @@ class GitCommandManager {
return output.exitCode === 0;
}
async tryDisableAutomaticGarbageCollection() {
const output = await this.execGit(['config', '--local', 'gc.auto', '0'], true);
return output.exitCode === 0;
const maintenanceOutput = await this.execGit(['config', '--local', 'maintenance.auto', 'false'], true);
const gcOutput = await this.execGit(['config', '--local', 'gc.auto', '0'], true);
return maintenanceOutput.exitCode === 0 && gcOutput.exitCode === 0;
}
async tryGetFetchUrl() {
const output = await this.execGit(['config', '--local', '--get', 'remote.origin.url'], true);
Expand Down Expand Up @@ -41889,7 +41890,7 @@ async function getSource(settings) {
startGroup('Fetching submodules');
await git.submoduleSync(settings.nestedSubmodules);
await git.submoduleUpdate(settings.fetchDepth, settings.nestedSubmodules);
await git.submoduleForeach('git config --local gc.auto 0', settings.nestedSubmodules);
await git.submoduleForeach('git config --local maintenance.auto false && git config --local gc.auto 0', settings.nestedSubmodules);
endGroup();
// Persist credentials
if (settings.persistCredentials) {
Expand Down
8 changes: 6 additions & 2 deletions src/git-command-manager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -517,11 +517,15 @@ class GitCommandManager {
}

async tryDisableAutomaticGarbageCollection(): Promise<boolean> {
const output = await this.execGit(
const maintenanceOutput = await this.execGit(
['config', '--local', 'maintenance.auto', 'false'],
true
)
const gcOutput = await this.execGit(
['config', '--local', 'gc.auto', '0'],
true
)
return output.exitCode === 0
return maintenanceOutput.exitCode === 0 && gcOutput.exitCode === 0
}

async tryGetFetchUrl(): Promise<string> {
Expand Down
2 changes: 1 addition & 1 deletion src/git-source-provider.ts
Original file line number Diff line number Diff line change
Expand Up @@ -283,7 +283,7 @@ export async function getSource(settings: IGitSourceSettings): Promise<void> {
await git.submoduleSync(settings.nestedSubmodules)
await git.submoduleUpdate(settings.fetchDepth, settings.nestedSubmodules)
await git.submoduleForeach(
'git config --local gc.auto 0',
'git config --local maintenance.auto false && git config --local gc.auto 0',
settings.nestedSubmodules
)
core.endGroup()
Expand Down