File tree Expand file tree Collapse file tree 1 file changed +24
-2
lines changed Expand file tree Collapse file tree 1 file changed +24
-2
lines changed Original file line number Diff line number Diff line change @@ -115,13 +115,35 @@ fn kernel_package<'a>(
115
115
project_metadata : & ' a Metadata ,
116
116
kernel_bin_name : & str ,
117
117
) -> Result < & ' a Package , BootloaderError > {
118
+ // look for exact match with binary name first
118
119
let contains_bin = |p : & & Package | {
119
120
p. targets
120
121
. iter ( )
121
122
. any ( |t| t. name == kernel_bin_name && t. kind . iter ( ) . any ( |k| k == "bin" ) )
122
123
} ;
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 {
125
147
bin_name : kernel_bin_name. to_owned ( ) ,
126
148
} )
127
149
}
You can’t perform that action at this time.
0 commit comments