@@ -258,7 +258,10 @@ pub(crate) fn update(name: &str, rootcxt: &RootContext) -> Result<ComponentUpdat
258258}
259259
260260/// daemon implementation of component adoption
261- pub ( crate ) fn adopt_and_update ( name : & str , rootcxt : & RootContext ) -> Result < ContentMetadata > {
261+ pub ( crate ) fn adopt_and_update (
262+ name : & str ,
263+ rootcxt : & RootContext ,
264+ ) -> Result < Option < ContentMetadata > > {
262265 let sysroot = & rootcxt. sysroot ;
263266 let mut state = SavedState :: load_from_disk ( "/" ) ?. unwrap_or_default ( ) ;
264267 let component = component:: new_from_name ( name) ?;
@@ -278,10 +281,15 @@ pub(crate) fn adopt_and_update(name: &str, rootcxt: &RootContext) -> Result<Cont
278281 let inst = component
279282 . adopt_update ( & rootcxt, & update)
280283 . context ( "Failed adopt and update" ) ?;
281- state. installed . insert ( component. name ( ) . into ( ) , inst) ;
282-
283- state_guard. update_state ( & state) ?;
284- Ok ( update)
284+ if let Some ( inst) = inst {
285+ state. installed . insert ( component. name ( ) . into ( ) , inst) ;
286+ state_guard. update_state ( & state) ?;
287+ return Ok ( Some ( update) ) ;
288+ } else {
289+ // Nothing adopted, skip
290+ log:: info!( "Component '{}' skipped adoption" , component. name( ) ) ;
291+ return Ok ( None ) ;
292+ }
285293}
286294
287295/// daemon implementation of component validate
@@ -492,9 +500,10 @@ pub(crate) fn client_run_update() -> Result<()> {
492500 }
493501 for ( name, adoptable) in status. adoptable . iter ( ) {
494502 if adoptable. confident {
495- let r: ContentMetadata = adopt_and_update ( name, & rootcxt) ?;
496- println ! ( "Adopted and updated: {}: {}" , name, r. version) ;
497- updated = true ;
503+ if let Some ( r) = adopt_and_update ( name, & rootcxt) ? {
504+ println ! ( "Adopted and updated: {}: {}" , name, r. version) ;
505+ updated = true ;
506+ }
498507 } else {
499508 println ! ( "Component {} requires explicit adopt-and-update" , name) ;
500509 }
@@ -512,8 +521,9 @@ pub(crate) fn client_run_adopt_and_update() -> Result<()> {
512521 println ! ( "No components are adoptable." ) ;
513522 } else {
514523 for ( name, _) in status. adoptable . iter ( ) {
515- let r: ContentMetadata = adopt_and_update ( name, & rootcxt) ?;
516- println ! ( "Adopted and updated: {}: {}" , name, r. version) ;
524+ if let Some ( r) = adopt_and_update ( name, & rootcxt) ? {
525+ println ! ( "Adopted and updated: {}: {}" , name, r. version) ;
526+ }
517527 }
518528 }
519529 Ok ( ( ) )
0 commit comments