summaryrefslogtreecommitdiff
path: root/git
diff options
context:
space:
mode:
Diffstat (limited to 'git')
-rw-r--r--git/objects/base.py2
-rw-r--r--git/objects/tag.py8
-rw-r--r--git/objects/util.py26
3 files changed, 21 insertions, 15 deletions
diff --git a/git/objects/base.py b/git/objects/base.py
index 34c595ee..884f9651 100644
--- a/git/objects/base.py
+++ b/git/objects/base.py
@@ -89,7 +89,7 @@ class Object(LazyMixin):
"""Retrieve object information"""
if attr == "size":
oinfo = self.repo.odb.info(self.binsha)
- self.size = oinfo.size
+ self.size = oinfo.size # type: int
# assert oinfo.type == self.type, _assertion_msg_format % (self.binsha, oinfo.type, self.type)
else:
super(Object, self)._set_cache_(attr)
diff --git a/git/objects/tag.py b/git/objects/tag.py
index 84d65d3f..abcc7534 100644
--- a/git/objects/tag.py
+++ b/git/objects/tag.py
@@ -14,6 +14,9 @@ from typing import List, TYPE_CHECKING, Union
if TYPE_CHECKING:
from git.repo import Repo
from git.util import Actor
+ from .commit import Commit
+ from .blob import Blob
+ from .tree import Tree
__all__ = ("TagObject", )
@@ -42,7 +45,7 @@ class TagObject(base.Object):
authored_date is in, in a format similar to time.altzone"""
super(TagObject, self).__init__(repo, binsha)
if object is not None:
- self.object = object
+ self.object = object # type: Union['Commit', 'Blob', 'Tree', 'TagObject']
if tag is not None:
self.tag = tag
if tagger is not None:
@@ -62,8 +65,9 @@ class TagObject(base.Object):
_obj, hexsha = lines[0].split(" ")
_type_token, type_name = lines[1].split(" ")
+ object_type = get_object_type_by_name(type_name.encode('ascii'))
self.object = \
- get_object_type_by_name(type_name.encode('ascii'))(self.repo, hex_to_bin(hexsha))
+ object_type(self.repo, hex_to_bin(hexsha))
self.tag = lines[2][4:] # tag <tag name>
diff --git a/git/objects/util.py b/git/objects/util.py
index ebfb3758..6bc1b709 100644
--- a/git/objects/util.py
+++ b/git/objects/util.py
@@ -18,7 +18,7 @@ import calendar
from datetime import datetime, timedelta, tzinfo
# typing ------------------------------------------------------------
-from typing import Literal, TYPE_CHECKING, Tuple, Union
+from typing import Literal, TYPE_CHECKING, Tuple, Type, Union, cast
if TYPE_CHECKING:
from .commit import Commit
@@ -36,7 +36,7 @@ ZERO = timedelta(0)
#{ Functions
-def mode_str_to_int(modestr: str) -> int:
+def mode_str_to_int(modestr: Union[bytes, str]) -> int:
"""
:param modestr: string like 755 or 644 or 100644 - only the last 6 chars will be used
:return:
@@ -46,12 +46,14 @@ def mode_str_to_int(modestr: str) -> int:
for example."""
mode = 0
for iteration, char in enumerate(reversed(modestr[-6:])):
+ char = cast(Union[str, int], char)
mode += int(char) << iteration * 3
# END for each char
return mode
-def get_object_type_by_name(object_type_name: str) -> Union['Commit', 'TagObject', 'Tree', 'Blob']:
+def get_object_type_by_name(object_type_name: bytes
+ ) -> Union[Type['Commit'], Type['TagObject'], Type['Tree'], Type['Blob']]:
"""
:return: type suitable to handle the given object type name.
Use the type to create new instances.
@@ -72,7 +74,7 @@ def get_object_type_by_name(object_type_name: str) -> Union['Commit', 'TagObject
from . import tree
return tree.Tree
else:
- raise ValueError("Cannot handle unknown object type: %s" % object_type_name)
+ raise ValueError("Cannot handle unknown object type: %s" % object_type_name.decode())
def utctz_to_altz(utctz: str) -> int:
@@ -116,7 +118,7 @@ class tzoffset(tzinfo):
self._offset = timedelta(seconds=-secs_west_of_utc)
self._name = name or 'fixed'
- def __reduce__(self) -> Tuple['tzoffset', Tuple[float, str]]:
+ def __reduce__(self) -> Tuple[Type['tzoffset'], Tuple[float, str]]:
return tzoffset, (-self._offset.total_seconds(), self._name)
def utcoffset(self, dt) -> timedelta:
@@ -163,18 +165,18 @@ def parse_date(string_date: str) -> Tuple[int, int]:
# git time
try:
if string_date.count(' ') == 1 and string_date.rfind(':') == -1:
- timestamp, offset = string_date.split()
+ timestamp, offset_str = string_date.split()
if timestamp.startswith('@'):
timestamp = timestamp[1:]
- timestamp = int(timestamp)
- return timestamp, utctz_to_altz(verify_utctz(offset))
+ timestamp_int = int(timestamp)
+ return timestamp_int, utctz_to_altz(verify_utctz(offset_str))
else:
- offset = "+0000" # local time by default
+ offset_str = "+0000" # local time by default
if string_date[-5] in '-+':
- offset = verify_utctz(string_date[-5:])
+ offset_str = verify_utctz(string_date[-5:])
string_date = string_date[:-6] # skip space as well
# END split timezone info
- offset = utctz_to_altz(offset)
+ offset = utctz_to_altz(offset_str)
# now figure out the date and time portion - split time
date_formats = []
@@ -235,7 +237,7 @@ def parse_actor_and_date(line: str) -> Tuple[Actor, int, int]:
author Tom Preston-Werner <tom@mojombo.com> 1191999972 -0700
:return: [Actor, int_seconds_since_epoch, int_timezone_offset]"""
- actor, epoch, offset = '', 0, 0
+ actor, epoch, offset = '', '0', '0'
m = _re_actor_epoch.search(line)
if m:
actor, epoch, offset = m.groups()