Skip to content

Commit 70ffcf3

Browse files
committed
Add handling for beta iterations to Version class
1 parent 53e5bb4 commit 70ffcf3

File tree

2 files changed

+19
-6
lines changed

2 files changed

+19
-6
lines changed

app/utils/git.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
from app.utils.command import run
55
from app.utils.version import Version
66

7-
MIN_GIT_VERSION = Version(2, 28, 0)
7+
MIN_GIT_VERSION = Version(2, 28, 0, None)
88

99

1010
def init() -> None:

app/utils/version.py

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,51 @@
11
from dataclasses import dataclass
2+
from typing import Optional
23

34

45
@dataclass
56
class Version:
67
major: int
78
minor: int
89
patch: int
10+
prerelease: Optional[int]
911

1012
@staticmethod
1113
def parse_version_string(version: str) -> "Version":
1214
"""Parse a version string with 'v' prefix (e.g., 'v1.2.3')."""
1315
only_version = version[1:]
16+
if "beta" in only_version:
17+
[major, minor, patch, prerelease] = [part[0] for part in only_version.split(".")]
18+
return Version(int(major), int(minor), int(patch), int(prerelease))
1419
[major, minor, patch] = only_version.split(".")
15-
return Version(int(major), int(minor), int(patch))
20+
return Version(int(major), int(minor), int(patch), None)
1621

1722
@staticmethod
1823
def parse(version: str) -> "Version":
1924
"""Parse a plain version string (e.g., '1.2.3')."""
2025
parts = version.split(".")
21-
if len(parts) != 3:
26+
if ("beta" in version and len(parts) != 4) or len(parts) != 3:
2227
raise ValueError(
23-
f"Invalid version string (expected 'MAJOR.MINOR.PATCH'): {version!r}"
28+
f"Invalid version string (expected 'MAJOR.MINOR.PATCH[-beta.PRERELEASE]'): {version!r}"
2429
)
2530
try:
26-
major, minor, patch = (int(part) for part in parts)
31+
if len(parts) == 4:
32+
major, minor, patch, prerelease = (int(part[0]) for part in parts)
33+
else:
34+
major, minor, patch = (int(part) for part in parts)
35+
prerelease = None
2736
except ValueError as exc:
2837
raise ValueError(
2938
f"Invalid numeric components in version string: {version!r}"
3039
) from exc
31-
return Version(major, minor, patch)
40+
return Version(major, minor, patch, prerelease)
3241

3342
def is_behind(self, other: "Version") -> bool:
3443
"""Returns if the current version is behind the other version based on major and minor versions."""
44+
if self.prerelease and other.prerelease:
45+
return (other.major, other.minor, other.prerelease) > (self.major, self.minor, self.prerelease)
3546
return (other.major, other.minor) > (self.major, self.minor)
3647

3748
def __repr__(self) -> str:
49+
if self.prerelease:
50+
return f"v{self.major}.{self.minor}.{self.patch}-beta.{self.prerelease}"
3851
return f"v{self.major}.{self.minor}.{self.patch}"

0 commit comments

Comments
 (0)