mod app;
mod manifest;
mod pattern;
mod process;
use anyhow::Result;
use app::App;
use clap::{Parser, Subcommand};
use std::env;
use std::path::PathBuf;
const DEFAULT_MANIFEST: &str = "patches/fork.json";
#[derive(Parser)]
#[command(version, about = "Maintain a declared StGit downstream patch stack")]
struct Cli {
#[arg(long, global = true)]
manifest: Option<PathBuf>,
#[command(subcommand)]
operation: Operation,
}
#[derive(Subcommand)]
enum Operation {
Init,
Verify,
Rebase,
}
fn main() -> Result<()> {
let cli = Cli::parse();
let manifest = cli
.manifest
.or_else(|| env::var_os("FORK_MANIFEST").map(PathBuf::from))
.unwrap_or_else(|| PathBuf::from(DEFAULT_MANIFEST));
let mut app = App::load(&manifest)?;
match cli.operation {
Operation::Init => app.init(),
Operation::Verify => app.verify(),
Operation::Rebase => app.rebase(),
}
}