|
16 | 16 | # typing ------------------------------------------------------------------
|
17 | 17 |
|
18 | 18 | from typing import Any, Iterator, List, Match, Optional, Tuple, Type, Union, TYPE_CHECKING, cast
|
19 |
| -from git.types import PathLike, TBD, Literal |
| 19 | +from git.types import PathLike, TBD, Literal, TypeGuard |
20 | 20 |
|
21 | 21 | if TYPE_CHECKING:
|
22 | 22 | from .objects.tree import Tree
|
|
26 | 26 |
|
27 | 27 | Lit_change_type = Literal['A', 'D', 'C', 'M', 'R', 'T']
|
28 | 28 |
|
| 29 | + |
| 30 | +def is_change_type(inp: str) -> TypeGuard[Lit_change_type]: |
| 31 | + return inp in ['A', 'D', 'C', 'M', 'R', 'T'] |
| 32 | + |
29 | 33 | # ------------------------------------------------------------------------
|
30 | 34 |
|
| 35 | + |
31 | 36 | __all__ = ('Diffable', 'DiffIndex', 'Diff', 'NULL_TREE')
|
32 | 37 |
|
33 | 38 | # Special object to compare against the empty tree in diffs
|
@@ -202,6 +207,7 @@ def iter_change_type(self, change_type: Lit_change_type) -> Iterator['Diff']:
|
202 | 207 |
|
203 | 208 | for diff in self:
|
204 | 209 | diff = cast('Diff', diff)
|
| 210 | + |
205 | 211 | if diff.change_type == change_type:
|
206 | 212 | yield diff
|
207 | 213 | elif change_type == "A" and diff.new_file:
|
@@ -505,7 +511,8 @@ def _handle_diff_line(lines_bytes: bytes, repo: 'Repo', index: DiffIndex) -> Non
|
505 | 511 | # Change type can be R100
|
506 | 512 | # R: status letter
|
507 | 513 | # 100: score (in case of copy and rename)
|
508 |
| - change_type: Lit_change_type = _change_type[0] # type: ignore |
| 514 | + assert is_change_type(_change_type[0]) |
| 515 | + change_type: Lit_change_type = _change_type[0] |
509 | 516 | score_str = ''.join(_change_type[1:])
|
510 | 517 | score = int(score_str) if score_str.isdigit() else None
|
511 | 518 | path = path.strip()
|
|
0 commit comments