File tree 3 files changed +17
-8
lines changed
3 files changed +17
-8
lines changed Original file line number Diff line number Diff line change @@ -142,14 +142,14 @@ pub(crate) fn adopt_and_update(name: &str) -> Result<ContentMetadata> {
142
142
} else {
143
143
anyhow:: bail!( "Component {} has no available update" , name) ;
144
144
} ;
145
+ let mut state_guard = SavedState :: acquire_write_lock ( openat:: Dir :: open ( "/" ) ?)
146
+ . context ( "Failed to acquire write lock" ) ?;
147
+
145
148
let inst = component
146
- . adopt_update ( & update)
149
+ . adopt_update ( & state_guard . sysroot , & update)
147
150
. context ( "Failed adopt and update" ) ?;
148
151
state. installed . insert ( component. name ( ) . into ( ) , inst) ;
149
152
150
- let sysroot = openat:: Dir :: open ( "/" ) ?;
151
- let mut state_guard =
152
- SavedState :: acquire_write_lock ( sysroot) . context ( "Failed to acquire write lock" ) ?;
153
153
state_guard. update_state ( & state) ?;
154
154
Ok ( update)
155
155
}
Original file line number Diff line number Diff line change @@ -30,7 +30,11 @@ pub(crate) trait Component {
30
30
fn query_adopt ( & self ) -> Result < Option < Adoptable > > ;
31
31
32
32
/// Given an adoptable system and an update, perform the update.
33
- fn adopt_update ( & self , update : & ContentMetadata ) -> Result < InstalledContent > ;
33
+ fn adopt_update (
34
+ & self ,
35
+ sysroot : & openat:: Dir ,
36
+ update : & ContentMetadata ,
37
+ ) -> Result < InstalledContent > ;
34
38
35
39
/// Implementation of `bootupd install` for a given component. This should
36
40
/// gather data (or run binaries) from the source root, and install them
Original file line number Diff line number Diff line change @@ -74,7 +74,11 @@ impl Component for EFI {
74
74
}
75
75
76
76
/// Given an adoptable system and an update, perform the update.
77
- fn adopt_update ( & self , updatemeta : & ContentMetadata ) -> Result < InstalledContent > {
77
+ fn adopt_update (
78
+ & self ,
79
+ sysroot : & openat:: Dir ,
80
+ updatemeta : & ContentMetadata ,
81
+ ) -> Result < InstalledContent > {
78
82
let meta = if let Some ( meta) = self . query_adopt ( ) ? {
79
83
meta
80
84
} else {
@@ -83,8 +87,9 @@ impl Component for EFI {
83
87
84
88
let esp = self . open_esp ( ) ?;
85
89
validate_esp ( & esp) ?;
86
- let updated =
87
- openat:: Dir :: open ( & component_updatedir ( "/" , self ) ) . context ( "opening update dir" ) ?;
90
+ let updated = sysroot
91
+ . sub_dir ( & component_updatedirname ( self ) )
92
+ . context ( "opening update dir" ) ?;
88
93
let updatef = filetree:: FileTree :: new_from_dir ( & updated) . context ( "reading update dir" ) ?;
89
94
// For adoption, we should only touch files that we know about.
90
95
let diff = updatef. relative_diff_to ( & esp) ?;
You can’t perform that action at this time.
0 commit comments