diff options
author | Dominic <yobmod@gmail.com> | 2021-07-31 13:21:23 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-07-31 13:21:23 +0100 |
commit | 37fa31decc9ab74621590cb25791ccd8d3bf0583 (patch) | |
tree | a5f1c90ad260486e50f38c64202198571b9c1036 | |
parent | e766919411a976fb001cf089625d92a00400b8af (diff) | |
parent | 995547aa9b2ca1f1d7795d91a916f83c5d1a96f9 (diff) | |
download | gitpython-37fa31decc9ab74621590cb25791ccd8d3bf0583.tar.gz |
Merge pull request #1304 from gitpython-developers/types2
Fix orderdict, improve types
-rw-r--r-- | git/config.py | 11 | ||||
-rw-r--r-- | git/objects/util.py | 5 | ||||
-rw-r--r-- | git/refs/reference.py | 4 | ||||
-rw-r--r-- | git/refs/tag.py | 16 | ||||
-rw-r--r-- | git/repo/base.py | 8 |
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']]: |