Add support for DELTA_IMG_AB update type
authorMateusz Moscicki <m.moscicki2@partner.samsung.com>
Mon, 14 Feb 2022 14:32:11 +0000 (15:32 +0100)
committerMateusz Mościcki <m.moscicki2@partner.samsung.com>
Tue, 22 Feb 2022 12:05:30 +0000 (12:05 +0000)
DELTA_IMG_AB type is the same as DELTA_IMG except that the patch is
compressed with Brotli instead of LZMA. Due to the fact that Brotli
allows decompression with a small amount of RAM, this type is suitable
for patching large partition.

Change-Id: I3980bd395184855804c8f0c0bc5e64763023d10b

mk_delta/common/bin/CreatePatch.py
mk_delta/common/bin/mk_part_delta.sh

index 1299f58..6fb8d31 100755 (executable)
@@ -62,6 +62,7 @@ def global_paths():
        global SUPPORT_CONTAINERS
        global FULL_IMG
        global DELTA_IMG
+       global DELTA_IMG_AB
        global DELTA_FS
        global EXTRA
        global COMMON_BIN_PATH
@@ -86,6 +87,7 @@ DIFF_SUFFIX = ".delta"
 NEW_PREFIX = 'new'
 FULL_IMG = "FULL_IMG"
 DELTA_IMG = "DELTA_IMG"
+DELTA_IMG_AB = "DELTA_IMG_AB"
 DELTA_FS = "DELTA_FS"
 EXTRA = "EXTRA"
 PRE_UA = "PRE_UA"
@@ -94,6 +96,8 @@ VERBATIM_LIST = "Verbatim_List.txt"
 EMPTY = ""
 MEM_REQ = 0
 MEM_FILE = "NULL"
+COMPRESSION_LZMA = "lzma"
+COMPRESSION_BROTLI = "brotli"
 
 SUPPORT_RENAME = "TRUE" #Use appropriate name
 SUPPORT_CONTAINERS = "FALSE"
@@ -127,7 +131,7 @@ def main():
                                UPDATE_CFG_PATH = '../'+sys.argv[8]
                                GenerateDiffAttr = "TRUE"
 
-               elif UPDATE_TYPE == DELTA_IMG or UPDATE_TYPE == FULL_IMG:
+               elif UPDATE_TYPE in [DELTA_IMG, DELTA_IMG_AB, FULL_IMG]:
                        if len(sys.argv) == 7:
                                #Use path in better way
                                UPDATE_CFG_PATH = '../'+sys.argv[6]
@@ -164,7 +168,9 @@ def main():
                if UPDATE_TYPE == FULL_IMG:
                        SS_mk_full_img(BASE_OLD, BASE_NEW, OUT_DIR, PART_NAME, UPDATE_CFG_PATH)
                elif UPDATE_TYPE == DELTA_IMG:
-                       SS_mk_delta_img(BASE_OLD, BASE_NEW, OUT_DIR, PART_NAME, UPDATE_CFG_PATH)
+                       SS_mk_delta_img(BASE_OLD, BASE_NEW, OUT_DIR, PART_NAME, UPDATE_CFG_PATH, COMPRESSION_LZMA)
+               elif UPDATE_TYPE == DELTA_IMG_AB:
+                       SS_mk_delta_img(BASE_OLD, BASE_NEW, OUT_DIR, PART_NAME, UPDATE_CFG_PATH, COMPRESSION_BROTLI)
                elif UPDATE_TYPE == DELTA_FS:
                        AttributeFile = ATTR_NEW
                        ATTR_FILE = OUT_DIR+'/'+PART_NAME+ATTR_DOC_EXT
@@ -218,7 +224,7 @@ def SS_update_cfg(DELTA_BIN, UPDATE_CFG_PATH):
                        f.write(line)
        f.close()
 
-def SS_mk_delta_img(BASE_OLD, BASE_NEW, OUT_DIR, DELTA_BIN, UPDATE_CFG_PATH):
+def SS_mk_delta_img(BASE_OLD, BASE_NEW, OUT_DIR, DELTA_BIN, UPDATE_CFG_PATH, COMPRESSION_METHOD):
        #for sizes
 
        oldsize_d= os.path.getsize(BASE_OLD)
@@ -249,7 +255,7 @@ def SS_mk_delta_img(BASE_OLD, BASE_NEW, OUT_DIR, DELTA_BIN, UPDATE_CFG_PATH):
 
        patchLoc = '%s/%s' % (OUT_DIR, DELTA)
        logging.info('Make Delta Image %s <--> %s ==> %s %s' % (BASE_OLD, BASE_NEW , DELTA_BIN, patchLoc))
-       subprocess.call([DIFF_UTIL,BASE_OLD,BASE_NEW,patchLoc])
+       subprocess.call([DIFF_UTIL,"-c",COMPRESSION_METHOD,BASE_OLD,BASE_NEW,patchLoc])
 
 
 
index 1b6b8e9..a345a77 100755 (executable)
@@ -608,7 +608,7 @@ fi
 
 if [ "${UPDATE_TYPE}" = "FULL_IMG" ] || [ "${UPDATE_TYPE}" = "PRE_UA" ]; then
        fn_mk_full_img
-elif [ "${UPDATE_TYPE}" = "DELTA_IMG" ]; then
+elif [ "${UPDATE_TYPE}" = "DELTA_IMG" ] || [ "${UPDATE_TYPE}" = "DELTA_IMG_AB" ]; then
        fn_mk_delta_img
 elif [ "${UPDATE_TYPE}" = "DELTA_FS" ]; then
        fn_mk_delta_fs