Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6f6a941a authored by Dennis Shen's avatar Dennis Shen Committed by Gerrit Code Review
Browse files

Merge "Add ability to read both v1/v2 package map." into main

parents d8fe3a49 f25d2e3b
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -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>> {
+16 −2
Original line number Diff line number Diff line
@@ -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;
@@ -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>()),
                ),
        )
}

@@ -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)?;
        }
+11 −8
Original line number Diff line number Diff line
@@ -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,
@@ -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();

@@ -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(),
    };

@@ -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]
+11 −6
Original line number Diff line number Diff line
@@ -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,
@@ -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()
@@ -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]
+12 −6
Original line number Diff line number Diff line
@@ -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,
@@ -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],
    };

@@ -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