https://dev.kronoz.win/r/rgit.git
1use std::sync::Arc;
2
3use askama::Template;
4use axum::{extract::Query, response::Response, Extension};
5use serde::Deserialize;
6
7use crate::{
8 git::Commit,
9 into_response,
10 methods::repo::{Repository, RepositoryPath, Result},
11 Git,
12};
13
14#[derive(Template)]
15#[template(path = "repo/commit.html")]
16pub struct View {
17 pub repo: Repository,
18 pub commit: Arc<Commit>,
19}
20
21#[derive(Deserialize)]
22pub struct UriQuery {
23 pub id: Option<String>,
24}
25
26pub async fn handle(
27 Extension(repo): Extension<Repository>,
28 Extension(RepositoryPath(repository_path)): Extension<RepositoryPath>,
29 Extension(git): Extension<Arc<Git>>,
30 Query(query): Query<UriQuery>,
31) -> Result<Response> {
32 let open_repo = git.repo(repository_path).await?;
33 let commit = if let Some(commit) = query.id {
34 open_repo.commit(&commit).await?
35 } else {
36 Arc::new(open_repo.latest_commit().await?)
37 };
38
39 Ok(into_response(&View { repo, commit }))
40}