From 1248980a8b5a5f7ab95792c126a0161149406ae5 Mon Sep 17 00:00:00 2001 From: Tao Bao Date: Thu, 12 Jul 2018 14:47:38 -0700 Subject: [PATCH] releasetools: Fix secondary payload generation. The change in [1] removed duplicating radio images from RADIO/ to IMAGES/. When getting the target_files zip for generating secondary payload, we need to additionally copy the files under RADIO/ over. [1] commit 5277d1015fa9b5b5e185d8f5eacf44b8094bb55b Test: python -m unittest test_ota_from_target_files Test: Generate an OTA with secondary payload (--include_secondary). Change-Id: I096f1642a905fb764e63f5df2edc1396aa6befd8 --- tools/releasetools/ota_from_target_files.py | 10 ++++++-- .../test_ota_from_target_files.py | 24 +++++++++++++++++++ 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/tools/releasetools/ota_from_target_files.py b/tools/releasetools/ota_from_target_files.py index 0e25c7e46c..26d4187899 100755 --- a/tools/releasetools/ota_from_target_files.py +++ b/tools/releasetools/ota_from_target_files.py @@ -1657,9 +1657,15 @@ def GetTargetFilesZipForSecondaryImages(input_file, skip_postinstall=False): target_file = common.MakeTempFile(prefix="targetfiles-", suffix=".zip") target_zip = zipfile.ZipFile(target_file, 'w', allowZip64=True) - input_tmp = common.UnzipTemp(input_file, UNZIP_PATTERN) with zipfile.ZipFile(input_file, 'r') as input_zip: infolist = input_zip.infolist() + namelist = input_zip.namelist() + + # Additionally unzip 'RADIO/*' if exists. + unzip_pattern = UNZIP_PATTERN[:] + if any([entry.startswith('RADIO/') for entry in namelist]): + unzip_pattern.append('RADIO/*') + input_tmp = common.UnzipTemp(input_file, unzip_pattern) for info in infolist: unzipped_file = os.path.join(input_tmp, *info.filename.split('/')) @@ -1675,7 +1681,7 @@ def GetTargetFilesZipForSecondaryImages(input_file, skip_postinstall=False): elif skip_postinstall and info.filename == POSTINSTALL_CONFIG: pass - elif info.filename.startswith(('META/', 'IMAGES/')): + elif info.filename.startswith(('META/', 'IMAGES/', 'RADIO/')): common.ZipWrite(target_zip, unzipped_file, arcname=info.filename) common.ZipClose(target_zip) diff --git a/tools/releasetools/test_ota_from_target_files.py b/tools/releasetools/test_ota_from_target_files.py index 7c34b7e998..c8e6750c59 100644 --- a/tools/releasetools/test_ota_from_target_files.py +++ b/tools/releasetools/test_ota_from_target_files.py @@ -566,6 +566,8 @@ class OtaFromTargetFilesTest(unittest.TestCase): self.assertIn('IMAGES/boot.img', namelist) self.assertIn('IMAGES/system.img', namelist) self.assertIn('IMAGES/vendor.img', namelist) + self.assertIn('RADIO/bootloader.img', namelist) + self.assertIn('RADIO/modem.img', namelist) self.assertIn(POSTINSTALL_CONFIG, namelist) self.assertNotIn('IMAGES/system_other.img', namelist) @@ -583,11 +585,33 @@ class OtaFromTargetFilesTest(unittest.TestCase): self.assertIn('IMAGES/boot.img', namelist) self.assertIn('IMAGES/system.img', namelist) self.assertIn('IMAGES/vendor.img', namelist) + self.assertIn('RADIO/bootloader.img', namelist) + self.assertIn('RADIO/modem.img', namelist) self.assertNotIn('IMAGES/system_other.img', namelist) self.assertNotIn('IMAGES/system.map', namelist) self.assertNotIn(POSTINSTALL_CONFIG, namelist) + def test_GetTargetFilesZipForSecondaryImages_withoutRadioImages(self): + input_file = construct_target_files(secondary=True) + common.ZipDelete(input_file, 'RADIO/bootloader.img') + common.ZipDelete(input_file, 'RADIO/modem.img') + target_file = GetTargetFilesZipForSecondaryImages(input_file) + + with zipfile.ZipFile(target_file) as verify_zip: + namelist = verify_zip.namelist() + + self.assertIn('META/ab_partitions.txt', namelist) + self.assertIn('IMAGES/boot.img', namelist) + self.assertIn('IMAGES/system.img', namelist) + self.assertIn('IMAGES/vendor.img', namelist) + self.assertIn(POSTINSTALL_CONFIG, namelist) + + self.assertNotIn('IMAGES/system_other.img', namelist) + self.assertNotIn('IMAGES/system.map', namelist) + self.assertNotIn('RADIO/bootloader.img', namelist) + self.assertNotIn('RADIO/modem.img', namelist) + def test_GetTargetFilesZipWithoutPostinstallConfig(self): input_file = construct_target_files() target_file = GetTargetFilesZipWithoutPostinstallConfig(input_file)