Skip to content

typecheck-part-1 #1350

New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

Open
wants to merge 13 commits into
base: master
Choose a base branch
from
Open
2 changes: 1 addition & 1 deletion docs/conf.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
# add these directories to sys.path here. If the directory is relative to the
# documentation root, use os.path.abspath to make it absolute, like shown here.
#
sys.path.insert(0, os.path.abspath('..'))
sys.path.insert(0, os.path.abspath('..')) # noqa: PTH100


# -- Project information -----------------------------------------------------
Expand Down
37 changes: 19 additions & 18 deletions pygit2/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,38 +35,39 @@

# High level API
from . import enums
from ._build import __version__
from .blame import Blame, BlameHunk
from .blob import BlobIO
from .callbacks import Payload, RemoteCallbacks, CheckoutCallbacks, StashApplyCallbacks
from .callbacks import git_clone_options, git_fetch_options, get_credentials
from .config import Config
from .credentials import *
from .errors import check_error, Passthrough
from ._build import __version__ # noqa: F401
from .blame import Blame, BlameHunk # noqa: F401
from .blob import BlobIO # noqa: F401
from .callbacks import Payload, RemoteCallbacks, CheckoutCallbacks, StashApplyCallbacks # noqa: F401
from .callbacks import git_clone_options, git_fetch_options, get_credentials # noqa: F401
from .config import Config # noqa: F401
from .credentials import * # noqa: F403
from .errors import check_error, Passthrough # noqa: F401
from .ffi import ffi, C
from .filter import Filter
from .index import Index, IndexEntry
from .legacyenums import *
from .packbuilder import PackBuilder
from .remotes import Remote
from .filter import Filter # noqa: F401
from .index import Index, IndexEntry # noqa: F401
from .legacyenums import * # noqa: F403
from .packbuilder import PackBuilder # noqa: F401
from .remotes import Remote # noqa: F401
from .repository import Repository
from .settings import Settings
from .submodules import Submodule
from .submodules import Submodule # noqa: F401
from .utils import to_bytes, to_str


# Features
features = enums.Feature(C.git_libgit2_features())

# libgit version tuple
LIBGIT2_VER = (LIBGIT2_VER_MAJOR, LIBGIT2_VER_MINOR, LIBGIT2_VER_REVISION)
LIBGIT2_VER = (LIBGIT2_VER_MAJOR, LIBGIT2_VER_MINOR, LIBGIT2_VER_REVISION) # noqa: F405

# Let _pygit2 cache references to Python enum types.
# This is separate from PyInit__pygit2() to avoid a circular import.
_cache_enums()


