From 3f18d87e1a2c82f1d298ec4f303eb314006a3b82 Mon Sep 17 00:00:00 2001 From: Zhi Dou Date: Wed, 22 Mar 2023 20:30:42 +0000 Subject: [PATCH] Pass BuildRelease to apply and _apply_transformation methods Pass BuildRelease to apply and _apply_transformation methods in class of transformations, so that transformation could use the build_release information to decide whether certain steps of the transformation should be performed. Test: atest mainline_modules_sdks_test --host Ignore-AOSP-First: Check into internal branch first to make sure all testing works. Bug: 254111089 Change-Id: If71a921752f4c481030efb0fd391fb328b5dffb6 --- build/mainline_modules_sdks.py | 31 ++++++++++++++++------------- build/mainline_modules_sdks_test.py | 19 +++++++++--------- 2 files changed, 27 insertions(+), 23 deletions(-) diff --git a/build/mainline_modules_sdks.py b/build/mainline_modules_sdks.py index 0c35850..e829480 100755 --- a/build/mainline_modules_sdks.py +++ b/build/mainline_modules_sdks.py @@ -72,12 +72,12 @@ class FileTransformation: # The path of the file within the SDK snapshot zip file. path: str - def apply(self, producer, path): + def apply(self, producer, path, build_release): """Apply the transformation to the path; changing it in place.""" with open(path, "r+", encoding="utf8") as file: - self._apply_transformation(producer, file) + self._apply_transformation(producer, file, build_release) - def _apply_transformation(self, producer, file): + def _apply_transformation(self, producer, file, build_release): """Apply the transformation to the file. The file has been opened in read/write mode so the implementation of @@ -96,7 +96,7 @@ class SoongConfigVarTransformation(FileTransformation): # The line containing the prefer property. PREFER_LINE = " prefer: false," - def _apply_transformation(self, producer, file): + def _apply_transformation(self, producer, file, build_release): raise NotImplementedError @@ -117,11 +117,11 @@ class SoongConfigBoilerplateInserter(SoongConfigVarTransformation): def config_module_type(self, module_type): return self.configModuleTypePrefix + module_type - def apply(self, producer, path): + def apply(self, producer, path, build_release): with open(path, "r+", encoding="utf8") as file: - self._apply_transformation(producer, file) + self._apply_transformation(producer, file, build_release) - def _apply_transformation(self, producer, file): + def _apply_transformation(self, producer, file, build_release): # TODO(b/174997203): Remove this when we have a proper way to control # prefer flags in Mainline modules. @@ -228,7 +228,7 @@ soong_config_module_type {{ @dataclasses.dataclass(frozen=True) class UseSourceConfigVarTransformation(SoongConfigVarTransformation): - def _apply_transformation(self, producer, file): + def _apply_transformation(self, producer, file, build_release): lines = [] for line in file: line = line.rstrip("\n") @@ -1247,9 +1247,11 @@ class SdkDistProducer: sdk_path = sdk_snapshot_zip_file(snapshots_dir, sdk) sdk_type = sdk_type_from_name(sdk) transformations = module.transformations(build_release, sdk_type) - self.dist_sdk_snapshot_zip(sdk_path, sdk_dist_subdir, transformations) + self.dist_sdk_snapshot_zip( + build_release, sdk_path, sdk_dist_subdir, transformations) - def dist_sdk_snapshot_zip(self, src_sdk_zip, sdk_dist_dir, transformations): + def dist_sdk_snapshot_zip( + self, build_release, src_sdk_zip, sdk_dist_dir, transformations): """Copy the sdk snapshot zip file to a dist directory. If no transformations are provided then this simply copies the show sdk @@ -1257,7 +1259,8 @@ class SdkDistProducer: provided then the files to be transformed are extracted from the snapshot zip file, they are transformed to files in a separate directory and then a new zip file is created in the dist directory with the - original files replaced by the newly transformed files. + original files replaced by the newly transformed files. build_release is + provided for transformations if it is needed. """ os.makedirs(sdk_dist_dir, exist_ok=True) dest_sdk_zip = os.path.join(sdk_dist_dir, os.path.basename(src_sdk_zip)) @@ -1280,7 +1283,7 @@ class SdkDistProducer: extract_matching_files_from_zip(src_sdk_zip, tmp_dir, pattern) # Apply the transformations to the extracted files in situ. - apply_transformations(self, tmp_dir, transformations) + apply_transformations(self, tmp_dir, transformations, build_release) # Replace the original entries in the zip with the transformed # files. @@ -1334,7 +1337,7 @@ def copy_zip_and_replace(producer, src_zip_path, dest_zip_path, src_dir, paths): cwd=src_dir) -def apply_transformations(producer, tmp_dir, transformations): +def apply_transformations(producer, tmp_dir, transformations, build_release): for transformation in transformations: path = os.path.join(tmp_dir, transformation.path) @@ -1342,7 +1345,7 @@ def apply_transformations(producer, tmp_dir, transformations): modified = os.path.getmtime(path) # Transform the file. - transformation.apply(producer, path) + transformation.apply(producer, path, build_release) # Reset the timestamp of the file to the original timestamp before the # transformation was applied. diff --git a/build/mainline_modules_sdks_test.py b/build/mainline_modules_sdks_test.py index 264819f..ee5ba57 100644 --- a/build/mainline_modules_sdks_test.py +++ b/build/mainline_modules_sdks_test.py @@ -438,7 +438,7 @@ def read_test_data(relative_path): class TestAndroidBpTransformations(unittest.TestCase): - def apply_transformations(self, src, transformations, expected): + def apply_transformations(self, src, transformations, build_release, expected): producer = mm.SdkDistProducer( subprocess_runner=mock.Mock(mm.SubprocessRunner), snapshot_builder=mock.Mock(mm.SnapshotBuilder), @@ -450,7 +450,8 @@ class TestAndroidBpTransformations(unittest.TestCase): with open(path, "w", encoding="utf8") as f: f.write(src) - mm.apply_transformations(producer, tmp_dir, transformations) + mm.apply_transformations( + producer, tmp_dir, transformations, build_release) with open(path, "r", encoding="utf8") as f: result = f.read() @@ -471,7 +472,7 @@ class TestAndroidBpTransformations(unittest.TestCase): module = MAINLINE_MODULES_BY_APEX["com.android.ipsec"] transformations = module.transformations(mm.S, mm.Sdk) - self.apply_transformations(src, transformations, expected) + self.apply_transformations(src, transformations, mm.S, expected) def test_common_mainline_module_tiramisu(self): """Tests the transformations applied to a common mainline sdk on T. @@ -486,7 +487,7 @@ class TestAndroidBpTransformations(unittest.TestCase): module = MAINLINE_MODULES_BY_APEX["com.android.ipsec"] transformations = module.transformations(mm.Tiramisu, mm.Sdk) - self.apply_transformations(src, transformations, expected) + self.apply_transformations(src, transformations, mm.Tiramisu, expected) def test_optional_mainline_module(self): """Tests the transformations applied to an optional mainline sdk on S. @@ -502,7 +503,7 @@ class TestAndroidBpTransformations(unittest.TestCase): module = MAINLINE_MODULES_BY_APEX["com.android.wifi"] transformations = module.transformations(mm.S, mm.Sdk) - self.apply_transformations(src, transformations, expected) + self.apply_transformations(src, transformations, mm.S, expected) def test_optional_mainline_module_tiramisu(self): """Tests the transformations applied to an optional mainline sdk on T. @@ -517,7 +518,7 @@ class TestAndroidBpTransformations(unittest.TestCase): module = MAINLINE_MODULES_BY_APEX["com.android.wifi"] transformations = module.transformations(mm.Tiramisu, mm.Sdk) - self.apply_transformations(src, transformations, expected) + self.apply_transformations(src, transformations, mm.Tiramisu, expected) def test_art(self): """Tests the transformations applied to a the ART mainline module. @@ -533,7 +534,7 @@ class TestAndroidBpTransformations(unittest.TestCase): module = MAINLINE_MODULES_BY_APEX["com.android.art"] transformations = module.transformations(mm.S, mm.Sdk) - self.apply_transformations(src, transformations, expected) + self.apply_transformations(src, transformations, mm.S, expected) def test_art_module_exports(self): """Tests the transformations applied to a the ART mainline module. @@ -549,7 +550,7 @@ class TestAndroidBpTransformations(unittest.TestCase): module = MAINLINE_MODULES_BY_APEX["com.android.art"] transformations = module.transformations(mm.S, mm.HostExports) - self.apply_transformations(src, transformations, expected) + self.apply_transformations(src, transformations, mm.S, expected) def test_r_build(self): """Tests the transformations that are applied for the R build. @@ -567,7 +568,7 @@ class TestAndroidBpTransformations(unittest.TestCase): module = MAINLINE_MODULES_BY_APEX["com.android.ipsec"] transformations = module.transformations(mm.R, mm.Sdk) - self.apply_transformations(src, transformations, expected) + self.apply_transformations(src, transformations, mm.R, expected) class TestFilterModules(unittest.TestCase):