From 69d76adc5423397493b3180a1df8f2bffd2fa4e2 Mon Sep 17 00:00:00 2001 From: iroiro147 Date: Wed, 8 Jul 2026 09:01:13 +0530 Subject: [PATCH] fix(eve): skip nested git repos in dev snapshots Signed-off-by: iroiro147 --- .../dev-snapshot-nested-git-boundaries.md | 5 +++ .../dev-runtime-artifacts.integration.test.ts | 42 +++++++++++++++++++ .../nitro/dev-runtime-source-snapshot-copy.ts | 4 ++ 3 files changed, 51 insertions(+) create mode 100644 .changeset/dev-snapshot-nested-git-boundaries.md diff --git a/.changeset/dev-snapshot-nested-git-boundaries.md b/.changeset/dev-snapshot-nested-git-boundaries.md new file mode 100644 index 000000000..a31b766ea --- /dev/null +++ b/.changeset/dev-snapshot-nested-git-boundaries.md @@ -0,0 +1,5 @@ +--- +"eve": patch +--- + +Stop `eve dev` source snapshots from recursing into nested git repositories or worktrees, avoiding duplicate checkout copies under directories such as `.claude/worktrees`. diff --git a/packages/eve/src/internal/nitro/dev-runtime-artifacts.integration.test.ts b/packages/eve/src/internal/nitro/dev-runtime-artifacts.integration.test.ts index e1e96ce02..6ab84f50d 100644 --- a/packages/eve/src/internal/nitro/dev-runtime-artifacts.integration.test.ts +++ b/packages/eve/src/internal/nitro/dev-runtime-artifacts.integration.test.ts @@ -225,6 +225,48 @@ describe("development runtime artifact snapshots", () => { expect(existsSync(join(snapshot.runtimeAppRoot, "dist"))).toBe(false); }); + it("stops source snapshot recursion at nested git repositories", async () => { + const appRoot = await createScratchDirectory("eve-dev-runtime-nested-git-"); + const agentRoot = join(appRoot, "agent"); + const compileDirectoryPath = join(appRoot, ".eve", "compile"); + const worktreeRoot = join(appRoot, ".claude", "worktrees", "test-wt"); + const nestedRepoRoot = join(appRoot, "vendor", "nested-repo"); + const regularVendorRoot = join(appRoot, "vendor", "regular-package"); + + await mkdir(agentRoot, { recursive: true }); + await mkdir(join(worktreeRoot, "agent"), { recursive: true }); + await mkdir(join(nestedRepoRoot, ".git"), { recursive: true }); + await mkdir(regularVendorRoot, { recursive: true }); + await mkdir(compileDirectoryPath, { recursive: true }); + await writeFile(join(appRoot, "package.json"), '{"type":"module"}\n'); + await writeFile(join(agentRoot, "agent.ts"), "export const answer = 42;\n"); + await writeFile(join(appRoot, ".claude", "notes.txt"), "agent notes\n"); + await writeFile(join(worktreeRoot, ".git"), "gitdir: ../../../../.git/worktrees/test-wt\n"); + await writeFile(join(worktreeRoot, "agent", "agent.ts"), "export const copied = false;\n"); + await writeFile(join(nestedRepoRoot, ".git", "config"), "[core]\n"); + await writeFile(join(nestedRepoRoot, "index.ts"), "export const copied = false;\n"); + await writeFile(join(regularVendorRoot, "index.ts"), "export const copied = true;\n"); + await writeFile( + join(compileDirectoryPath, "compiled-agent-manifest.json"), + `${JSON.stringify({ agentRoot, appRoot }, null, 2)}\n`, + ); + + const snapshot = await stageDevelopmentRuntimeArtifactsSnapshot({ + paths: { compileDirectoryPath }, + project: { appRoot }, + } as CompileAgentResult); + + expect(existsSync(join(snapshot.runtimeAppRoot, "agent", "agent.ts"))).toBe(true); + expect(existsSync(join(snapshot.runtimeAppRoot, ".claude", "notes.txt"))).toBe(true); + expect(existsSync(join(snapshot.runtimeAppRoot, ".claude", "worktrees", "test-wt"))).toBe( + false, + ); + expect(existsSync(join(snapshot.runtimeAppRoot, "vendor", "nested-repo"))).toBe(false); + expect(existsSync(join(snapshot.runtimeAppRoot, "vendor", "regular-package", "index.ts"))).toBe( + true, + ); + }); + it("prunes stale snapshots while preserving the active and recent snapshots", async () => { const appRoot = await createScratchDirectory("eve-dev-runtime-artifacts-prune-"); const snapshotsRoot = join(appRoot, ".eve", "dev-runtime", "snapshots"); diff --git a/packages/eve/src/internal/nitro/dev-runtime-source-snapshot-copy.ts b/packages/eve/src/internal/nitro/dev-runtime-source-snapshot-copy.ts index f919c66eb..a4f205f4b 100644 --- a/packages/eve/src/internal/nitro/dev-runtime-source-snapshot-copy.ts +++ b/packages/eve/src/internal/nitro/dev-runtime-source-snapshot-copy.ts @@ -125,6 +125,10 @@ function shouldSkipSnapshotSource( return true; } + if (existsSync(join(sourcePath, ".git"))) { + return true; + } + return isDirectAppRootSkipPath({ appRoot: plan.appRoot, sourcePath,