Merge "releasetools: RangeSet.monotonic is not an optional attribute." am: acb3cecc46
am: c6b824ba96
am: 93c09cb740
Change-Id: I87bd661a6ac967f30beb84fafcfc8bfc9bb6fe1a
This commit is contained in:
commit
f980e046e0
2 changed files with 22 additions and 14 deletions
|
@ -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.
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
Loading…
Reference in a new issue