summaryrefslogtreecommitdiffhomepage
path: root/packages
diff options
context:
space:
mode:
authorAdam <[email protected]>2026-01-21 06:09:50 -0600
committerAdam <[email protected]>2026-01-21 06:10:01 -0600
commitbb710e9ea151c94e68391a22c8199da8a8223342 (patch)
tree8ced0ec69d9510b6f8677ad80b0c884c966b308c /packages
parent34e4d077cd06b01610631c2a606fc3e12e3fbc75 (diff)
downloadopencode-bb710e9ea151c94e68391a22c8199da8a8223342.tar.gz
opencode-bb710e9ea151c94e68391a22c8199da8a8223342.zip
fix(core): snapshot regression
Diffstat (limited to 'packages')
-rw-r--r--packages/opencode/src/snapshot/index.ts32
1 files changed, 14 insertions, 18 deletions
diff --git a/packages/opencode/src/snapshot/index.ts b/packages/opencode/src/snapshot/index.ts
index 0f5e9c66e..dcf6499fb 100644
--- a/packages/opencode/src/snapshot/index.ts
+++ b/packages/opencode/src/snapshot/index.ts
@@ -197,6 +197,18 @@ export namespace Snapshot {
export async function diffFull(from: string, to: string): Promise<FileDiff[]> {
const git = gitdir()
const result: FileDiff[] = []
+
+ const show = async (hash: string, file: string) => {
+ const response =
+ await $`git -c core.autocrlf=false --git-dir ${git} --work-tree ${Instance.worktree} show ${hash}:${file}`
+ .quiet()
+ .nothrow()
+ if (response.exitCode === 0) return response.text()
+ const stderr = response.stderr.toString()
+ if (stderr.toLowerCase().includes("does not exist in")) return ""
+ return `[DEBUG ERROR] git show ${hash}:${file} failed: ${stderr}`
+ }
+
for await (const line of $`git -c core.autocrlf=false --git-dir ${git} --work-tree ${Instance.worktree} diff --no-ext-diff --no-renames --numstat ${from} ${to} -- .`
.quiet()
.cwd(Instance.directory)
@@ -206,25 +218,9 @@ export namespace Snapshot {
const [additions, deletions, rawFile] = line.split("\t")
const file = unquote(rawFile)
const isBinaryFile = additions === "-" && deletions === "-"
- const beforeResult = isBinaryFile
- ? { exitCode: 0, text: () => "", stderr: Buffer.from("") }
- : await $`git -c core.autocrlf=false --git-dir ${git} --work-tree ${Instance.worktree} show ${from}:${file}`
- .quiet()
- .nothrow()
- const before =
- beforeResult.exitCode === 0
- ? beforeResult.text()
- : `[DEBUG ERROR] git show ${from}:${file} failed: ${beforeResult.stderr.toString()}`
- const afterResult = isBinaryFile
- ? { exitCode: 0, text: () => "", stderr: Buffer.from("") }
- : await $`git -c core.autocrlf=false --git-dir ${git} --work-tree ${Instance.worktree} show ${to}:${file}`
- .quiet()
- .nothrow()
- const after =
- afterResult.exitCode === 0
- ? afterResult.text()
- : `[DEBUG ERROR] git show ${to}:${file} failed: ${afterResult.stderr.toString()}`
+ const before = isBinaryFile ? "" : await show(from, file)
+ const after = isBinaryFile ? "" : await show(to, file)
const added = isBinaryFile ? 0 : parseInt(additions)
const deleted = isBinaryFile ? 0 : parseInt(deletions)
result.push({