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 */} {/* Commit metadata card */}

{meta.subject || "No commit message"}

{!!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)} ))}
)} {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.

) : ( )}
); }