diff --git a/packages/core/src/project/copy.ts b/packages/core/src/project/copy.ts index 670b0d2dc..0e3246b3b 100644 --- a/packages/core/src/project/copy.ts +++ b/packages/core/src/project/copy.ts @@ -245,6 +245,7 @@ export const layer = Layer.effect( (sourceDirectory) => Effect.forEach(strategies(), (strategy) => strategy.list(sourceDirectory).pipe( + Effect.catchTag("ProjectCopy.DirectoryUnavailableError", () => Effect.succeed([])), Effect.map((items) => items.map((item) => ({ directory: item.directory, diff --git a/packages/core/test/project-copy.test.ts b/packages/core/test/project-copy.test.ts index 823d8d842..47f2176c3 100644 --- a/packages/core/test/project-copy.test.ts +++ b/packages/core/test/project-copy.test.ts @@ -365,6 +365,18 @@ describe("ProjectCopy", () => { }), ) + it.live("refresh ignores existing directories that are no longer git checkouts", () => + Effect.gen(function* () { + const input = yield* setup() + yield* Effect.promise(() => fs.rm(path.join(input.sourceDirectory, ".git"), { recursive: true })) + const copy = yield* ProjectCopy.Service + + yield* copy.refresh({ projectID: input.projectID }) + + expect(yield* stored(input.projectID)).toEqual([{ directory: input.sourceDirectory, strategy: null }]) + }), + ) + it.live("refresh with no roots is a no-op", () => Effect.gen(function* () { const copy = yield* ProjectCopy.Service