@@ -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
597607def _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
0 commit comments