repos
/ repos-rust master

repos-rust

mirror archived upstream

A minimal self-hosted git browser on Rust axum: bare repos rendered as a website with commits, diffs, syntax-highlighted blobs, atom feeds, and clone over HTTPS.

axumdockergitgit-browsergitoxidegixrustself-hosted

675 B · 25 lines · Rust Raw History
 1use axum::{extract::State, response::Response, routing::get, Router};
 2
 3use crate::render::render;
 4use crate::AppState;
 5
 6pub fn router() -> Router<AppState> {
 7    Router::new().route("/", get(index))
 8}
 9
10async fn index(State(state): State<AppState>) -> Response {
11    let repo_root = state.config.repo_root.clone();
12    let clone_base = state.config.clone_base.clone();
13    let repos = tokio::task::spawn_blocking(move || crate::git::discover(&repo_root, &clone_base))
14        .await
15        .ok()
16        .and_then(|r| r.ok())
17        .unwrap_or_default();
18    render(
19        &state,
20        "index.html",
21        "/",
22        minijinja::context! { repos => repos },
23    )
24}