use std::slice;
use jj_lib::repo::Repo as _;
use super::CriterionArgs;
use super::run_bench;
use crate::cli_util::CommandHelper;
use crate::cli_util::RevisionArg;
use crate::command_error::CommandError;
use crate::ui::Ui;
#[derive(clap::Args, Clone, Debug)]
pub struct BenchCommonAncestorsArgs {
revision1: RevisionArg,
revision2: RevisionArg,
#[command(flatten)]
criterion: CriterionArgs,
}
pub async fn cmd_bench_common_ancestors(
ui: &mut Ui,
command: &CommandHelper,
args: &BenchCommonAncestorsArgs,
) -> Result<(), CommandError> {
let workspace_command = command.workspace_helper(ui)?;
let commit1 = workspace_command
.resolve_single_rev(ui, &args.revision1)
.await?;
let commit2 = workspace_command
.resolve_single_rev(ui, &args.revision2)
.await?;
let index = workspace_command.repo().index();
let routine =
|| index.common_ancestors(slice::from_ref(commit1.id()), slice::from_ref(commit2.id()));
run_bench(
ui,
&format!("common-ancestors-{}-{}", args.revision1, args.revision2),
&args.criterion,
routine,
)?;
Ok(())
}