Skip to content
1 change: 1 addition & 0 deletions mypy.ini
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,4 @@

[mypy-test.*]
disallow_untyped_defs = True
disallow_untyped_calls = True
293 changes: 291 additions & 2 deletions pygit2/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,297 @@
from ._build import __version__

# Low level API
from ._pygit2 import *
from ._pygit2 import _cache_enums
from ._pygit2 import (
GIT_APPLY_LOCATION_BOTH,
GIT_APPLY_LOCATION_INDEX,
GIT_APPLY_LOCATION_WORKDIR,
GIT_BLAME_FIRST_PARENT,
GIT_BLAME_IGNORE_WHITESPACE,
GIT_BLAME_NORMAL,
GIT_BLAME_TRACK_COPIES_ANY_COMMIT_COPIES,
GIT_BLAME_TRACK_COPIES_SAME_COMMIT_COPIES,
GIT_BLAME_TRACK_COPIES_SAME_COMMIT_MOVES,
GIT_BLAME_TRACK_COPIES_SAME_FILE,
GIT_BLAME_USE_MAILMAP,
GIT_BLOB_FILTER_ATTRIBUTES_FROM_COMMIT,
GIT_BLOB_FILTER_ATTRIBUTES_FROM_HEAD,
GIT_BLOB_FILTER_CHECK_FOR_BINARY,
GIT_BLOB_FILTER_NO_SYSTEM_ATTRIBUTES,
GIT_BRANCH_ALL,
GIT_BRANCH_LOCAL,
GIT_BRANCH_REMOTE,
GIT_CHECKOUT_ALLOW_CONFLICTS,
GIT_CHECKOUT_CONFLICT_STYLE_DIFF3,
GIT_CHECKOUT_CONFLICT_STYLE_MERGE,
GIT_CHECKOUT_CONFLICT_STYLE_ZDIFF3,
GIT_CHECKOUT_DISABLE_PATHSPEC_MATCH,
GIT_CHECKOUT_DONT_OVERWRITE_IGNORED,
GIT_CHECKOUT_DONT_REMOVE_EXISTING,
GIT_CHECKOUT_DONT_UPDATE_INDEX,
GIT_CHECKOUT_DONT_WRITE_INDEX,
GIT_CHECKOUT_DRY_RUN,
GIT_CHECKOUT_FORCE,
GIT_CHECKOUT_NO_REFRESH,
GIT_CHECKOUT_NONE,
GIT_CHECKOUT_RECREATE_MISSING,
GIT_CHECKOUT_REMOVE_IGNORED,
GIT_CHECKOUT_REMOVE_UNTRACKED,
GIT_CHECKOUT_SAFE,
GIT_CHECKOUT_SKIP_LOCKED_DIRECTORIES,
GIT_CHECKOUT_SKIP_UNMERGED,
GIT_CHECKOUT_UPDATE_ONLY,
GIT_CHECKOUT_USE_OURS,
GIT_CHECKOUT_USE_THEIRS,
GIT_CONFIG_HIGHEST_LEVEL,
GIT_CONFIG_LEVEL_APP,
GIT_CONFIG_LEVEL_GLOBAL,
GIT_CONFIG_LEVEL_LOCAL,
GIT_CONFIG_LEVEL_PROGRAMDATA,
GIT_CONFIG_LEVEL_SYSTEM,
GIT_CONFIG_LEVEL_WORKTREE,
GIT_CONFIG_LEVEL_XDG,
GIT_DELTA_ADDED,
GIT_DELTA_CONFLICTED,
GIT_DELTA_COPIED,
GIT_DELTA_DELETED,
GIT_DELTA_IGNORED,
GIT_DELTA_MODIFIED,
GIT_DELTA_RENAMED,
GIT_DELTA_TYPECHANGE,
GIT_DELTA_UNMODIFIED,
GIT_DELTA_UNREADABLE,
GIT_DELTA_UNTRACKED,
GIT_DESCRIBE_ALL,
GIT_DESCRIBE_DEFAULT,
GIT_DESCRIBE_TAGS,
GIT_DIFF_BREAK_REWRITES,
GIT_DIFF_BREAK_REWRITES_FOR_RENAMES_ONLY,
GIT_DIFF_DISABLE_PATHSPEC_MATCH,
GIT_DIFF_ENABLE_FAST_UNTRACKED_DIRS,
GIT_DIFF_FIND_ALL,
GIT_DIFF_FIND_AND_BREAK_REWRITES,
GIT_DIFF_FIND_BY_CONFIG,
GIT_DIFF_FIND_COPIES,
GIT_DIFF_FIND_COPIES_FROM_UNMODIFIED,
GIT_DIFF_FIND_DONT_IGNORE_WHITESPACE,
GIT_DIFF_FIND_EXACT_MATCH_ONLY,
GIT_DIFF_FIND_FOR_UNTRACKED,
GIT_DIFF_FIND_IGNORE_LEADING_WHITESPACE,
GIT_DIFF_FIND_IGNORE_WHITESPACE,
GIT_DIFF_FIND_REMOVE_UNMODIFIED,
GIT_DIFF_FIND_RENAMES,
GIT_DIFF_FIND_RENAMES_FROM_REWRITES,
GIT_DIFF_FIND_REWRITES,
GIT_DIFF_FLAG_BINARY,
GIT_DIFF_FLAG_EXISTS,
GIT_DIFF_FLAG_NOT_BINARY,
GIT_DIFF_FLAG_VALID_ID,
GIT_DIFF_FLAG_VALID_SIZE,
GIT_DIFF_FORCE_BINARY,
GIT_DIFF_FORCE_TEXT,
GIT_DIFF_IGNORE_BLANK_LINES,
GIT_DIFF_IGNORE_CASE,
GIT_DIFF_IGNORE_FILEMODE,
GIT_DIFF_IGNORE_SUBMODULES,
GIT_DIFF_IGNORE_WHITESPACE,
GIT_DIFF_IGNORE_WHITESPACE_CHANGE,
GIT_DIFF_IGNORE_WHITESPACE_EOL,
GIT_DIFF_INCLUDE_CASECHANGE,
GIT_DIFF_INCLUDE_IGNORED,
GIT_DIFF_INCLUDE_TYPECHANGE,
GIT_DIFF_INCLUDE_TYPECHANGE_TREES,
GIT_DIFF_INCLUDE_UNMODIFIED,
GIT_DIFF_INCLUDE_UNREADABLE,
GIT_DIFF_INCLUDE_UNREADABLE_AS_UNTRACKED,
GIT_DIFF_INCLUDE_UNTRACKED,
GIT_DIFF_INDENT_HEURISTIC,
GIT_DIFF_MINIMAL,
GIT_DIFF_NORMAL,
GIT_DIFF_PATIENCE,
GIT_DIFF_RECURSE_IGNORED_DIRS,
GIT_DIFF_RECURSE_UNTRACKED_DIRS,
GIT_DIFF_REVERSE,
GIT_DIFF_SHOW_BINARY,
GIT_DIFF_SHOW_UNMODIFIED,
GIT_DIFF_SHOW_UNTRACKED_CONTENT,
GIT_DIFF_SKIP_BINARY_CHECK,
GIT_DIFF_STATS_FULL,
GIT_DIFF_STATS_INCLUDE_SUMMARY,
GIT_DIFF_STATS_NONE,
GIT_DIFF_STATS_NUMBER,
GIT_DIFF_STATS_SHORT,
GIT_DIFF_UPDATE_INDEX,
GIT_FILEMODE_BLOB,
GIT_FILEMODE_BLOB_EXECUTABLE,
GIT_FILEMODE_COMMIT,
GIT_FILEMODE_LINK,
GIT_FILEMODE_TREE,
GIT_FILEMODE_UNREADABLE,
GIT_FILTER_ALLOW_UNSAFE,
GIT_FILTER_ATTRIBUTES_FROM_COMMIT,
GIT_FILTER_ATTRIBUTES_FROM_HEAD,
GIT_FILTER_CLEAN,
GIT_FILTER_DEFAULT,
GIT_FILTER_DRIVER_PRIORITY,
GIT_FILTER_NO_SYSTEM_ATTRIBUTES,
GIT_FILTER_SMUDGE,
GIT_FILTER_TO_ODB,
GIT_FILTER_TO_WORKTREE,
GIT_MERGE_ANALYSIS_FASTFORWARD,
GIT_MERGE_ANALYSIS_NONE,
GIT_MERGE_ANALYSIS_NORMAL,
GIT_MERGE_ANALYSIS_UNBORN,
GIT_MERGE_ANALYSIS_UP_TO_DATE,
GIT_MERGE_PREFERENCE_FASTFORWARD_ONLY,
GIT_MERGE_PREFERENCE_NO_FASTFORWARD,
GIT_MERGE_PREFERENCE_NONE,
GIT_OBJECT_ANY,
GIT_OBJECT_BLOB,
GIT_OBJECT_COMMIT,
GIT_OBJECT_INVALID,
GIT_OBJECT_OFS_DELTA,
GIT_OBJECT_REF_DELTA,
GIT_OBJECT_TAG,
GIT_OBJECT_TREE,
GIT_OID_HEX_ZERO,
GIT_OID_HEXSZ,
GIT_OID_MINPREFIXLEN,
GIT_OID_RAWSZ,
GIT_OPT_DISABLE_PACK_KEEP_FILE_CHECKS,
GIT_OPT_ENABLE_CACHING,
GIT_OPT_ENABLE_FSYNC_GITDIR,
GIT_OPT_ENABLE_OFS_DELTA,
GIT_OPT_ENABLE_STRICT_HASH_VERIFICATION,
GIT_OPT_ENABLE_STRICT_OBJECT_CREATION,
GIT_OPT_ENABLE_STRICT_SYMBOLIC_REF_CREATION,
GIT_OPT_ENABLE_UNSAVED_INDEX_SAFETY,
GIT_OPT_GET_CACHED_MEMORY,
GIT_OPT_GET_MWINDOW_FILE_LIMIT,
GIT_OPT_GET_MWINDOW_MAPPED_LIMIT,
GIT_OPT_GET_MWINDOW_SIZE,
GIT_OPT_GET_OWNER_VALIDATION,
GIT_OPT_GET_PACK_MAX_OBJECTS,
GIT_OPT_GET_SEARCH_PATH,
GIT_OPT_GET_TEMPLATE_PATH,
GIT_OPT_GET_USER_AGENT,
GIT_OPT_GET_WINDOWS_SHAREMODE,
GIT_OPT_SET_ALLOCATOR,
GIT_OPT_SET_CACHE_MAX_SIZE,
GIT_OPT_SET_CACHE_OBJECT_LIMIT,
GIT_OPT_SET_MWINDOW_FILE_LIMIT,
GIT_OPT_SET_MWINDOW_MAPPED_LIMIT,
GIT_OPT_SET_MWINDOW_SIZE,
GIT_OPT_SET_OWNER_VALIDATION,
GIT_OPT_SET_PACK_MAX_OBJECTS,
GIT_OPT_SET_SEARCH_PATH,
GIT_OPT_SET_SSL_CERT_LOCATIONS,
GIT_OPT_SET_SSL_CIPHERS,
GIT_OPT_SET_TEMPLATE_PATH,
GIT_OPT_SET_USER_AGENT,
GIT_OPT_SET_WINDOWS_SHAREMODE,
GIT_REFERENCES_ALL,
GIT_REFERENCES_BRANCHES,
GIT_REFERENCES_TAGS,
GIT_RESET_HARD,
GIT_RESET_MIXED,
GIT_RESET_SOFT,
GIT_REVSPEC_MERGE_BASE,
GIT_REVSPEC_RANGE,
GIT_REVSPEC_SINGLE,
GIT_SORT_NONE,
GIT_SORT_REVERSE,
GIT_SORT_TIME,
GIT_SORT_TOPOLOGICAL,
GIT_STASH_APPLY_DEFAULT,
GIT_STASH_APPLY_REINSTATE_INDEX,
GIT_STASH_DEFAULT,
GIT_STASH_INCLUDE_IGNORED,
GIT_STASH_INCLUDE_UNTRACKED,
GIT_STASH_KEEP_ALL,
GIT_STASH_KEEP_INDEX,
GIT_STATUS_CONFLICTED,
GIT_STATUS_CURRENT,
GIT_STATUS_IGNORED,
GIT_STATUS_INDEX_DELETED,
GIT_STATUS_INDEX_MODIFIED,
GIT_STATUS_INDEX_NEW,
GIT_STATUS_INDEX_RENAMED,
GIT_STATUS_INDEX_TYPECHANGE,
GIT_STATUS_WT_DELETED,
GIT_STATUS_WT_MODIFIED,
GIT_STATUS_WT_NEW,
GIT_STATUS_WT_RENAMED,
GIT_STATUS_WT_TYPECHANGE,
GIT_STATUS_WT_UNREADABLE,
GIT_SUBMODULE_IGNORE_ALL,
GIT_SUBMODULE_IGNORE_DIRTY,
GIT_SUBMODULE_IGNORE_NONE,
GIT_SUBMODULE_IGNORE_UNSPECIFIED,
GIT_SUBMODULE_IGNORE_UNTRACKED,
GIT_SUBMODULE_STATUS_IN_CONFIG,
GIT_SUBMODULE_STATUS_IN_HEAD,
GIT_SUBMODULE_STATUS_IN_INDEX,
GIT_SUBMODULE_STATUS_IN_WD,
GIT_SUBMODULE_STATUS_INDEX_ADDED,
GIT_SUBMODULE_STATUS_INDEX_DELETED,
GIT_SUBMODULE_STATUS_INDEX_MODIFIED,
GIT_SUBMODULE_STATUS_WD_ADDED,
GIT_SUBMODULE_STATUS_WD_DELETED,
GIT_SUBMODULE_STATUS_WD_INDEX_MODIFIED,
GIT_SUBMODULE_STATUS_WD_MODIFIED,
GIT_SUBMODULE_STATUS_WD_UNINITIALIZED,
GIT_SUBMODULE_STATUS_WD_UNTRACKED,
GIT_SUBMODULE_STATUS_WD_WD_MODIFIED,
LIBGIT2_VER_MAJOR,
LIBGIT2_VER_MINOR,
LIBGIT2_VER_REVISION,
LIBGIT2_VERSION,
AlreadyExistsError,
Blob,
Branch,
Commit,
Diff,
DiffDelta,
DiffFile,
DiffHunk,
DiffLine,
DiffStats,
FilterSource,
GitError,
InvalidSpecError,
Mailmap,
Note,
Object,
Odb,
OdbBackend,
OdbBackendLoose,
OdbBackendPack,
Oid,
Patch,
Refdb,
RefdbBackend,
RefdbFsBackend,
Reference,
RefLogEntry,
RevSpec,
Signature,
Stash,
Tag,
Tree,
TreeBuilder,
Walker,
Worktree,
_cache_enums,
discover_repository,
filter_register,
filter_unregister,
hash,
hashfile,
init_file_backend,
option,
reference_is_valid_name,
tree_entry_cmp,
)
from .blame import Blame, BlameHunk
from .blob import BlobIO
from .callbacks import (
Expand Down
24 changes: 20 additions & 4 deletions pygit2/_libgit2/ffi.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,6 @@

from typing import Any, Generic, Literal, NewType, SupportsIndex, TypeVar, overload

from pygit2._pygit2 import Repository

T = TypeVar('T')

NULL_TYPE = NewType('NULL_TYPE', object)
Expand All @@ -38,6 +36,12 @@ char_pointer = NewType('char_pointer', object)
class size_t:
def __getitem__(self, item: Literal[0]) -> int: ...

class int_c:
def __getitem__(self, item: Literal[0]) -> int: ...

class int64_t:
def __getitem__(self, item: Literal[0]) -> int: ...

class _Pointer(Generic[T]):
def __setitem__(self, item: Literal[0], a: T) -> None: ...
@overload
Expand Down Expand Up @@ -76,7 +80,8 @@ class GitHunkC:
class GitRepositoryC:
# incomplete
# TODO: this has to be unified with pygit2._pygit2(pyi).Repository
def _from_c(cls, ptr: 'GitRepositoryC', owned: bool) -> 'Repository': ...
# def _from_c(cls, ptr: 'GitRepositoryC', owned: bool) -> 'Repository': ...
pass

class GitFetchOptionsC:
# TODO: FetchOptions exist in _pygit2.pyi
Expand Down Expand Up @@ -141,9 +146,14 @@ class GitConfigC:
# incomplete
pass

class GitConfigIteratorC:
# incomplete
pass

class GitConfigEntryC:
# incomplete
name: char_pointer
value: char_pointer
level: int

class GitDescribeFormatOptionsC:
Expand Down Expand Up @@ -269,6 +279,8 @@ def new(a: Literal['git_config *']) -> GitConfigC: ...
@overload
def new(a: Literal['git_config **']) -> _Pointer[GitConfigC]: ...
@overload
def new(a: Literal['git_config_iterator **']) -> _Pointer[GitConfigIteratorC]: ...
@overload
def new(a: Literal['git_config_entry **']) -> _Pointer[GitConfigEntryC]: ...
@overload
def new(a: Literal['git_describe_format_options *']) -> GitDescribeFormatOptionsC: ...
Expand Down Expand Up @@ -297,11 +309,15 @@ def new(a: Literal['git_signature *']) -> GitSignatureC: ...
@overload
def new(a: Literal['git_signature **']) -> _Pointer[GitSignatureC]: ...
@overload
def new(a: Literal['int *']) -> int_c: ...
@overload
def new(a: Literal['int64_t *']) -> int64_t: ...
@overload
def new(
a: Literal['git_remote_head ***'],
) -> _Pointer[_MultiPointer[GitRemoteHeadC]]: ...
@overload
def new(a: Literal['size_t *']) -> size_t: ...
def new(a: Literal['size_t *', 'size_t*']) -> size_t: ...
@overload
def new(a: Literal['git_stash_save_options *']) -> GitStashSaveOptionsC: ...
@overload
Expand Down
Loading
Loading