import { escapeHtml } from "@kitajs/html"; import type { RepositoryRow } from "../../db/index.ts"; import type { SessionUser } from "../../middleware/session.ts"; import type { RenderedDiffFile } from "../../services/diffHighlight.ts"; import type { CommitMeta } from "../../services/git.ts"; import { DiffView } from "../DiffView.tsx"; import { Layout } from "../layout.tsx"; import { RepoHeader } from "../repos/RepoHeader.tsx"; import { RepoNav } from "./RepoNav.tsx"; interface CommitDetailProps { user: SessionUser | null; repo: RepositoryRow; sha: string; meta: CommitMeta; files: RenderedDiffFile[]; } function formatDate(iso: string): string { try { return new Date(iso).toLocaleString(undefined, { dateStyle: "medium", timeStyle: "short", }); } catch { return iso; } } export function CommitDetail({ user, repo, sha, meta, files, }: CommitDetailProps) { return (
{/* Back link */} {/* Commit metadata card */}

{meta.subject}

{meta.body && (
{meta.body}
)}
Author {escapeHtml(`${meta.author} <${meta.email}>`)}
Date
{(meta.committer !== meta.author || meta.committerEmail !== meta.email) && ( <>
Committer {escapeHtml( `${meta.committer} <${meta.committerEmail}>`, )}
Commit date
)}
Commit {meta.hash}
{meta.parents.length > 0 && (
Parent{meta.parents.length > 1 ? "s" : ""} {meta.parents.map((p) => ( {p.slice(0, 7)} ))}
)}
); }