Loading tools/aconfig/aconfig/src/commands.rs +2 −1 Original line number Diff line number Diff line Loading @@ -280,10 +280,11 @@ pub fn create_storage( caches: Vec<Input>, container: &str, file: &StorageFileType, version: u32, ) -> Result<Vec<u8>> { let parsed_flags_vec: Vec<ProtoParsedFlags> = caches.into_iter().map(|mut input| input.try_parse_flags()).collect::<Result<Vec<_>>>()?; generate_storage_file(container, parsed_flags_vec.iter(), file) generate_storage_file(container, parsed_flags_vec.iter(), file, version) } pub fn create_device_config_defaults(mut input: Input) -> Result<Vec<u8>> { Loading tools/aconfig/aconfig/src/main.rs +16 −2 Original line number Diff line number Diff line Loading @@ -16,6 +16,8 @@ //! `aconfig` is a build time tool to manage build time configurations, such as feature flags. use aconfig_storage_file::DEFAULT_FILE_VERSION; use aconfig_storage_file::MAX_SUPPORTED_FILE_VERSION; use anyhow::{anyhow, bail, Context, Result}; use clap::{builder::ArgAction, builder::EnumValueParser, Arg, ArgMatches, Command}; use core::any::Any; Loading Loading @@ -159,7 +161,13 @@ fn cli() -> Command { .value_parser(|s: &str| StorageFileType::try_from(s)), ) .arg(Arg::new("cache").long("cache").action(ArgAction::Append).required(true)) .arg(Arg::new("out").long("out").required(true)), .arg(Arg::new("out").long("out").required(true)) .arg( Arg::new("version") .long("version") .required(false) .value_parser(|s: &str| s.parse::<u32>()), ), ) } Loading Loading @@ -309,12 +317,18 @@ fn main() -> Result<()> { write_output_to_file_or_stdout(path, &output)?; } Some(("create-storage", sub_matches)) => { let version = get_optional_arg::<u32>(sub_matches, "version").unwrap_or(&DEFAULT_FILE_VERSION); if *version > MAX_SUPPORTED_FILE_VERSION { bail!("Invalid version selected ({})", version); } let file = get_required_arg::<StorageFileType>(sub_matches, "file") .context("Invalid storage file selection")?; let cache = open_zero_or_more_files(sub_matches, "cache")?; let container = get_required_arg::<String>(sub_matches, "container")?; let path = get_required_arg::<String>(sub_matches, "out")?; let output = commands::create_storage(cache, container, file) let output = commands::create_storage(cache, container, file, *version) .context("failed to create storage files")?; write_output_to_file_or_stdout(path, &output)?; } Loading tools/aconfig/aconfig/src/storage/flag_info.rs +11 −8 Original line number Diff line number Diff line Loading @@ -17,14 +17,12 @@ use crate::commands::assign_flag_ids; use crate::storage::FlagPackage; use aconfig_protos::ProtoFlagPermission; use aconfig_storage_file::{ FlagInfoHeader, FlagInfoList, FlagInfoNode, StorageFileType, FILE_VERSION, }; use aconfig_storage_file::{FlagInfoHeader, FlagInfoList, FlagInfoNode, StorageFileType}; use anyhow::{anyhow, Result}; fn new_header(container: &str, num_flags: u32) -> FlagInfoHeader { fn new_header(container: &str, num_flags: u32, version: u32) -> FlagInfoHeader { FlagInfoHeader { version: FILE_VERSION, version, container: String::from(container), file_type: StorageFileType::FlagInfo as u8, file_size: 0, Loading @@ -33,7 +31,11 @@ fn new_header(container: &str, num_flags: u32) -> FlagInfoHeader { } } pub fn create_flag_info(container: &str, packages: &[FlagPackage]) -> Result<FlagInfoList> { pub fn create_flag_info( container: &str, packages: &[FlagPackage], version: u32, ) -> Result<FlagInfoList> { // create list let num_flags = packages.iter().map(|pkg| pkg.boolean_flags.len() as u32).sum(); Loading @@ -51,7 +53,7 @@ pub fn create_flag_info(container: &str, packages: &[FlagPackage]) -> Result<Fla } let mut list = FlagInfoList { header: new_header(container, num_flags), header: new_header(container, num_flags, version), nodes: is_flag_rw.iter().map(|&rw| FlagInfoNode::create(rw)).collect(), }; Loading @@ -67,11 +69,12 @@ pub fn create_flag_info(container: &str, packages: &[FlagPackage]) -> Result<Fla mod tests { use super::*; use crate::storage::{group_flags_by_package, tests::parse_all_test_flags}; use aconfig_storage_file::DEFAULT_FILE_VERSION; pub fn create_test_flag_info_list_from_source() -> Result<FlagInfoList> { let caches = parse_all_test_flags(); let packages = group_flags_by_package(caches.iter()); create_flag_info("mockup", &packages) create_flag_info("mockup", &packages, DEFAULT_FILE_VERSION) } #[test] Loading tools/aconfig/aconfig/src/storage/flag_table.rs +11 −6 Original line number Diff line number Diff line Loading @@ -19,13 +19,12 @@ use crate::storage::FlagPackage; use aconfig_protos::ProtoFlagPermission; use aconfig_storage_file::{ get_table_size, FlagTable, FlagTableHeader, FlagTableNode, StorageFileType, StoredFlagType, FILE_VERSION, }; use anyhow::{anyhow, Result}; fn new_header(container: &str, num_flags: u32) -> FlagTableHeader { fn new_header(container: &str, num_flags: u32, version: u32) -> FlagTableHeader { FlagTableHeader { version: FILE_VERSION, version, container: String::from(container), file_type: StorageFileType::FlagMap as u8, file_size: 0, Loading Loading @@ -86,12 +85,16 @@ impl FlagTableNodeWrapper { } } pub fn create_flag_table(container: &str, packages: &[FlagPackage]) -> Result<FlagTable> { pub fn create_flag_table( container: &str, packages: &[FlagPackage], version: u32, ) -> Result<FlagTable> { // create table let num_flags = packages.iter().map(|pkg| pkg.boolean_flags.len() as u32).sum(); let num_buckets = get_table_size(num_flags)?; let mut header = new_header(container, num_flags); let mut header = new_header(container, num_flags, version); let mut buckets = vec![None; num_buckets as usize]; let mut node_wrappers = packages .iter() Loading Loading @@ -138,13 +141,15 @@ pub fn create_flag_table(container: &str, packages: &[FlagPackage]) -> Result<Fl #[cfg(test)] mod tests { use aconfig_storage_file::DEFAULT_FILE_VERSION; use super::*; use crate::storage::{group_flags_by_package, tests::parse_all_test_flags}; fn create_test_flag_table_from_source() -> Result<FlagTable> { let caches = parse_all_test_flags(); let packages = group_flags_by_package(caches.iter()); create_flag_table("mockup", &packages) create_flag_table("mockup", &packages, DEFAULT_FILE_VERSION) } #[test] Loading tools/aconfig/aconfig/src/storage/flag_value.rs +12 −6 Original line number Diff line number Diff line Loading @@ -17,12 +17,12 @@ use crate::commands::assign_flag_ids; use crate::storage::FlagPackage; use aconfig_protos::ProtoFlagState; use aconfig_storage_file::{FlagValueHeader, FlagValueList, StorageFileType, FILE_VERSION}; use aconfig_storage_file::{FlagValueHeader, FlagValueList, StorageFileType}; use anyhow::{anyhow, Result}; fn new_header(container: &str, num_flags: u32) -> FlagValueHeader { fn new_header(container: &str, num_flags: u32, version: u32) -> FlagValueHeader { FlagValueHeader { version: FILE_VERSION, version, container: String::from(container), file_type: StorageFileType::FlagVal as u8, file_size: 0, Loading @@ -31,12 +31,16 @@ fn new_header(container: &str, num_flags: u32) -> FlagValueHeader { } } pub fn create_flag_value(container: &str, packages: &[FlagPackage]) -> Result<FlagValueList> { pub fn create_flag_value( container: &str, packages: &[FlagPackage], version: u32, ) -> Result<FlagValueList> { // create list let num_flags = packages.iter().map(|pkg| pkg.boolean_flags.len() as u32).sum(); let mut list = FlagValueList { header: new_header(container, num_flags), header: new_header(container, num_flags, version), booleans: vec![false; num_flags as usize], }; Loading @@ -61,13 +65,15 @@ pub fn create_flag_value(container: &str, packages: &[FlagPackage]) -> Result<Fl #[cfg(test)] mod tests { use aconfig_storage_file::DEFAULT_FILE_VERSION; use super::*; use crate::storage::{group_flags_by_package, tests::parse_all_test_flags}; pub fn create_test_flag_value_list_from_source() -> Result<FlagValueList> { let caches = parse_all_test_flags(); let packages = group_flags_by_package(caches.iter()); create_flag_value("mockup", &packages) create_flag_value("mockup", &packages, DEFAULT_FILE_VERSION) } #[test] Loading Loading
tools/aconfig/aconfig/src/commands.rs +2 −1 Original line number Diff line number Diff line Loading @@ -280,10 +280,11 @@ pub fn create_storage( caches: Vec<Input>, container: &str, file: &StorageFileType, version: u32, ) -> Result<Vec<u8>> { let parsed_flags_vec: Vec<ProtoParsedFlags> = caches.into_iter().map(|mut input| input.try_parse_flags()).collect::<Result<Vec<_>>>()?; generate_storage_file(container, parsed_flags_vec.iter(), file) generate_storage_file(container, parsed_flags_vec.iter(), file, version) } pub fn create_device_config_defaults(mut input: Input) -> Result<Vec<u8>> { Loading
tools/aconfig/aconfig/src/main.rs +16 −2 Original line number Diff line number Diff line Loading @@ -16,6 +16,8 @@ //! `aconfig` is a build time tool to manage build time configurations, such as feature flags. use aconfig_storage_file::DEFAULT_FILE_VERSION; use aconfig_storage_file::MAX_SUPPORTED_FILE_VERSION; use anyhow::{anyhow, bail, Context, Result}; use clap::{builder::ArgAction, builder::EnumValueParser, Arg, ArgMatches, Command}; use core::any::Any; Loading Loading @@ -159,7 +161,13 @@ fn cli() -> Command { .value_parser(|s: &str| StorageFileType::try_from(s)), ) .arg(Arg::new("cache").long("cache").action(ArgAction::Append).required(true)) .arg(Arg::new("out").long("out").required(true)), .arg(Arg::new("out").long("out").required(true)) .arg( Arg::new("version") .long("version") .required(false) .value_parser(|s: &str| s.parse::<u32>()), ), ) } Loading Loading @@ -309,12 +317,18 @@ fn main() -> Result<()> { write_output_to_file_or_stdout(path, &output)?; } Some(("create-storage", sub_matches)) => { let version = get_optional_arg::<u32>(sub_matches, "version").unwrap_or(&DEFAULT_FILE_VERSION); if *version > MAX_SUPPORTED_FILE_VERSION { bail!("Invalid version selected ({})", version); } let file = get_required_arg::<StorageFileType>(sub_matches, "file") .context("Invalid storage file selection")?; let cache = open_zero_or_more_files(sub_matches, "cache")?; let container = get_required_arg::<String>(sub_matches, "container")?; let path = get_required_arg::<String>(sub_matches, "out")?; let output = commands::create_storage(cache, container, file) let output = commands::create_storage(cache, container, file, *version) .context("failed to create storage files")?; write_output_to_file_or_stdout(path, &output)?; } Loading
tools/aconfig/aconfig/src/storage/flag_info.rs +11 −8 Original line number Diff line number Diff line Loading @@ -17,14 +17,12 @@ use crate::commands::assign_flag_ids; use crate::storage::FlagPackage; use aconfig_protos::ProtoFlagPermission; use aconfig_storage_file::{ FlagInfoHeader, FlagInfoList, FlagInfoNode, StorageFileType, FILE_VERSION, }; use aconfig_storage_file::{FlagInfoHeader, FlagInfoList, FlagInfoNode, StorageFileType}; use anyhow::{anyhow, Result}; fn new_header(container: &str, num_flags: u32) -> FlagInfoHeader { fn new_header(container: &str, num_flags: u32, version: u32) -> FlagInfoHeader { FlagInfoHeader { version: FILE_VERSION, version, container: String::from(container), file_type: StorageFileType::FlagInfo as u8, file_size: 0, Loading @@ -33,7 +31,11 @@ fn new_header(container: &str, num_flags: u32) -> FlagInfoHeader { } } pub fn create_flag_info(container: &str, packages: &[FlagPackage]) -> Result<FlagInfoList> { pub fn create_flag_info( container: &str, packages: &[FlagPackage], version: u32, ) -> Result<FlagInfoList> { // create list let num_flags = packages.iter().map(|pkg| pkg.boolean_flags.len() as u32).sum(); Loading @@ -51,7 +53,7 @@ pub fn create_flag_info(container: &str, packages: &[FlagPackage]) -> Result<Fla } let mut list = FlagInfoList { header: new_header(container, num_flags), header: new_header(container, num_flags, version), nodes: is_flag_rw.iter().map(|&rw| FlagInfoNode::create(rw)).collect(), }; Loading @@ -67,11 +69,12 @@ pub fn create_flag_info(container: &str, packages: &[FlagPackage]) -> Result<Fla mod tests { use super::*; use crate::storage::{group_flags_by_package, tests::parse_all_test_flags}; use aconfig_storage_file::DEFAULT_FILE_VERSION; pub fn create_test_flag_info_list_from_source() -> Result<FlagInfoList> { let caches = parse_all_test_flags(); let packages = group_flags_by_package(caches.iter()); create_flag_info("mockup", &packages) create_flag_info("mockup", &packages, DEFAULT_FILE_VERSION) } #[test] Loading
tools/aconfig/aconfig/src/storage/flag_table.rs +11 −6 Original line number Diff line number Diff line Loading @@ -19,13 +19,12 @@ use crate::storage::FlagPackage; use aconfig_protos::ProtoFlagPermission; use aconfig_storage_file::{ get_table_size, FlagTable, FlagTableHeader, FlagTableNode, StorageFileType, StoredFlagType, FILE_VERSION, }; use anyhow::{anyhow, Result}; fn new_header(container: &str, num_flags: u32) -> FlagTableHeader { fn new_header(container: &str, num_flags: u32, version: u32) -> FlagTableHeader { FlagTableHeader { version: FILE_VERSION, version, container: String::from(container), file_type: StorageFileType::FlagMap as u8, file_size: 0, Loading Loading @@ -86,12 +85,16 @@ impl FlagTableNodeWrapper { } } pub fn create_flag_table(container: &str, packages: &[FlagPackage]) -> Result<FlagTable> { pub fn create_flag_table( container: &str, packages: &[FlagPackage], version: u32, ) -> Result<FlagTable> { // create table let num_flags = packages.iter().map(|pkg| pkg.boolean_flags.len() as u32).sum(); let num_buckets = get_table_size(num_flags)?; let mut header = new_header(container, num_flags); let mut header = new_header(container, num_flags, version); let mut buckets = vec![None; num_buckets as usize]; let mut node_wrappers = packages .iter() Loading Loading @@ -138,13 +141,15 @@ pub fn create_flag_table(container: &str, packages: &[FlagPackage]) -> Result<Fl #[cfg(test)] mod tests { use aconfig_storage_file::DEFAULT_FILE_VERSION; use super::*; use crate::storage::{group_flags_by_package, tests::parse_all_test_flags}; fn create_test_flag_table_from_source() -> Result<FlagTable> { let caches = parse_all_test_flags(); let packages = group_flags_by_package(caches.iter()); create_flag_table("mockup", &packages) create_flag_table("mockup", &packages, DEFAULT_FILE_VERSION) } #[test] Loading
tools/aconfig/aconfig/src/storage/flag_value.rs +12 −6 Original line number Diff line number Diff line Loading @@ -17,12 +17,12 @@ use crate::commands::assign_flag_ids; use crate::storage::FlagPackage; use aconfig_protos::ProtoFlagState; use aconfig_storage_file::{FlagValueHeader, FlagValueList, StorageFileType, FILE_VERSION}; use aconfig_storage_file::{FlagValueHeader, FlagValueList, StorageFileType}; use anyhow::{anyhow, Result}; fn new_header(container: &str, num_flags: u32) -> FlagValueHeader { fn new_header(container: &str, num_flags: u32, version: u32) -> FlagValueHeader { FlagValueHeader { version: FILE_VERSION, version, container: String::from(container), file_type: StorageFileType::FlagVal as u8, file_size: 0, Loading @@ -31,12 +31,16 @@ fn new_header(container: &str, num_flags: u32) -> FlagValueHeader { } } pub fn create_flag_value(container: &str, packages: &[FlagPackage]) -> Result<FlagValueList> { pub fn create_flag_value( container: &str, packages: &[FlagPackage], version: u32, ) -> Result<FlagValueList> { // create list let num_flags = packages.iter().map(|pkg| pkg.boolean_flags.len() as u32).sum(); let mut list = FlagValueList { header: new_header(container, num_flags), header: new_header(container, num_flags, version), booleans: vec![false; num_flags as usize], }; Loading @@ -61,13 +65,15 @@ pub fn create_flag_value(container: &str, packages: &[FlagPackage]) -> Result<Fl #[cfg(test)] mod tests { use aconfig_storage_file::DEFAULT_FILE_VERSION; use super::*; use crate::storage::{group_flags_by_package, tests::parse_all_test_flags}; pub fn create_test_flag_value_list_from_source() -> Result<FlagValueList> { let caches = parse_all_test_flags(); let packages = group_flags_by_package(caches.iter()); create_flag_value("mockup", &packages) create_flag_value("mockup", &packages, DEFAULT_FILE_VERSION) } #[test] Loading