Skip to content

Commit c921ebc

Browse files
committed
Merge remote-tracking branch 'ambv/move-options-to-cffi'
2 parents bc42a5a + 7a7895f commit c921ebc

File tree

17 files changed

+1554
-611
lines changed

17 files changed

+1554
-611
lines changed

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
/.envrc
55
/.tox/
66
/build/
7+
/ci/
78
/dist/
89
/docs/_build/
910
/MANIFEST
@@ -13,3 +14,5 @@ __pycache__/
1314
*.pyc
1415
*.so
1516
*.swp
17+
/pygit2/_libgit2.c
18+
/pygit2/_libgit2.o

build.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -178,7 +178,7 @@ if [ -n "$LIBGIT2_VERSION" ]; then
178178
wget https://github.com/libgit2/libgit2/archive/refs/tags/v$LIBGIT2_VERSION.tar.gz -N -O $FILENAME.tar.gz
179179
tar xf $FILENAME.tar.gz
180180
cd $FILENAME
181-
mkdir build -p
181+
mkdir -p build
182182
cd build
183183
if [ "$KERNEL" = "Darwin" ] && [ "$CIBUILDWHEEL" = "1" ]; then
184184
CMAKE_PREFIX_PATH=$OPENSSL_PREFIX:$PREFIX cmake .. \

pygit2/__init__.py

Lines changed: 63 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -191,38 +191,6 @@
191191
GIT_OID_HEXSZ,
192192
GIT_OID_MINPREFIXLEN,
193193
GIT_OID_RAWSZ,
194-
GIT_OPT_DISABLE_PACK_KEEP_FILE_CHECKS,
195-
GIT_OPT_ENABLE_CACHING,
196-
GIT_OPT_ENABLE_FSYNC_GITDIR,
197-
GIT_OPT_ENABLE_OFS_DELTA,
198-
GIT_OPT_ENABLE_STRICT_HASH_VERIFICATION,
199-
GIT_OPT_ENABLE_STRICT_OBJECT_CREATION,
200-
GIT_OPT_ENABLE_STRICT_SYMBOLIC_REF_CREATION,
201-
GIT_OPT_ENABLE_UNSAVED_INDEX_SAFETY,
202-
GIT_OPT_GET_CACHED_MEMORY,
203-
GIT_OPT_GET_MWINDOW_FILE_LIMIT,
204-
GIT_OPT_GET_MWINDOW_MAPPED_LIMIT,
205-
GIT_OPT_GET_MWINDOW_SIZE,
206-
GIT_OPT_GET_OWNER_VALIDATION,
207-
GIT_OPT_GET_PACK_MAX_OBJECTS,
208-
GIT_OPT_GET_SEARCH_PATH,
209-
GIT_OPT_GET_TEMPLATE_PATH,
210-
GIT_OPT_GET_USER_AGENT,
211-
GIT_OPT_GET_WINDOWS_SHAREMODE,
212-
GIT_OPT_SET_ALLOCATOR,
213-
GIT_OPT_SET_CACHE_MAX_SIZE,
214-
GIT_OPT_SET_CACHE_OBJECT_LIMIT,
215-
GIT_OPT_SET_MWINDOW_FILE_LIMIT,
216-
GIT_OPT_SET_MWINDOW_MAPPED_LIMIT,
217-
GIT_OPT_SET_MWINDOW_SIZE,
218-
GIT_OPT_SET_OWNER_VALIDATION,
219-
GIT_OPT_SET_PACK_MAX_OBJECTS,
220-
GIT_OPT_SET_SEARCH_PATH,
221-
GIT_OPT_SET_SSL_CERT_LOCATIONS,
222-
GIT_OPT_SET_SSL_CIPHERS,
223-
GIT_OPT_SET_TEMPLATE_PATH,
224-
GIT_OPT_SET_USER_AGENT,
225-
GIT_OPT_SET_WINDOWS_SHAREMODE,
226194
GIT_REFERENCES_ALL,
227195
GIT_REFERENCES_BRANCHES,
228196
GIT_REFERENCES_TAGS,
@@ -322,7 +290,6 @@
322290
hash,
323291
hashfile,
324292
init_file_backend,
325-
option,
326293
reference_is_valid_name,
327294
tree_entry_cmp,
328295
)
@@ -345,6 +312,55 @@
345312
from .filter import Filter
346313
from .index import Index, IndexEntry
347314
from .legacyenums import *
315+
from .options import (
316+
GIT_OPT_ADD_SSL_X509_CERT,
317+
GIT_OPT_DISABLE_PACK_KEEP_FILE_CHECKS,
318+
GIT_OPT_ENABLE_CACHING,
319+
GIT_OPT_ENABLE_FSYNC_GITDIR,
320+
GIT_OPT_ENABLE_HTTP_EXPECT_CONTINUE,
321+
GIT_OPT_ENABLE_OFS_DELTA,
322+
GIT_OPT_ENABLE_STRICT_HASH_VERIFICATION,
323+
GIT_OPT_ENABLE_STRICT_OBJECT_CREATION,
324+
GIT_OPT_ENABLE_STRICT_SYMBOLIC_REF_CREATION,
325+
GIT_OPT_ENABLE_UNSAVED_INDEX_SAFETY,
326+
GIT_OPT_GET_CACHED_MEMORY,
327+
GIT_OPT_GET_EXTENSIONS,
328+
GIT_OPT_GET_HOMEDIR,
329+
GIT_OPT_GET_MWINDOW_FILE_LIMIT,
330+
GIT_OPT_GET_MWINDOW_MAPPED_LIMIT,
331+
GIT_OPT_GET_MWINDOW_SIZE,
332+
GIT_OPT_GET_OWNER_VALIDATION,
333+
GIT_OPT_GET_PACK_MAX_OBJECTS,
334+
GIT_OPT_GET_SEARCH_PATH,
335+
GIT_OPT_GET_SERVER_CONNECT_TIMEOUT,
336+
GIT_OPT_GET_SERVER_TIMEOUT,
337+
GIT_OPT_GET_TEMPLATE_PATH,
338+
GIT_OPT_GET_USER_AGENT,
339+
GIT_OPT_GET_USER_AGENT_PRODUCT,
340+
GIT_OPT_GET_WINDOWS_SHAREMODE,
341+
GIT_OPT_SET_ALLOCATOR,
342+
GIT_OPT_SET_CACHE_MAX_SIZE,
343+
GIT_OPT_SET_CACHE_OBJECT_LIMIT,
344+
GIT_OPT_SET_EXTENSIONS,
345+
GIT_OPT_SET_HOMEDIR,
346+
GIT_OPT_SET_MWINDOW_FILE_LIMIT,
347+
GIT_OPT_SET_MWINDOW_MAPPED_LIMIT,
348+
GIT_OPT_SET_MWINDOW_SIZE,
349+
GIT_OPT_SET_ODB_LOOSE_PRIORITY,
350+
GIT_OPT_SET_ODB_PACKED_PRIORITY,
351+
GIT_OPT_SET_OWNER_VALIDATION,
352+
GIT_OPT_SET_PACK_MAX_OBJECTS,
353+
GIT_OPT_SET_SEARCH_PATH,
354+
GIT_OPT_SET_SERVER_CONNECT_TIMEOUT,
355+
GIT_OPT_SET_SERVER_TIMEOUT,
356+
GIT_OPT_SET_SSL_CERT_LOCATIONS,
357+
GIT_OPT_SET_SSL_CIPHERS,
358+
GIT_OPT_SET_TEMPLATE_PATH,
359+
GIT_OPT_SET_USER_AGENT,
360+
GIT_OPT_SET_USER_AGENT_PRODUCT,
361+
GIT_OPT_SET_WINDOWS_SHAREMODE,
362+
option,
363+
)
348364
from .packbuilder import PackBuilder
349365
from .remotes import Remote
350366
from .repository import Repository
@@ -745,37 +761,51 @@ def clone_repository(
745761
'GIT_OBJECT_REF_DELTA',
746762
'GIT_OBJECT_TAG',
747763
'GIT_OBJECT_TREE',
764+
'GIT_OPT_ADD_SSL_X509_CERT',
748765
'GIT_OPT_DISABLE_PACK_KEEP_FILE_CHECKS',
749766
'GIT_OPT_ENABLE_CACHING',
750767
'GIT_OPT_ENABLE_FSYNC_GITDIR',
768+
'GIT_OPT_ENABLE_HTTP_EXPECT_CONTINUE',
751769
'GIT_OPT_ENABLE_OFS_DELTA',
752770
'GIT_OPT_ENABLE_STRICT_HASH_VERIFICATION',
753771
'GIT_OPT_ENABLE_STRICT_OBJECT_CREATION',
754772
'GIT_OPT_ENABLE_STRICT_SYMBOLIC_REF_CREATION',
755773
'GIT_OPT_ENABLE_UNSAVED_INDEX_SAFETY',
756774
'GIT_OPT_GET_CACHED_MEMORY',
775+
'GIT_OPT_GET_EXTENSIONS',
776+
'GIT_OPT_GET_HOMEDIR',
757777
'GIT_OPT_GET_MWINDOW_FILE_LIMIT',
758778
'GIT_OPT_GET_MWINDOW_MAPPED_LIMIT',
759779
'GIT_OPT_GET_MWINDOW_SIZE',
760780
'GIT_OPT_GET_OWNER_VALIDATION',
761781
'GIT_OPT_GET_PACK_MAX_OBJECTS',
762782
'GIT_OPT_GET_SEARCH_PATH',
783+
'GIT_OPT_GET_SERVER_CONNECT_TIMEOUT',
784+
'GIT_OPT_GET_SERVER_TIMEOUT',
763785
'GIT_OPT_GET_TEMPLATE_PATH',
764786
'GIT_OPT_GET_USER_AGENT',
787+
'GIT_OPT_GET_USER_AGENT_PRODUCT',
765788
'GIT_OPT_GET_WINDOWS_SHAREMODE',
766789
'GIT_OPT_SET_ALLOCATOR',
767790
'GIT_OPT_SET_CACHE_MAX_SIZE',
768791
'GIT_OPT_SET_CACHE_OBJECT_LIMIT',
792+
'GIT_OPT_SET_EXTENSIONS',
793+
'GIT_OPT_SET_HOMEDIR',
769794
'GIT_OPT_SET_MWINDOW_FILE_LIMIT',
770795
'GIT_OPT_SET_MWINDOW_MAPPED_LIMIT',
771796
'GIT_OPT_SET_MWINDOW_SIZE',
797+
'GIT_OPT_SET_ODB_LOOSE_PRIORITY',
798+
'GIT_OPT_SET_ODB_PACKED_PRIORITY',
772799
'GIT_OPT_SET_OWNER_VALIDATION',
773800
'GIT_OPT_SET_PACK_MAX_OBJECTS',
774801
'GIT_OPT_SET_SEARCH_PATH',
802+
'GIT_OPT_SET_SERVER_CONNECT_TIMEOUT',
803+
'GIT_OPT_SET_SERVER_TIMEOUT',
775804
'GIT_OPT_SET_SSL_CERT_LOCATIONS',
776805
'GIT_OPT_SET_SSL_CIPHERS',
777806
'GIT_OPT_SET_TEMPLATE_PATH',
778807
'GIT_OPT_SET_USER_AGENT',
808+
'GIT_OPT_SET_USER_AGENT_PRODUCT',
779809
'GIT_OPT_SET_WINDOWS_SHAREMODE',
780810
'GIT_REFERENCES_ALL',
781811
'GIT_REFERENCES_BRANCHES',

pygit2/_libgit2/ffi.pyi

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,9 @@ class int_c:
4242
class int64_t:
4343
def __getitem__(self, item: Literal[0]) -> int: ...
4444

45+
class ssize_t:
46+
def __getitem__(self, item: Literal[0]) -> int: ...
47+
4548
class _Pointer(Generic[T]):
4649
def __setitem__(self, item: Literal[0], a: T) -> None: ...
4750
@overload
@@ -55,7 +58,8 @@ class _MultiPointer(Generic[T]):
5558
class ArrayC(Generic[T]):
5659
# incomplete!
5760
# def _len(self, ?) -> ?: ...
58-
pass
61+
def __getitem__(self, index: int) -> T: ...
62+
def __setitem__(self, index: int, value: T) -> None: ...
5963

6064
class GitTimeC:
6165
# incomplete
@@ -196,7 +200,7 @@ class GitStashSaveOptionsC:
196200

197201
class GitStrrayC:
198202
# incomplete?
199-
strings: NULL_TYPE | ArrayC[char]
203+
strings: NULL_TYPE | ArrayC[char_pointer]
200204
count: int
201205

202206
class GitTreeC:
@@ -319,6 +323,8 @@ def new(
319323
@overload
320324
def new(a: Literal['size_t *', 'size_t*']) -> size_t: ...
321325
@overload
326+
def new(a: Literal['ssize_t *', 'ssize_t*']) -> ssize_t: ...
327+
@overload
322328
def new(a: Literal['git_stash_save_options *']) -> GitStashSaveOptionsC: ...
323329
@overload
324330
def new(a: Literal['git_strarray *']) -> GitStrrayC: ...
@@ -330,6 +336,14 @@ def new(a: Literal['git_buf *'], b: tuple[NULL_TYPE, Literal[0]]) -> GitBufC: ..
330336
def new(a: Literal['char **']) -> _Pointer[char_pointer]: ...
331337
@overload
332338
def new(a: Literal['char[]', 'char []'], b: bytes | NULL_TYPE) -> ArrayC[char]: ...
339+
@overload
340+
def new(
341+
a: Literal['char *[]'], b: int
342+
) -> ArrayC[char_pointer]: ... # For ext_array in SET_EXTENSIONS
343+
@overload
344+
def new(
345+
a: Literal['char *[]'], b: list[Any]
346+
) -> ArrayC[char_pointer]: ... # For string arrays
333347
def addressof(a: object, attribute: str) -> _Pointer[object]: ...
334348

335349
class buffer(bytes):
@@ -340,4 +354,13 @@ class buffer(bytes):
340354
@overload
341355
def __getitem__(self, item: slice[Any, Any, Any]) -> bytes: ...
342356

357+
@overload
343358
def cast(a: Literal['int'], b: object) -> int: ...
359+
@overload
360+
def cast(a: Literal['unsigned int'], b: object) -> int: ...
361+
@overload
362+
def cast(a: Literal['size_t'], b: object) -> int: ...
363+
@overload
364+
def cast(a: Literal['ssize_t'], b: object) -> int: ...
365+
@overload
366+
def cast(a: Literal['char *'], b: object) -> char_pointer: ...

pygit2/_pygit2.pyi

Lines changed: 0 additions & 107 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ from .enums import (
2525
ApplyLocation,
2626
BlobFilter,
2727
BranchType,
28-
ConfigLevel,
2928
DeltaStatus,
3029
DiffFind,
3130
DiffFlag,
@@ -35,7 +34,6 @@ from .enums import (
3534
MergeAnalysis,
3635
MergePreference,
3736
ObjectType,
38-
Option,
3937
ReferenceFilter,
4038
ReferenceType,
4139
ResetMode,
@@ -52,38 +50,6 @@ LIBGIT2_VER_MAJOR: int
5250
LIBGIT2_VER_MINOR: int
5351
LIBGIT2_VER_REVISION: int
5452
LIBGIT2_VERSION: str
55-
GIT_OPT_GET_MWINDOW_SIZE: int
56-
GIT_OPT_SET_MWINDOW_SIZE: int
57-
GIT_OPT_GET_MWINDOW_MAPPED_LIMIT: int
58-
GIT_OPT_SET_MWINDOW_MAPPED_LIMIT: int
59-
GIT_OPT_GET_SEARCH_PATH: int
60-
GIT_OPT_SET_SEARCH_PATH: int
61-
GIT_OPT_SET_CACHE_OBJECT_LIMIT: int
62-
GIT_OPT_SET_CACHE_MAX_SIZE: int
63-
GIT_OPT_ENABLE_CACHING: int
64-
GIT_OPT_GET_CACHED_MEMORY: int
65-
GIT_OPT_GET_TEMPLATE_PATH: int
66-
GIT_OPT_SET_TEMPLATE_PATH: int
67-
GIT_OPT_SET_SSL_CERT_LOCATIONS: int
68-
GIT_OPT_SET_USER_AGENT: int
69-
GIT_OPT_ENABLE_STRICT_OBJECT_CREATION: int
70-
GIT_OPT_ENABLE_STRICT_SYMBOLIC_REF_CREATION: int
71-
GIT_OPT_SET_SSL_CIPHERS: int
72-
GIT_OPT_GET_USER_AGENT: int
73-
GIT_OPT_ENABLE_OFS_DELTA: int
74-
GIT_OPT_ENABLE_FSYNC_GITDIR: int
75-
GIT_OPT_GET_WINDOWS_SHAREMODE: int
76-
GIT_OPT_SET_WINDOWS_SHAREMODE: int
77-
GIT_OPT_ENABLE_STRICT_HASH_VERIFICATION: int
78-
GIT_OPT_SET_ALLOCATOR: int
79-
GIT_OPT_ENABLE_UNSAVED_INDEX_SAFETY: int
80-
GIT_OPT_GET_PACK_MAX_OBJECTS: int
81-
GIT_OPT_SET_PACK_MAX_OBJECTS: int
82-
GIT_OPT_DISABLE_PACK_KEEP_FILE_CHECKS: int
83-
GIT_OPT_GET_OWNER_VALIDATION: int
84-
GIT_OPT_SET_OWNER_VALIDATION: int
85-
GIT_OPT_GET_MWINDOW_FILE_LIMIT: int
86-
GIT_OPT_SET_MWINDOW_FILE_LIMIT: int
8753
GIT_OID_RAWSZ: int
8854
GIT_OID_HEXSZ: int
8955
GIT_OID_HEX_ZERO: str
@@ -887,79 +853,6 @@ def discover_repository(
887853
def hash(data: bytes | str) -> Oid: ...
888854
def hashfile(path: str) -> Oid: ...
889855
def init_file_backend(path: str, flags: int = 0) -> object: ...
890-
@overload
891-
def option(
892-
opt: Literal[
893-
Option.GET_MWINDOW_FILE_LIMIT,
894-
Option.GET_MWINDOW_MAPPED_LIMIT,
895-
Option.GET_MWINDOW_SIZE,
896-
],
897-
) -> int: ...
898-
@overload
899-
def option(
900-
opt: Literal[
901-
Option.SET_MWINDOW_FILE_LIMIT,
902-
Option.SET_MWINDOW_MAPPED_LIMIT,
903-
Option.SET_MWINDOW_SIZE,
904-
],
905-
value: int,
906-
) -> None: ...
907-
@overload
908-
def option(opt: Literal[Option.GET_SEARCH_PATH], level: ConfigLevel) -> str: ...
909-
@overload
910-
def option(
911-
opt: Literal[Option.SET_SEARCH_PATH], level: ConfigLevel, value: str
912-
) -> None: ...
913-
@overload
914-
def option(
915-
opt: Literal[Option.SET_CACHE_OBJECT_LIMIT], object_type: ObjectType, limit: int
916-
) -> None: ...
917-
@overload
918-
def option(opt: Literal[Option.SET_CACHE_MAX_SIZE], max_size: int) -> None: ...
919-
@overload
920-
def option(opt: Literal[Option.GET_CACHED_MEMORY]) -> tuple[int, int]: ...
921-
922-
# not implemented:
923-
# Option.GET_TEMPLATE_PATH
924-
# Option.SET_TEMPLATE_PATH
925-
926-
@overload
927-
def option(
928-
opt: Literal[Option.SET_SSL_CERT_LOCATIONS],
929-
file: str | bytes | None,
930-
dir: str | bytes | None,
931-
) -> None: ...
932-
933-
# not implemented:
934-
# Option.SET_USER_AGENT
935-
936-
@overload
937-
def option(
938-
opt: Literal[
939-
Option.ENABLE_CACHING,
940-
Option.ENABLE_STRICT_OBJECT_CREATION,
941-
Option.ENABLE_STRICT_SYMBOLIC_REF_CREATION,
942-
Option.ENABLE_OFS_DELTA,
943-
Option.ENABLE_FSYNC_GITDIR,
944-
Option.ENABLE_STRICT_HASH_VERIFICATION,
945-
Option.ENABLE_UNSAVED_INDEX_SAFETY,
946-
Option.DISABLE_PACK_KEEP_FILE_CHECKS,
947-
Option.SET_OWNER_VALIDATION,
948-
],
949-
value: bool | Literal[0, 1],
950-
) -> None: ...
951-
@overload
952-
def option(opt: Literal[Option.GET_OWNER_VALIDATION]) -> int: ...
953-
954-
# not implemented:
955-
# Option.SET_SSL_CIPHERS
956-
# Option.GET_USER_AGENT
957-
# Option.GET_WINDOWS_SHAREMODE
958-
# Option.SET_WINDOWS_SHAREMODE
959-
# Option.SET_ALLOCATOR
960-
# Option.GET_PACK_MAX_OBJECTS
961-
# Option.SET_PACK_MAX_OBJECTS
962-
963856
def reference_is_valid_name(refname: str) -> bool: ...
964857
def tree_entry_cmp(a: Object, b: Object) -> int: ...
965858
def _cache_enums() -> None: ...

pygit2/_run.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@
8181
'revert.h',
8282
'stash.h',
8383
'submodule.h',
84+
'options.h',
8485
'callbacks.h', # Bridge from libgit2 to Python
8586
]
8687
h_source = []

0 commit comments

Comments
 (0)