OSDN Git Service

Monotonic flag sets incorrectly in rangelib
authorTianjie Xu <xunchang@google.com>
Fri, 8 Apr 2016 03:17:48 +0000 (20:17 -0700)
committerTianjie Xu <xunchang@google.com>
Wed, 13 Apr 2016 22:02:20 +0000 (15:02 -0700)
After applying update_target_files_incr_ext4.sh, some files may end up
occupying unsorted block fragments. In one example, an apk file has the
block range [258768-259211,196604]. The monotonic flag in rangelib sets
incorrectly for this example and leads to a bad input file for imgdiff.
After fixing the flag, bsdiff is called instead of imgdiff and the
incremental OTA package generates successfully.

Bug:28053885
(cherry picked from commit cd1e16a7616092e5a315b0a421a0c082da144145)

Change-Id: If286eb382e59b3084a8313ae853b807e4648e5a2

tools/releasetools/rangelib.py
tools/releasetools/test_rangelib.py

index 975a48a..aa572cc 100644 (file)
@@ -91,7 +91,7 @@ class RangeSet(object):
         if last <= s:
           last = s+1
         else:
-          monotonic = True
+          monotonic = False
     data.sort()
     self.data = tuple(self._remove_pairs(data))
     self.monotonic = monotonic
index 7debe66..a61a64e 100644 (file)
@@ -117,6 +117,7 @@ class RangeSetTest(unittest.TestCase):
     self.assertTrue(RangeSet("").monotonic)
     self.assertTrue(RangeSet("0-4 5-9").monotonic)
     self.assertFalse(RangeSet("5-9 0-4").monotonic)
+    self.assertFalse(RangeSet("258768-259211 196604").monotonic)
 
     self.assertTrue(RangeSet(data=[0, 10]).monotonic)
     self.assertTrue(RangeSet(data=[0, 10, 15, 20]).monotonic)