94 lines
2.4 KiB
Rust
94 lines
2.4 KiB
Rust
/*
|
||
* Copyright (c) 2025–2026 Emma Tebibyte <emma@tebibyte.media>
|
||
* SPDX-License-Identifier: AGPL-3.0-or-later
|
||
*
|
||
* This file is part of Mintee.
|
||
*
|
||
* Mintee is free software: you can redistribute it and/or modify it under the
|
||
* terms of the GNU Affero General Public License as published by the Free
|
||
* Software Foundation, either version 3 of the License, or (at your option)
|
||
* any later version.
|
||
*
|
||
* Mintee is distributed in the hope that it will be useful, but WITHOUT ANY
|
||
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||
* FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
|
||
* details.
|
||
*
|
||
* You should have received a copy of the GNU Affero General Public License
|
||
* along with Mintee. If not, see https://www.gnu.org/licenses/.
|
||
*/
|
||
|
||
use std::{
|
||
env::{ args, current_dir },
|
||
error::Error,
|
||
};
|
||
|
||
use gix::open;
|
||
use tera::{ Context, Tera };
|
||
|
||
mod git;
|
||
|
||
use git::repo_to_context;
|
||
|
||
/*
|
||
impl From<GitRepo> for Context {
|
||
fn from(repo: GitRepo) -> Self {
|
||
let mut ctx = Context::new();
|
||
|
||
let directory = format!("{}/{}", repo.owner, repo.name);
|
||
|
||
let main_branch = repo.branches
|
||
.iter()
|
||
.find(|b| b.name == "main")
|
||
.unwrap();
|
||
|
||
let latest_commit = &main_branch.commits[0];
|
||
let hash = latest_commit.hash.clone();
|
||
|
||
let mut entries = Vec::new();
|
||
|
||
for e in latest_commit.entries.iter() {
|
||
let entry = SampleEntry {
|
||
class: e.kind.to_string(),
|
||
last_commit: hash.clone(),
|
||
last_commit_message: latest_commit.message.clone().unwrap(),
|
||
last_commit_time: latest_commit.time,
|
||
path: e.path.clone(),
|
||
};
|
||
|
||
entries.push(entry);
|
||
}
|
||
|
||
/* stubs til we have a real database */
|
||
ctx.insert("user", "anon");
|
||
ctx.insert("site", "TiB.");
|
||
ctx.insert("notif_count", "");
|
||
ctx.insert("ticket_count", "(47)");
|
||
|
||
ctx.insert("readme_content", "this is a readme");
|
||
|
||
ctx.insert("owner", &repo.owner);
|
||
ctx.insert("branch", &main_branch.name);
|
||
ctx.insert("repo", &repo.name);
|
||
ctx.insert("directory", &directory);
|
||
ctx.insert("entries", &entries);
|
||
|
||
ctx
|
||
}
|
||
}
|
||
*/
|
||
|
||
fn main() -> Result<(), Box<dyn Error>> {
|
||
if let Some(templates) = args().collect::<Vec<_>>().get(1) {
|
||
let tera = Tera::new(templates.as_str())?;
|
||
let ctx = repo_to_context(open(current_dir()?)?)?;
|
||
|
||
println!("{}", tera.render("code.html", &ctx)?);
|
||
|
||
Ok(())
|
||
} else {
|
||
eprintln!("Usage: {} template_glob", args().collect::<Vec<_>>()[0]);
|
||
std::process::exit(64);
|
||
}
|
||
}
|