diff --git a/packages/server/scripts/measure-git-observation.ts b/packages/server/scripts/measure-git-observation.ts index e2aa3281ff..018fb8318e 100644 --- a/packages/server/scripts/measure-git-observation.ts +++ b/packages/server/scripts/measure-git-observation.ts @@ -1,5 +1,5 @@ import { execFileSync } from "node:child_process"; -import { mkdirSync, mkdtempSync, rmSync, writeFileSync } from "node:fs"; +import { mkdirSync, mkdtempSync, realpathSync, rmSync, writeFileSync } from "node:fs"; import { writeFile } from "node:fs/promises"; import { tmpdir } from "node:os"; import path from "node:path"; @@ -191,7 +191,11 @@ async function closeMeasuredService(input: { } async function main(): Promise { - const tempDir = mkdtempSync(path.join(tmpdir(), "paseo-git-observation-measurement-")); + // Git reports physical roots; keep watcher-failure injection in that same + // spelling when the system temporary directory is a symlink. + const tempDir = realpathSync( + mkdtempSync(path.join(tmpdir(), "paseo-git-observation-measurement-")), + ); const repoDir = path.join(tempDir, "repo"); const paseoHome = path.join(tempDir, "paseo-home"); const trackedPath = path.join(repoDir, "tracked.txt"); diff --git a/packages/server/src/server/workspace-git-service.observation.integration.test.ts b/packages/server/src/server/workspace-git-service.observation.integration.test.ts index b02289becb..b27904e1b9 100644 --- a/packages/server/src/server/workspace-git-service.observation.integration.test.ts +++ b/packages/server/src/server/workspace-git-service.observation.integration.test.ts @@ -1,4 +1,12 @@ -import { mkdirSync, mkdtempSync, readFileSync, realpathSync, rmSync, writeFileSync } from "node:fs"; +import { + mkdirSync, + mkdtempSync, + readFileSync, + realpathSync, + rmSync, + symlinkSync, + writeFileSync, +} from "node:fs"; import { execFile, execFileSync } from "node:child_process"; import { promisify } from "node:util"; import { fileURLToPath } from "node:url"; @@ -529,7 +537,14 @@ test("Git observation measurement separates startup from idle and reaches its de const script = fileURLToPath( new URL("../../scripts/measure-git-observation.ts", import.meta.url), ); + const root = realpathSync(mkdtempSync(path.join(tmpdir(), "paseo-measurement-test-"))); + const actualTemp = path.join(root, "actual"); + const aliasedTemp = path.join(root, "alias"); + mkdirSync(actualTemp); + symlinkSync(actualTemp, aliasedTemp, "junction"); + cleanup.push(async () => rmSync(root, { recursive: true, force: true })); const { stdout } = await promisify(execFile)(process.execPath, ["--import", "tsx", script], { + env: { ...process.env, TMPDIR: aliasedTemp, TMP: aliasedTemp, TEMP: aliasedTemp }, timeout: 30_000, maxBuffer: 1024 * 1024, });