diff options
| author | Dax Raad <[email protected]> | 2025-07-28 13:00:09 -0400 |
|---|---|---|
| committer | Dax Raad <[email protected]> | 2025-07-28 22:58:31 -0400 |
| commit | c24fbb42926d4fcde9ffddac7e8c4c9b49f52d23 (patch) | |
| tree | 0f3b7c52c11ea4cd65099202847e3e0176645ee4 /packages | |
| parent | 99dfe658627fc9bd3e4c49af8b3933d6e462e6ec (diff) | |
| download | opencode-c24fbb42926d4fcde9ffddac7e8c4c9b49f52d23.tar.gz opencode-c24fbb42926d4fcde9ffddac7e8c4c9b49f52d23.zip | |
wip: snapshot
Diffstat (limited to 'packages')
| -rw-r--r-- | packages/opencode/src/cli/cmd/debug/snapshot.ts | 17 | ||||
| -rw-r--r-- | packages/opencode/src/session/index.ts | 2 | ||||
| -rw-r--r-- | packages/opencode/src/snapshot/index.ts | 7 |
3 files changed, 25 insertions, 1 deletions
diff --git a/packages/opencode/src/cli/cmd/debug/snapshot.ts b/packages/opencode/src/cli/cmd/debug/snapshot.ts index 72bbd61d7..edd5fbe2a 100644 --- a/packages/opencode/src/cli/cmd/debug/snapshot.ts +++ b/packages/opencode/src/cli/cmd/debug/snapshot.ts @@ -4,7 +4,7 @@ import { cmd } from "../cmd" export const SnapshotCommand = cmd({ command: "snapshot", - builder: (yargs) => yargs.command(TrackCommand).command(PatchCommand).demandCommand(), + builder: (yargs) => yargs.command(TrackCommand).command(PatchCommand).command(DiffCommand).demandCommand(), async handler() {}, }) @@ -31,3 +31,18 @@ const PatchCommand = cmd({ }) }, }) + +const DiffCommand = cmd({ + command: "diff <hash>", + builder: (yargs) => + yargs.positional("hash", { + type: "string", + description: "hash", + demandOption: true, + }), + async handler(args) { + await bootstrap({ cwd: process.cwd() }, async () => { + console.log(await Snapshot.diff(args.hash)) + }) + }, +}) diff --git a/packages/opencode/src/session/index.ts b/packages/opencode/src/session/index.ts index 799097e85..e85073424 100644 --- a/packages/opencode/src/session/index.ts +++ b/packages/opencode/src/session/index.ts @@ -67,6 +67,7 @@ export namespace Session { messageID: z.string(), partID: z.string().optional(), snapshot: z.string().optional(), + diff: z.string().optional(), }) .optional(), }) @@ -1160,6 +1161,7 @@ export namespace Session { const session = await get(input.sessionID) revert.snapshot = session.revert?.snapshot ?? (await Snapshot.track()) await Snapshot.revert(patches) + if (revert.snapshot) revert.diff = await Snapshot.diff(revert.snapshot) return update(input.sessionID, (draft) => { draft.revert = revert }) diff --git a/packages/opencode/src/snapshot/index.ts b/packages/opencode/src/snapshot/index.ts index a2203ecbc..d249830b0 100644 --- a/packages/opencode/src/snapshot/index.ts +++ b/packages/opencode/src/snapshot/index.ts @@ -94,6 +94,13 @@ export namespace Snapshot { } } + export async function diff(hash: string) { + const app = App.info() + const git = gitdir() + const result = await $`git --git-dir=${git} diff ${hash} -- .`.quiet().cwd(app.path.root).text() + return result.trim() + } + function gitdir() { const app = App.info() return path.join(app.path.data, "snapshots") |
