From fe97dbd4ce8b0371f93d1a322fd863a463304b79 Mon Sep 17 00:00:00 2001 From: Tao Bao Date: Tue, 6 Feb 2018 15:01:54 -0800 Subject: [PATCH] releasetools: RangeSet.monotonic is not an optional attribute. 'monotonic' has been non-optional since [1] (L-MR1). Fix the comment in RangeSet.parse(), as well as the use in blockimgdiff.py. [1] commit 8b72aefb5a8ed4da28c6f83854e8babf53b9cb53. Test: Generate an incremental BBOTA package. Change-Id: I7f95231683473b4f0f07f9c83fccc0e36a1340cb --- tools/releasetools/blockimgdiff.py | 3 +-- tools/releasetools/rangelib.py | 33 +++++++++++++++++++----------- 2 files changed, 22 insertions(+), 14 deletions(-) diff --git a/tools/releasetools/blockimgdiff.py b/tools/releasetools/blockimgdiff.py index b1ad8b636a..931026b119 100644 --- a/tools/releasetools/blockimgdiff.py +++ b/tools/releasetools/blockimgdiff.py @@ -191,8 +191,7 @@ class Transfer(object): self.tgt_sha1 = tgt_sha1 self.src_sha1 = src_sha1 self.style = style - self.intact = (getattr(tgt_ranges, "monotonic", False) and - getattr(src_ranges, "monotonic", False)) + self.intact = tgt_ranges.monotonic and src_ranges.monotonic # We use OrderedDict rather than dict so that the output is repeatable; # otherwise it would depend on the hash values of the Transfer objects. diff --git a/tools/releasetools/rangelib.py b/tools/releasetools/rangelib.py index 8af61c3555..36becf4192 100644 --- a/tools/releasetools/rangelib.py +++ b/tools/releasetools/rangelib.py @@ -13,15 +13,22 @@ # limitations under the License. from __future__ import print_function + import heapq import itertools + __all__ = ["RangeSet"] + class RangeSet(object): - """A RangeSet represents a set of nonoverlapping ranges on the - integers (ie, a set of integers, but efficient when the set contains - lots of runs.""" + """A RangeSet represents a set of non-overlapping ranges on integers. + + Attributes: + monotonic: Whether the input has all its integers in increasing order. + extra: A dict that can be used by the caller, e.g. to store info that's + only meaningful to caller. + """ def __init__(self, data=None): self.monotonic = False @@ -63,16 +70,18 @@ class RangeSet(object): @classmethod def parse(cls, text): - """Parse a text string consisting of a space-separated list of - blocks and ranges, eg "10-20 30 35-40". Ranges are interpreted to - include both their ends (so the above example represents 18 - individual blocks. Returns a RangeSet object. + """Parses a text string into a RangeSet. - If the input has all its blocks in increasing order, then returned - RangeSet will have an extra attribute 'monotonic' that is set to - True. For example the input "10-20 30" is monotonic, but the input - "15-20 30 10-14" is not, even though they represent the same set - of blocks (and the two RangeSets will compare equal with ==). + The input text string consists of a space-separated list of blocks and + ranges, e.g. "10-20 30 35-40". Ranges are interpreted to include both their + ends (so the above example represents 18 individual blocks). Returns a + RangeSet object. + + If the input has all its blocks in increasing order, then the 'monotonic' + attribute of the returned RangeSet will be set to True. For example the + input "10-20 30" is monotonic, but the input "15-20 30 10-14" is not, even + though they represent the same set of blocks (and the two RangeSets will + compare equal with ==). """ return cls(text)