Skip to content

Commit f9289da

Browse files
committed
Merge remote-tracking branch 'BenediktSeidl/typing-5'
2 parents 79283f5 + 7e0f891 commit f9289da

File tree

14 files changed

+322
-174
lines changed

14 files changed

+322
-174
lines changed

pygit2/_libgit2/ffi.pyi

Lines changed: 30 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,11 @@ class _Pointer(Generic[T]):
4242
@overload
4343
def __getitem__(self, item: slice[None, None, None]) -> bytes: ...
4444

45+
class ArrayC(Generic[T]):
46+
# incomplete!
47+
# def _len(self, ?) -> ?: ...
48+
pass
49+
4550
class GitTimeC:
4651
# incomplete
4752
time: int
@@ -132,13 +137,13 @@ class GitDescribeFormatOptionsC:
132137
version: int
133138
abbreviated_size: int
134139
always_use_long_format: int
135-
dirty_suffix: char_pointer
140+
dirty_suffix: ArrayC[char]
136141

137142
class GitDescribeOptionsC:
138143
version: int
139144
max_candidates_tags: int
140145
describe_strategy: int
141-
pattern: char_pointer
146+
pattern: ArrayC[char]
142147
only_follow_first_parent: int
143148
show_commit_oid_as_fallback: int
144149

@@ -148,6 +153,11 @@ class GitDescribeResultC:
148153
class GitIndexC:
149154
pass
150155

156+
class GitIndexEntryC:
157+
# incomplete?
158+
mode: int
159+
path: ArrayC[char]
160+
151161
class GitMergeFileResultC:
152162
pass
153163

@@ -158,11 +168,13 @@ class GitStashSaveOptionsC:
158168
version: int
159169
flags: int
160170
stasher: GitSignatureC
161-
message: char_pointer
171+
message: ArrayC[char]
162172
paths: GitStrrayC
163173

164174
class GitStrrayC:
165-
pass
175+
# incomplete?
176+
strings: NULL_TYPE | ArrayC[char]
177+
count: int
166178

167179
class GitTreeC:
168180
pass
@@ -171,11 +183,11 @@ class GitRepositoryInitOptionsC:
171183
version: int
172184
flags: int
173185
mode: int
174-
workdir_path: char_pointer
175-
description: char_pointer
176-
template_path: char_pointer
177-
initial_head: char_pointer
178-
origin_url: char_pointer
186+
workdir_path: ArrayC[char]
187+
description: ArrayC[char]
188+
template_path: ArrayC[char]
189+
initial_head: ArrayC[char]
190+
origin_url: ArrayC[char]
179191

180192
class GitCloneOptionsC:
181193
pass
@@ -229,6 +241,10 @@ def new(a: Literal['git_attr_options *']) -> GitAttrOptionsC: ...
229241
@overload
230242
def new(a: Literal['git_buf *']) -> GitBufC: ...
231243
@overload
244+
def new(a: Literal['char *'], b: bytes) -> char_pointer: ...
245+
@overload
246+
def new(a: Literal['char *[]'], b: list[char_pointer]) -> ArrayC[char_pointer]: ...
247+
@overload
232248
def new(a: Literal['git_checkout_options *']) -> GitCheckoutOptionsC: ...
233249
@overload
234250
def new(a: Literal['git_commit **']) -> _Pointer[GitCommitC]: ...
@@ -251,6 +267,8 @@ def new(a: Literal['struct git_reference **']) -> _Pointer[GitReferenceC]: ...
251267
@overload
252268
def new(a: Literal['git_index **']) -> _Pointer[GitIndexC]: ...
253269
@overload
270+
def new(a: Literal['git_index_entry *']) -> GitIndexEntryC: ...
271+
@overload
254272
def new(a: Literal['git_merge_file_result *']) -> GitMergeFileResultC: ...
255273
@overload
256274
def new(a: Literal['git_object *']) -> GitObjectC: ...
@@ -263,13 +281,15 @@ def new(a: Literal['git_signature **']) -> _Pointer[GitSignatureC]: ...
263281
@overload
264282
def new(a: Literal['git_stash_save_options *']) -> GitStashSaveOptionsC: ...
265283
@overload
284+
def new(a: Literal['git_strarray *']) -> GitStrrayC: ...
285+
@overload
266286
def new(a: Literal['git_tree **']) -> _Pointer[GitTreeC]: ...
267287
@overload
268288
def new(a: Literal['git_buf *'], b: tuple[NULL_TYPE, Literal[0]]) -> GitBufC: ...
269289
@overload
270290
def new(a: Literal['char **']) -> _Pointer[char_pointer]: ...
271291
@overload
272-
def new(a: Literal['char[]', 'char []'], b: bytes | NULL_TYPE) -> char_pointer: ...
292+
def new(a: Literal['char[]', 'char []'], b: bytes | NULL_TYPE) -> ArrayC[char]: ...
273293
def addressof(a: object, attribute: str) -> _Pointer[object]: ...
274294

