Skip to content
Prev Previous commit
Next Next commit
Add overloads for Commit.traverse()
  • Loading branch information
Yobmod committed Jun 28, 2021
commit 1e6fe6e9d0af888b936ea29b25c44e4b59aabf03
44 changes: 40 additions & 4 deletions git/objects/commit.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,9 +37,9 @@

# typing ------------------------------------------------------------------

from typing import Any, Callable, Iterator, List, Sequence, Tuple, Union, TYPE_CHECKING, cast
from typing import Any, Callable, Iterator, List, Sequence, Tuple, Union, TYPE_CHECKING, cast, overload

from git.types import PathLike
from git.types import PathLike, Literal

if TYPE_CHECKING:
from git.repo import Repo
Expand Down Expand Up @@ -286,6 +286,42 @@ def iter_parents(self, paths: Union[PathLike, Sequence[PathLike]] = '', **kwargs

return self.iter_items(self.repo, self, paths, **kwargs)

@overload # type: ignore
def traverse(self,
predicate: Callable[[Union['TraversedObj', 'TraversedTup'], int], bool],
prune: Callable[[Union['TraversedObj', 'TraversedTup'], int], bool],
depth: int,
branch_first: bool,
visit_once: bool,
ignore_self: Literal[True],
as_edge: Literal[False], # No Tuple
) -> Iterator['Commit']:
...

@overload
def traverse(self,
predicate: Callable[[Union['TraversedObj', 'TraversedTup'], int], bool],
prune: Callable[[Union['TraversedObj', 'TraversedTup'], int], bool],
depth: int,
branch_first: bool,
visit_once: bool,
ignore_self: Literal[False],
as_edge: Literal[True],
) -> Iterator[Tuple[Union[None, 'Commit'], 'Commit']]:
...

@overload
def traverse(self,
predicate: Callable[[Union['TraversedObj', 'TraversedTup'], int], bool],
prune: Callable[[Union['TraversedObj', 'TraversedTup'], int], bool],
depth: int,
branch_first: bool,
visit_once: bool,
ignore_self: Literal[True],
as_edge: Literal[True],
) -> Iterator[Tuple['Commit', 'Commit']]:
...

def traverse(self,
predicate: Callable[[Union['TraversedObj', 'TraversedTup'], int], bool] = lambda i, d: True,
prune: Callable[[Union['TraversedObj', 'TraversedTup'], int], bool] = lambda i, d: False,
Expand All @@ -295,7 +331,7 @@ def traverse(self,
ignore_self: int = 1,
as_edge: bool = False
) -> Union[Iterator['Commit'],
Iterator[Tuple['Commit', 'Commit']]]:
Iterator[Tuple[Union[None, 'Commit'], 'Commit']]]:
"""For documentation, see util.Traversable._traverse()"""

"""
Expand All @@ -315,7 +351,7 @@ def is_commit_traversed(inp: Tuple) -> TypeGuard[Tuple[Iterator[Tuple['Commit',
return ret_tup[0]
"""
return cast(Union[Iterator['Commit'],
Iterator[Tuple['Commit', 'Commit']]],
Iterator[Tuple[Union[None, 'Commit'], 'Commit']]],
super(Commit, self).traverse(
predicate, prune, depth, branch_first, visit_once, ignore_self, as_edge
))
Expand Down