def init_repository(

def init_repository( # noqa: PLR0913
path: typing.Union[str, bytes, os.PathLike, None],
bare: bool = False,
flags: enums.RepositoryInitFlag = enums.RepositoryInitFlag.MKPATH,
Expand Down Expand Up @@ -144,7 +145,7 @@ def init_repository(
return Repository(to_str(path))


def clone_repository(
def clone_repository( # noqa: PLR0913
url,
path,
bare=False,
Expand Down Expand Up @@ -221,6 +222,6 @@ def clone_repository(
return Repository._from_c(crepo[0], owned=True)


tree_entry_key = functools.cmp_to_key(tree_entry_cmp)
tree_entry_key = functools.cmp_to_key(tree_entry_cmp) # noqa: F405

settings = Settings()
2 changes: 1 addition & 1 deletion pygit2/_build.py
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ def _get_libgit2_path():

# Default
if os.name == 'nt':
return Path(r'%s\libgit2' % os.getenv('ProgramFiles'))
return Path(r'%s\libgit2' % os.getenv('ProgramFiles')) # noqa: SIM112
return Path('/usr/local')


Expand Down
4 changes: 2 additions & 2 deletions pygit2/_pygit2.pyi
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from typing import Iterator, Literal, Optional, overload
from typing import Iterator, Literal, Optional, overload # noqa: I001
from io import IOBase
from . import Index
from .enums import (
Expand Down Expand Up @@ -42,7 +42,7 @@ class Object:
oid: Oid
raw_name: bytes | None
short_id: str
type: 'Literal[GIT_OBJ_COMMIT] | Literal[GIT_OBJ_TREE] | Literal[GIT_OBJ_TAG] | Literal[GIT_OBJ_BLOB]'
type: 'Literal[GIT_OBJ_COMMIT] | Literal[GIT_OBJ_TREE] | Literal[GIT_OBJ_TAG] | Literal[GIT_OBJ_BLOB]' # noqa: E501
type_str: "Literal['commit'] | Literal['tree'] | Literal['tag'] | Literal['blob']"
@overload
def peel(self, target_type: 'Literal[GIT_OBJ_COMMIT]') -> 'Commit': ...
Expand Down
4 changes: 2 additions & 2 deletions pygit2/_run.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
"""

# Import from the Standard Library
import codecs
import codecs # noqa: I001
from pathlib import Path
import sys

Expand Down Expand Up @@ -85,7 +85,7 @@
]
h_source = []
for h_file in h_files:
h_file = dir_path / 'decl' / h_file
h_file = dir_path / 'decl' / h_file # noqa: PLW2901
with codecs.open(h_file, 'r', 'utf-8') as f:
h_source.append(f.read())

Expand Down
2 changes: 1 addition & 1 deletion pygit2/blame.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
# Boston, MA 02110-1301, USA.

# Import from pygit2
from .ffi import ffi, C
from .ffi import ffi, C # noqa: I001
from .utils import GenericIterator
from ._pygit2 import Signature, Oid

Expand Down
2 changes: 1 addition & 1 deletion pygit2/blob.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import io
import io # noqa: I001
import threading
import time
from contextlib import AbstractContextManager
Expand Down
2 changes: 1 addition & 1 deletion pygit2/branches.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
# the Free Software Foundation, 51 Franklin Street, Fifth Floor,
# Boston, MA 02110-1301, USA.

from __future__ import annotations
from __future__ import annotations # noqa: I001
from typing import TYPE_CHECKING

from .enums import BranchType, ReferenceType
Expand Down
20 changes: 10 additions & 10 deletions pygit2/callbacks.py
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@
"""

# Standard Library
from contextlib import contextmanager
from contextlib import contextmanager # noqa: I001
from functools import wraps
from typing import Optional, Union

Expand Down Expand Up @@ -133,9 +133,9 @@ def sideband_progress(self, string: str) -> None:

def credentials(
self,
url: str,
username_from_url: Union[str, None],
allowed_types: CredentialType,
url: str, # noqa: ARG002
username_from_url: Union[str, None], # noqa: ARG002
allowed_types: CredentialType, # noqa: ARG002
):
"""
Credentials callback. If the remote server requires authentication,
Expand All @@ -159,7 +159,7 @@ def credentials(
"""
raise Passthrough

def certificate_check(self, certificate: None, valid: bool, host: str) -> bool:
def certificate_check(self, certificate: None, valid: bool, host: str) -> bool: # noqa: ARG002
"""
Certificate callback. Override with your own function to determine
whether to accept the server's certificate.
Expand Down Expand Up @@ -493,7 +493,7 @@ def _certificate_check_cb(cert_i, valid, host, data):
if not val:
return C.GIT_ECERTIFICATE
except Passthrough:
if is_ssh:
if is_ssh: # noqa: SIM114
return 0
elif valid:
return 0
Expand Down Expand Up @@ -667,15 +667,15 @@ def get_credentials(fn, url, username, allowed):


@libgit2_callback
def _checkout_notify_cb(
def _checkout_notify_cb( # noqa: PLR0913
why, path_cstr, baseline, target, workdir, data: CheckoutCallbacks
):
pypath = maybe_string(path_cstr)
pybaseline = DiffFile.from_c(ptr_to_bytes(baseline))
pytarget = DiffFile.from_c(ptr_to_bytes(target))
pyworkdir = DiffFile.from_c(ptr_to_bytes(workdir))

try:
try: # noqa: SIM105
data.checkout_notify(why, pypath, pybaseline, pytarget, pyworkdir)
except Passthrough:
# Unlike most other operations with optional callbacks, checkout
Expand All @@ -701,7 +701,7 @@ def _git_checkout_options(
paths=None,
c_checkout_options_ptr=None,
):
if callbacks is None:
if callbacks is None: # noqa: SIM108
payload = CheckoutCallbacks()
else:
payload = callbacks
Expand Down Expand Up @@ -768,7 +768,7 @@ def git_checkout_options(callbacks=None, strategy=None, directory=None, paths=No

@libgit2_callback
def _stash_apply_progress_cb(progress: StashApplyProgress, data: StashApplyCallbacks):
try:
try: # noqa: SIM105
data.stash_apply_progress(progress)
except Passthrough:
# Unlike most other operations with optional callbacks, stash apply
Expand Down
4 changes: 2 additions & 2 deletions pygit2/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@
from cached_property import cached_property

# Import from pygit2
from .errors import check_error
from .errors import check_error # noqa: I001
from .ffi import ffi, C
from .utils import to_bytes

Expand Down Expand Up @@ -93,7 +93,7 @@ def from_c(cls, repo, ptr):
return config

def __del__(self):
try:
try: # noqa: SIM105
C.git_config_free(self._config)
except AttributeError:
pass
Expand Down
2 changes: 1 addition & 1 deletion pygit2/credentials.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
# the Free Software Foundation, 51 Franklin Street, Fifth Floor,
# Boston, MA 02110-1301, USA.

from __future__ import annotations
from __future__ import annotations # noqa: I001

from typing import TYPE_CHECKING

Expand Down
14 changes: 7 additions & 7 deletions pygit2/enums.py
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ class BlameFlag(IntFlag):
'Not yet implemented and reserved for future use (as of libgit2 1.9.0).'

FIRST_PARENT = _pygit2.GIT_BLAME_FIRST_PARENT
'Restrict the search of commits to those reachable following only the first parents.'
'Restrict the search of commits to those reachable following only the first parents.' # noqa: E501

USE_MAILMAP = _pygit2.GIT_BLAME_USE_MAILMAP
"""
Expand All @@ -95,7 +95,7 @@ class BlobFilter(IntFlag):
'Do not apply filters to binary files.'

NO_SYSTEM_ATTRIBUTES = _pygit2.GIT_BLOB_FILTER_NO_SYSTEM_ATTRIBUTES
'Filters will not load configuration from the system-wide `gitattributes` in `/etc` (or system equivalent).'
'Filters will not load configuration from the system-wide `gitattributes` in `/etc` (or system equivalent).' # noqa: E501

ATTRIBUTES_FROM_HEAD = _pygit2.GIT_BLOB_FILTER_ATTRIBUTES_FROM_HEAD
'Load filters from a `.gitattributes` file in the HEAD commit.'
Expand Down Expand Up @@ -246,7 +246,7 @@ class ConfigLevel(IntEnum):
'XDG compatible configuration file; typically ~/.config/git/config'

GLOBAL = _pygit2.GIT_CONFIG_LEVEL_GLOBAL
'User-specific configuration file (also called Global configuration file); typically ~/.gitconfig'
'User-specific configuration file (also called Global configuration file); typically ~/.gitconfig' # noqa: E501

LOCAL = _pygit2.GIT_CONFIG_LEVEL_LOCAL
'Repository specific configuration file; $WORK_DIR/.git/config on non-bare repos'
Expand Down Expand Up @@ -642,7 +642,7 @@ class DiffStatsFormat(IntFlag):
'Number statistics, equivalent of `--numstat`'

INCLUDE_SUMMARY = _pygit2.GIT_DIFF_STATS_INCLUDE_SUMMARY
'Extended header information such as creations, renames and mode changes, equivalent of `--summary`'
'Extended header information such as creations, renames and mode changes, equivalent of `--summary`' # noqa: E501


class Feature(IntFlag):
Expand Down Expand Up @@ -726,7 +726,7 @@ class FilterFlag(IntFlag):
'Load attributes from `.gitattributes` in the root of HEAD'

ATTRIBUTES_FROM_COMMIT = _pygit2.GIT_FILTER_ATTRIBUTES_FROM_COMMIT
'Load attributes from `.gitattributes` in a given commit. This can only be specified in a `git_filter_options`.'
'Load attributes from `.gitattributes` in a given commit. This can only be specified in a `git_filter_options`.' # noqa: E501


class FilterMode(IntEnum):
Expand Down Expand Up @@ -947,7 +947,7 @@ class ObjectType(IntEnum):
class Option(IntEnum):
"""Global libgit2 library options"""

# Commented out values --> exists in libgit2 but not supported in pygit2's options.c yet
# Commented out values --> exists in libgit2 but not supported in pygit2's options.c yet # noqa: E501
GET_MWINDOW_SIZE = _pygit2.GIT_OPT_GET_MWINDOW_SIZE
SET_MWINDOW_SIZE = _pygit2.GIT_OPT_SET_MWINDOW_SIZE
GET_MWINDOW_MAPPED_LIMIT = _pygit2.GIT_OPT_GET_MWINDOW_MAPPED_LIMIT
Expand Down Expand Up @@ -1293,7 +1293,7 @@ class SubmoduleStatus(IntFlag):
'submodule workdir index is dirty (flag available if ignore is NONE or UNTRACKED)'

WD_WD_MODIFIED = _pygit2.GIT_SUBMODULE_STATUS_WD_WD_MODIFIED
'submodule workdir has modified files (flag available if ignore is NONE or UNTRACKED)'
'submodule workdir has modified files (flag available if ignore is NONE or UNTRACKED)' # noqa: E501

WD_UNTRACKED = _pygit2.GIT_SUBMODULE_STATUS_WD_UNTRACKED
'submodule workdir contains untracked files (flag available if ignore is NONE)'
6 changes: 3 additions & 3 deletions pygit2/errors.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,19 +24,19 @@
# Boston, MA 02110-1301, USA.

# Import from pygit2
from .ffi import ffi, C
from .ffi import ffi, C # noqa: I001
from ._pygit2 import GitError


value_errors = set([C.GIT_EEXISTS, C.GIT_EINVALIDSPEC, C.GIT_EAMBIGUOUS])
value_errors = set([C.GIT_EEXISTS, C.GIT_EINVALIDSPEC, C.GIT_EAMBIGUOUS]) # noqa: C405


def check_error(err, io=False):
if err >= 0:
return

# These are special error codes, they should never reach here
test = err != C.GIT_EUSER and err != C.GIT_PASSTHROUGH
test = err != C.GIT_EUSER and err != C.GIT_PASSTHROUGH # noqa: PLR1714
assert test, f'Unexpected error code {err}'

# Error message
Expand Down
3 changes: 2 additions & 1 deletion pygit2/ffi.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,4 +24,5 @@
# Boston, MA 02110-1301, USA.

# Import from pygit2
from ._libgit2 import ffi, lib as C # noqa: F401

from ._libgit2 import ffi, lib as C # noqa: I001, F401
2 changes: 1 addition & 1 deletion pygit2/filter.py
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ def check(self, src: FilterSource, attr_values: List[Optional[str]]):
"""

def write(
self, data: bytes, src: FilterSource, write_next: Callable[[bytes], None]
self, data: bytes, src: FilterSource, write_next: Callable[[bytes], None] # noqa: ARG002
):
"""
Write input `data` to this filter.
Expand Down
6 changes: 3 additions & 3 deletions pygit2/index.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
# the Free Software Foundation, 51 Franklin Street, Fifth Floor,
# Boston, MA 02110-1301, USA.

import warnings
import warnings # noqa: I001
import weakref

# Import from pygit2
Expand Down Expand Up @@ -367,15 +367,15 @@ def oid(self):
@property
def hex(self):
"""The id of the referenced object as a hex string"""
warnings.warn('Use str(entry.id)', DeprecationWarning)
warnings.warn('Use str(entry.id)', DeprecationWarning) # noqa: B028
return str(self.id)

def __str__(self):
return f'<path={self.path} id={self.id} mode={self.mode}>'

def __repr__(self):
t = type(self)
return f'<{t.__module__}.{t.__qualname__} path={self.path} id={self.id} mode={self.mode}>'
return f'<{t.__module__}.{t.__qualname__} path={self.path} id={self.id} mode={self.mode}>' # noqa: E501

def __eq__(self, other):
if self is other:
Expand Down
2 changes: 1 addition & 1 deletion pygit2/packbuilder.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@


# Import from pygit2
from .errors import check_error
from .errors import check_error # noqa: I001
from .ffi import ffi, C
from .utils import to_bytes

Expand Down
Loading
Loading