import { escapeHtml } from "@kitajs/html"; import type { RepositoryRow } from "../../db/index.ts"; import { formatDateTime } from "../../lib/formatDate.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[]; tooLarge?: number; } export function CommitDetail({ user, repo, sha, meta, files, tooLarge, }: CommitDetailProps) { return ( {/* Back link */} ← Back to log @ {sha.slice(0, 7)} {/* Commit metadata card */} {meta.subject || "No commit message"} {!!meta.body && ( {meta.body} )} Author {escapeHtml(`${meta.author} <${meta.email}>`)} Date {formatDateTime(meta.date)} {(meta.committer !== meta.author || meta.committerEmail !== meta.email) && ( <> Committer {escapeHtml( `${meta.committer} <${meta.committerEmail}>`, )} Commit date {formatDateTime(meta.committerDate)} > )} Commit {meta.hash} {meta.parents.length > 0 && ( Parent{meta.parents.length > 1 ? "s" : ""} {meta.parents.map((p) => ( {p.slice(0, 7)} ))} )} {meta.sigStatus !== "none" && ( Signature {meta.sigStatus === "good" ? ( verified ) : ( unverified )} )} {tooLarge !== undefined ? ( Diff is too large to render inline ( {(tooLarge / 1024 / 1024).toFixed(1)} MB). Browse individual files at the tree below. ) : ( )} ); }
{meta.body}
{meta.hash}
Diff is too large to render inline ( {(tooLarge / 1024 / 1024).toFixed(1)} MB). Browse individual files at the tree below.