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:
Zhi Dou
2024-01-03 23:35:36 +00:00
committed by Automerger Merge Worker
3 changed files with 36 additions and 0 deletions

View File

@@ -56,6 +56,7 @@ pub fn create_device_config_ident(package: &str, flag_name: &str) -> Result<Stri
#[derive(Copy, Clone, Debug, PartialEq, Eq, ValueEnum)]
pub enum CodegenMode {
Exported,
ForceReadOnly,
Production,
Test,
}
@@ -64,6 +65,7 @@ impl std::fmt::Display for CodegenMode {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
match self {
CodegenMode::Exported => write!(f, "exported"),
CodegenMode::ForceReadOnly => write!(f, "force-read-only"),
CodegenMode::Production => write!(f, "production"),
CodegenMode::Test => write!(f, "test"),
}

View File

@@ -47,6 +47,7 @@ where
CodegenMode::Production => include_str!("../../templates/rust_prod.template"),
CodegenMode::Test => include_str!("../../templates/rust_test.template"),
CodegenMode::Exported => include_str!("../../templates/rust_exported.template"),
CodegenMode::ForceReadOnly => todo!(),
},
)?;
let contents = template.render("rust_code_gen", &context)?;
@@ -569,6 +570,7 @@ pub fn enabled_ro_exported() -> bool {
CodegenMode::Production => PROD_EXPECTED,
CodegenMode::Test => TEST_EXPECTED,
CodegenMode::Exported => EXPORTED_EXPECTED,
codegen::CodegenMode::ForceReadOnly => todo!(),
},
&String::from_utf8(generated.contents).unwrap()
)

View File

@@ -332,6 +332,11 @@ pub fn modify_parsed_flags_based_on_mode(
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 {
CodegenMode::Exported => parsed_flags
.parsed_flag
@@ -339,6 +344,12 @@ pub fn modify_parsed_flags_based_on_mode(
.filter(|pf| pf.is_exported())
.map(exported_mode_flag_modifier)
.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 => {
parsed_flags.parsed_flag.into_iter().collect()
}
@@ -694,4 +705,25 @@ mod tests {
]);
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)
);
}
}