Date: Wednesday, July 18, 2018 @ 21:40:00
  Author: foutrelis
Revision: 362319

archrelease: copy trunk to community-staging-x86_64

Added:
  python-greenlet/repos/community-staging-x86_64/PKGBUILD
    (from rev 362318, python-greenlet/trunk/PKGBUILD)
  
python-greenlet/repos/community-staging-x86_64/port-to-py3.7-handle-tstate-exc_info.patch
    (from rev 362318, 
python-greenlet/trunk/port-to-py3.7-handle-tstate-exc_info.patch)
Deleted:
  python-greenlet/repos/community-staging-x86_64/PKGBUILD

--------------------------------------------+
 PKGBUILD                                   |  108 ++++++++-------
 port-to-py3.7-handle-tstate-exc_info.patch |  183 +++++++++++++++++++++++++++
 2 files changed, 239 insertions(+), 52 deletions(-)

Deleted: PKGBUILD
===================================================================
--- PKGBUILD    2018-07-18 21:39:55 UTC (rev 362318)
+++ PKGBUILD    2018-07-18 21:40:00 UTC (rev 362319)
@@ -1,52 +0,0 @@
-# $Id$
-# Maintainer: Massimiliano Torromeo <massimiliano.torro...@gmail.com>
-# Maintainer: Felix Yan <felixonm...@archlinux.org>
-# Contributor: Ralf Schmitt <r...@systemexit.de>
-
-pkgbase=python-greenlet
-pkgname=(python-greenlet python2-greenlet)
-pkgver=0.4.13
-pkgrel=2
-pkgdesc="Lightweight in-process concurrent programming"
-license=("MIT")
-arch=('x86_64')
-url="http://pypi.python.org/pypi/greenlet";
-makedepends=('python-setuptools' 'python2-setuptools')
-source=("https://files.pythonhosted.org/packages/source/g/greenlet/greenlet-${pkgver}.tar.gz";)
-sha512sums=('625aaa8875b408442139191e1a63eca71c668675229907335f5caee623487aba5305c1d53b51e1764ad982b8edd07d04f984e08a75318a0a5672805667917a61')
-
-prepare() {
-    cp -a greenlet-$pkgver{,-py2}
-}
-
-build() {
-       cd "$srcdir"/greenlet-$pkgver
-       python setup.py build
-
-    cd "$srcdir"/greenlet-$pkgver-py2
-    python2 setup.py build
-}
-
-check() {
-    cd "$srcdir"/greenlet-$pkgver
-    python setup.py test
-
-    cd "$srcdir"/greenlet-$pkgver-py2
-    python2 setup.py test
-}
-
-package_python-greenlet() {
-    depends=('python')
-
-    cd greenlet-$pkgver
-    python setup.py install -O1 --root="$pkgdir"
-    install -Dm0644 LICENSE.PSF 
"$pkgdir"/usr/share/licenses/$pkgname/LICENSE.PSF
-}
-
-package_python2-greenlet() {
-    depends=('python2')
-
-       cd greenlet-$pkgver-py2
-       python2 setup.py install -O1 --root="$pkgdir"
-       install -Dm0644 LICENSE.PSF 
"$pkgdir"/usr/share/licenses/$pkgname/LICENSE.PSF
-}

Copied: python-greenlet/repos/community-staging-x86_64/PKGBUILD (from rev 
362318, python-greenlet/trunk/PKGBUILD)
===================================================================
--- PKGBUILD                            (rev 0)
+++ PKGBUILD    2018-07-18 21:40:00 UTC (rev 362319)
@@ -0,0 +1,56 @@
+# $Id$
+# Maintainer: Massimiliano Torromeo <massimiliano.torro...@gmail.com>
+# Maintainer: Felix Yan <felixonm...@archlinux.org>
+# Contributor: Ralf Schmitt <r...@systemexit.de>
+
+pkgbase=python-greenlet
+pkgname=(python-greenlet python2-greenlet)
+pkgver=0.4.13
+pkgrel=3
+pkgdesc="Lightweight in-process concurrent programming"
+license=("MIT")
+arch=('x86_64')
+url="http://pypi.python.org/pypi/greenlet";
+makedepends=('python-setuptools' 'python2-setuptools')
+source=("https://files.pythonhosted.org/packages/source/g/greenlet/greenlet-${pkgver}.tar.gz";
+        port-to-py3.7-handle-tstate-exc_info.patch)
+sha512sums=('625aaa8875b408442139191e1a63eca71c668675229907335f5caee623487aba5305c1d53b51e1764ad982b8edd07d04f984e08a75318a0a5672805667917a61'
+            
'6fac24423f680a3676f722a02a93d611a0f0194ec7c6c6a013d158c46afe6887a6d2a0ca27256fce2ddc18044e2115bbc209bfbcbc2ed7020ca89c6639e1d55d')
+
+prepare() {
+    # https://github.com/python-greenlet/greenlet/issues/131
+    patch -d greenlet-$pkgver -Np1 < port-to-py3.7-handle-tstate-exc_info.patch
+    cp -a greenlet-$pkgver{,-py2}
+}
+
+build() {
+       cd "$srcdir"/greenlet-$pkgver
+       python setup.py build
+
+    cd "$srcdir"/greenlet-$pkgver-py2
+    python2 setup.py build
+}
+
+check() {
+    cd "$srcdir"/greenlet-$pkgver
+    python setup.py test
+
+    cd "$srcdir"/greenlet-$pkgver-py2
+    python2 setup.py test
+}
+
+package_python-greenlet() {
+    depends=('python')
+
+    cd greenlet-$pkgver
+    python setup.py install -O1 --root="$pkgdir"
+    install -Dm0644 LICENSE.PSF 
"$pkgdir"/usr/share/licenses/$pkgname/LICENSE.PSF
+}
+
+package_python2-greenlet() {
+    depends=('python2')
+
+       cd greenlet-$pkgver-py2
+       python2 setup.py install -O1 --root="$pkgdir"
+       install -Dm0644 LICENSE.PSF 
"$pkgdir"/usr/share/licenses/$pkgname/LICENSE.PSF
+}

