gitscope
← rgit / 0.1.1 / src/methods/repo/commit.rs
https://dev.kronoz.win/r/rgit.git
src/methods/repo/commit.rs · Rust
Blame Raw
 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}