git-tree 0.1.0

A TUI for git log
use clap::{CommandFactory, ValueEnum};
use clap_complete::{generate_to, Shell};
use std::env;

include!("src/cli.rs");

fn build_man_page() -> Result<(), Box<dyn std::error::Error>> {
    let out_dir = env::var("OUT_DIR")?;
    let out_dir = PathBuf::from(out_dir);
    let cmd = Cli::command();
    let man = clap_mangen::Man::new(cmd);
    let mut buffer: Vec<u8> = Default::default();
    man.render(&mut buffer)?;
    let file_path = out_dir.join("git-tree.1");
    std::fs::write(&file_path, buffer)?;
    eprintln!("map page generated in {file_path:?}");
    Ok(())
}

fn build_completions() -> Result<(), Box<dyn std::error::Error>> {
    let out_dir = env::var("OUT_DIR")?;
    let out_dir = std::path::Path::new(&out_dir).join("completions/");
    if !out_dir.exists() {
        std::fs::create_dir(out_dir.clone()).expect("Failed to create 'completions' directory.");
    }

    let mut cmd = Cli::command();

    for &shell in Shell::value_variants() {
        generate_to(shell, &mut cmd, "git-tree", out_dir.clone())?;
    }
    Ok(())
}

fn main() -> Result<(), Box<dyn std::error::Error>> {
    build_man_page()?;
    build_completions()?;
    vergen::EmitBuilder::builder()
        .all_build()
        .all_git()
        .emit()?;
    Ok(())
}