public inbox for git-commits@fedoraproject.org
help / color / mirror / Atom feed
From: Jitka Plesnikova <jplesnik@redhat.com>
To: git-commits@fedoraproject.org
Subject: [rpms/apbs] rawhide: Replace removed Python 2 C API macros for SWIG 4.5.0 compatibility
Date: Sun, 02 Aug 2026 14:19:21 GMT [thread overview]
Message-ID: <178568036191.1.4294692630472043378.rpms-apbs-785bdbcfee29@fedoraproject.org> (raw)
A new commit has been pushed.
Repo : rpms/apbs
Branch : rawhide
Commit : 785bdbcfee293dc5a12a3942466a31b278c0c577
Author : Jitka Plesnikova <jplesnik@redhat.com>
Date : 2026-07-28T15:18:38+02:00
Stats : +446/-1 in 2 file(s)
URL : https://src.fedoraproject.org/rpms/apbs/c/785bdbcfee293dc5a12a3942466a31b278c0c577?branch=rawhide
Log:
Replace removed Python 2 C API macros for SWIG 4.5.0 compatibility
---
diff --git a/apbs-swig45.patch b/apbs-swig45.patch
new file mode 100644
index 0000000..0baefe7
--- /dev/null
+++ b/apbs-swig45.patch
@@ -0,0 +1,437 @@
+diff -up apbs-3.0.0/tools/python/apbslib.c.swig45 apbs-3.0.0/tools/python/apbslib.c
+--- apbs-3.0.0/tools/python/apbslib.c.swig45 2026-07-27 16:32:02.374414239 +0200
++++ apbs-3.0.0/tools/python/apbslib.c 2026-07-27 17:22:47.809005222 +0200
+@@ -722,7 +722,7 @@ PyString_FromFormat(const char *fmt, ...
+ va_start(ap, fmt);
+ res = vsnprintf(buf, sizeof(buf), fmt, ap);
+ va_end(ap);
+- return (res < 0 || res >= (int)sizeof(buf)) ? 0 : PyString_FromString(buf);
++ return (res < 0 || res >= (int)sizeof(buf)) ? 0 : PyUnicode_FromString(buf);
+ }
+ #endif
+
+@@ -754,7 +754,7 @@ PyString_FromFormat(const char *fmt, ...
+ /* A crude PyString_AsStringAndSize implementation for old Pythons */
+ #if PY_VERSION_HEX < 0x02010000
+ # ifndef PyString_AsStringAndSize
+-# define PyString_AsStringAndSize(obj, s, len) {*s = PyString_AsString(obj); *len = *s ? strlen(*s) : 0;}
++# define PyString_AsStringAndSize(obj, s, len) {*s = PyBytes_AsString(obj); *len = *s ? strlen(*s) : 0;}
+ # endif
+ #endif
+
+@@ -846,7 +846,7 @@ SWIG_Python_AddErrorMsg(const char* mesg
+ PyObject *old_str = PyObject_Str(value);
+ PyErr_Clear();
+ Py_XINCREF(type);
+- PyErr_Format(type, "%s %s", PyString_AsString(old_str), mesg);
++ PyErr_Format(type, "%s %s", PyBytes_AsString(old_str), mesg);
+ Py_DECREF(old_str);
+ Py_DECREF(value);
+ } else {
+@@ -1237,7 +1237,7 @@ PySwigClientData_New(PyObject* obj)
+ data->klass = obj;
+ Py_INCREF(data->klass);
+ /* the newraw method and newargs arguments used to create a new raw instance */
+- if (PyClass_Check(obj)) {
++ if (PyObject_IsInstance(obj)) {
+ data->newraw = 0;
+ data->newargs = obj;
+ Py_INCREF(obj);
+@@ -1310,9 +1310,9 @@ PySwigObject_format(const char* fmt, PyS
+ PyObject *args = PyTuple_New(1);
+ if (args) {
+ if (PyTuple_SetItem(args, 0, PySwigObject_long(v)) == 0) {
+- PyObject *ofmt = PyString_FromString(fmt);
++ PyObject *ofmt = PyUnicode_FromString(fmt);
+ if (ofmt) {
+- res = PyString_Format(ofmt,args);
++ res = PyUnicode_Format(ofmt,args);
+ Py_DECREF(ofmt);
+ }
+ Py_DECREF(args);
+@@ -1342,7 +1342,7 @@ PySwigObject_repr(PySwigObject *v, PyObj
+ {
+ const char *name = SWIG_TypePrettyName(v->ty);
+ PyObject *hex = PySwigObject_hex(v);
+- PyObject *repr = PyString_FromFormat("<Swig Object of type '%s' at 0x%s>", name, PyString_AsString(hex));
++ PyObject *repr = PyString_FromFormat("<Swig Object of type '%s' at 0x%s>", name, PyBytes_AsString(hex));
+ Py_DECREF(hex);
+ if (v->next) {
+ #ifdef METH_NOARGS
+@@ -1364,7 +1364,7 @@ PySwigObject_print(PySwigObject *v, FILE
+ PyObject *repr = PySwigObject_repr(v, NULL);
+ #endif
+ if (repr) {
+- fputs(PyString_AsString(repr), fp);
++ fputs(PyBytes_AsString(repr), fp);
+ Py_DECREF(repr);
+ return 0;
+ } else {
+@@ -1377,7 +1377,7 @@ PySwigObject_str(PySwigObject *v)
+ {
+ char result[SWIG_BUFFER_SIZE];
+ return SWIG_PackVoidPtr(result, v->ptr, v->ty->name, sizeof(result)) ?
+- PyString_FromString(result) : 0;
++ PyUnicode_FromString(result) : 0;
+ }
+
+ SWIGRUNTIME int
+@@ -1725,7 +1725,7 @@ PySwigPacked_str(PySwigPacked *v)
+ if (SWIG_PackDataName(result, v->pack, v->size, 0, sizeof(result))){
+ return PyString_FromFormat("%s%s", result, v->ty->name);
+ } else {
+- return PyString_FromString(v->ty->name);
++ return PyUnicode_FromString(v->ty->name);
+ }
+ }
+
+@@ -1871,7 +1871,7 @@ PySwigPacked_UnpackData(PyObject *obj, v
+ SWIGRUNTIMEINLINE PyObject *
+ _SWIG_This(void)
+ {
+- return PyString_FromString("this");
++ return PyUnicode_FromString("this");
+ }
+
+ SWIGRUNTIME PyObject *
+@@ -2308,7 +2308,7 @@ SWIGRUNTIME swig_type_info *
+ SWIG_Python_TypeQuery(const char *type)
+ {
+ PyObject *cache = SWIG_Python_TypeCache();
+- PyObject *key = PyString_FromString(type);
++ PyObject *key = PyUnicode_FromString(type);
+ PyObject *obj = PyDict_GetItem(cache, key);
+ swig_type_info *descriptor;
+ if (obj) {
+@@ -2346,9 +2346,9 @@ SWIG_Python_AddErrMesg(const char* mesg,
+ Py_XINCREF(type);
+ PyErr_Clear();
+ if (infront) {
+- PyErr_Format(type, "%s %s", mesg, PyString_AsString(old_str));
++ PyErr_Format(type, "%s %s", mesg, PyBytes_AsString(old_str));
+ } else {
+- PyErr_Format(type, "%s %s", PyString_AsString(old_str), mesg);
++ PyErr_Format(type, "%s %s", PyBytes_AsString(old_str), mesg);
+ }
+ Py_DECREF(old_str);
+ }
+@@ -2397,7 +2397,7 @@ SWIG_Python_TypeError(const char *type,
+ const char *otype = (obj ? obj->ob_type->tp_name : 0);
+ if (otype) {
+ PyObject *str = PyObject_Str(obj);
+- const char *cstr = str ? PyString_AsString(str) : 0;
++ const char *cstr = str ? PyBytes_AsString(str) : 0;
+ if (cstr) {
+ PyErr_Format(PyExc_TypeError, "a '%s' is expected, '%s(%s)' is received",
+ type, otype, cstr);
+@@ -2527,8 +2527,8 @@ SWIG_AsVal_double (PyObject *obj, double
+ if (PyFloat_Check(obj)) {
+ if (val) *val = PyFloat_AsDouble(obj);
+ return SWIG_OK;
+- } else if (PyInt_Check(obj)) {
+- if (val) *val = PyInt_AsLong(obj);
++ } else if (PyLong_Check(obj)) {
++ if (val) *val = PyLong_AsLong(obj);
+ return SWIG_OK;
+ } else if (PyLong_Check(obj)) {
+ double v = PyLong_AsDouble(obj);
+@@ -2603,8 +2603,8 @@ SWIG_CanCastAsInteger(double *d, double
+ SWIGINTERN int
+ SWIG_AsVal_long (PyObject *obj, long* val)
+ {
+- if (PyInt_Check(obj)) {
+- if (val) *val = PyInt_AsLong(obj);
++ if (PyLong_Check(obj)) {
++ if (val) *val = PyLong_AsLong(obj);
+ return SWIG_OK;
+ } else if (PyLong_Check(obj)) {
+ long v = PyLong_AsLong(obj);
+@@ -2618,7 +2618,7 @@ SWIG_AsVal_long (PyObject *obj, long* va
+ #ifdef SWIG_PYTHON_CAST_MODE
+ {
+ int dispatch = 0;
+- long v = PyInt_AsLong(obj);
++ long v = PyLong_AsLong(obj);
+ if (!PyErr_Occurred()) {
+ if (val) *val = v;
+ return SWIG_AddCast(SWIG_OK);
+@@ -2655,7 +2655,7 @@ SWIG_AsVal_int (PyObject * obj, int *val
+ }
+
+
+- #define SWIG_From_long PyInt_FromLong
++ #define SWIG_From_long PyLong_FromLong
+
+
+ SWIGINTERNINLINE PyObject *
+@@ -2684,7 +2684,7 @@ SWIG_pchar_descriptor(void)
+ SWIGINTERN int
+ SWIG_AsCharPtrAndSize(PyObject *obj, char** cptr, size_t* psize, int *alloc)
+ {
+- if (PyString_Check(obj)) {
++ if (PyBytes_Check(obj)) {
+ char *cstr; Py_ssize_t len;
+ PyString_AsStringAndSize(obj, &cstr, &len);
+ if (cptr) {
+@@ -2712,7 +2712,7 @@ SWIG_AsCharPtrAndSize(PyObject *obj, cha
+ *alloc = SWIG_OLDOBJ;
+ }
+ } else {
+- *cptr = PyString_AsString(obj);
++ *cptr = PyBytes_AsString(obj);
+ }
+ }
+ if (psize) *psize = len + 1;
+@@ -2876,12 +2876,12 @@ int parseInputFromString(NOsh *nosh, PyO
+ Vio *sock;
+
+ startVio();
+- bufsize = PyString_Size(string);
++ bufsize = PyBytes_Size(string);
+
+ VASSERT( bufsize <= VMAX_BUFSIZE );
+ sock = Vio_ctor("BUFF","ASC",VNULL,"0","r");
+
+- Vio_bufTake(sock, PyString_AsString(string), bufsize);
++ Vio_bufTake(sock, PyBytes_AsString(string), bufsize);
+
+ ret = NOsh_parseInput(nosh, sock);
+ sock->VIObuffer = VNULL;
+@@ -3039,9 +3039,9 @@ PyObject *getForces(AtomForce **atomForc
+ dbholder = PyList_New(3);
+ ibholder = PyList_New(3);
+
+- qf = PyString_FromString("qf");
+- db = PyString_FromString("db");
+- ib = PyString_FromString("ib");
++ qf = PyUnicode_FromString("qf");
++ db = PyUnicode_FromString("db");
++ ib = PyUnicode_FromString("ib");
+
+ for (i=0;i<Valist_getNumberAtoms(alist);i++){
+ for (j=0;j<3;j++){
+@@ -7931,18 +7931,18 @@ extern "C" {
+
+ SWIGINTERN PyObject *
+ swig_varlink_repr(swig_varlinkobject *SWIGUNUSEDPARM(v)) {
+- return PyString_FromString("<Swig global variables>");
++ return PyUnicode_FromString("<Swig global variables>");
+ }
+
+ SWIGINTERN PyObject *
+ swig_varlink_str(swig_varlinkobject *v) {
+- PyObject *str = PyString_FromString("(");
++ PyObject *str = PyUnicode_FromString("(");
+ swig_globalvar *var;
+ for (var = v->vars; var; var=var->next) {
+- PyString_ConcatAndDel(&str,PyString_FromString(var->name));
+- if (var->next) PyString_ConcatAndDel(&str,PyString_FromString(", "));
++ PyString_ConcatAndDel(&str,PyUnicode_FromString(var->name));
++ if (var->next) PyString_ConcatAndDel(&str,PyUnicode_FromString(", "));
+ }
+- PyString_ConcatAndDel(&str,PyString_FromString(")"));
++ PyString_ConcatAndDel(&str,PyUnicode_FromString(")"));
+ return str;
+ }
+
+@@ -7950,7 +7950,7 @@ extern "C" {
+ swig_varlink_print(swig_varlinkobject *v, FILE *fp, int SWIGUNUSEDPARM(flags)) {
+ PyObject *str = swig_varlink_str(v);
+ fprintf(fp,"Swig global variables ");
+- fprintf(fp,"%s\n", PyString_AsString(str));
++ fprintf(fp,"%s\n", PyBytes_AsString(str));
+ Py_DECREF(str);
+ return 0;
+ }
+diff -up apbs-3.0.0/tools/python/apbslib.i.swig45 apbs-3.0.0/tools/python/apbslib.i
+--- apbs-3.0.0/tools/python/apbslib.i.swig45 2026-07-27 16:32:02.376414283 +0200
++++ apbs-3.0.0/tools/python/apbslib.i 2026-07-27 16:34:17.319624936 +0200
+@@ -278,12 +278,12 @@ int parseInputFromString(NOsh *nosh, PyO
+ Vio *sock;
+
+ startVio();
+- bufsize = PyString_Size(string);
++ bufsize = PyBytes_Size(string);
+
+ VASSERT( bufsize <= VMAX_BUFSIZE );
+ sock = Vio_ctor("BUFF","ASC",VNULL,"0","r");
+
+- Vio_bufTake(sock, PyString_AsString(string), bufsize);
++ Vio_bufTake(sock, PyBytes_AsString(string), bufsize);
+
+ ret = NOsh_parseInput(nosh, sock);
+ sock->VIObuffer = VNULL;
+@@ -441,9 +441,9 @@ PyObject *getForces(AtomForce **atomForc
+ dbholder = PyList_New(3);
+ ibholder = PyList_New(3);
+
+- qf = PyString_FromString("qf");
+- db = PyString_FromString("db");
+- ib = PyString_FromString("ib");
++ qf = PyUnicode_FromString("qf");
++ db = PyUnicode_FromString("db");
++ ib = PyUnicode_FromString("ib");
+
+ for (i=0;i<Valist_getNumberAtoms(alist);i++){
+ for (j=0;j<3;j++){
+diff -up apbs-3.0.0/tools/python/vgrid/vgridlib.c.swig45 apbs-3.0.0/tools/python/vgrid/vgridlib.c
+--- apbs-3.0.0/tools/python/vgrid/vgridlib.c.swig45 2026-07-27 16:32:02.378414326 +0200
++++ apbs-3.0.0/tools/python/vgrid/vgridlib.c 2026-07-27 17:22:47.812005286 +0200
+@@ -668,7 +668,7 @@ PySwigObject_str(PySwigObject *v)
+ {
+ char result[SWIG_BUFFER_SIZE];
+ return SWIG_PackVoidPtr(result, v->ptr, v->desc, sizeof(result)) ?
+- PyString_FromString(result) : 0;
++ PyUnicode_FromString(result) : 0;
+ }
+
+ SWIGRUNTIME PyObject *
+@@ -683,9 +683,9 @@ PySwigObject_format(const char* fmt, PyS
+ PyObject *res = NULL;
+ PyObject *args = PyTuple_New(1);
+ if (args && (PyTuple_SetItem(args, 0, PySwigObject_long(v)) == 0)) {
+- PyObject *ofmt = PyString_FromString(fmt);
++ PyObject *ofmt = PyUnicode_FromString(fmt);
+ if (ofmt) {
+- res = PyString_Format(ofmt,args);
++ res = PyUnicode_Format(ofmt,args);
+ Py_DECREF(ofmt);
+ }
+ Py_DECREF(args);
+@@ -1046,7 +1046,7 @@ SWIG_Python_TypeError(const char *type,
+ const char *otype = (obj ? obj->ob_type->tp_name : 0);
+ if (otype) {
+ PyObject *str = PyObject_Str(obj);
+- const char *cstr = str ? PyString_AsString(str) : 0;
++ const char *cstr = str ? PyBytes_AsString(str) : 0;
+ if (cstr) {
+ PyErr_Format(PyExc_TypeError, "a '%s' is expected, '%s(%s)' is received",
+ type, otype, cstr);
+@@ -1087,9 +1087,9 @@ SWIG_Python_AddErrMesg(const char* mesg,
+ Py_XINCREF(type);
+ PyErr_Clear();
+ if (infront) {
+- PyErr_Format(type, "%s %s", mesg, PyString_AsString(old_str));
++ PyErr_Format(type, "%s %s", mesg, PyBytes_AsString(old_str));
+ } else {
+- PyErr_Format(type, "%s %s", PyString_AsString(old_str), mesg);
++ PyErr_Format(type, "%s %s", PyBytes_AsString(old_str), mesg);
+ }
+ Py_DECREF(old_str);
+ }
+@@ -1136,7 +1136,7 @@ SWIG_Python_ConvertPtr(PyObject *obj, vo
+ #ifdef SWIG_COBJECT_TYPES
+ if (!(PySwigObject_Check(obj))) {
+ if (!SWIG_this)
+- SWIG_this = PyString_FromString("this");
++ SWIG_this = PyUnicode_FromString("this");
+ pyobj = obj;
+ obj = PyObject_GetAttr(obj,SWIG_this);
+ newref = 1;
+@@ -1151,14 +1151,14 @@ SWIG_Python_ConvertPtr(PyObject *obj, vo
+ if (newref) { Py_DECREF(obj); }
+ goto type_check;
+ #else
+- if (!(PyString_Check(obj))) {
++ if (!(PyBytes_Check(obj))) {
+ if (!SWIG_this)
+- SWIG_this = PyString_FromString("this");
++ SWIG_this = PyUnicode_FromString("this");
+ pyobj = obj;
+ obj = PyObject_GetAttr(obj,SWIG_this);
+ newref = 1;
+ if (!obj) goto type_error;
+- if (!PyString_Check(obj)) {
++ if (!PyBytes_Check(obj)) {
+ Py_DECREF(obj);
+ goto type_error;
+ }
+@@ -1231,7 +1231,7 @@ SWIG_Python_ConvertPacked(PyObject *obj,
+ #if defined(SWIG_COBJECT_TYPES) && !defined(SWIG_COBJECT_PYTHON)
+ c = PySwigPacked_UnpackData(obj, ptr, sz);
+ #else
+- if ((!obj) || (!PyString_Check(obj))) goto type_error;
++ if ((!obj) || (!PyBytes_Check(obj))) goto type_error;
+ c = PyString_AS_STRING(obj);
+ /* Pointer values must start with leading underscore */
+ c = SWIG_UnpackDataName(c, ptr, sz, ty->name);
+@@ -1275,7 +1275,7 @@ SWIG_Python_NewPointerObj(void *ptr, swi
+ {
+ char result[SWIG_BUFFER_SIZE];
+ robj = SWIG_PackVoidPtr(result, ptr, type->name, sizeof(result)) ?
+- PyString_FromString(result) : 0;
++ PyUnicode_FromString(result) : 0;
+ }
+ #endif
+ if (!robj || (robj == Py_None)) return robj;
+@@ -1308,7 +1308,7 @@ SWIG_Python_NewPackedObj(void *ptr, size
+ {
+ char result[SWIG_BUFFER_SIZE];
+ robj = SWIG_PackDataName(result, ptr, sz, type->name, sizeof(result)) ?
+- PyString_FromString(result) : 0;
++ PyUnicode_FromString(result) : 0;
+ }
+ #endif
+ return robj;
+@@ -1419,7 +1419,7 @@ SWIGINTERN int
+ SWIGINTERN int
+ SWIG_AsVal_long(PyObject * obj, long* val)
+ {
+- if (PyInt_Check(obj)) {
++ if (PyLong_Check(obj)) {
+ if (val) *val = PyInt_AS_LONG(obj);
+ return 1;
+ }
+@@ -1492,7 +1492,7 @@ SWIG_Check_int(PyObject* obj)
+
+
+ /*@/usr/local/share/swig/1.3.25/python/pymacros.swg,66,SWIG_define@*/
+-#define SWIG_From_int PyInt_FromLong
++#define SWIG_From_int PyLong_FromLong
+ /*@@*/
+
+
+@@ -1503,7 +1503,7 @@ SWIGINTERN int
+ if (val) *val = PyFloat_AS_DOUBLE(obj);
+ return 1;
+ }
+- if (PyInt_Check(obj)) {
++ if (PyLong_Check(obj)) {
+ if (val) *val = PyInt_AS_LONG(obj);
+ return 1;
+ }
+@@ -1577,7 +1577,7 @@ SWIG_AsCharPtrAndSize(PyObject *obj, cha
+ return SWIG_OLDOBJ;
+ } else {
+ PyErr_Clear();
+- if (PyString_Check(obj)) {
++ if (PyBytes_Check(obj)) {
+ if (cptr) {
+ *cptr = PyString_AS_STRING(obj);
+ if (psize) {
+@@ -2943,7 +2943,7 @@ extern "C" {
+ SWIGINTERN PyObject *
+ swig_varlink_repr(swig_varlinkobject *v) {
+ v = v;
+- return PyString_FromString("<Swig global variables>");
++ return PyUnicode_FromString("<Swig global variables>");
+ }
+
+ SWIGINTERN int
+@@ -3083,14 +3083,14 @@ extern "C" {
+ for (i = 0; constants[i].type; ++i) {
+ switch(constants[i].type) {
+ case SWIG_PY_INT:
+- obj = PyInt_FromLong(constants[i].lvalue);
++ obj = PyLong_FromLong(constants[i].lvalue);
+ break;
+ case SWIG_PY_FLOAT:
+ obj = PyFloat_FromDouble(constants[i].dvalue);
+ break;
+ case SWIG_PY_STRING:
+ if (constants[i].pvalue) {
+- obj = PyString_FromString((char *) constants[i].pvalue);
++ obj = PyUnicode_FromString((char *) constants[i].pvalue);
+ } else {
+ Py_INCREF(Py_None);
+ obj = Py_None;
diff --git a/apbs.spec b/apbs.spec
index 66d15f6..e0a064f 100644
--- a/apbs.spec
+++ b/apbs.spec
@@ -11,7 +11,7 @@
Name: apbs
Summary: Adaptive Poisson Boltzmann Solver
Version: 3.0.0
-Release: 37%{datecommit}%{shortcommit}%{?dist}
+Release: 38%{datecommit}%{shortcommit}%{?dist}
# iAPBS looks licensed with a LGPLv2+, APBS is released under BSD license.
License: LGPL-2.0-or-later AND BSD-3-Clause
URL: https://www.poissonboltzmann.org/
@@ -28,6 +28,10 @@ Patch2: %{name}-python311.patch
Patch3: apbs-c99.patch
+# Replace removed Python 2 C API macros with Python 3 equivalents
+# for compatibility with SWIG 4.5.0
+Patch4: apbs-swig45.patch
+
BuildRequires: gcc-c++
BuildRequires: cmake
BuildRequires: chrpath
@@ -112,6 +116,7 @@ Python interface of APBS.
%endif
%patch -P 3 -p1
+%patch -P 4 -p1
cp -p contrib/iapbs/COPYING contrib/iapbs/iapbs-COPYING
cp -p %{SOURCE1} contrib/iapbs/iapbs-LGPLv2
@@ -213,6 +218,9 @@ export PATH=%{buildroot}%{_bindir}
%doc %_vpath_builddir/doc
%changelog
+* Mon Jul 27 2026 Jitka Plesnikova <jplesnik@redhat.com> - 3.0.0-38
+- Replace removed Python 2 C API macros for SWIG 4.5.0 compatibility
+
* Wed Jul 22 2026 Python Maint <python-maint@redhat.com> - 3.0.0-37
- Rebuilt for Python 3.15.0b4 ABI change
reply other threads:[~2026-08-02 14:19 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=178568036191.1.4294692630472043378.rpms-apbs-785bdbcfee29@fedoraproject.org \
--to=jplesnik@redhat.com \
--cc=git-commits@fedoraproject.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox