The RPM Epoch, Version, Release tuple.
| 20 | |
| 21 | # https://github.com/nexB/scancode-toolkit/blob/16ae20a343c5332114edac34c7b6fcf2fb6bca74/src/packagedcode/rpm.py#L91 |
| 22 | class EVR(namedtuple("EVR", "epoch version release")): |
| 23 | """ |
| 24 | The RPM Epoch, Version, Release tuple. |
| 25 | """ |
| 26 | |
| 27 | def __new__(self, version, release=None, epoch=None): |
| 28 | """ |
| 29 | note: the sort order of the named tuple is the sort order. |
| 30 | But for creation we put the rarely used epoch last with a default to None. |
| 31 | """ |
| 32 | if not isinstance(epoch, int): |
| 33 | if epoch and epoch.strip(): |
| 34 | logger.error("Invalid epoch: must be a number or empty.") |
| 35 | return None |
| 36 | if not version: |
| 37 | logger.error("Version is required: {}".format(repr(version))) |
| 38 | return None |
| 39 | |
| 40 | return super().__new__(EVR, epoch, version, release) |
| 41 | |
| 42 | def __str__(self, *args, **kwargs): |
| 43 | return self.to_string() |
| 44 | |
| 45 | def to_string(self): |
| 46 | if self.release: |
| 47 | vr = f"{self.version}-{self.release}" |
| 48 | else: |
| 49 | vr = self.version |
| 50 | |
| 51 | if self.epoch: |
| 52 | vr = ":".join([str(self.epoch), vr]) |
| 53 | return vr |
| 54 | |
| 55 | |
| 56 | # https://github.com/nexB/scancode-toolkit/blob/16ae20a343c5332114edac34c7b6fcf2fb6bca74/src/packagedcode/nevra.py#L36 |