file: use Effect.cached for scan deduplication (#19164)

pull/19165/head
Kit Langton 2026-03-25 20:19:58 -04:00 committed by GitHub
parent 97c15a087d
commit f54e4b60cc
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 8 additions and 16 deletions

View File

@ -2,7 +2,7 @@ import { BusEvent } from "@/bus/bus-event"
import { InstanceState } from "@/effect/instance-state"
import { makeRuntime } from "@/effect/run-service"
import { Git } from "@/git"
import { Effect, Fiber, Layer, Scope, ServiceMap } from "effect"
import { Effect, Layer, ServiceMap } from "effect"
import { formatPatch, structuredPatch } from "diff"
import fs from "fs"
import fuzzysort from "fuzzysort"
@ -323,7 +323,6 @@ export namespace File {
interface State {
cache: Entry
fiber: Fiber.Fiber<void> | undefined
}
export interface Interface {
@ -348,7 +347,6 @@ export namespace File {
Effect.fn("File.state")(() =>
Effect.succeed({
cache: { files: [], dirs: [] } as Entry,
fiber: undefined as Fiber.Fiber<void> | undefined,
}),
),
)
@ -406,21 +404,15 @@ export namespace File {
s.cache = next
})
const scope = yield* Scope.Scope
let cachedScan = yield* Effect.cached(
scan().pipe(Effect.catchCause(() => Effect.void)),
)
const ensure = Effect.fn("File.ensure")(function* () {
const s = yield* InstanceState.get(state)
if (!s.fiber)
s.fiber = yield* scan().pipe(
Effect.catchCause(() => Effect.void),
Effect.ensuring(
Effect.sync(() => {
s.fiber = undefined
}),
),
Effect.forkIn(scope),
)
yield* Fiber.join(s.fiber)
yield* cachedScan
cachedScan = yield* Effect.cached(
scan().pipe(Effect.catchCause(() => Effect.void)),
)
})
const init = Effect.fn("File.init")(function* () {