From 256ac1c898a20a6658b42820cb753e58328b22d0 Mon Sep 17 00:00:00 2001 From: Markus Kasten Date: Thu, 27 Oct 2022 13:32:09 +0200 Subject: [PATCH] feat: allow supplying git reference from cli --- src/main.rs | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/src/main.rs b/src/main.rs index 7ddc1af..1b0af52 100644 --- a/src/main.rs +++ b/src/main.rs @@ -132,33 +132,40 @@ fn print_diff(diff: &Diff) { } #[derive(Debug, Parser)] -#[command(author, version)] +#[command(author, version, about)] struct Args { - pipfile: Option, + #[arg( + help = "Path to Pipfile.lock. If omitted, assumes Pipfile.lock in the current directory" + )] + pipfile_lock: Option, + + #[arg( + short = 'r', + long, + help = "Git reference to compare to. Defaults to HEAD" + )] + git_ref: Option, } fn main() -> anyhow::Result<()> { let args = Args::parse(); let pipfile_path = - std::fs::canonicalize(args.pipfile.unwrap_or_else(|| "Pipfile.lock".into()))?; + std::fs::canonicalize(args.pipfile_lock.unwrap_or_else(|| "Pipfile.lock".into()))?; let file = std::fs::File::open(&pipfile_path)?; let lockfile = pipfile_lock::PipfileLock::from_reader(file)?; - let repo = git2::Repository::discover(&pipfile_path.parent().unwrap())?; - println!("Repo path: {:?}", repo.path()); - println!("Pipfile path: {:?}", pipfile_path); + let git_ref = args.git_ref.unwrap_or_else(|| "HEAD".to_owned()); + let repo = git2::Repository::discover(&pipfile_path.parent().unwrap())?; let path_in_repo: PathBuf = pipfile_path .strip_prefix(&repo.path().parent().unwrap())? .into(); - println!("Pipfile path in repo: {:?}", path_in_repo); - let obj = repo - .find_reference("HEAD")? + .resolve_reference_from_short_name(&git_ref)? .peel_to_tree()? .get_path(&path_in_repo)? .to_object(&repo)?;