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

Commit 5130a49a authored by Marybeth Fair's avatar Marybeth Fair Committed by Automerger Merge Worker
Browse files

Merge "Write fingerprint to package map." into main am: ce42fb15 am: 65d54a9f

parents 9cda166b 65d54a9f
Loading
Loading
Loading
Loading
+6 −6
Original line number Diff line number Diff line
@@ -438,14 +438,14 @@ where
                    // protect hardcoded offset reads.
                    // Creates a fingerprint of the flag names (which requires sorting the vector).
                    // Fingerprint is used by both codegen and storage files.
pub fn compute_flags_fingerprint(flag_names: &mut Vec<String>) -> Result<u64> {
pub fn compute_flags_fingerprint(flag_names: &mut Vec<String>) -> u64 {
    flag_names.sort();

    let mut hasher = SipHasher13::new();
    for flag in flag_names {
        hasher.write(flag.as_bytes());
    }
    Ok(hasher.finish())
    hasher.finish()
}

#[allow(dead_code)] // TODO: b/316357686 - Use fingerprint in codegen to
@@ -477,7 +477,7 @@ mod tests {
        let mut extracted_flags = extract_flag_names(parsed_flags).unwrap();
        let hash_result = compute_flags_fingerprint(&mut extracted_flags);

        assert_eq!(hash_result.unwrap(), expected_fingerprint);
        assert_eq!(hash_result, expected_fingerprint);
    }

    #[test]
@@ -498,7 +498,7 @@ mod tests {
        let result_from_names = compute_flags_fingerprint(&mut flag_names_vec);

        // Assert the same hash is generated for each case.
        assert_eq!(result_from_parsed_flags.unwrap(), result_from_names.unwrap());
        assert_eq!(result_from_parsed_flags, result_from_names);
    }

    #[test]
@@ -508,9 +508,9 @@ mod tests {
        let second_parsed_flags = crate::test::parse_second_package_flags();

        let mut extracted_flags = extract_flag_names(parsed_flags).unwrap();
        let result_from_parsed_flags = compute_flags_fingerprint(&mut extracted_flags).unwrap();
        let result_from_parsed_flags = compute_flags_fingerprint(&mut extracted_flags);
        let mut second_extracted_flags = extract_flag_names(second_parsed_flags).unwrap();
        let second_result = compute_flags_fingerprint(&mut second_extracted_flags).unwrap();
        let second_result = compute_flags_fingerprint(&mut second_extracted_flags);

        // Different flags should have a different fingerprint.
        assert_ne!(result_from_parsed_flags, second_result);
+1 −1
Original line number Diff line number Diff line
@@ -73,7 +73,7 @@ mod tests {

    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());
        let packages = group_flags_by_package(caches.iter(), DEFAULT_FILE_VERSION);
        create_flag_info("mockup", &packages, DEFAULT_FILE_VERSION)
    }

+1 −1
Original line number Diff line number Diff line
@@ -148,7 +148,7 @@ mod tests {

    fn create_test_flag_table_from_source() -> Result<FlagTable> {
        let caches = parse_all_test_flags();
        let packages = group_flags_by_package(caches.iter());
        let packages = group_flags_by_package(caches.iter(), DEFAULT_FILE_VERSION);
        create_flag_table("mockup", &packages, DEFAULT_FILE_VERSION)
    }

+1 −1
Original line number Diff line number Diff line
@@ -72,7 +72,7 @@ mod tests {

    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());
        let packages = group_flags_by_package(caches.iter(), DEFAULT_FILE_VERSION);
        create_flag_value("mockup", &packages, DEFAULT_FILE_VERSION)
    }

+13 −5
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@ pub mod package_table;
use anyhow::Result;
use std::collections::{HashMap, HashSet};

use crate::commands::compute_flags_fingerprint;
use crate::storage::{
    flag_info::create_flag_info, flag_table::create_flag_table, flag_value::create_flag_value,
    package_table::create_package_table,
@@ -59,7 +60,7 @@ impl<'a> FlagPackage<'a> {
    }
}

pub fn group_flags_by_package<'a, I>(parsed_flags_vec_iter: I) -> Vec<FlagPackage<'a>>
pub fn group_flags_by_package<'a, I>(parsed_flags_vec_iter: I, version: u32) -> Vec<FlagPackage<'a>>
where
    I: Iterator<Item = &'a ProtoParsedFlags>,
{
@@ -76,13 +77,18 @@ where
        }
    }

    // cacluate boolean flag start index for each package
    // Calculate boolean flag start index for each package
    let mut boolean_start_index = 0;
    for p in packages.iter_mut() {
        p.boolean_start_index = boolean_start_index;
        boolean_start_index += p.boolean_flags.len() as u32;

        // TODO: b/316357686 - Calculate fingerprint and add to package.
        if version > 2 {
            let mut flag_names_vec =
                p.flag_names.clone().into_iter().map(String::from).collect::<Vec<_>>();
            let fingerprint = compute_flags_fingerprint(&mut flag_names_vec);
            p.fingerprint = fingerprint;
        }
    }

    packages
@@ -97,7 +103,7 @@ pub fn generate_storage_file<'a, I>(
where
    I: Iterator<Item = &'a ProtoParsedFlags>,
{
    let packages = group_flags_by_package(parsed_flags_vec_iter);
    let packages = group_flags_by_package(parsed_flags_vec_iter, version);

    match file {
        StorageFileType::PackageMap => {
@@ -121,6 +127,8 @@ where

#[cfg(test)]
mod tests {
    use aconfig_storage_file::DEFAULT_FILE_VERSION;

    use super::*;
    use crate::Input;

@@ -174,7 +182,7 @@ mod tests {
    #[test]
    fn test_flag_package() {
        let caches = parse_all_test_flags();
        let packages = group_flags_by_package(caches.iter());
        let packages = group_flags_by_package(caches.iter(), DEFAULT_FILE_VERSION);

        for pkg in packages.iter() {
            let pkg_name = pkg.package_name;
Loading