bisect-kit: fix issue: get_revlist is longer than input range
BUG=b:149541494
TEST=python3 -m unittest bisect_kit.cros_util_test
TEST=pylint
Change-Id: Ie90632bf4b486102bcc3d70f1d45baafc5752806
diff --git a/bisect_kit/cros_util.py b/bisect_kit/cros_util.py
index 5b4ba18..3d87324 100644
--- a/bisect_kit/cros_util.py
+++ b/bisect_kit/cros_util.py
@@ -105,6 +105,24 @@
return bool(re.match(re_chromeos_snapshot_version, s))
+def is_cros_version_lesseq(ver1, ver2):
+ """Determines if ver1 is less or equal to ver2.
+
+ Args:
+ ver1: a Chrome OS version in short, full, or snapshot format.
+ ver2: a Chrome OS version in short, full, or snapshot format.
+
+ Returns:
+ True if ver1 is smaller than ver2.
+ """
+ assert is_cros_version(ver1) or is_cros_snapshot_version(ver1)
+ assert is_cros_version(ver2) or is_cros_snapshot_version(ver2)
+
+ ver1 = [int(x) for x in re.split(r'[.-]', ver1) if not x.startswith('R')]
+ ver2 = [int(x) for x in re.split(r'[.-]', ver2) if not x.startswith('R')]
+ return ver1 <= ver2
+
+
def make_cros_full_version(milestone, short_version):
"""Makes full_version from milestone and short_version"""
assert milestone
@@ -665,8 +683,8 @@
list of sorted version numbers (in full format) between [old, new] range
(inclusive).
"""
- old = version_to_short(old)
- new = version_to_short(new)
+ old_short = version_to_short(old)
+ new_short = version_to_short(new)
rev_map = {
} # dict: short version -> list of (short/full or snapshot version, gs path)
@@ -674,7 +692,7 @@
short_version = version_to_short(full_version)
rev_map[short_version] = [(full_version, gs_path)]
- if include_older_build and old not in rev_map:
+ if include_older_build and old_short not in rev_map:
for short_version, gs_path in list_prebuilt_from_chromeos_releases(board):
if short_version not in rev_map:
rev_map[short_version] = [(short_version, gs_path)]
@@ -695,14 +713,14 @@
# between [12345.0.0, 12346.0.0).
# So in the following lines we check two facts:
# 1) If 12346.0.0(next_short_version) is a version between old and new
- if not util.is_direct_relative_version(next_short_version, old):
+ if not util.is_direct_relative_version(next_short_version, old_short):
continue
- if not util.is_direct_relative_version(next_short_version, new):
+ if not util.is_direct_relative_version(next_short_version, new_short):
continue
# 2) If 12345.0.0(short_version) is a version between old and new
- if not util.is_direct_relative_version(short_version, old):
+ if not util.is_direct_relative_version(short_version, old_short):
continue
- if not util.is_direct_relative_version(short_version, new):
+ if not util.is_direct_relative_version(short_version, new_short):
continue
snapshots = list_snapshots_from_image_archive(board, str(major_version))
@@ -716,11 +734,11 @@
result = []
for rev in sorted(rev_map, key=util.version_key_func):
- if not util.is_direct_relative_version(new, rev):
+ if not util.is_direct_relative_version(new_short, rev):
continue
- if not util.is_version_lesseq(old, rev):
+ if not util.is_version_lesseq(old_short, rev):
continue
- if not util.is_version_lesseq(rev, new):
+ if not util.is_version_lesseq(rev, new_short):
continue
for version, gs_path in rev_map[rev]:
@@ -742,7 +760,9 @@
elif is_cros_short_version(version):
version = version_to_full(board, version)
- result.append(version)
+ if is_cros_version_lesseq(old, version) and is_cros_version_lesseq(
+ version, new):
+ result.append(version)
return result