Files
orca/src/main/git/worktree-create-git-executor-real-git.test.ts
T
Neil 328caa2160 fix(git): reduce queries and preserve data across execution hosts (#24602)
* fix(git): reduce queries and preserve data across execution hosts

* fix(ci): exercise pinned Git and serialize mobile dependency entrypoints

* fix(relay): preserve fresh diff retries after hung shared reads

* test(git): wait for fetch barrier before canceling preparation

* fix(i18n): describe index-preserving discard in every locale

* fix(git): retain clone diagnostics and allow WSL policy startup

* test(git): refresh default-base and branch-safety fixtures
2026-10-02 18:05:37 -07:00

108 lines
3.6 KiB
TypeScript

import { mkdtemp, readFile, rm, writeFile } from 'node:fs/promises'
import { tmpdir } from 'node:os'
import { join } from 'node:path'
import { afterEach, expect, it } from 'vitest'
import { gitExecFileAsync } from './runner'
import { addWorktree, listWorktrees } from './worktree'
import { finalizePreparedWorktree } from './worktree-create-preparation'
import { worktreeCreateGit } from './worktree-create-git-executor'
import {
_resetPreparationPoolForTests,
listPreparations,
startPreparation,
takePreparation
} from '../worktree-create-preparation-pool'
import {
acquireGitAdmission,
GitAdmissionScheduler,
_resetGitAdmissionForTests,
type GitAdmissionEvent
} from './command-runner/git-subprocess-admission'
const roots: string[] = []
afterEach(async () => {
_resetGitAdmissionForTests()
await _resetPreparationPoolForTests()
await Promise.all(roots.splice(0).map((root) => rm(root, { recursive: true, force: true })))
})
it('creates cold and prepared worktrees with real Git while status capacity is occupied', async () => {
const root = await mkdtemp(join(tmpdir(), 'orca-create-policy-'))
roots.push(root)
const repo = join(root, 'repo')
await gitExecFileAsync(['init', '--quiet', repo], { cwd: root })
await gitExecFileAsync(['symbolic-ref', 'HEAD', 'refs/heads/main'], { cwd: repo })
await writeFile(join(repo, 'file.txt'), 'workspace content\n')
await gitExecFileAsync(['add', '.'], { cwd: repo })
await gitExecFileAsync(
['-c', 'user.name=Test', '-c', 'user.email=test@example.com', 'commit', '-qm', 'fixture'],
{ cwd: repo }
)
const events: GitAdmissionEvent[] = []
_resetGitAdmissionForTests(
new GitAdmissionScheduler({
generalCap: 1,
generalHeadroom: 1,
onAdmissionEvent: (event) => {
if (event.phase === 'grant') {
events.push(event)
}
}
})
)
await worktreeCreateGit.run(() =>
startPreparation({
repoPath: repo,
workspaceRoot: root,
baseBranch: 'main',
canonicalBase: 'refs/heads/main',
options: {}
})
)
expect(events.length).toBeGreaterThan(0)
expect(events.every((event) => event.tier === 'status')).toBe(true)
const [prepared] = listPreparations()
expect(prepared).toBeDefined()
takePreparation(prepared)
const blocker = await acquireGitAdmission({ args: ['status'], cwd: repo })
events.length = 0
try {
await worktreeCreateGit.run(async () => {
await gitExecFileAsync(['fetch', repo, 'main'], {
cwd: repo,
useConfiguredSshCommandForNetwork: true,
env: { ...process.env, GIT_SSH_COMMAND: '' }
})
await addWorktree(repo, join(root, 'cold'), 'cold', 'main')
await finalizePreparedWorktree(
repo,
prepared.preparedPath,
join(root, 'warm'),
'warm',
'main',
false,
{},
prepared.lockReason
)
expect(await listWorktrees(repo)).toHaveLength(3)
})
expect(
events.filter((event) => event.args[0] === 'config').map((event) => event.args)
).toContainEqual(['config', '--null', '--get-regexp', '^(core\\.sshcommand|ssh\\.variant)$'])
expect(events.some((event) => event.args.includes('fetch'))).toBe(true)
expect(events.every((event) => event.tier === 'interactive')).toBe(true)
expect(
events
.filter((event) => event.admissionClass === 'general')
.every((event) => event.slotKind === 'headroom')
).toBe(true)
for (const name of ['cold', 'warm']) {
expect(await readFile(join(root, name, 'file.txt'), 'utf8')).toBe('workspace content\n')
}
} finally {
blocker.release()
}
})