1818from univers import maven
1919from univers import nuget
2020from univers import rpm
21- from univers .conan .version import ConanVersion as conan_version
21+ from univers .conan .version import Version as conan_version
2222from univers .utils import remove_spaces
2323
2424"""
@@ -140,7 +140,6 @@ def __eq__(self, other):
140140
141141 def __lt__ (self , other ):
142142 if not isinstance (other , self .__class__ ):
143- print ('Hello!' )
144143 return NotImplemented
145144 return self .value .__lt__ (other .value )
146145
@@ -653,22 +652,14 @@ def __ge__(self, other):
653652 # version value are of diff type, then semver one is always ahead of legacy
654653 return isinstance (self .value , SemverVersion )
655654
655+
656+ @attr .s (frozen = True , order = False , eq = False , hash = True )
657+ @total_ordering
656658class ConanVersion (Version ):
657659 @classmethod
658660 def build_value (cls , string ):
659661 return conan_version (string )
660662
661- # def __eq__(self, other):
662- # if not isinstance(other, self.__class__):
663- # return NotImplemented
664- # return conan_version.vercmp(self.value, other.value) == 0
665-
666- def __eq__ (self , other ):
667- if other is None :
668- return False
669- if not isinstance (other , conan_version ):
670- other = conan_version (other )
671-
672663 @classmethod
673664 def is_valid (cls , string ):
674665 try :
@@ -697,6 +688,46 @@ def prerelease(self):
697688 def build (self ):
698689 return self .value and self .value .build
699690
691+ @property
692+ def micro (self ):
693+ return self .value and self .value .micro
694+
695+ @property
696+ def pre (self ):
697+ return self .value and self .value ._pre
698+
699+ @property
700+ def nonzero_items (self ):
701+ return self .value and self .value ._nonzero_items
702+
703+ @property
704+ def main (self ):
705+ return self .value ._items
706+
707+ @property
708+ def major (self ):
709+ try :
710+ return self .value .main [0 ]
711+ except IndexError :
712+ return None
713+
714+ @property
715+ def minor (self ):
716+ try :
717+ return self .value .main [1 ]
718+ except IndexError :
719+ return None
720+
721+ @property
722+ def patch (self ):
723+ try :
724+ return self .value .main [2 ]
725+ except IndexError :
726+ return None
727+
728+ def upper_bound (self , index ):
729+ return self .value and self .value .upper_bound (index )
730+
700731 def next_major (self ):
701732 return self .value and self .value .next_major ()
702733
@@ -706,42 +737,41 @@ def next_minor(self):
706737 def next_patch (self ):
707738 return self .value and self .value .next_patch ()
708739
709- @property
710- def micro (self ):
711- # self.value()
712- return self .value and self .value .micro
740+ def bump (self , index ):
741+ return self .value and self .value .bump (index )
713742
714- @property
715- def pre (self ):
716- return self .value and self .value ._pre
743+ def __eq__ (self , other ):
744+ if other is None :
745+ return False
746+ if not isinstance (other , ConanVersion ):
747+ other = ConanVersion .build_value (other )
748+ return self .value == other
749+ return self .value == other .value
717750
718751 def __lt__ (self , other ):
719752 if other is None :
720753 return False
721- if not isinstance (other , conan_version ):
722- other = conan_version (other )
723-
724- if self .value ._pre :
725- if other ._pre : # both are pre-releases
726- return (self .value ._nonzero_items , self .value ._pre , self .value ._build ) < (
727- other ._nonzero_items ,
728- other ._pre ,
729- other ._build ,
730- )
731- else : # Left hand is pre-release, right side is regular
732- if (
733- self .value ._nonzero_items == other ._nonzero_items
734- ): # Problem only happens if both equal
735- return True
736- else :
737- return self .value ._nonzero_items < other ._nonzero_items
738- else :
739- if other ._pre : # Left hand is regular, right side is pre-release
740- if (
741- self .value ._nonzero_items == other ._nonzero_items
742- ): # Problem only happens if both equal
743- return False
744- else :
745- return self .value ._nonzero_items < other ._nonzero_items
746- else : # None of them is pre-release
747- return (self .value ._nonzero_items , self .value ._build ) < (other ._nonzero_items , other ._build )
754+ if not isinstance (other , ConanVersion ):
755+ other = ConanVersion (str (other ))
756+ return self .value < other .value
757+
758+ def __le__ (self , other ):
759+ if other is None :
760+ return False
761+ if not isinstance (other , ConanVersion ):
762+ other = ConanVersion (str (other ))
763+ return self .value <= other .value
764+
765+ def __gt__ (self , other ):
766+ if other is None :
767+ return False
768+ if not isinstance (other , ConanVersion ):
769+ other = ConanVersion (str (other ))
770+ return self .value > other .value
771+
772+ def __ge__ (self , other ):
773+ if other is None :
774+ return False
775+ if not isinstance (other , ConanVersion ):
776+ other = ConanVersion (str (other ))
777+ return self .value >= other .value
0 commit comments