summaryrefslogtreecommitdiffstats
path: root/tools/releasetools/rangelib.py
diff options
context:
space:
mode:
authorTao Bao <tbao@google.com>2015-08-31 21:10:06 +0000
committerAndroid Git Automerger <android-git-automerger@android.com>2015-08-31 21:10:06 +0000
commit29c245e803496625cb3b72719f1cdce8d73de041 (patch)
treec0204177fe6bdb73cad34efb08497d7d4b83665c /tools/releasetools/rangelib.py
parent27bc97e6e14c663e5e55c6a934cc485cadbe9e33 (diff)
parente337093e6c5d502f0f4094639b41c001b3048d0f (diff)
downloadbuild-29c245e803496625cb3b72719f1cdce8d73de041.zip
build-29c245e803496625cb3b72719f1cdce8d73de041.tar.gz
build-29c245e803496625cb3b72719f1cdce8d73de041.tar.bz2
am e337093e: Merge changes from topic \'stash-size\' into mnc-dr-dev
* commit 'e337093e6c5d502f0f4094639b41c001b3048d0f': Split large files for BBOTA v3. Revise stash for BBOTAs when needed. Assert the stash size when generating OTAs.
Diffstat (limited to 'tools/releasetools/rangelib.py')
-rw-r--r--tools/releasetools/rangelib.py33
1 files changed, 33 insertions, 0 deletions
diff --git a/tools/releasetools/rangelib.py b/tools/releasetools/rangelib.py
index 1506658..373bbed 100644
--- a/tools/releasetools/rangelib.py
+++ b/tools/releasetools/rangelib.py
@@ -24,6 +24,7 @@ class RangeSet(object):
lots of runs."""
def __init__(self, data=None):
+ # TODO(tbao): monotonic is broken when passing in a tuple.
self.monotonic = False
if isinstance(data, str):
self._parse_internal(data)
@@ -260,6 +261,38 @@ class RangeSet(object):
out = out.union(RangeSet(str(s1) + "-" + str(e1-1)))
return out
+ def first(self, n):
+ """Return the RangeSet that contains at most the first 'n' integers.
+
+ >>> RangeSet("0-9").first(1)
+ <RangeSet("0")>
+ >>> RangeSet("10-19").first(5)
+ <RangeSet("10-14")>
+ >>> RangeSet("10-19").first(15)
+ <RangeSet("10-19")>
+ >>> RangeSet("10-19 30-39").first(3)
+ <RangeSet("10-12")>
+ >>> RangeSet("10-19 30-39").first(15)
+ <RangeSet("10-19 30-34")>
+ >>> RangeSet("10-19 30-39").first(30)
+ <RangeSet("10-19 30-39")>
+ >>> RangeSet("0-9").first(0)
+ <RangeSet("")>
+ """
+
+ if self.size() <= n:
+ return self
+
+ out = []
+ for s, e in self:
+ if e - s >= n:
+ out += (s, s+n)
+ break
+ else:
+ out += (s, e)
+ n -= e - s
+ return RangeSet(data=out)
+
if __name__ == "__main__":
import doctest