(** The repository pages: summary, commit list, file tree, blob, and commit detail. Each page is a description: it names the parts it is made of and hands them to {!Layout}. Markup lives in {!Ui}, ogit's page parts in {!Components}, language guessing in {!Syntax}, and date formatting in {!Time_format}. *) (** {1 Context} *) type context (** What every repository page needs to know about its subject. *) val context : site:Layout.site -> repo:string -> description:string -> context (** Build a page context from site settings and repository metadata. *) (** {1 Commit messages} *) type commit_message = { summary : string; body : string } (** A commit message split into its first-line summary and remaining body. *) val parse_commit_message : string option -> commit_message (** Split a raw commit message into summary and body. *) val parse_conventional : string -> string option * string (** [parse_conventional summary] returns [(Some type, title)] if the summary follows Conventional Commits, or [(None, summary)] otherwise. *) (** {1 Pages} *) val summary : context -> ?readme:Resolvers.Readme.t -> unit -> Dream.response Dream.promise (** The repository summary page, optionally showing a README. *) val commits : ?filter_type:string -> ?author:string -> ?committer:string -> ?truncated:bool -> page_number:int -> has_prev:bool -> has_next:bool -> context -> Resolvers.Commit.t list -> Dream.response Dream.promise (** The paginated commit list, with optional type/author/committer filters. [truncated] adds a notice that the history walk stopped before the oldest commits, so older matches may be missing. *) val files : context -> (string * string) list -> Resolvers.Tree.tree_node list -> Dream.response Dream.promise (** The file tree page. The trail is the path from root to the current directory. *) val file : context -> (string * string) list -> Resolvers.Blob.t -> Dream.response Dream.promise (** A single file view with syntax highlighting or prose rendering. *) val commit : context -> Resolvers.Commit.t -> Resolvers.Diff.file list -> Dream.response Dream.promise (** The commit detail page showing metadata and a diff. *)