import { execFile } from 'node:child_process'; import { mkdir, mkdtemp, rm, writeFile } from 'node:fs/promises'; import { tmpdir } from 'node:os'; import path from 'node:path'; import { promisify } from 'node:util'; import { describe, expect, it } from 'vitest'; import { getChangedFiles } from '../../harness/src/git.mjs'; const execFileAsync = promisify(execFile); async function git(cwd: string, args: string[]): Promise { await execFileAsync('git', args, { cwd }); } describe('harness git changed files', () => { it('includes staged tracked files when collecting changed paths', async () => { const repo = await mkdtemp(path.join(tmpdir(), 'clawx-harness-git-')); const harnessDir = path.join(repo, 'harness', 'src'); try { await mkdir(harnessDir, { recursive: true }); await writeFile(path.join(repo, 'tracked.txt'), 'before\n'); await git(repo, ['init']); await git(repo, ['config', 'user.email', 'test@example.com']); await git(repo, ['config', 'user.name', 'Test']); await git(repo, ['add', 'tracked.txt']); await git(repo, ['commit', '-m', 'init']); await writeFile(path.join(repo, 'tracked.txt'), 'after\n'); await git(repo, ['add', 'tracked.txt']); const changed = await getChangedFiles('HEAD', repo); expect(changed).toContain('tracked.txt'); } finally { await rm(repo, { recursive: true, force: true }); } }); });