Skip to content

Commit 77d5e28

Browse files
committed
bootupctl: only print the available component when running status
in container Skip the component if the update meatadata is missing
1 parent 83293cf commit 77d5e28

2 files changed

Lines changed: 48 additions & 15 deletions

File tree

src/cli/bootupctl.rs

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use crate::bootupd;
2-
use anyhow::Result;
2+
use anyhow::{Context, Result};
33
use clap::Parser;
44
use log::LevelFilter;
55

@@ -218,16 +218,30 @@ fn run_status_in_container(json_format: bool) -> Result<()> {
218218
if all_components.is_empty() {
219219
return Ok(());
220220
}
221-
let avail: Vec<_> = all_components.keys().cloned().collect();
221+
222+
let sysroot = openat::Dir::open("/").context("opening sysroot directory /")?;
223+
224+
let mut avail = Vec::new();
225+
226+
// Record the component if having the update metadata
227+
for (name, component) in all_components {
228+
let meta = crate::component::get_component_update(&sysroot, component.as_ref())?;
229+
if meta.is_some() {
230+
avail.push(name);
231+
}
232+
}
233+
222234
if json_format {
223235
let stdout = std::io::stdout();
224236
let mut stdout = stdout.lock();
225-
let output: serde_json::Value = serde_json::json!({
237+
let output = serde_json::json!({
226238
"components": avail
227239
});
228240
serde_json::to_writer(&mut stdout, &output)?;
229241
} else {
230-
println!("Available components: {}", avail.join(" "));
242+
if !avail.is_empty() {
243+
println!("Available components: {}", avail.join(" "));
244+
}
231245
}
232246
Ok(())
233247
}

tests/tests/bootupctl-status-in-bootc.sh

Lines changed: 30 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -7,22 +7,41 @@ if [ ! -d "/sysroot/ostree/repo/" ]; then
77
exit 100
88
fi
99

10+
components_text_x86_64='Available components: BIOS EFI'
11+
components_json_x86_64='{"components":["BIOS","EFI"]}'
12+
13+
components_text_aarch64='Available components: EFI'
14+
components_json_aarch64='{"components":["EFI"]}'
15+
16+
none_components_json='{"components":[]}'
17+
1018
# check if running in container
1119
if [ "$container" ] || [ -f /run/.containerenv ] || [ -f /.dockerenv ]; then
1220
arch="$(uname --machine)"
13-
if [[ "${arch}" == "x86_64" ]]; then
14-
components_text='Available components: BIOS EFI'
15-
components_json='{"components":["BIOS","EFI"]}'
16-
else
17-
# Assume aarch64 for now
18-
components_text='Available components: EFI'
19-
components_json='{"components":["EFI"]}'
21+
output_text=$(bootupctl status | tr -d '\r')
22+
output_json=$(bootupctl status --json)
23+
24+
if [ "${arch}" == "x86_64" ]; then
25+
[ "${components_text_x86_64}" == "${output_text}" ]
26+
[ "${components_json_x86_64}" == "${output_json}" ]
27+
# test if BIOS.json is missing
28+
mv /usr/lib/bootupd/updates/BIOS.json{,-bak}
29+
output_text=$(bootupctl status | tr -d '\r')
30+
output_json=$(bootupctl status --json)
2031
fi
2132

22-
output=$(bootupctl status | tr -d '\r')
23-
[ "${components_text}" == "${output}" ]
24-
output=$(bootupctl status --json)
25-
[ "${components_json}" == "${output}" ]
33+
if [ "${arch}" == "x86_64" ] || [ "${arch}" == "aarch64" ]; then
34+
[ "${components_text_aarch64}" == "${output_text}" ]
35+
[ "${components_json_aarch64}" == "${output_json}" ]
36+
fi
37+
38+
# test if no components
39+
mv /usr/lib/bootupd/updates/EFI.json{,-bak}
40+
output_text=$(bootupctl status | tr -d '\r')
41+
output_json=$(bootupctl status --json)
42+
[ -z "${output_text}" ]
43+
[ "${none_components_json}" == "${output_json}" ]
44+
2645
else
2746
echo "Skip running as not in container"
2847
fi

0 commit comments

Comments
 (0)