pytest output
../venv-test-arm64/lib/pypy3.11/site-packages/pygit2/errors.py:67: GitError
__________________ ERROR at setup of test_rebuild_treebuilder __________________
@pytest.fixture(scope='session', autouse=True)
def global_git_config() -> None:
# Do not use global config for better test reproducibility.
# https://github.com/libgit2/pygit2/issues/989
levels = [
pygit2.enums.ConfigLevel.GLOBAL,
pygit2.enums.ConfigLevel.XDG,
pygit2.enums.ConfigLevel.SYSTEM,
]
for level in levels:
> pygit2.settings.search_path[level] = ''
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
test/conftest.py:22:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
../venv-test-arm64/lib/pypy3.11/site-packages/pygit2/settings.py:45: in __setitem__
option(Option.SET_SEARCH_PATH, key, value)
../venv-test-arm64/lib/pypy3.11/site-packages/pygit2/options.py:373: in option
check_error(err)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
err = -1, io = False
def check_error(err: int, io: bool = False) -> None:
if err >= 0:
return
# These are special error codes, they should never reach here
test = err != C.GIT_EUSER and err != C.GIT_PASSTHROUGH
assert test, f'Unexpected error code {err}'
# Error message
giterr = C.git_error_last()
if giterr != ffi.NULL:
message = ffi.string(giterr.message).decode('utf8', errors='surrogateescape')
else:
message = f'err {err} (no message provided)'
# Translate to Python errors
if err in value_errors:
raise ValueError(message)
if err == C.GIT_ENOTFOUND:
if io:
raise IOError(message)
raise KeyError(message)
if err == C.GIT_EINVALIDSPEC:
raise ValueError(message)
if err == C.GIT_ITEROVER:
raise StopIteration()
# Generic Git error
> raise GitError(message)
E _pygit2.GitError: invalid config path selector 0
../venv-test-arm64/lib/pypy3.11/site-packages/pygit2/errors.py:67: GitError
ERROR test/test_treebuilder.py::test_rebuild_treebuilder - _pygit2.GitError: invalid config path selector 0
As far as I can tell, this "invalid config path selector" error seems to be specific to pygit2 on pypy11. It seems that the int(level) passed to git_libgit2_opts()
|
elif option_type == C.GIT_OPT_SET_SEARCH_PATH: |
|
check_args(option_type, arg1, arg2, 2) |
|
|
|
level = int(arg1) # Convert enum to int |
|
path = arg2 |
|
|
|
path_cdata: ArrayC[char] | NULL_TYPE |
|
if path is None: |
|
path_cdata = ffi.NULL |
|
else: |
|
path_bytes = to_bytes(path) |
|
path_cdata = ffi.new('char[]', path_bytes) |
|
|
|
err = C.git_libgit2_opts(option_type, ffi.cast('int', level), path_cdata) |
|
check_error(err) |
|
return None |
is not matching up with the libgit2 C constants of the same name:
static int config_level_to_sysdir(int *out, int config_level)
{
switch (config_level) {
case GIT_CONFIG_LEVEL_SYSTEM:
*out = GIT_SYSDIR_SYSTEM;
return 0;
case GIT_CONFIG_LEVEL_XDG:
*out = GIT_SYSDIR_XDG;
return 0;
case GIT_CONFIG_LEVEL_GLOBAL:
*out = GIT_SYSDIR_GLOBAL;
return 0;
case GIT_CONFIG_LEVEL_PROGRAMDATA:
*out = GIT_SYSDIR_PROGRAMDATA;
return 0;
default:
break;
}
git_error_set(
GIT_ERROR_INVALID, "invalid config path selector %d", config_level);
return -1;
}
See libgit2 source
There was a similar issue in libgit2/libgit2sharp#1951 which was fixed by padding the va_args passed to git_libgit2_opts() (libgit2/libgit2sharp#1955).
Originally posted by @2bndy5 in #1441 (comment)
Reactions are currently unavailable
../venv-test-arm64/lib/pypy3.11/site-packages/pygit2/errors.py:67: GitError __________________ ERROR at setup of test_rebuild_treebuilder __________________ @pytest.fixture(scope='session', autouse=True) def global_git_config() -> None: # Do not use global config for better test reproducibility. # https://github.com/libgit2/pygit2/issues/989 levels = [ pygit2.enums.ConfigLevel.GLOBAL, pygit2.enums.ConfigLevel.XDG, pygit2.enums.ConfigLevel.SYSTEM, ] for level in levels: > pygit2.settings.search_path[level] = '' ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ test/conftest.py:22: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ../venv-test-arm64/lib/pypy3.11/site-packages/pygit2/settings.py:45: in __setitem__ option(Option.SET_SEARCH_PATH, key, value) ../venv-test-arm64/lib/pypy3.11/site-packages/pygit2/options.py:373: in option check_error(err) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ err = -1, io = False def check_error(err: int, io: bool = False) -> None: if err >= 0: return # These are special error codes, they should never reach here test = err != C.GIT_EUSER and err != C.GIT_PASSTHROUGH assert test, f'Unexpected error code {err}' # Error message giterr = C.git_error_last() if giterr != ffi.NULL: message = ffi.string(giterr.message).decode('utf8', errors='surrogateescape') else: message = f'err {err} (no message provided)' # Translate to Python errors if err in value_errors: raise ValueError(message) if err == C.GIT_ENOTFOUND: if io: raise IOError(message) raise KeyError(message) if err == C.GIT_EINVALIDSPEC: raise ValueError(message) if err == C.GIT_ITEROVER: raise StopIteration() # Generic Git error > raise GitError(message) E _pygit2.GitError: invalid config path selector 0 ../venv-test-arm64/lib/pypy3.11/site-packages/pygit2/errors.py:67: GitError ERROR test/test_treebuilder.py::test_rebuild_treebuilder - _pygit2.GitError: invalid config path selector 0As far as I can tell, this "invalid config path selector" error seems to be specific to pygit2 on pypy11. It seems that the int(level) passed to git_libgit2_opts()
pygit2/pygit2/options.py
Lines 359 to 374 in 890730c
is not matching up with the libgit2 C constants of the same name:
See libgit2 source
There was a similar issue in libgit2/libgit2sharp#1951 which was fixed by padding the va_args passed to git_libgit2_opts() (libgit2/libgit2sharp#1955).
Originally posted by @2bndy5 in #1441 (comment)