Handle SaltStack versions class. Knows how to parse ``git describe`` output, knows about release candidates and also supports version comparison.
| 239 | |
| 240 | |
| 241 | class SaltStackVersion: |
| 242 | """ |
| 243 | Handle SaltStack versions class. |
| 244 | |
| 245 | Knows how to parse ``git describe`` output, knows about release candidates |
| 246 | and also supports version comparison. |
| 247 | """ |
| 248 | |
| 249 | __slots__ = ( |
| 250 | "name", |
| 251 | "major", |
| 252 | "minor", |
| 253 | "bugfix", |
| 254 | "mbugfix", |
| 255 | "pre_type", |
| 256 | "pre_num", |
| 257 | "noc", |
| 258 | "sha", |
| 259 | ) |
| 260 | |
| 261 | git_sha_regex = r"(?P<sha>g?[a-f0-9]{7,40})" |
| 262 | |
| 263 | git_describe_regex = re.compile( |
| 264 | r"(?:[^\d]+)?(?P<major>[\d]{1,4})" |
| 265 | r"(?:\.(?P<minor>[\d]{1,2}))?" |
| 266 | r"(?:\.(?P<bugfix>[\d]{0,2}))?" |
| 267 | r"(?:\.(?P<mbugfix>[\d]{0,2}))?" |
| 268 | r"(?:(?P<pre_type>rc|a|b|alpha|beta|nb)(?P<pre_num>[\d]+))?" |
| 269 | r"(?:(?:.*)(?:\+|-)(?P<noc>(?:0na|[\d]+|n/a))(?:-|\.)" + git_sha_regex + r")?" |
| 270 | ) |
| 271 | git_sha_regex = r"^" + git_sha_regex |
| 272 | |
| 273 | git_sha_regex = re.compile(git_sha_regex) |
| 274 | |
| 275 | NAMES = {v.name: v.info for v in SaltVersionsInfo.versions()} |
| 276 | LNAMES = {k.lower(): v for (k, v) in iter(NAMES.items())} |
| 277 | VNAMES = {v: k for (k, v) in iter(NAMES.items())} |
| 278 | RMATCH = {v[:2]: k for (k, v) in iter(NAMES.items())} |
| 279 | |
| 280 | def __init__( |
| 281 | self, # pylint: disable=C0103 |
| 282 | major, |
| 283 | minor=None, |
| 284 | bugfix=None, |
| 285 | mbugfix=0, |
| 286 | pre_type=None, |
| 287 | pre_num=None, |
| 288 | noc=0, |
| 289 | sha=None, |
| 290 | ): |
| 291 | if isinstance(major, str): |
| 292 | major = int(major) |
| 293 | |
| 294 | if isinstance(minor, str): |
| 295 | if not minor: |
| 296 | # Empty string |
| 297 | minor = None |
| 298 | else: |