Skip to content

Commit e34e8e9

Browse files
committed
Fix Builder::kernel_package for tests and doctests
1 parent f1f994a commit e34e8e9

File tree

1 file changed

+24
-2
lines changed

1 file changed

+24
-2
lines changed

src/builder/bootloader.rs

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -115,13 +115,35 @@ fn kernel_package<'a>(
115115
project_metadata: &'a Metadata,
116116
kernel_bin_name: &str,
117117
) -> Result<&'a Package, BootloaderError> {
118+
// look for exact match with binary name first
118119
let contains_bin = |p: &&Package| {
119120
p.targets
120121
.iter()
121122
.any(|t| t.name == kernel_bin_name && t.kind.iter().any(|k| k == "bin"))
122123
};
123-
let bin_metadata_opt = project_metadata.packages.iter().find(contains_bin);
124-
bin_metadata_opt.ok_or_else(|| BootloaderError::KernelBinPackageNotFound {
124+
let package = project_metadata.packages.iter().find(contains_bin);
125+
126+
// then look for exact match with integration test binary
127+
let contains_test_bin = |p: &&Package| {
128+
p.targets
129+
.iter()
130+
.any(|t| t.name == kernel_bin_name && t.kind.iter().any(|k| k == "test"))
131+
};
132+
let package = package.or_else(|| project_metadata.packages.iter().find(contains_test_bin));
133+
134+
// then look for match with appended hash (e.g. for library tests)
135+
let contains_test = |p: &&Package| {
136+
let package_name = match kernel_bin_name.rsplitn(2, "-").skip(1).next() {
137+
Some(name) => name,
138+
None => return false,
139+
};
140+
p.targets
141+
.iter()
142+
.any(|t| t.name.replace("-", "_") == package_name)
143+
};
144+
let package = package.or_else(|| project_metadata.packages.iter().find(contains_test));
145+
146+
package.ok_or_else(|| BootloaderError::KernelBinPackageNotFound {
125147
bin_name: kernel_bin_name.to_owned(),
126148
})
127149
}

0 commit comments

Comments
 (0)