|
18 | 18 | from univers import maven |
19 | 19 | from univers import nuget |
20 | 20 | from univers import rpm |
| 21 | +from univers.conan.version import ConanVersion as conan_version |
21 | 22 | from univers.utils import remove_spaces |
22 | 23 |
|
23 | 24 | """ |
@@ -139,6 +140,7 @@ def __eq__(self, other): |
139 | 140 |
|
140 | 141 | def __lt__(self, other): |
141 | 142 | if not isinstance(other, self.__class__): |
| 143 | + print('Hello!') |
142 | 144 | return NotImplemented |
143 | 145 | return self.value.__lt__(other.value) |
144 | 146 |
|
@@ -650,3 +652,96 @@ def __ge__(self, other): |
650 | 652 | return self.value.__ge__(other.value) |
651 | 653 | # version value are of diff type, then semver one is always ahead of legacy |
652 | 654 | return isinstance(self.value, SemverVersion) |
| 655 | + |
| 656 | +class ConanVersion(Version): |
| 657 | + @classmethod |
| 658 | + def build_value(cls, string): |
| 659 | + return conan_version(string) |
| 660 | + |
| 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 | + |
| 672 | + @classmethod |
| 673 | + def is_valid(cls, string): |
| 674 | + try: |
| 675 | + cls.build_value(string) |
| 676 | + return True |
| 677 | + except ValueError: |
| 678 | + return False |
| 679 | + |
| 680 | + @property |
| 681 | + def major(self): |
| 682 | + return self.value and self.value.major |
| 683 | + |
| 684 | + @property |
| 685 | + def minor(self): |
| 686 | + return self.value and self.value.minor |
| 687 | + |
| 688 | + @property |
| 689 | + def patch(self): |
| 690 | + return self.value and self.value.patch |
| 691 | + |
| 692 | + @property |
| 693 | + def prerelease(self): |
| 694 | + return self.value and self.value.prerelease |
| 695 | + |
| 696 | + @property |
| 697 | + def build(self): |
| 698 | + return self.value and self.value.build |
| 699 | + |
| 700 | + def next_major(self): |
| 701 | + return self.value and self.value.next_major() |
| 702 | + |
| 703 | + def next_minor(self): |
| 704 | + return self.value and self.value.next_minor() |
| 705 | + |
| 706 | + def next_patch(self): |
| 707 | + return self.value and self.value.next_patch() |
| 708 | + |
| 709 | + @property |
| 710 | + def micro(self): |
| 711 | + # self.value() |
| 712 | + return self.value and self.value.micro |
| 713 | + |
| 714 | + @property |
| 715 | + def pre(self): |
| 716 | + return self.value and self.value._pre |
| 717 | + |
| 718 | + def __lt__(self, other): |
| 719 | + if other is None: |
| 720 | + 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) |
0 commit comments