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

Commit f0c58d81 authored by Doug Zongker's avatar Doug Zongker Committed by Android Git Automerger
Browse files

am b34fcce0: explicitly check the superblock for differences

* commit 'b34fcce0':
  explicitly check the superblock for differences
parents 588011a9 b34fcce0
Loading
Loading
Loading
Loading
+18 −1
Original line number Diff line number Diff line
@@ -30,6 +30,7 @@ import time
import zipfile

import blockimgdiff
from rangelib import *

try:
  from hashlib import sha1 as sha1
@@ -1023,10 +1024,11 @@ def ComputeDifferences(diffs):


class BlockDifference:
  def __init__(self, partition, tgt, src=None):
  def __init__(self, partition, tgt, src=None, check_first_block=False):
    self.tgt = tgt
    self.src = src
    self.partition = partition
    self.check_first_block = check_first_block

    b = blockimgdiff.BlockImageDiff(tgt, src, threads=OPTIONS.worker_threads)
    tmpdir = tempfile.mkdtemp()
@@ -1043,6 +1045,9 @@ class BlockDifference:
      self._WriteUpdate(script, output_zip)

    else:
      if self.check_first_block:
        self._CheckFirstBlock(script)

      script.AppendExtra('if range_sha1("%s", "%s") == "%s" then' %
                         (self.device, self.src.care_map.to_string_raw(),
                          self.src.TotalSha1()))
@@ -1072,6 +1077,18 @@ class BlockDifference:
            (self.device, partition, partition, partition))
    script.AppendExtra(script._WordWrap(call))

  def _CheckFirstBlock(self, script):
    r = RangeSet((0, 1))
    h = sha1()
    for data in self.src.ReadRangeSet(r):
      h.update(data)
    h = h.hexdigest()

    script.AppendExtra(('(range_sha1("%s", "%s") == "%s") || '
                        'abort("%s has been remounted R/W; '
                        'reflash device to reenable OTA updates");')
                       % (self.device, r.to_string_raw(), h, self.device))


DataImage = blockimgdiff.DataImage

+4 −2
Original line number Diff line number Diff line
@@ -731,14 +731,16 @@ def WriteBlockIncrementalOTAPackage(target_zip, source_zip, output_zip):

  system_src = GetImage("system", OPTIONS.source_tmp, OPTIONS.source_info_dict)
  system_tgt = GetImage("system", OPTIONS.target_tmp, OPTIONS.target_info_dict)
  system_diff = common.BlockDifference("system", system_tgt, system_src)
  system_diff = common.BlockDifference("system", system_tgt, system_src,
                                       check_first_block=True)

  if HasVendorPartition(target_zip):
    if not HasVendorPartition(source_zip):
      raise RuntimeError("can't generate incremental that adds /vendor")
    vendor_src = GetImage("vendor", OPTIONS.source_tmp, OPTIONS.source_info_dict)
    vendor_tgt = GetImage("vendor", OPTIONS.target_tmp, OPTIONS.target_info_dict)
    vendor_diff = common.BlockDifference("vendor", vendor_tgt, vendor_src)
    vendor_diff = common.BlockDifference("vendor", vendor_tgt, vendor_src,
                                         check_first_block=True)
  else:
    vendor_diff = None