|
@@ -5,6 +5,7 @@ import { AppFileSystem } from "@opencode-ai/core/filesystem"
|
|
|
import { CrossSpawnSpawner } from "@opencode-ai/core/cross-spawn-spawner"
|
|
import { CrossSpawnSpawner } from "@opencode-ai/core/cross-spawn-spawner"
|
|
|
import { Global } from "@opencode-ai/core/global"
|
|
import { Global } from "@opencode-ai/core/global"
|
|
|
import { Config } from "../../src/config/config"
|
|
import { Config } from "../../src/config/config"
|
|
|
|
|
+import { ConfigReference } from "../../src/config/reference"
|
|
|
import { RuntimeFlags } from "../../src/effect/runtime-flags"
|
|
import { RuntimeFlags } from "../../src/effect/runtime-flags"
|
|
|
import { Git } from "../../src/git"
|
|
import { Git } from "../../src/git"
|
|
|
import { Reference } from "../../src/reference/reference"
|
|
import { Reference } from "../../src/reference/reference"
|
|
@@ -86,25 +87,25 @@ describe("reference", () => {
|
|
|
const root = path.resolve("opencode-reference-root")
|
|
const root = path.resolve("opencode-reference-root")
|
|
|
const local = Reference.resolve({
|
|
const local = Reference.resolve({
|
|
|
name: "docs",
|
|
name: "docs",
|
|
|
- reference: { path: "../docs" },
|
|
|
|
|
|
|
+ reference: ConfigReference.normalizeEntry({ path: "../docs" }),
|
|
|
directory: path.join(root, "packages", "app"),
|
|
directory: path.join(root, "packages", "app"),
|
|
|
worktree: root,
|
|
worktree: root,
|
|
|
})
|
|
})
|
|
|
const repo = Reference.resolve({
|
|
const repo = Reference.resolve({
|
|
|
name: "effect",
|
|
name: "effect",
|
|
|
- reference: { repository: "Effect-TS/effect", branch: "main" },
|
|
|
|
|
|
|
+ reference: ConfigReference.normalizeEntry({ repository: "Effect-TS/effect", branch: "main" }),
|
|
|
directory: path.join(root, "packages", "app"),
|
|
directory: path.join(root, "packages", "app"),
|
|
|
worktree: root,
|
|
worktree: root,
|
|
|
})
|
|
})
|
|
|
const localString = Reference.resolve({
|
|
const localString = Reference.resolve({
|
|
|
name: "notes",
|
|
name: "notes",
|
|
|
- reference: "./notes",
|
|
|
|
|
|
|
+ reference: ConfigReference.normalizeEntry("./notes"),
|
|
|
directory: path.join(root, "packages", "app"),
|
|
directory: path.join(root, "packages", "app"),
|
|
|
worktree: root,
|
|
worktree: root,
|
|
|
})
|
|
})
|
|
|
const repoString = Reference.resolve({
|
|
const repoString = Reference.resolve({
|
|
|
name: "repo",
|
|
name: "repo",
|
|
|
- reference: "owner/repo",
|
|
|
|
|
|
|
+ reference: ConfigReference.normalizeEntry("owner/repo"),
|
|
|
directory: path.join(root, "packages", "app"),
|
|
directory: path.join(root, "packages", "app"),
|
|
|
worktree: root,
|
|
worktree: root,
|
|
|
})
|
|
})
|
|
@@ -159,11 +160,11 @@ describe("reference", () => {
|
|
|
const references = Reference.resolveAll({
|
|
const references = Reference.resolveAll({
|
|
|
directory: root,
|
|
directory: root,
|
|
|
worktree: root,
|
|
worktree: root,
|
|
|
- references: {
|
|
|
|
|
|
|
+ references: ConfigReference.normalize({
|
|
|
main: { repository: "owner/repo", branch: "main" },
|
|
main: { repository: "owner/repo", branch: "main" },
|
|
|
dev: { repository: "github.com/owner/repo", branch: "dev" },
|
|
dev: { repository: "github.com/owner/repo", branch: "dev" },
|
|
|
alsoMain: { repository: "https://github.com/owner/repo", branch: "main" },
|
|
alsoMain: { repository: "https://github.com/owner/repo", branch: "main" },
|
|
|
- },
|
|
|
|
|
|
|
+ }),
|
|
|
})
|
|
})
|
|
|
|
|
|
|
|
expect(references.map((reference) => reference.kind)).toEqual(["git", "invalid", "git"])
|
|
expect(references.map((reference) => reference.kind)).toEqual(["git", "invalid", "git"])
|
|
@@ -175,6 +176,27 @@ describe("reference", () => {
|
|
|
}),
|
|
}),
|
|
|
)
|
|
)
|
|
|
|
|
|
|
|
|
|
+ it.live("represents invalid aliases as invalid references", () =>
|
|
|
|
|
+ Effect.gen(function* () {
|
|
|
|
|
+ const root = path.resolve("opencode-reference-root")
|
|
|
|
|
+ const references = Reference.resolveAll({
|
|
|
|
|
+ directory: root,
|
|
|
|
|
+ worktree: root,
|
|
|
|
|
+ references: ConfigReference.normalize({
|
|
|
|
|
+ "bad/name": "owner/repo",
|
|
|
|
|
+ }),
|
|
|
|
|
+ })
|
|
|
|
|
+
|
|
|
|
|
+ expect(references).toEqual([
|
|
|
|
|
+ {
|
|
|
|
|
+ name: "bad/name",
|
|
|
|
|
+ kind: "invalid",
|
|
|
|
|
+ message: "Reference alias must not contain /, whitespace, comma, or backtick",
|
|
|
|
|
+ },
|
|
|
|
|
+ ])
|
|
|
|
|
+ }),
|
|
|
|
|
+ )
|
|
|
|
|
+
|
|
|
scout.live("materializes configured git references during init", () =>
|
|
scout.live("materializes configured git references during init", () =>
|
|
|
provideTmpdirInstance(
|
|
provideTmpdirInstance(
|
|
|
(_dir) =>
|
|
(_dir) =>
|