Copied: 
python-greenlet/repos/community-staging-x86_64/port-to-py3.7-handle-tstate-exc_info.patch
 (from rev 362318, 
python-greenlet/trunk/port-to-py3.7-handle-tstate-exc_info.patch)
===================================================================
--- port-to-py3.7-handle-tstate-exc_info.patch                          (rev 0)
+++ port-to-py3.7-handle-tstate-exc_info.patch  2018-07-18 21:40:00 UTC (rev 
362319)
@@ -0,0 +1,183 @@
+From 8d998cb79ebea348a8f5258b642a1f772ecd93b8 Mon Sep 17 00:00:00 2001
+From: Victor Stinner <vstin...@redhat.com>
+Date: Tue, 3 Jul 2018 16:01:37 +0200
+Subject: [PATCH] Fix #131: Port to Py3.7: handle tstate->exc_info
+
+Fix Python 3.7 support: handle also tstate->exc_info, not only
+tstate->exc_state.
+---
+ greenlet.c | 64 ++++++++++++++++++++++++++++++++++++++++++++++++--------------
+ greenlet.h |  9 +++++++++
+ 2 files changed, 59 insertions(+), 14 deletions(-)
+
+diff --git a/greenlet.c b/greenlet.c
+index 0c85dd8..541efda 100644
+--- a/greenlet.c
++++ b/greenlet.c
+@@ -153,6 +153,21 @@ static PyObject* ts_empty_dict;
+ #define GREENLET_tp_is_gc 0
+ #endif /* !GREENLET_USE_GC */
+ 
++static void green_clear_exc(PyGreenlet *g)
++{
++#ifdef GREENLET_USE_EXC_INFO
++      g->exc_info = NULL;
++      g->exc_state.exc_type = NULL;
++      g->exc_state.exc_value = NULL;
++      g->exc_state.exc_traceback = NULL;
++      g->exc_state.previous_item = NULL;
++#else
++      g->exc_type = NULL;
++      g->exc_value = NULL;
++      g->exc_traceback = NULL;
++#endif
++}
++
+ static PyGreenlet* green_create_main(void)
+ {
+       PyGreenlet* gmain;
+@@ -460,10 +475,9 @@ static int g_switchstack(void)
+               PyThreadState* tstate = PyThreadState_GET();
+               current->recursion_depth = tstate->recursion_depth;
+               current->top_frame = tstate->frame;
+-#if PY_VERSION_HEX >= 0x030700A3
+-              current->exc_type = tstate->exc_state.exc_type;
+-              current->exc_value = tstate->exc_state.exc_value;
+-              current->exc_traceback = tstate->exc_state.exc_traceback;
++#ifdef GREENLET_USE_EXC_INFO
++              current->exc_info = tstate->exc_info;
++              current->exc_state = tstate->exc_state;
+ #else
+               current->exc_type = tstate->exc_type;
+               current->exc_value = tstate->exc_value;
+@@ -474,9 +488,13 @@ static int g_switchstack(void)
+       if (err < 0) {   /* error */
+               PyGreenlet* current = ts_current;
+               current->top_frame = NULL;
++#ifdef GREENLET_USE_EXC_INFO
++              green_clear_exc(current);
++#else
+               current->exc_type = NULL;
+               current->exc_value = NULL;
+               current->exc_traceback = NULL;
++#endif
+ 
+               assert(ts_origin == NULL);
+               ts_target = NULL;
+@@ -488,18 +506,20 @@ static int g_switchstack(void)
+               tstate->recursion_depth = target->recursion_depth;
+               tstate->frame = target->top_frame;
+               target->top_frame = NULL;
+-#if PY_VERSION_HEX >= 0x030700A3
+-              tstate->exc_state.exc_type = target->exc_type;
+-              tstate->exc_state.exc_value = target->exc_value;
+-              tstate->exc_state.exc_traceback = target->exc_traceback;
++#ifdef GREENLET_USE_EXC_INFO
++              tstate->exc_state = target->exc_state;
++              if (target->exc_info != NULL) {
++                      tstate->exc_info = target->exc_info;
++              }
++              else {
++                      tstate->exc_info = &tstate->exc_state;
++              }
+ #else
+               tstate->exc_type = target->exc_type;
+               tstate->exc_value = target->exc_value;
+               tstate->exc_traceback = target->exc_traceback;
+ #endif
+-              target->exc_type = NULL;
+-              target->exc_value = NULL;
+-              target->exc_traceback = NULL;
++              green_clear_exc(target);
+ 
+               assert(ts_origin == NULL);
+               Py_INCREF(target);
+@@ -752,9 +772,7 @@ static int GREENLET_NOINLINE(g_initialstub)(void* mark)
+               self->stack_prev = ts_current;
+       }
+       self->top_frame = NULL;
+-      self->exc_type = NULL;
+-      self->exc_value = NULL;
+-      self->exc_traceback = NULL;
++      green_clear_exc(self);
+       self->recursion_depth = PyThreadState_GET()->recursion_depth;
+ 
+       /* restore arguments in case they are clobbered */
+@@ -935,9 +953,15 @@ green_traverse(PyGreenlet *self, visitproc visit, void 
*arg)
+          - frames are not visited: alive greenlets are not garbage collected 
anyway */
+       Py_VISIT((PyObject*)self->parent);
+       Py_VISIT(self->run_info);
++#ifdef GREENLET_USE_EXC_INFO
++      Py_VISIT(self->exc_state.exc_type);
++      Py_VISIT(self->exc_state.exc_value);
++      Py_VISIT(self->exc_state.exc_traceback);
++#else
+       Py_VISIT(self->exc_type);
+       Py_VISIT(self->exc_value);
+       Py_VISIT(self->exc_traceback);
++#endif
+       Py_VISIT(self->dict);
+       return 0;
+ }
+@@ -961,9 +985,15 @@ static int green_clear(PyGreenlet* self)
+          so even if it switches we are relatively safe. */
+       Py_CLEAR(self->parent);
+       Py_CLEAR(self->run_info);
++#ifdef GREENLET_USE_EXC_INFO
++      Py_CLEAR(self->exc_state.exc_type);
++      Py_CLEAR(self->exc_state.exc_value);
++      Py_CLEAR(self->exc_state.exc_traceback);
++#else
+       Py_CLEAR(self->exc_type);
+       Py_CLEAR(self->exc_value);
+       Py_CLEAR(self->exc_traceback);
++#endif
+       Py_CLEAR(self->dict);
+       return 0;
+ }
+@@ -1030,9 +1060,15 @@ static void green_dealloc(PyGreenlet* self)
+               PyObject_ClearWeakRefs((PyObject *) self);
+       Py_CLEAR(self->parent);
+       Py_CLEAR(self->run_info);
++#ifdef GREENLET_USE_EXC_INFO
++      Py_CLEAR(self->exc_state.exc_type);
++      Py_CLEAR(self->exc_state.exc_value);
++      Py_CLEAR(self->exc_state.exc_traceback);
++#else
+       Py_CLEAR(self->exc_type);
+       Py_CLEAR(self->exc_value);
+       Py_CLEAR(self->exc_traceback);
++#endif
+       Py_CLEAR(self->dict);
+       Py_TYPE(self)->tp_free((PyObject*) self);
+ }
+diff --git a/greenlet.h b/greenlet.h
+index 6c9b8ee..995f500 100644
+--- a/greenlet.h
++++ b/greenlet.h
+@@ -13,6 +13,10 @@ extern "C" {
+ 
+ #define GREENLET_VERSION "0.4.13"
+ 
++#if PY_VERSION_HEX >= 0x030700A3
++#  define GREENLET_USE_EXC_INFO
++#endif
++
+ typedef struct _greenlet {
+       PyObject_HEAD
+       char* stack_start;
+@@ -25,9 +29,14 @@ typedef struct _greenlet {
+       struct _frame* top_frame;
+       int recursion_depth;
+       PyObject* weakreflist;
++#ifdef GREENLET_USE_EXC_INFO
++      _PyErr_StackItem *exc_info;
++      _PyErr_StackItem exc_state;
++#else
+       PyObject* exc_type;
+       PyObject* exc_value;
+       PyObject* exc_traceback;
++#endif
+       PyObject* dict;
+ } PyGreenlet;
+ 

Reply via email to