aconfig: add new codegen mode force_read_only am: 1a8281ccc2
am: fc11f98b91
Original change: https://android-review.googlesource.com/c/platform/build/+/2887246 Change-Id: Ifc171a5dfb129c8ba1144897988eeb439e17f24b Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
@@ -56,6 +56,7 @@ pub fn create_device_config_ident(package: &str, flag_name: &str) -> Result<Stri
|
|||||||
#[derive(Copy, Clone, Debug, PartialEq, Eq, ValueEnum)]
|
#[derive(Copy, Clone, Debug, PartialEq, Eq, ValueEnum)]
|
||||||
pub enum CodegenMode {
|
pub enum CodegenMode {
|
||||||
Exported,
|
Exported,
|
||||||
|
ForceReadOnly,
|
||||||
Production,
|
Production,
|
||||||
Test,
|
Test,
|
||||||
}
|
}
|
||||||
@@ -64,6 +65,7 @@ impl std::fmt::Display for CodegenMode {
|
|||||||
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
|
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
|
||||||
match self {
|
match self {
|
||||||
CodegenMode::Exported => write!(f, "exported"),
|
CodegenMode::Exported => write!(f, "exported"),
|
||||||
|
CodegenMode::ForceReadOnly => write!(f, "force-read-only"),
|
||||||
CodegenMode::Production => write!(f, "production"),
|
CodegenMode::Production => write!(f, "production"),
|
||||||
CodegenMode::Test => write!(f, "test"),
|
CodegenMode::Test => write!(f, "test"),
|
||||||
}
|
}
|
||||||
|
@@ -47,6 +47,7 @@ where
|
|||||||
CodegenMode::Production => include_str!("../../templates/rust_prod.template"),
|
CodegenMode::Production => include_str!("../../templates/rust_prod.template"),
|
||||||
CodegenMode::Test => include_str!("../../templates/rust_test.template"),
|
CodegenMode::Test => include_str!("../../templates/rust_test.template"),
|
||||||
CodegenMode::Exported => include_str!("../../templates/rust_exported.template"),
|
CodegenMode::Exported => include_str!("../../templates/rust_exported.template"),
|
||||||
|
CodegenMode::ForceReadOnly => todo!(),
|
||||||
},
|
},
|
||||||
)?;
|
)?;
|
||||||
let contents = template.render("rust_code_gen", &context)?;
|
let contents = template.render("rust_code_gen", &context)?;
|
||||||
@@ -569,6 +570,7 @@ pub fn enabled_ro_exported() -> bool {
|
|||||||
CodegenMode::Production => PROD_EXPECTED,
|
CodegenMode::Production => PROD_EXPECTED,
|
||||||
CodegenMode::Test => TEST_EXPECTED,
|
CodegenMode::Test => TEST_EXPECTED,
|
||||||
CodegenMode::Exported => EXPORTED_EXPECTED,
|
CodegenMode::Exported => EXPORTED_EXPECTED,
|
||||||
|
codegen::CodegenMode::ForceReadOnly => todo!(),
|
||||||
},
|
},
|
||||||
&String::from_utf8(generated.contents).unwrap()
|
&String::from_utf8(generated.contents).unwrap()
|
||||||
)
|
)
|
||||||
|
@@ -332,6 +332,11 @@ pub fn modify_parsed_flags_based_on_mode(
|
|||||||
parsed_flag
|
parsed_flag
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn force_read_only_mode_flag_modifier(mut parsed_flag: ProtoParsedFlag) -> ProtoParsedFlag {
|
||||||
|
parsed_flag.set_permission(ProtoFlagPermission::READ_ONLY);
|
||||||
|
parsed_flag
|
||||||
|
}
|
||||||
|
|
||||||
let modified_parsed_flags: Vec<_> = match codegen_mode {
|
let modified_parsed_flags: Vec<_> = match codegen_mode {
|
||||||
CodegenMode::Exported => parsed_flags
|
CodegenMode::Exported => parsed_flags
|
||||||
.parsed_flag
|
.parsed_flag
|
||||||
@@ -339,6 +344,12 @@ pub fn modify_parsed_flags_based_on_mode(
|
|||||||
.filter(|pf| pf.is_exported())
|
.filter(|pf| pf.is_exported())
|
||||||
.map(exported_mode_flag_modifier)
|
.map(exported_mode_flag_modifier)
|
||||||
.collect(),
|
.collect(),
|
||||||
|
CodegenMode::ForceReadOnly => parsed_flags
|
||||||
|
.parsed_flag
|
||||||
|
.into_iter()
|
||||||
|
.filter(|pf| !pf.is_exported())
|
||||||
|
.map(force_read_only_mode_flag_modifier)
|
||||||
|
.collect(),
|
||||||
CodegenMode::Production | CodegenMode::Test => {
|
CodegenMode::Production | CodegenMode::Test => {
|
||||||
parsed_flags.parsed_flag.into_iter().collect()
|
parsed_flags.parsed_flag.into_iter().collect()
|
||||||
}
|
}
|
||||||
@@ -694,4 +705,25 @@ mod tests {
|
|||||||
]);
|
]);
|
||||||
assert_eq!(flag_ids, expected_flag_ids);
|
assert_eq!(flag_ids, expected_flag_ids);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_modify_parsed_flags_based_on_mode_force_read_only() {
|
||||||
|
let parsed_flags = crate::test::parse_test_flags();
|
||||||
|
let p_parsed_flags =
|
||||||
|
modify_parsed_flags_based_on_mode(parsed_flags.clone(), CodegenMode::ForceReadOnly)
|
||||||
|
.unwrap();
|
||||||
|
assert_eq!(6, p_parsed_flags.len());
|
||||||
|
for pf in p_parsed_flags {
|
||||||
|
assert_eq!(ProtoFlagPermission::READ_ONLY, pf.permission());
|
||||||
|
}
|
||||||
|
|
||||||
|
let mut parsed_flags = crate::test::parse_test_flags();
|
||||||
|
parsed_flags.parsed_flag.retain_mut(|pf| pf.is_exported());
|
||||||
|
let error = modify_parsed_flags_based_on_mode(parsed_flags, CodegenMode::ForceReadOnly)
|
||||||
|
.unwrap_err();
|
||||||
|
assert_eq!(
|
||||||
|
"force-read-only library contains no force-read-only flags",
|
||||||
|
format!("{:?}", error)
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user