@@ -1483,15 +1483,16 @@ async fn component_remove(
14831483
14841484 let mut parsed_components = Vec :: new ( ) ;
14851485 let mut unknown_components = Vec :: new ( ) ;
1486+ // Preserve the original UnknownComponent error to keep
1487+ // single-component error behavior unchanged
1488+ let mut first_unknown_component_error = None ;
14861489 let mut first_error = None ;
14871490
14881491 for component in & components {
14891492 match Component :: try_new ( component, & distributable, target. as_ref ( ) ) {
1490- Ok ( new_component) => parsed_components. push ( ( new_component, component. clone ( ) ) ) ,
1493+ Ok ( new_component) => parsed_components. push ( ( new_component, component) ) ,
14911494 Err ( err) => {
1492- if first_error. is_none ( ) {
1493- first_error = Some ( err) ;
1494- }
1495+ first_error. get_or_insert ( err) ;
14951496 }
14961497 }
14971498 }
@@ -1501,22 +1502,25 @@ async fn component_remove(
15011502 if let Some ( RustupError :: UnknownComponent { suggestion, .. } ) =
15021503 err. downcast_ref :: < RustupError > ( )
15031504 {
1504- unknown_components. push ( ( original_name, suggestion. clone ( ) ) ) ;
1505+ unknown_components. push ( ( original_name. clone ( ) , suggestion. clone ( ) ) ) ;
1506+ first_unknown_component_error. get_or_insert ( err) ;
15051507 continue ;
15061508 }
15071509
1508- if first_error. is_none ( ) {
1509- first_error = Some ( err) ;
1510- }
1510+ first_error. get_or_insert ( err) ;
15111511 }
15121512 }
15131513
1514- if !unknown_components. is_empty ( ) {
1515- return Err ( RustupError :: UnknownComponents {
1516- desc : distributable. desc ( ) . clone ( ) ,
1517- components : unknown_components,
1514+ match unknown_components. len ( ) {
1515+ 0 => { }
1516+ 1 => return Err ( first_unknown_component_error. expect ( "missing first unknown error" ) ) ,
1517+ _ => {
1518+ return Err ( RustupError :: UnknownComponents {
1519+ desc : distributable. desc ( ) . clone ( ) ,
1520+ components : unknown_components,
1521+ }
1522+ . into ( ) ) ;
15181523 }
1519- . into ( ) ) ;
15201524 }
15211525
15221526 if let Some ( err) = first_error {
0 commit comments