use std::net::SocketAddr;
use std::path::PathBuf;
use clap::{Parser, Subcommand};
mod diff;
mod merge;
mod protocol;
mod service;
#[derive(Parser)]
#[command(name = "gitmirror", about = "Git mirror gRPC service")]
struct Cli {
#[command(subcommand)]
cmd: Command,
}
#[derive(Subcommand)]
enum Command {
/// Run the gRPC server.
Serve(ServeArgs),
}
#[derive(clap::Args)]
struct ServeArgs {
/// Address to bind the gRPC server to.
#[arg(long, env = "GITMIRROR_ADDR", default_value = "127.0.0.1:9000")]
addr: SocketAddr,
/// Base directory holding bare mirror repos, one per DID (/).
#[arg(long, env = "GITMIRROR_REPO_BASE", default_value = "repos")]
repo_base: PathBuf,
}
#[tokio::main]
async fn main() -> anyhow::Result<()> {
tracing_subscriber::fmt()
.with_env_filter(
tracing_subscriber::EnvFilter::try_from_default_env().unwrap_or_else(|_| "info".into()),
)
.init();
match Cli::parse().cmd {
Command::Serve(args) => service::serve(args.addr, args.repo_base).await,
}
}