use anyhow::Result;
use clap::Parser;
use console::Term;
use std::path::PathBuf;
pub mod git;
pub mod repl;
#[derive(Parser, Debug)]
#[command(author, version, about, long_about = None)]
pub struct Args {
#[arg(default_value_t = String::from("HEAD"))]
target: String,
#[arg(short, long)]
reset_head: bool,
#[arg(short = 'C')]
path: Option<PathBuf>,
#[arg(short, long)]
verbose: bool,
}
fn main() -> Result<()> {
let args = Args::parse();
let mut term = Term::stdout();
let mut steps = 0;
if args.target != "HEAD" {
git::checkout_target(&args.target, &args)?;
steps += 1;
}
let repl_result = repl::start(&mut term, &args, &mut steps);
if args.reset_head {
reset_head(&args, steps)?;
}
repl_result
}
fn reset_head(args: &Args, steps: i32) -> Result<()> {
let reflog_id = format!("@{{-{}}}", steps);
git::checkout_target(&reflog_id, args)
}