Skip to content

Commit dc6b90f

Browse files
committed
Fix version_info type hint + more refactoring
This broadens the type annoation on the Git.version_info property, for #1830. It also revises the docstring for clarity, and continues refactoring and comment changes (also for clarity).
1 parent eb438ee commit dc6b90f

File tree

1 file changed

+10
-12
lines changed

1 file changed

+10
-12
lines changed

Diff for: git/cmd.py

+10-12
Original file line numberDiff line numberDiff line change
@@ -794,7 +794,7 @@ def __init__(self, working_dir: Union[None, PathLike] = None):
794794
self._environment: Dict[str, str] = {}
795795

796796
# Cached version slots
797-
self._version_info: Union[Tuple[int, int, int, int], None] = None
797+
self._version_info: Union[Tuple[int, ...], None] = None
798798
self._version_info_token: object = None
799799

800800
# Cached command slots
@@ -831,10 +831,10 @@ def working_dir(self) -> Union[None, PathLike]:
831831
return self._working_dir
832832

833833
@property
834-
def version_info(self) -> Tuple[int, int, int, int]:
834+
def version_info(self) -> Tuple[int, ...]:
835835
"""
836-
:return: tuple(int, int, int, int) tuple with integers representing the major,
837-
minor and additional version numbers as parsed from git version.
836+
:return: tuple with integers representing the major, minor and additional
837+
version numbers as parsed from git version. Up to four fields are used.
838838
839839
This value is generated on demand and is cached.
840840
"""
@@ -846,16 +846,14 @@ def version_info(self) -> Tuple[int, int, int, int]:
846846
assert self._version_info is not None, "Bug: corrupted token-check state"
847847
return self._version_info
848848

849-
# We only use the first 4 numbers, as everything else could be strings in fact (on Windows).
850-
process_version = self._call_process("version") # Should be as default *args and **kwargs used.
851-
version_numbers = process_version.split(" ")[2]
849+
# Run "git version" and parse it.
850+
process_version = self._call_process("version")
851+
version_string = process_version.split(" ")[2]
852+
version_fields = version_string.split(".")[:4]
853+
self._version_info = tuple(int(n) for n in version_fields if n.isdigit())
852854

853-
self._version_info = cast(
854-
Tuple[int, int, int, int],
855-
tuple(int(n) for n in version_numbers.split(".")[:4] if n.isdigit()),
856-
)
855+
# This value will be considered valid until the next refresh.
857856
self._version_info_token = refresh_token
858-
859857
return self._version_info
860858

861859
@overload

0 commit comments

Comments
 (0)