[PATCH 1 of 5] python3.13: use sys.executable instead of removed Py_GetProgramFullPath
Mads Kiilerich
mads at kiilerich.com
Thu Jan 11 23:59:52 UTC 2024
# HG changeset patch
# User Mads Kiilerich <mads at kiilerich.com>
# Date 1705001527 -3600
# Thu Jan 11 20:32:07 2024 +0100
# Branch stable
# Node ID ab3021e9b0012db64e5bdc70e3f5a36324925d8c
# Parent 3f87e0d305cda6e66139a1969cd2cedd45477139
python3.13: use sys.executable instead of removed Py_GetProgramFullPath
I could not make it work with the PyConfig API from the extension. But fetching
sys.executable seems to work fine and isn't that verbose.
diff --git a/mercurial/cext/parsers.c b/mercurial/cext/parsers.c
--- a/mercurial/cext/parsers.c
+++ b/mercurial/cext/parsers.c
@@ -1232,6 +1232,15 @@ static int check_python_version(void)
* should only occur in unusual circumstances (e.g. if sys.hexversion
* is manually set to an invalid value). */
if ((hexversion == -1) || (hexversion >> 16 != PY_VERSION_HEX >> 16)) {
+ PyObject *sys = PyImport_ImportModule("sys"), *executable;
+ if (!sys) {
+ return -1;
+ }
+ executable = PyObject_GetAttrString(sys, "executable");
+ Py_DECREF(sys);
+ if (!executable) {
+ return -1;
+ }
PyErr_Format(PyExc_ImportError,
"%s: The Mercurial extension "
"modules were compiled with Python " PY_VERSION
@@ -1240,7 +1249,8 @@ static int check_python_version(void)
"sys.hexversion=%ld: "
"Python %s\n at: %s",
versionerrortext, hexversion, Py_GetVersion(),
- Py_GetProgramFullPath());
+ PyUnicode_AsUTF8(executable));
+ Py_DECREF(executable);
return -1;
}
return 0;
More information about the Mercurial-devel
mailing list