275295
class buffer(bytes):

pygit2/_pygit2.pyi

Lines changed: 60 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ from typing import (
1919
from . import Index
2020
from ._libgit2.ffi import (
2121
GitCommitC,
22+
GitMergeOptionsC,
2223
GitObjectC,
2324
GitProxyOptionsC,
2425
GitRepositoryC,
@@ -36,12 +37,16 @@ from .enums import (
3637
BranchType,
3738
CheckoutStrategy,
3839
DeltaStatus,
40+
DescribeStrategy,
3941
DiffFind,
4042
DiffFlag,
4143
DiffOption,
4244
DiffStatsFormat,
4345
FileMode,
4446
MergeAnalysis,
47+
MergeFavor,
48+
MergeFileFlag,
49+
MergeFlag,
4550
MergePreference,
4651
ObjectType,
4752
Option,
@@ -51,6 +56,7 @@ from .enums import (
5156
ResetMode,
5257
SortMode,
5358
)
59+
from .filter import Filter
5460
from .remotes import Remote
5561
from .repository import BaseRepository
5662
from .submodules import SubmoduleCollection
@@ -457,6 +463,7 @@ class Diff:
457463
patch: str | None
458464
patchid: Oid
459465
stats: DiffStats
466+
text: str
460467
def find_similar(
461468
self,
462469
flags: DiffFind = DiffFind.FIND_BY_CONFIG,
@@ -520,6 +527,7 @@ class DiffStats:
520527

521528
class FilterSource:
522529
# probably incomplete
530+
repo: object
523531
pass
524532

525533
class GitError(Exception): ...
@@ -529,9 +537,9 @@ class Mailmap:
529537
def __init__(self, *args) -> None: ...
530538
def add_entry(
531539
self,
532-
real_name: str = ...,
533-
real_email: str = ...,
534-
replace_name: str = ...,
540+
real_name: str | None = ...,
541+
real_email: str | None = ...,
542+
replace_name: str | None = ...,
535543
replace_email: str = ...,
536544
) -> None: ...
537545
@staticmethod
@@ -719,6 +727,7 @@ class Branches:
719727

720728
class Repository:
721729
_pointer: GitRepositoryC
730+
_repo: GitRepositoryC
722731
default_signature: Signature
723732
head: Reference
724733
head_is_detached: bool
@@ -784,7 +793,7 @@ class Repository:
784793
def compress_references(self) -> None: ...
785794
@property
786795
def config(self) -> Config: ...
787-
def create_blob(self, data: bytes) -> Oid: ...
796+
def create_blob(self, data: str | bytes) -> Oid: ...
788797
def create_blob_fromdisk(self, path: str) -> Oid: ...
789798
def create_blob_fromiobase(self, iobase: IOBase) -> Oid: ...
790799
def create_blob_fromworkdir(self, path: str | Path) -> Oid: ...
@@ -834,14 +843,26 @@ class Repository:
834843
) -> Oid: ...
835844
def diff(
836845
self,
837-
a: None | str | Reference = None,
838-
b: None | str | Reference = None,
846+
a: None | str | bytes | Oid | Reference = None,
847+
b: None | str | bytes | Oid | Reference = None,
839848
cached: bool = False,
840849
flags: DiffOption = DiffOption.NORMAL,
841850
context_lines: int = 3,
842851
interhunk_lines: int = 0,
843852
) -> Diff: ...
844853
def descendant_of(self, oid1: _OidArg, oid2: _OidArg) -> bool: ...
854+
def describe(
855+
self,
856+
committish: str | Reference | Commit | None = None,
857+
max_candidates_tags: int | None = None,
858+
describe_strategy: DescribeStrategy = DescribeStrategy.DEFAULT,
859+
pattern: str | None = None,
860+
only_follow_first_parent: bool | None = None,
861+
show_commit_oid_as_fallback: bool | None = None,
862+
abbreviated_size: object | None = None,
863+
always_use_long_format: bool | None = None,
864+
dirty_suffix: str | None = None,
865+
) -> str: ...
845866
def expand_id(self, hex: str) -> Oid: ...
846867
def free(self) -> None: ...
847868
def get(self, key: _OidArg, default: Optional[Commit] = None) -> None | Object: ...
@@ -867,12 +888,40 @@ class Repository:
867888
def lookup_reference(self, name: str) -> Reference: ...
868889
def lookup_reference_dwim(self, name: str) -> Reference: ...
869890
def lookup_worktree(self, name: str) -> Worktree: ...
891+
def merge(
892+
self,
893+
source: Reference | Commit | Oid | str,
894+
favor: MergeFavor = MergeFavor.NORMAL,
895+
flags: MergeFlag = MergeFlag.FIND_RENAMES,
896+
file_flags: MergeFileFlag = MergeFileFlag.DEFAULT,
897+
) -> None: ...
870898
def merge_analysis(
871899
self, their_head: _OidArg, our_ref: str = 'HEAD'
872900
) -> tuple[MergeAnalysis, MergePreference]: ...
873901
def merge_base(self, oid1: _OidArg, oid2: _OidArg) -> Oid: ...
874902
def merge_base_many(self, oids: list[_OidArg]) -> Oid: ...
875903
def merge_base_octopus(self, oids: list[_OidArg]) -> Oid: ...
904+
def merge_commits(
905+
self,
906+
ours: str | Oid | Commit,
907+
theirs: str | Oid | Commit,
908+
favor: MergeFavor = MergeFavor.NORMAL,
909+
flags: MergeFlag = MergeFlag.FIND_RENAMES,
910+
file_flags: MergeFileFlag = MergeFileFlag.DEFAULT,
911+
) -> Index: ...
912+
@staticmethod
913+
def _merge_options(
914+
favor: int | MergeFavor, flags: int | MergeFlag, file_flags: int | MergeFileFlag
915+
) -> GitMergeOptionsC: ...
916+
def merge_trees(
917+
self,
918+
ancestor: str | Oid | Tree,
919+
ours: str | Oid | Tree,
920+
theirs: str | Oid | Tree,
921+
favor: MergeFavor = MergeFavor.NORMAL,
922+
flags: MergeFlag = MergeFlag.FIND_RENAMES,
923+
file_flags: MergeFileFlag = MergeFileFlag.DEFAULT,
924+
) -> Index: ...
876925
@property
877926
def message(self) -> str: ...
878927
def notes(self) -> Iterator[Note]: ...
@@ -881,6 +930,9 @@ class Repository:
881930
self, flag: BranchType = BranchType.LOCAL
882931
) -> list[bytes]: ...
883932
def raw_listall_references(self) -> list[bytes]: ...
933+
@property
934+
def raw_message(self) -> bytes: ...
935+
def remove_message(self) -> None: ...
884936
def references_iterator_init(self) -> Iterator[Reference]: ...
885937
def references_iterator_next(
886938
self,
@@ -1022,5 +1074,7 @@ def option(opt: Option, *args) -> None: ...
10221074
def reference_is_valid_name(refname: str) -> bool: ...
10231075
def tree_entry_cmp(a: Object, b: Object) -> int: ...
10241076
def _cache_enums() -> None: ...
1077+
def filter_register(name: str, filter: type[Filter]) -> None: ...
1078+
def filter_unregister(name: str) -> None: ...
10251079

10261080
_OidArg = str | Oid

pygit2/filter.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ class Filter:
5858
def nattrs(cls) -> int:
5959
return len(cls.attributes.split())
6060

61-
def check(self, src: FilterSource, attr_values: List[Optional[str]]):
61+
def check(self, src: FilterSource, attr_values: List[Optional[str]]) -> None:
6262
"""
6363
Check whether this filter should be applied to the given source.
6464
@@ -77,7 +77,7 @@ def check(self, src: FilterSource, attr_values: List[Optional[str]]):
7777

7878
def write(
7979
self, data: bytes, src: FilterSource, write_next: Callable[[bytes], None]
80-
):
80+
) -> None:
8181
"""
8282
Write input `data` to this filter.
8383
@@ -95,7 +95,7 @@ def write(
9595
"""
9696
write_next(data)
9797

98-
def close(self, write_next: Callable[[bytes], None]):
98+
def close(self, write_next: Callable[[bytes], None]) -> None:
9999
"""
100100
Close this filter.
101101

0 commit comments

Comments
 (0)