Compare commits

..
Author SHA1 Message Date
James Long 80af18d24a test(core): simplify repository cache layer wiring 2026-06-20 22:15:15 -04:00
4 changed files with 21 additions and 20 deletions
-3
View File
@@ -2,7 +2,6 @@ export * as LocationMutation from "./location-mutation"
import path from "path"
import { Context, Effect, Layer, Schema } from "effect"
import { LayerNode } from "./effect/layer-node"
import { FSUtil } from "./fs-util"
import { Location } from "./location"
@@ -154,5 +153,3 @@ export const layer = Layer.effect(
)
export const locationLayer = layer
export const node = (location: LayerNode.Node<Location.Service>) => LayerNode.make(layer, [FSUtil.node, location])
+2
View File
@@ -1,5 +1,6 @@
import path from "path"
import { Context, Effect, Layer, Schema } from "effect"
import { LayerNode } from "./effect/layer-node"
import { FSUtil } from "./fs-util"
import { Git } from "./git"
import { Global } from "./global"
@@ -258,6 +259,7 @@ export const defaultLayer: Layer.Layer<Service> = layer.pipe(
Layer.provide(Git.defaultLayer),
Layer.provide(Global.defaultLayer),
)
export const node = LayerNode.make(layer, [FSUtil.node, Git.node, EffectFlock.node, Global.node])
function statusForRepository(input: { reuse: boolean; refresh?: boolean; branchMatches?: boolean }) {
if (!input.reuse) return "cloned" as const
+10 -5
View File
@@ -2,7 +2,7 @@ import fs from "fs/promises"
import path from "path"
import { describe, expect, test } from "bun:test"
import { Effect, Layer, Schema } from "effect"
import { LayerNode } from "@opencode-ai/core/effect/layer-node"
import { FSUtil } from "@opencode-ai/core/fs-util"
import { Location } from "@opencode-ai/core/location"
import { LocationMutation } from "@opencode-ai/core/location-mutation"
import { AbsolutePath } from "@opencode-ai/core/schema"
@@ -11,11 +11,16 @@ import { location } from "./fixture/location"
import { it } from "./lib/effect"
function provide(directory: string) {
const activeLocation = LayerNode.make(
Layer.succeed(Location.Service, Location.Service.of(location({ directory: AbsolutePath.make(directory) }))),
[],
return Effect.provide(
LocationMutation.layer.pipe(
Layer.provide(
Layer.mergeAll(
FSUtil.defaultLayer,
Layer.succeed(Location.Service, Location.Service.of(location({ directory: AbsolutePath.make(directory) }))),
),
),
),
)
return Effect.provide(LayerNode.buildLayer(LocationMutation.node(activeLocation)))
}
function withTmp<A, E, R>(f: (directory: string) => Effect.Effect<A, E, R>) {
+9 -12
View File
@@ -3,12 +3,10 @@ import fs from "fs/promises"
import path from "path"
import { pathToFileURL } from "url"
import { Effect, Layer } from "effect"
import { FSUtil } from "@opencode-ai/core/fs-util"
import { Git } from "@opencode-ai/core/git"
import { LayerNode } from "@opencode-ai/core/effect/layer-node"
import { Global } from "@opencode-ai/core/global"
import { Repository } from "@opencode-ai/core/repository"
import { RepositoryCache } from "@opencode-ai/core/repository-cache"
import { EffectFlock } from "@opencode-ai/core/util/effect-flock"
import { git, gitRemote } from "./fixture/git"
import { tmpdir } from "./fixture/tmpdir"
import { testEffect } from "./lib/effect"
@@ -89,15 +87,14 @@ describe("RepositoryCache", () => {
})
function cacheLayer(root: string) {
const dependencies = Layer.mergeAll(
Global.layerWith({ state: path.join(root, "state"), repos: path.join(root, "repos") }),
FSUtil.defaultLayer,
)
return RepositoryCache.layer.pipe(
Layer.provide(EffectFlock.layer.pipe(Layer.provide(dependencies))),
Layer.provide(Git.defaultLayer),
Layer.provide(dependencies),
)
return LayerNode.buildLayer(RepositoryCache.node, {
replacements: [
LayerNode.replace(
Global.node,
Global.layerWith({ state: path.join(root, "state"), repos: path.join(root, "repos") }),
),
],
})
}
function withRemote<A, E, R>(body: (fixture: Awaited<ReturnType<typeof gitRemote>>) => Effect.Effect<A, E, R>) {