forked from openkylin/platform_build
use imgdiff -z to diff zipfiles
imgdiff now understands the zip file format and can produce smaller patches by doing the patching in uncompressed space. Start taking advantage of this for .zip, .apk, and .jar files.
This commit is contained in:
parent
cca05d9e65
commit
15604b84e2
|
@ -481,6 +481,15 @@ def GetRecoveryAPIVersion(zip):
|
|||
except KeyError:
|
||||
return 0
|
||||
|
||||
|
||||
DIFF_METHOD_BY_EXT = {
|
||||
".gz" : "imgdiff",
|
||||
".zip" : ["imgdiff", "-z"],
|
||||
".jar" : ["imgdiff", "-z"],
|
||||
".apk" : ["imgdiff", "-z"],
|
||||
}
|
||||
|
||||
|
||||
def WriteIncrementalOTAPackage(target_zip, source_zip, output_zip):
|
||||
source_version = GetRecoveryAPIVersion(source_zip)
|
||||
|
||||
|
@ -526,9 +535,8 @@ def WriteIncrementalOTAPackage(target_zip, source_zip, output_zip):
|
|||
verbatim_targets.append((fn, tf.size))
|
||||
elif tf.sha1 != sf.sha1:
|
||||
# File is different; consider sending as a patch
|
||||
diff_method = "bsdiff"
|
||||
if tf.name.endswith(".gz"):
|
||||
diff_method = "imgdiff"
|
||||
ext = os.path.splitext(tf.name)[1]
|
||||
diff_method = DIFF_METHOD_BY_EXT.get(ext, "bsdiff")
|
||||
d = Difference(tf, sf, diff_method)
|
||||
if d is not None:
|
||||
print fn, tf.size, len(d), (float(len(d)) / tf.size)
|
||||
|
|
Loading…
Reference in New Issue