Skip to content

Commit a98f654

Browse files
committed
implement more of the test cases for the gt operator
1 parent 0666d56 commit a98f654

File tree

2 files changed

+38
-14
lines changed

2 files changed

+38
-14
lines changed

python/private/py_wheel_normalize_pep440.bzl

Lines changed: 29 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -560,24 +560,15 @@ def _version_lt(left, right):
560560
if left.epoch < right.epoch:
561561
return True
562562

563-
if left.is_prefix:
564-
right_release = right.release[:len(left.release)]
565-
else:
566-
right_release = _pad_zeros(right.release, len(left.release))
567-
568-
if right.is_prefix:
569-
left_release = left.release[:len(right.release)]
570-
else:
571-
left_release = _pad_zeros(left.release, len(right.release))
563+
release_len = max(len(left.release), len(right.release))
564+
left_release = _pad_zeros(left.release, release_len)
565+
right_release = _pad_zeros(right.release, release_len)
572566

573567
if left_release > right_release:
574568
return False
575569
elif left_release < right_release:
576570
return True
577571

578-
if left.is_prefix or right.is_prefix:
579-
return True
580-
581572
return (
582573
left.pre < right.pre and
583574
left.post < right.post and
@@ -592,13 +583,37 @@ def _version_gt(left, right):
592583
elif left.epoch < right.epoch:
593584
return False
594585

595-
return left.release > right.release
586+
release_len = max(len(left.release), len(right.release))
587+
left_release = _pad_zeros(left.release, release_len)
588+
right_release = _pad_zeros(right.release, release_len)
589+
590+
# It cannot be pre and post release at the same time, so the following should be fine
591+
if not left.post and right.post:
592+
return False
593+
594+
if left_release > right_release:
595+
return True
596+
elif left_release < right_release:
597+
return False
598+
599+
if right.post:
600+
if left.post > right.post:
601+
return True
602+
elif left.post < right.post:
603+
return False
604+
605+
return False
596606

597607
def _new_version(*, epoch = 0, release, pre = "", post = "", dev = "", local = "", is_prefix = False, norm):
598608
epoch = epoch or 0
599609
_release = tuple([int(d) for d in release.split(".")])
600610
pre = pre or ""
601-
post = post or ""
611+
if post:
612+
if not post.startswith(".post"):
613+
fail("post release identifier must start with '.post', got: {}".format(post))
614+
post = int(post[len(".post"):])
615+
else:
616+
post = None
602617
dev = dev or ""
603618
local = local or ""
604619

tests/pypi/pep508/evaluate_tests.bzl

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -275,6 +275,15 @@ _MISC_EXPRESSIONS = [
275275
_expr_case('python_version != "3.11.*"', True, {"python_version": "3.10.1"}),
276276
_expr_case('python_version != "3.10"', False, {"python_version": "3.10.0"}),
277277
_expr_case('python_version == "3.10"', True, {"python_version": "3.10.0"}),
278+
# Taken from spec: https://peps.python.org/pep-0440/#exclusive-ordered-comparison
279+
_expr_case('python_version > "1.7"', True, {"python_version": "1.7.1"}),
280+
_expr_case('python_version > "1.7"', False, {"python_version": "1.7.0.post0"}),
281+
_expr_case('python_version > "1.7"', True, {"python_version": "1.7.1"}),
282+
_expr_case('python_version > "1.7.post2"', False, {"python_version": "1.7.0"}),
283+
_expr_case('python_version > "1.7.post2"', True, {"python_version": "1.7.post3"}),
284+
_expr_case('python_version > "1.7.post2"', False, {"python_version": "1.7.1"}),
285+
_expr_case('python_version > "1.7+local"', True, {"python_version": "1.7.1"}),
286+
# TODO @aignas 2025-05-05: add tests for pre-releases
278287
]
279288

280289
def _misc_expressions(env):

0 commit comments

Comments
 (0)