From 91fce331de16de6039c94cd4d7314184a5763e61 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Mon, 2 Aug 2021 14:56:03 +0100 Subject: increase mypy strictness (warn unused ignored and warn unreachable) --- git/repo/fun.py | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) (limited to 'git/repo/fun.py') diff --git a/git/repo/fun.py b/git/repo/fun.py index 7d5c7823..b1b330c4 100644 --- a/git/repo/fun.py +++ b/git/repo/fun.py @@ -1,4 +1,6 @@ """Package with general repository related functions""" +from git.refs.reference import Reference +from git.types import Commit_ish import os import stat from string import digits @@ -202,7 +204,7 @@ def rev_parse(repo: 'Repo', rev: str) -> Union['Commit', 'Tag', 'Tree', 'Blob']: raise NotImplementedError("commit by message search ( regex )") # END handle search - obj = cast(Object, None) # not ideal. Should use guards + obj: Union[Commit_ish, Reference, None] = None ref = None output_type = "commit" start = 0 @@ -222,14 +224,16 @@ def rev_parse(repo: 'Repo', rev: str) -> Union['Commit', 'Tag', 'Tree', 'Blob']: ref = repo.head.ref else: if token == '@': - ref = name_to_object(repo, rev[:start], return_ref=True) + ref = cast(Reference, name_to_object(repo, rev[:start], return_ref=True)) else: - obj = name_to_object(repo, rev[:start]) + obj = cast(Commit_ish, name_to_object(repo, rev[:start])) # END handle token # END handle refname + else: + assert obj is not None if ref is not None: - obj = ref.commit + obj = cast(Commit, ref.commit) # END handle ref # END initialize obj on first token @@ -247,11 +251,13 @@ def rev_parse(repo: 'Repo', rev: str) -> Union['Commit', 'Tag', 'Tree', 'Blob']: pass # default elif output_type == 'tree': try: + obj = cast(Object, obj) obj = to_commit(obj).tree except (AttributeError, ValueError): pass # error raised later # END exception handling elif output_type in ('', 'blob'): + obj = cast(TagObject, obj) if obj and obj.type == 'tag': obj = deref_tag(obj) else: @@ -280,13 +286,13 @@ def rev_parse(repo: 'Repo', rev: str) -> Union['Commit', 'Tag', 'Tree', 'Blob']: obj = Object.new_from_sha(repo, hex_to_bin(entry.newhexsha)) # make it pass the following checks - output_type = None + output_type = '' else: raise ValueError("Invalid output type: %s ( in %s )" % (output_type, rev)) # END handle output type # empty output types don't require any specific type, its just about dereferencing tags - if output_type and obj.type != output_type: + if output_type and obj and obj.type != output_type: raise ValueError("Could not accommodate requested object type %r, got %s" % (output_type, obj.type)) # END verify output type @@ -319,6 +325,7 @@ def rev_parse(repo: 'Repo', rev: str) -> Union['Commit', 'Tag', 'Tree', 'Blob']: parsed_to = start # handle hierarchy walk try: + obj = cast(Commit_ish, obj) if token == "~": obj = to_commit(obj) for _ in range(num): @@ -347,7 +354,7 @@ def rev_parse(repo: 'Repo', rev: str) -> Union['Commit', 'Tag', 'Tree', 'Blob']: # still no obj ? Its probably a simple name if obj is None: - obj = name_to_object(repo, rev) + obj = cast(Commit_ish, name_to_object(repo, rev)) parsed_to = lr # END handle simple name -- cgit v1.2.1 From c3f3501f0fe00572d2692948ebb5ce25da8bb418 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Mon, 2 Aug 2021 15:53:22 +0100 Subject: Add __future__.annotations to cmd.py --- git/repo/fun.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) (limited to 'git/repo/fun.py') diff --git a/git/repo/fun.py b/git/repo/fun.py index b1b330c4..36c8b797 100644 --- a/git/repo/fun.py +++ b/git/repo/fun.py @@ -1,6 +1,5 @@ """Package with general repository related functions""" -from git.refs.reference import Reference -from git.types import Commit_ish +from __future__ import annotations import os import stat from string import digits @@ -20,12 +19,13 @@ from git.cmd import Git # Typing ---------------------------------------------------------------------- from typing import Union, Optional, cast, TYPE_CHECKING - +from git.types import Commit_ish if TYPE_CHECKING: from git.types import PathLike from .base import Repo from git.db import GitCmdObjectDB + from git.refs.reference import Reference from git.objects import Commit, TagObject, Blob, Tree from git.refs.tag import Tag @@ -204,7 +204,7 @@ def rev_parse(repo: 'Repo', rev: str) -> Union['Commit', 'Tag', 'Tree', 'Blob']: raise NotImplementedError("commit by message search ( regex )") # END handle search - obj: Union[Commit_ish, Reference, None] = None + obj: Union[Commit_ish, 'Reference', None] = None ref = None output_type = "commit" start = 0 @@ -224,7 +224,7 @@ def rev_parse(repo: 'Repo', rev: str) -> Union['Commit', 'Tag', 'Tree', 'Blob']: ref = repo.head.ref else: if token == '@': - ref = cast(Reference, name_to_object(repo, rev[:start], return_ref=True)) + ref = cast('Reference', name_to_object(repo, rev[:start], return_ref=True)) else: obj = cast(Commit_ish, name_to_object(repo, rev[:start])) # END handle token @@ -251,13 +251,13 @@ def rev_parse(repo: 'Repo', rev: str) -> Union['Commit', 'Tag', 'Tree', 'Blob']: pass # default elif output_type == 'tree': try: - obj = cast(Object, obj) + obj = cast(Commit_ish, obj) obj = to_commit(obj).tree except (AttributeError, ValueError): pass # error raised later # END exception handling elif output_type in ('', 'blob'): - obj = cast(TagObject, obj) + obj = cast('TagObject', obj) if obj and obj.type == 'tag': obj = deref_tag(obj) else: -- cgit v1.2.1 From 829142d4c30886db2a2622605092072e979afcc9 Mon Sep 17 00:00:00 2001 From: Yobmod Date: Mon, 2 Aug 2021 16:04:08 +0100 Subject: Add __future__.annotations to cmd.py2 --- git/repo/fun.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'git/repo/fun.py') diff --git a/git/repo/fun.py b/git/repo/fun.py index 36c8b797..1a83dd3d 100644 --- a/git/repo/fun.py +++ b/git/repo/fun.py @@ -233,7 +233,7 @@ def rev_parse(repo: 'Repo', rev: str) -> Union['Commit', 'Tag', 'Tree', 'Blob']: assert obj is not None if ref is not None: - obj = cast(Commit, ref.commit) + obj = cast('Commit', ref.commit) # END handle ref # END initialize obj on first token @@ -347,8 +347,8 @@ def rev_parse(repo: 'Repo', rev: str) -> Union['Commit', 'Tag', 'Tree', 'Blob']: # END end handle tag except (IndexError, AttributeError) as e: raise BadName( - "Invalid revision spec '%s' - not enough " - "parent commits to reach '%s%i'" % (rev, token, num)) from e + f"Invalid revision spec '{rev}' - not enough " + f"parent commits to reach '{token}{int(num)}'") from e # END exception handling # END parse loop -- cgit v1.2.1