Просмотр исходного кода

Enhance ripgrep error handling and utility functions

🤖 Generated with [OpenCode](https://opencode.ai)

Co-Authored-By: OpenCode <[email protected]>
Dax Raad 8 месяцев назад
Родитель
Сommit
fa7416687b
2 измененных файлов с 15 добавлено и 16 удалено
  1. 11 16
      packages/opencode/src/ripgrep/index.ts
  2. 4 0
      packages/opencode/src/util/error.ts

+ 11 - 16
packages/opencode/src/ripgrep/index.ts

@@ -62,21 +62,16 @@ export namespace Ripgrep {
       const archivePath = path.join(Global.Path.bin, filename)
       await Bun.write(archivePath, buffer)
       if (config.extension === "tar.gz") {
-        const proc = Bun.spawn(
-          [
-            "tar",
-            "-xzf",
-            archivePath,
-            "--strip-components=1",
-            "--wildcards",
-            "*/rg",
-          ],
-          {
-            cwd: Global.Path.bin,
-            stderr: "pipe",
-            stdout: "pipe",
-          },
-        )
+        const args = ["tar", "-xzf", archivePath, "--strip-components=1"]
+
+        if (process.platform === "darwin") args.push("--include=*/rg")
+        if (process.platform === "linux") args.push("--wildcards", "*/rg")
+
+        const proc = Bun.spawn(args, {
+          cwd: Global.Path.bin,
+          stderr: "pipe",
+          stdout: "pipe",
+        })
         await proc.exited
         if (proc.exitCode !== 0)
           throw new ExtractionFailedError({
@@ -89,7 +84,7 @@ export namespace Ripgrep {
           ["unzip", "-j", archivePath, "*/rg.exe", "-d", Global.Path.bin],
           {
             cwd: Global.Path.bin,
-            stderr: "ignore",
+            stderr: "pipe",
             stdout: "ignore",
           },
         )

+ 4 - 0
packages/opencode/src/util/error.ts

@@ -1,4 +1,7 @@
 import { z, type ZodSchema } from "zod"
+import { Log } from "./log"
+
+const log = Log.create()
 
 export abstract class NamedError extends Error {
   abstract schema(): ZodSchema
@@ -24,6 +27,7 @@ export abstract class NamedError extends Error {
       ) {
         super(name, options)
         this.name = name
+        log.error(name, this.data)
       }
 
       static isInstance(input: any): input is InstanceType<typeof result> {