diff --git a/src/cargo/ops/cargo_add/mod.rs b/src/cargo/ops/cargo_add/mod.rs index a89788e5c..a88354a36 100644 --- a/src/cargo/ops/cargo_add/mod.rs +++ b/src/cargo/ops/cargo_add/mod.rs @@ -168,36 +168,44 @@ pub fn add(workspace: &Workspace<'_>, options: &AddOptions<'_>) -> CargoResult<( write!(message, "no features available for crate {}", dep.name)?; } else { if !deactivated.is_empty() { - writeln!( - message, - "disabled features:\n {}", - deactivated - .iter() - .map(|s| s.to_string()) - .coalesce(|x, y| if x.len() + y.len() < 78 { - Ok(format!("{x}, {y}")) - } else { - Err((x, y)) - }) - .into_iter() - .format("\n ") - )? + if deactivated.len() <= MAX_FEATURE_PRINTS { + writeln!( + message, + "disabled features:\n {}", + deactivated + .iter() + .map(|s| s.to_string()) + .coalesce(|x, y| if x.len() + y.len() < 78 { + Ok(format!("{x}, {y}")) + } else { + Err((x, y)) + }) + .into_iter() + .format("\n ") + )?; + } else { + writeln!(message, "{} disabled features available", deactivated.len())?; + } } if !activated.is_empty() { - writeln!( - message, - "enabled features:\n {}", - activated - .iter() - .map(|s| s.to_string()) - .coalesce(|x, y| if x.len() + y.len() < 78 { - Ok(format!("{x}, {y}")) - } else { - Err((x, y)) - }) - .into_iter() - .format("\n ") - )? + if deactivated.len() + activated.len() <= MAX_FEATURE_PRINTS { + writeln!( + message, + "enabled features:\n {}", + activated + .iter() + .map(|s| s.to_string()) + .coalesce(|x, y| if x.len() + y.len() < 78 { + Ok(format!("{x}, {y}")) + } else { + Err((x, y)) + }) + .into_iter() + .format("\n ") + )?; + } else { + writeln!(message, "{} enabled features available", activated.len())?; + } } } anyhow::bail!(message.trim().to_owned()); diff --git a/tests/testsuite/cargo_add/features_error_activated_over_limit/stderr.term.svg b/tests/testsuite/cargo_add/features_error_activated_over_limit/stderr.term.svg index 6042124bc..21b4d42f5 100644 --- a/tests/testsuite/cargo_add/features_error_activated_over_limit/stderr.term.svg +++ b/tests/testsuite/cargo_add/features_error_activated_over_limit/stderr.term.svg @@ -1,4 +1,4 @@ - +