diff --git a/app/server/modules/repositories/repositories.controller.ts b/app/server/modules/repositories/repositories.controller.ts index 2cda998..e4ed4fc 100644 --- a/app/server/modules/repositories/repositories.controller.ts +++ b/app/server/modules/repositories/repositories.controller.ts @@ -123,7 +123,8 @@ export const repositoriesController = new Hono() const { name, snapshotId } = c.req.param(); const { path } = c.req.valid("query"); - const result = await repositoriesService.listSnapshotFiles(name, snapshotId, path); + const decodedPath = path ? decodeURIComponent(path) : undefined; + const result = await repositoriesService.listSnapshotFiles(name, snapshotId, decodedPath); c.header("Cache-Control", "max-age=300, stale-while-revalidate=600"); diff --git a/app/server/utils/restic.ts b/app/server/utils/restic.ts index ac91316..97146d8 100644 --- a/app/server/utils/restic.ts +++ b/app/server/utils/restic.ts @@ -565,7 +565,7 @@ const ls = async (config: RepositoryConfig, snapshotId: string, path?: string) = addRepoSpecificArgs(args, config, env); - const res = await $`restic ${args}`.env(env).nothrow().quiet(); + const res = await safeSpawn({ command: "restic", args, env }); await cleanupTemporaryKeys(config, env); if (res.exitCode !== 0) { @@ -574,7 +574,7 @@ const ls = async (config: RepositoryConfig, snapshotId: string, path?: string) = } // The output is a stream of JSON objects, first is snapshot info, rest are file/dir nodes - const stdout = res.text(); + const stdout = res.stdout; const lines = stdout .trim() .split("\n")