@@ -486,6 +486,10 @@ fn treefile_merge(dest: &mut TreeComposeConfig, src: &mut TreeComposeConfig) {
486
486
& mut dest. derive . override_replace ,
487
487
& mut src. derive . override_replace ,
488
488
) ;
489
+ merge_basic_field (
490
+ & mut dest. derive . override_remove_kernel ,
491
+ & mut src. derive . override_remove_kernel ,
492
+ ) ;
489
493
dest. handle_repo_packages_override_replacements ( ) ;
490
494
merge_map_field (
491
495
& mut dest. derive . override_replace_local ,
@@ -1024,6 +1028,15 @@ impl Treefile {
1024
1028
. unwrap_or_default ( )
1025
1029
}
1026
1030
1031
+ /// Kernel removal is configured
1032
+ pub ( crate ) fn has_remove_kernel ( & self ) -> bool {
1033
+ self . parsed
1034
+ . derive
1035
+ . override_remove_kernel
1036
+ . clone ( )
1037
+ . unwrap_or_default ( )
1038
+ }
1039
+
1027
1040
// Check that the same overrides don't already exist. Of course, in the local replace
1028
1041
// case, this doesn't catch same pkg name but different EVRA; we'll just barf at that
1029
1042
// later on in the core. This is an early easy sanity check.
@@ -1119,6 +1132,21 @@ impl Treefile {
1119
1132
Some ( old_map) != self . parsed . derive . override_replace
1120
1133
}
1121
1134
1135
+ /// Change the state of kernel removal for derived images
1136
+ pub ( crate ) fn set_remove_kernel ( & mut self , remove : bool ) -> bool {
1137
+ let current = self
1138
+ . parsed
1139
+ . derive
1140
+ . override_remove_kernel
1141
+ . take ( )
1142
+ . unwrap_or_default ( ) ;
1143
+ // Note we did .take() above, so this also canonicalizes false -> None
1144
+ if remove {
1145
+ self . parsed . derive . override_remove_kernel = Some ( true ) ;
1146
+ }
1147
+ current != remove
1148
+ }
1149
+
1122
1150
pub ( crate ) fn remove_package_override_replace ( & mut self , package : & str ) -> bool {
1123
1151
self . parsed
1124
1152
. derive
@@ -1180,6 +1208,7 @@ impl Treefile {
1180
1208
. map ( |x| !x. is_empty ( ) )
1181
1209
. unwrap_or_default ( )
1182
1210
|| changed;
1211
+ changed = self . set_remove_kernel ( false ) || changed;
1183
1212
changed
1184
1213
}
1185
1214
@@ -1600,6 +1629,7 @@ impl Treefile {
1600
1629
clone. override_replace . take ( ) ;
1601
1630
clone. override_remove . take ( ) ;
1602
1631
clone. override_replace_local . take ( ) ;
1632
+ clone. override_remove_kernel . take ( ) ;
1603
1633
if clone != Default :: default ( ) {
1604
1634
let j = serde_json:: to_string_pretty ( & clone) ?;
1605
1635
bail ! (
@@ -1873,6 +1903,12 @@ impl Treefile {
1873
1903
. as_ref ( )
1874
1904
. and_then ( |m| m. install . as_ref ( ) . map ( |i| !i. is_empty ( ) ) )
1875
1905
. unwrap_or_default ( )
1906
+ || self
1907
+ . parsed
1908
+ . derive
1909
+ . override_remove_kernel
1910
+ . clone ( )
1911
+ . unwrap_or_default ( )
1876
1912
}
1877
1913
1878
1914
/// Derive RPM importer flags for a given package and treefile settings.
@@ -2693,6 +2729,9 @@ pub(crate) struct DeriveConfigFields {
2693
2729
pub ( crate ) packages_local_fileoverride : Option < BTreeMap < String , String > > ,
2694
2730
#[ serde( skip_serializing_if = "Option::is_none" ) ]
2695
2731
pub ( crate ) override_remove : Option < BTreeSet < String > > ,
2732
+ /// Remove the kernel
2733
+ #[ serde( skip_serializing_if = "Option::is_none" ) ]
2734
+ pub ( crate ) override_remove_kernel : Option < bool > ,
2696
2735
#[ serde( rename = "ex-override-replace" ) ]
2697
2736
#[ serde( skip_serializing_if = "Option::is_none" ) ]
2698
2737
pub ( crate ) override_replace : Option < Vec < RemoteOverrideReplace > > ,
0 commit comments