From a683b021e5aaa143075a87ffa0eee69b79544bf6 Mon Sep 17 00:00:00 2001 From: Ahmet Kilinc Date: Sat, 20 Dec 2025 16:45:52 +0000 Subject: [PATCH] fix some performance? --- actions/repositories.ts | 90 +++++++++++----------------------------- components/file-tree.tsx | 12 +----- 2 files changed, 25 insertions(+), 77 deletions(-) diff --git a/actions/repositories.ts b/actions/repositories.ts index 182da4d..1b76bc8 100644 --- a/actions/repositories.ts +++ b/actions/repositories.ts @@ -197,42 +197,18 @@ export async function getRepoFileTree(owner: string, repoName: string, branch: s } } - const entries = await Promise.all( - targetTree.map(async (entry) => { - const filePath = dirPath ? `${dirPath}/${entry.path}` : entry.path; - let lastCommit: { message: string; timestamp: number } | null = null; - - try { - const fileCommits = await git.log({ - fs, - gitdir: "/", - ref: branch, - filepath: filePath, - depth: 1, - }); - if (fileCommits.length > 0) { - lastCommit = { - message: fileCommits[0].commit.message.split("\n")[0], - timestamp: fileCommits[0].commit.committer.timestamp * 1000, - }; - } - } catch {} - - return { - name: entry.path, - type: entry.type as "blob" | "tree", - oid: entry.oid, - path: filePath, - lastCommit, - }; - }) - ); - - entries.sort((a, b) => { - if (a.type === "tree" && b.type !== "tree") return -1; - if (a.type !== "tree" && b.type === "tree") return 1; - return a.name.localeCompare(b.name); - }); + const entries = targetTree + .map((entry) => ({ + name: entry.path, + type: entry.type as "blob" | "tree", + oid: entry.oid, + path: dirPath ? `${dirPath}/${entry.path}` : entry.path, + })) + .sort((a, b) => { + if (a.type === "tree" && b.type !== "tree") return -1; + if (a.type !== "tree" && b.type === "tree") return 1; + return a.name.localeCompare(b.name); + }); return { files: entries, isEmpty: false }; } catch (err: unknown) { @@ -580,7 +556,6 @@ export type FileEntry = { type: "blob" | "tree"; oid: string; path: string; - lastCommit: { message: string; timestamp: number } | null; }; async function fetchFileTree(userId: string, repoName: string, defaultBranch: string) { @@ -603,35 +578,18 @@ async function fetchFileTree(userId: string, repoName: string, defaultBranch: st const { tree } = await git.readTree({ fs, gitdir: "/", oid: commitOid }); - const fileEntries = await Promise.all( - tree.map(async (entry) => { - let lastCommit: { message: string; timestamp: number } | null = null; - try { - const fileCommits = await git.log({ fs, gitdir: "/", ref: defaultBranch, filepath: entry.path, depth: 1 }); - if (fileCommits.length > 0) { - lastCommit = { - message: fileCommits[0].commit.message.split("\n")[0], - timestamp: fileCommits[0].commit.committer.timestamp * 1000, - }; - } - } catch {} - return { - name: entry.path, - type: entry.type as "blob" | "tree", - oid: entry.oid, - path: entry.path, - lastCommit, - }; - }) - ); - - fileEntries.sort((a, b) => { - if (a.type === "tree" && b.type !== "tree") return -1; - if (a.type !== "tree" && b.type === "tree") return 1; - return a.name.localeCompare(b.name); - }); - - files = fileEntries; + files = tree + .map((entry) => ({ + name: entry.path, + type: entry.type as "blob" | "tree", + oid: entry.oid, + path: entry.path, + })) + .sort((a, b) => { + if (a.type === "tree" && b.type !== "tree") return -1; + if (a.type !== "tree" && b.type === "tree") return 1; + return a.name.localeCompare(b.name); + }); const readmeEntry = tree.find((e) => e.path.toLowerCase() === "readme.md" && e.type === "blob"); if (readmeEntry) { diff --git a/components/file-tree.tsx b/components/file-tree.tsx index 964aa39..39bc311 100644 --- a/components/file-tree.tsx +++ b/components/file-tree.tsx @@ -2,14 +2,12 @@ import Link from "next/link"; import { Folder, FileCode, FileText, FileJson, File } from "lucide-react"; -import { formatDistanceToNow } from "date-fns"; type FileEntry = { name: string; type: "blob" | "tree"; oid: string; path: string; - lastCommit?: { message: string; timestamp: number } | null; }; const FILE_ICONS: Record = { @@ -45,15 +43,7 @@ export function FileTree({ files, username, repoName, branch }: { files: FileEnt return ( - {file.name} - {file.lastCommit && ( - <> - {file.lastCommit.message} - - {formatDistanceToNow(file.lastCommit.timestamp, { addSuffix: true })} - - - )} + {file.name} ); })}