From 1c5528b685a244c6e3e6363e0d2644e9716f69a2 Mon Sep 17 00:00:00 2001 From: Ian Kerins Date: Mon, 10 Jul 2023 00:00:50 -0400 Subject: [PATCH] OpenGrok /download compatibility --- .../(opengrok-compat)/download/+page.svelte | 4 -- .../[project]/[...file]/+page.server.ts | 43 +++++++++++++++++++ .../download/[project]/[...file]/+page.svelte | 27 ++++++++++++ 3 files changed, 70 insertions(+), 4 deletions(-) delete mode 100644 src/routes/(opengrok-compat)/download/+page.svelte create mode 100644 src/routes/(opengrok-compat)/download/[project]/[...file]/+page.server.ts create mode 100644 src/routes/(opengrok-compat)/download/[project]/[...file]/+page.svelte diff --git a/src/routes/(opengrok-compat)/download/+page.svelte b/src/routes/(opengrok-compat)/download/+page.svelte deleted file mode 100644 index 03eb3bf..0000000 --- a/src/routes/(opengrok-compat)/download/+page.svelte +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/src/routes/(opengrok-compat)/download/[project]/[...file]/+page.server.ts b/src/routes/(opengrok-compat)/download/[project]/[...file]/+page.server.ts new file mode 100644 index 0000000..f519caa --- /dev/null +++ b/src/routes/(opengrok-compat)/download/[project]/[...file]/+page.server.ts @@ -0,0 +1,43 @@ +import { escapeRegExp } from "$lib/regexp"; +import { projectToRepo } from "$lib/server/opengrok-compat"; +import { listRepositories } from "$lib/server/zoekt-list-repositories"; +import { error, redirect } from "@sveltejs/kit"; + +export const load: import("./$types").PageServerLoad = async ({ + url, + params: { file, project }, + parent, + setHeaders, + fetch, +}) => { + if (!file) { + throw error(404); + } + const revision = url.searchParams.get("r"); + const convertedRepo = projectToRepo.get(project); + + const result = await listRepositories( + { + query: `repo:^${escapeRegExp(convertedRepo ?? project)}$`, + }, + fetch + ); + if (result.kind === "error") { + throw new Error(`Failed to list repositories: ${result.error}`); + } + + const repo = result.results.repositories[0]; + const fileUrl = repo?.fileUrlTemplate + .replaceAll("{{.Version}}", revision ?? repo.branches[0].name) + .replaceAll("{{.Path}}", file); + + setHeaders({ + "cache-control": "no-store,must-revalidate", + }); + + if (fileUrl && (await parent()).preferences.openGrokInstantRedirect) { + throw redirect(301, fileUrl); + } + + return { file, fileUrl }; +}; diff --git a/src/routes/(opengrok-compat)/download/[project]/[...file]/+page.svelte b/src/routes/(opengrok-compat)/download/[project]/[...file]/+page.svelte new file mode 100644 index 0000000..48c17f9 --- /dev/null +++ b/src/routes/(opengrok-compat)/download/[project]/[...file]/+page.svelte @@ -0,0 +1,27 @@ + + +
+

File download

+

+ OpenGrok's file download endpoint view that was previously available at this + URL is unfortunately not supported in neogrok. +

+ {#if data.fileUrl} +

+ That being said, we've been able to produce a URL to view the file on its + home site. Head on over: {data.fileUrl}. +

+ {:else} +

+ Even more unfortunately, we've not been able to produce a URL to view the + file somewhere else. You can try searching for it and going from there: + . +

+ {/if} +