Skip to content

Commit f1507ea

Browse files
committed
Thread sysroot through adopt+update flow
More prep for coreos#108 Similar to the previous PR for updates.
1 parent 6e1c089 commit f1507ea

File tree

3 files changed

+17
-8
lines changed

3 files changed

+17
-8
lines changed

src/bootupd.rs

+4-4
Original file line numberDiff line numberDiff line change
@@ -142,14 +142,14 @@ pub(crate) fn adopt_and_update(name: &str) -> Result<ContentMetadata> {
142142
} else {
143143
anyhow::bail!("Component {} has no available update", name);
144144
};
145+
let mut state_guard = SavedState::acquire_write_lock(openat::Dir::open("/")?)
146+
.context("Failed to acquire write lock")?;
147+
145148
let inst = component
146-
.adopt_update(&update)
149+
.adopt_update(&state_guard.sysroot, &update)
147150
.context("Failed adopt and update")?;
148151
state.installed.insert(component.name().into(), inst);
149152

150-
let sysroot = openat::Dir::open("/")?;
151-
let mut state_guard =
152-
SavedState::acquire_write_lock(sysroot).context("Failed to acquire write lock")?;
153153
state_guard.update_state(&state)?;
154154
Ok(update)
155155
}

src/component.rs

+5-1
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,11 @@ pub(crate) trait Component {
3030
fn query_adopt(&self) -> Result<Option<Adoptable>>;
3131

3232
/// 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>;
3438

3539
/// Implementation of `bootupd install` for a given component. This should
3640
/// gather data (or run binaries) from the source root, and install them

src/efi.rs

+8-3
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,11 @@ impl Component for EFI {
7474
}
7575

7676
/// 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> {
7882
let meta = if let Some(meta) = self.query_adopt()? {
7983
meta
8084
} else {
@@ -83,8 +87,9 @@ impl Component for EFI {
8387

8488
let esp = self.open_esp()?;
8589
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")?;
8893
let updatef = filetree::FileTree::new_from_dir(&updated).context("reading update dir")?;
8994
// For adoption, we should only touch files that we know about.
9095
let diff = updatef.relative_diff_to(&esp)?;

0 commit comments

Comments
 (0)