Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
SUSE:SLE-12-SP1:GA
subversion.3028
subversion-swig3.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File subversion-swig3.patch of Package subversion.3028
From 7da78204128f1219afb00799e754492da13f4df0 Mon Sep 17 00:00:00 2001 From: James McCoy <jamessan@apache.org> Date: Thu, 24 Dec 2015 18:33:13 +0000 Subject: [PATCH] Fix Python bindings with SWIG < 3.0.6, followup on 1721488. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit “%pythoncode { ... }” had to be changed to “%pythoncode %{ ... %}” to avoid macro expansion (done in r1721488). This was a latent bug in the bindings exposed by stricter parsing in SWIG 3.x. However, there was a bug in SWIG through 3.0.6 which would remove part of the commented lines inside the “%pythoncode %{ ... %}” block. This caused the "right" fix to break everywhere except 3.0.6+. As discussed in the SWIG bug tracker[0], an alternative form of the pythoncode directive can be used to inline the contents of a specified file. Use of this form works in all supported SWIG versions. [0]: https://github.com/swig/swig/issues/379#issuecomment-107664345 * subversion/bindings/swig/include/proxy.swg: (proxy_pythoncode): Copy %pythoncode contents to ... * subversion/bindings/swig/include/proxy.py: ... new file which is included in proxy.swg via “%pythoncode "..."” directive. * build/ac-macros/swig.m4 subversion/bindings/swig/INSTALL: Remove 3.x related SWIG restrictions. All SWIG versions are supported again. git-svn-id: https://svn.apache.org/repos/asf/subversion/trunk@1721648 13f79535-47bb-0310-9956-ffa450edef68 --- build/ac-macros/swig.m4 | 5 ++-- subversion/bindings/swig/INSTALL | 2 +- subversion/bindings/swig/include/proxy.py | 41 +++++++++++++++++++++++++ subversion/bindings/swig/include/proxy.swg | 48 +++--------------------------- 4 files changed, 48 insertions(+), 48 deletions(-) create mode 100644 subversion/bindings/swig/include/proxy.py Index: subversion-1.8.10/subversion/bindings/swig/include/proxy.py =================================================================== --- /dev/null +++ subversion-1.8.10/subversion/bindings/swig/include/proxy.py @@ -0,0 +1,41 @@ + def set_parent_pool(self, parent_pool=None): + """Create a new proxy object for TYPE""" + import libsvn.core, weakref + self.__dict__["_parent_pool"] = \ + parent_pool or libsvn.core.application_pool; + if self.__dict__["_parent_pool"]: + self.__dict__["_is_valid"] = weakref.ref( + self.__dict__["_parent_pool"]._is_valid) + + def assert_valid(self): + """Assert that this object is using valid pool memory""" + if "_is_valid" in self.__dict__: + assert self.__dict__["_is_valid"](), "Variable has already been deleted" + + def __getattr__(self, name): + """Get an attribute from this object""" + self.assert_valid() + + value = _swig_getattr(self, self.__class__, name) + + # If we got back a different object than we have, we need to copy all our + # metadata into it, so that it looks identical + members = self.__dict__.get("_members") + if members is not None: + _copy_metadata_deep(value, members.get(name)) + + # Verify that the new object is good + _assert_valid_deep(value) + + return value + + def __setattr__(self, name, value): + """Set an attribute on this object""" + self.assert_valid() + + # Save a copy of the object, so that the garbage + # collector won't kill the object while it's in + # SWIG-land + self.__dict__.setdefault("_members",{})[name] = value + + return _swig_setattr(self, self.__class__, name, value) Index: subversion-1.8.10/subversion/bindings/swig/include/proxy.swg =================================================================== --- subversion-1.8.10.orig/subversion/bindings/swig/include/proxy.swg +++ subversion-1.8.10/subversion/bindings/swig/include/proxy.swg @@ -60,51 +60,11 @@ value.assert_valid() %} -/* Default code for all wrapped proxy classes in Python */ +/* Default code for all wrapped proxy classes in Python. + * Inline the code from a separate file to avoid issues with + * SWIG mis-parsing the comments as preprocessor directives. */ %define %proxy_pythoncode(TYPE) -%pythoncode { - def set_parent_pool(self, parent_pool=None): - """Create a new proxy object for TYPE""" - import libsvn.core, weakref - self.__dict__["_parent_pool"] = \ - parent_pool or libsvn.core.application_pool; - if self.__dict__["_parent_pool"]: - self.__dict__["_is_valid"] = weakref.ref( - self.__dict__["_parent_pool"]._is_valid) - - def assert_valid(self): - """Assert that this object is using valid pool memory""" - if "_is_valid" in self.__dict__: - assert self.__dict__["_is_valid"](), "Variable has already been deleted" - - def __getattr__(self, name): - """Get an attribute from this object""" - self.assert_valid() - - value = _swig_getattr(self, self.__class__, name) - - # If we got back a different object than we have, we need to copy all our - # metadata into it, so that it looks identical - members = self.__dict__.get("_members") - if members is not None: - _copy_metadata_deep(value, members.get(name)) - - # Verify that the new object is good - _assert_valid_deep(value) - - return value - - def __setattr__(self, name, value): - """Set an attribute on this object""" - self.assert_valid() - - # Save a copy of the object, so that the garbage - # collector won't kill the object while it's in - # SWIG-land - self.__dict__.setdefault("_members",{})[name] = value - - return _swig_setattr(self, self.__class__, name, value) -} +%pythoncode "proxy.py" %enddef /* Define a proxy for wrapping an existing struct */ Index: subversion-1.8.10/subversion/bindings/swig/core.i =================================================================== --- subversion-1.8.10.orig/subversion/bindings/swig/core.i +++ subversion-1.8.10/subversion/bindings/swig/core.i @@ -789,10 +789,11 @@ svn_swig_pl_set_current_pool (apr_pool_t #endif #ifdef SWIGPYTHON -# The auth baton depends on the providers, so we preserve a -# reference to them inside the wrapper. This way, if all external -# references to the providers are gone, they will still be alive, -# keeping the baton valid. +/* The auth baton depends on the providers, so we preserve a + reference to them inside the wrapper. This way, if all external + references to the providers are gone, they will still be alive, + keeping the baton valid. + */ %feature("pythonappend") svn_auth_open %{ val.__dict__["_deps"] = list(args[0]) %} Index: subversion-1.8.10/subversion/bindings/swig/svn_delta.i =================================================================== --- subversion-1.8.10.orig/subversion/bindings/swig/svn_delta.i +++ subversion-1.8.10/subversion/bindings/swig/svn_delta.i @@ -208,11 +208,11 @@ void _ops_get(int *num_ops, svn_txdelta_ %include svn_delta_h.swg #ifdef SWIGPYTHON -%pythoncode { +%pythoncode %{ # This function is for backwards compatibility only. # Use svn_txdelta_window_t.ops instead. svn_txdelta_window_t_ops_get = svn_txdelta_window_t._ops_get -} +%} #endif #ifdef SWIGRUBY
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor