From 201f3032800400165b9084712d5483f9b2cd5472 Mon Sep 17 00:00:00 2001 From: David Pacheco Date: Mon, 26 Aug 2024 09:52:48 -0700 Subject: [PATCH] just fetch the target once --- dev-tools/omdb/src/bin/omdb/nexus.rs | 72 ++++++++++++++-------------- 1 file changed, 37 insertions(+), 35 deletions(-) diff --git a/dev-tools/omdb/src/bin/omdb/nexus.rs b/dev-tools/omdb/src/bin/omdb/nexus.rs index 08d1ee6e07..2cbac2d5b2 100644 --- a/dev-tools/omdb/src/bin/omdb/nexus.rs +++ b/dev-tools/omdb/src/bin/omdb/nexus.rs @@ -1726,6 +1726,40 @@ async fn cmd_nexus_blueprints_target_set( args: &BlueprintTargetSetArgs, _destruction_token: DestructiveOperationToken, ) -> Result<(), anyhow::Error> { + let found_enabled = if args.diff + || matches!(args.enabled, BlueprintTargetSetEnabled::Inherit) + { + let current_target = client + .blueprint_target_view() + .await + .context("failed to fetch current target blueprint")? + .into_inner(); + + if args.diff { + let blueprint1 = client + .blueprint_view(¤t_target.target_id) + .await + .context("failed to fetch target blueprint")? + .into_inner(); + let blueprint2 = + client.blueprint_view(&args.blueprint_id).await.with_context( + || format!("fetching blueprint {}", args.blueprint_id), + )?; + let diff = blueprint2.diff_since_blueprint(&blueprint1); + println!("{}", diff.display()); + println!( + "\nDo you want to make {} the target blueprint?", + args.blueprint_id + ); + let mut prompt = ConfirmationPrompt::new(); + prompt.read_and_validate("y/N", "y")?; + } + + Some(current_target.enabled) + } else { + None + }; + let enabled = match args.enabled { BlueprintTargetSetEnabled::Enabled => true, BlueprintTargetSetEnabled::Disabled => false, @@ -1738,43 +1772,11 @@ async fn cmd_nexus_blueprints_target_set( // operator. (In the case of the current target blueprint being changed // entirely, that will result in a failure to set the current target // below, because its parent will no longer be the current target.) - BlueprintTargetSetEnabled::Inherit => { - client - .blueprint_target_view() - .await - .context("failed to fetch current target blueprint")? - .into_inner() - .enabled - } + // + // unwrap(): this is always `Some` due to the branch above. + BlueprintTargetSetEnabled::Inherit => found_enabled.unwrap(), }; - if args.diff { - let blueprint1 = client - .blueprint_view( - &client - .blueprint_target_view() - .await - .context("failed to fetch current target blueprint")? - .into_inner() - .target_id, - ) - .await - .context("failed to fetch target blueprint")? - .into_inner(); - let blueprint2 = - client.blueprint_view(&args.blueprint_id).await.with_context( - || format!("fetching blueprint {}", args.blueprint_id), - )?; - let diff = blueprint2.diff_since_blueprint(&blueprint1); - println!("{}", diff.display()); - println!( - "\nDo you want to make {} the target blueprint?", - args.blueprint_id - ); - let mut prompt = ConfirmationPrompt::new(); - prompt.read_and_validate("y/N", "y")?; - } - client .blueprint_target_set(&nexus_client::types::BlueprintTargetSet { target_id: args.blueprint_id,