summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDominic <yobmod@gmail.com>2021-07-31 13:21:23 +0100
committerGitHub <noreply@github.com>2021-07-31 13:21:23 +0100
commit37fa31decc9ab74621590cb25791ccd8d3bf0583 (patch)
treea5f1c90ad260486e50f38c64202198571b9c1036
parente766919411a976fb001cf089625d92a00400b8af (diff)
parent995547aa9b2ca1f1d7795d91a916f83c5d1a96f9 (diff)
downloadgitpython-37fa31decc9ab74621590cb25791ccd8d3bf0583.tar.gz
Merge pull request #1304 from gitpython-developers/types2
Fix orderdict, improve types
-rw-r--r--git/config.py11
-rw-r--r--git/objects/util.py5
-rw-r--r--git/refs/reference.py4
-rw-r--r--git/refs/tag.py16
-rw-r--r--git/repo/base.py8
5 files changed, 29 insertions, 15 deletions
diff --git a/git/config.py b/git/config.py
index c4b26ba6..ad02b437 100644
--- a/git/config.py
+++ b/git/config.py
@@ -41,12 +41,13 @@ if TYPE_CHECKING:
T_ConfigParser = TypeVar('T_ConfigParser', bound='GitConfigParser')
-if sys.version_info[:2] < (3, 7):
- from collections import OrderedDict
- OrderedDict_OMD = OrderedDict
+if sys.version_info[:3] < (3, 7, 2):
+ # typing.Ordereddict not added until py 3.7.2
+ from collections import OrderedDict # type: ignore # until 3.6 dropped
+ OrderedDict_OMD = OrderedDict # type: ignore # until 3.6 dropped
else:
- from typing import OrderedDict
- OrderedDict_OMD = OrderedDict[str, List[_T]]
+ from typing import OrderedDict # type: ignore # until 3.6 dropped
+ OrderedDict_OMD = OrderedDict[str, List[_T]] # type: ignore[assignment, misc]
# -------------------------------------------------------------
diff --git a/git/objects/util.py b/git/objects/util.py
index ef1ae77b..db7807c2 100644
--- a/git/objects/util.py
+++ b/git/objects/util.py
@@ -493,6 +493,11 @@ class TraversableIterableObj(IterableObj, Traversable):
return super(TraversableIterableObj, self)._list_traverse(* args, **kwargs)
@ overload # type: ignore
+ def traverse(self: T_TIobj
+ ) -> Iterator[T_TIobj]:
+ ...
+
+ @ overload
def traverse(self: T_TIobj,
predicate: Callable[[Union[T_TIobj, Tuple[Union[T_TIobj, None], T_TIobj]], int], bool],
prune: Callable[[Union[T_TIobj, Tuple[Union[T_TIobj, None], T_TIobj]], int], bool],
diff --git a/git/refs/reference.py b/git/refs/reference.py
index 64662281..bc2c6e80 100644
--- a/git/refs/reference.py
+++ b/git/refs/reference.py
@@ -62,7 +62,9 @@ class Reference(SymbolicReference, LazyMixin, IterableObj):
#{ Interface
- def set_object(self, object: Commit_ish, logmsg: Union[str, None] = None) -> 'Reference': # @ReservedAssignment
+ # @ReservedAssignment
+ def set_object(self, object: Union[Commit_ish, 'SymbolicReference'], logmsg: Union[str, None] = None
+ ) -> 'SymbolicReference':
"""Special version which checks if the head-log needs an update as well
:return: self"""
oldbinsha = None
diff --git a/git/refs/tag.py b/git/refs/tag.py
index 281ce09a..edfab33d 100644
--- a/git/refs/tag.py
+++ b/git/refs/tag.py
@@ -4,13 +4,14 @@ __all__ = ["TagReference", "Tag"]
# typing ------------------------------------------------------------------
-from typing import Any, Union, TYPE_CHECKING
+from typing import Any, Type, Union, TYPE_CHECKING
from git.types import Commit_ish, PathLike
if TYPE_CHECKING:
from git.repo import Repo
from git.objects import Commit
from git.objects import TagObject
+ from git.refs import SymbolicReference
# ------------------------------------------------------------------------------
@@ -68,7 +69,8 @@ class TagReference(Reference):
return Reference._get_object(self)
@classmethod
- def create(cls, repo: 'Repo', path: PathLike, reference: Union[Commit_ish, str] = 'HEAD',
+ def create(cls: Type['TagReference'], repo: 'Repo', path: PathLike,
+ reference: Union[str, 'SymbolicReference'] = 'HEAD',
logmsg: Union[str, None] = None,
force: bool = False, **kwargs: Any) -> 'TagReference':
"""Create a new tag reference.
@@ -78,7 +80,7 @@ class TagReference(Reference):
The prefix refs/tags is implied
:param ref:
- A reference to the object you want to tag. It can be a commit, tree or
+ A reference to the Object you want to tag. The Object can be a commit, tree or
blob.
:param logmsg:
@@ -98,7 +100,9 @@ class TagReference(Reference):
Additional keyword arguments to be passed to git-tag
:return: A new TagReference"""
- args = (path, reference)
+ if 'ref' in kwargs and kwargs['ref']:
+ reference = kwargs['ref']
+
if logmsg:
kwargs['m'] = logmsg
elif 'message' in kwargs and kwargs['message']:
@@ -107,11 +111,13 @@ class TagReference(Reference):
if force:
kwargs['f'] = True
+ args = (path, reference)
+
repo.git.tag(*args, **kwargs)
return TagReference(repo, "%s/%s" % (cls._common_path_default, path))
@classmethod
- def delete(cls, repo: 'Repo', *tags: 'TagReference') -> None:
+ def delete(cls, repo: 'Repo', *tags: 'TagReference') -> None: # type: ignore[override]
"""Delete the given existing tag or tags"""
repo.git.tag("-d", *tags)
diff --git a/git/repo/base.py b/git/repo/base.py
index bb8ddf13..355f9399 100644
--- a/git/repo/base.py
+++ b/git/repo/base.py
@@ -422,14 +422,14 @@ class Repo(object):
def create_head(self, path: PathLike, commit: str = 'HEAD',
force: bool = False, logmsg: Optional[str] = None
- ) -> Head:
+ ) -> 'Head':
"""Create a new head within the repository.
For more documentation, please see the Head.create method.
:return: newly created Head Reference"""
return Head.create(self, path, commit, logmsg, force)
- def delete_head(self, *heads: 'SymbolicReference', **kwargs: Any) -> None:
+ def delete_head(self, *heads: 'Head', **kwargs: Any) -> None:
"""Delete the given heads
:param kwargs: Additional keyword arguments to be passed to git-branch"""
@@ -788,10 +788,10 @@ class Repo(object):
return proc.replace("\\\\", "\\").replace('"', "").split("\n")
@property
- def active_branch(self) -> 'SymbolicReference':
+ def active_branch(self) -> Head:
"""The name of the currently active branch.
-
:return: Head to the active branch"""
+ # reveal_type(self.head.reference) # => Reference
return self.head.reference
def blame_incremental(self, rev: TBD, file: TBD, **kwargs: Any) -> Optional[Iterator['BlameEntry']]: