Skip to content

Commit 9d7df46

Browse files
committed
Move option handling to CFFI
1 parent ff66108 commit 9d7df46

File tree

15 files changed

+538
-598
lines changed

15 files changed

+538
-598
lines changed

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,3 +13,5 @@ __pycache__/
1313
*.pyc
1414
*.so
1515
*.swp
16+
/pygit2/_libgit2.c
17+
/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: 35 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,12 +290,46 @@
322290
hash,
323291
hashfile,
324292
init_file_backend,
325-
option,
326293
reference_is_valid_name,
327294
tree_entry_cmp,
328295
)
329296
from .blame import Blame, BlameHunk
330297
from .blob import BlobIO
298+
from .options import (
299+
option,
300+
GIT_OPT_DISABLE_PACK_KEEP_FILE_CHECKS,
301+
GIT_OPT_ENABLE_CACHING,
302+
GIT_OPT_ENABLE_FSYNC_GITDIR,
303+
GIT_OPT_ENABLE_OFS_DELTA,
304+
GIT_OPT_ENABLE_STRICT_HASH_VERIFICATION,
305+
GIT_OPT_ENABLE_STRICT_OBJECT_CREATION,
306+
GIT_OPT_ENABLE_STRICT_SYMBOLIC_REF_CREATION,
307+
GIT_OPT_ENABLE_UNSAVED_INDEX_SAFETY,
308+
GIT_OPT_GET_CACHED_MEMORY,
309+
GIT_OPT_GET_MWINDOW_FILE_LIMIT,
310+
GIT_OPT_GET_MWINDOW_MAPPED_LIMIT,
311+
GIT_OPT_GET_MWINDOW_SIZE,
312+
GIT_OPT_GET_OWNER_VALIDATION,
313+
GIT_OPT_GET_PACK_MAX_OBJECTS,
314+
GIT_OPT_GET_SEARCH_PATH,
315+
GIT_OPT_GET_TEMPLATE_PATH,
316+
GIT_OPT_GET_USER_AGENT,
317+
GIT_OPT_GET_WINDOWS_SHAREMODE,
318+
GIT_OPT_SET_ALLOCATOR,
319+
GIT_OPT_SET_CACHE_MAX_SIZE,
320+
GIT_OPT_SET_CACHE_OBJECT_LIMIT,
321+
GIT_OPT_SET_MWINDOW_FILE_LIMIT,
322+
GIT_OPT_SET_MWINDOW_MAPPED_LIMIT,
323+
GIT_OPT_SET_MWINDOW_SIZE,
324+
GIT_OPT_SET_OWNER_VALIDATION,
325+
GIT_OPT_SET_PACK_MAX_OBJECTS,
326+
GIT_OPT_SET_SEARCH_PATH,
327+
GIT_OPT_SET_SSL_CERT_LOCATIONS,
328+
GIT_OPT_SET_SSL_CIPHERS,
329+
GIT_OPT_SET_TEMPLATE_PATH,
330+
GIT_OPT_SET_USER_AGENT,
331+
GIT_OPT_SET_WINDOWS_SHAREMODE,
332+
)
331333
from .callbacks import (
332334
CheckoutCallbacks,
333335
Payload,

pygit2/_libgit2/ffi.pyi

Lines changed: 10 additions & 0 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
@@ -319,6 +322,8 @@ def new(
319322
@overload
320323
def new(a: Literal['size_t *', 'size_t*']) -> size_t: ...
321324
@overload
325+
def new(a: Literal['ssize_t *', 'ssize_t*']) -> ssize_t: ...
326+
@overload
322327
def new(a: Literal['git_stash_save_options *']) -> GitStashSaveOptionsC: ...
323328
@overload
324329
def new(a: Literal['git_strarray *']) -> GitStrrayC: ...
@@ -340,4 +345,9 @@ class buffer(bytes):
340345
@overload
341346
def __getitem__(self, item: slice[Any, Any, Any]) -> bytes: ...
342347

348+
@overload
343349
def cast(a: Literal['int'], b: object) -> int: ...
350+
@overload
351+
def cast(a: Literal['size_t'], b: object) -> int: ...
352+
@overload
353+
def cast(a: Literal['ssize_t'], b: object) -> int: ...

pygit2/_pygit2.pyi

Lines changed: 0 additions & 105 deletions
Original file line numberDiff line numberDiff line change
@@ -52,38 +52,6 @@ LIBGIT2_VER_MAJOR: int
5252
LIBGIT2_VER_MINOR: int
5353
LIBGIT2_VER_REVISION: int
5454
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
8755
GIT_OID_RAWSZ: int
8856
GIT_OID_HEXSZ: int
8957
GIT_OID_HEX_ZERO: str
@@ -887,79 +855,6 @@ def discover_repository(
887855
def hash(data: bytes | str) -> Oid: ...
888856
def hashfile(path: str) -> Oid: ...
889857
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-
963858
def reference_is_valid_name(refname: str) -> bool: ...
964859
def tree_entry_cmp(a: Object, b: Object) -> int: ...
965860
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 = []

pygit2/decl/options.h

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
typedef enum {
2+
GIT_OPT_GET_MWINDOW_SIZE,
3+
GIT_OPT_SET_MWINDOW_SIZE,
4+
GIT_OPT_GET_MWINDOW_MAPPED_LIMIT,
5+
GIT_OPT_SET_MWINDOW_MAPPED_LIMIT,
6+
GIT_OPT_GET_SEARCH_PATH,
7+
GIT_OPT_SET_SEARCH_PATH,
8+
GIT_OPT_SET_CACHE_OBJECT_LIMIT,
9+
GIT_OPT_SET_CACHE_MAX_SIZE,
10+
GIT_OPT_ENABLE_CACHING,
11+
GIT_OPT_GET_CACHED_MEMORY,
12+
GIT_OPT_GET_TEMPLATE_PATH,
13+
GIT_OPT_SET_TEMPLATE_PATH,
14+
GIT_OPT_SET_SSL_CERT_LOCATIONS,
15+
GIT_OPT_SET_USER_AGENT,
16+
GIT_OPT_ENABLE_STRICT_OBJECT_CREATION,
17+
GIT_OPT_ENABLE_STRICT_SYMBOLIC_REF_CREATION,
18+
GIT_OPT_SET_SSL_CIPHERS,
19+
GIT_OPT_GET_USER_AGENT,
20+
GIT_OPT_ENABLE_OFS_DELTA,
21+
GIT_OPT_ENABLE_FSYNC_GITDIR,
22+
GIT_OPT_GET_WINDOWS_SHAREMODE,
23+
GIT_OPT_SET_WINDOWS_SHAREMODE,
24+
GIT_OPT_ENABLE_STRICT_HASH_VERIFICATION,
25+
GIT_OPT_SET_ALLOCATOR,
26+
GIT_OPT_ENABLE_UNSAVED_INDEX_SAFETY,
27+
GIT_OPT_GET_PACK_MAX_OBJECTS,
28+
GIT_OPT_SET_PACK_MAX_OBJECTS,
29+
GIT_OPT_DISABLE_PACK_KEEP_FILE_CHECKS,
30+
GIT_OPT_ENABLE_HTTP_EXPECT_CONTINUE,
31+
GIT_OPT_GET_MWINDOW_FILE_LIMIT,
32+
GIT_OPT_SET_MWINDOW_FILE_LIMIT,
33+
GIT_OPT_SET_ODB_PACKED_PRIORITY,
34+
GIT_OPT_SET_ODB_LOOSE_PRIORITY,
35+
GIT_OPT_GET_EXTENSIONS,
36+
GIT_OPT_SET_EXTENSIONS,
37+
GIT_OPT_GET_OWNER_VALIDATION,
38+
GIT_OPT_SET_OWNER_VALIDATION,
39+
GIT_OPT_GET_HOMEDIR,
40+
GIT_OPT_SET_HOMEDIR,
41+
GIT_OPT_SET_SERVER_CONNECT_TIMEOUT,
42+
GIT_OPT_GET_SERVER_CONNECT_TIMEOUT,
43+
GIT_OPT_SET_SERVER_TIMEOUT,
44+
GIT_OPT_GET_SERVER_TIMEOUT,
45+
GIT_OPT_SET_USER_AGENT_PRODUCT,
46+
GIT_OPT_GET_USER_AGENT_PRODUCT,
47+
GIT_OPT_ADD_SSL_X509_CERT
48+
} git_libgit2_opt_t;
49+
50+
int git_libgit2_opts(int option, ...);

0 commit comments

Comments
 (0)