Hi, It looks like the core.Stream class does not close the underlying streams. It does save reference to a svn_stream_t wrapper in self._stream, but does not call svn_stream_close() on its own deletion, nor does the auto-generated svn_stream_t class do so.
Obviously, it can be closed by calling core.svn_stream_close(s._stream) - but this accesses private fields not intended to be used as external interfaces. Am I right that it leaks open streams? If I am - perhaps, fix as attached - to implement the file-object-like behavior for core.Stream? Regards, Alexey.
Index: subversion/bindings/swig/python/svn/core.py =================================================================== --- subversion/bindings/swig/python/svn/core.py (revision 1617858) +++ subversion/bindings/swig/python/svn/core.py (working copy) @@ -169,6 +169,8 @@ self._stream = stream def read(self, amt=None): + if self._stream is None: + raise ValueError if amt is None: # read the rest of the stream chunks = [ ] @@ -183,9 +185,15 @@ return svn_stream_read(self._stream, int(amt)) def write(self, buf): + if self._stream is None: + raise ValueError ### what to do with the amount written? (the result value) svn_stream_write(self._stream, buf) + def close(self): + svn_stream_close(self._stream) + self._stream = None + def secs_from_timestr(svn_datetime, pool=None): """Convert a Subversion datetime string into seconds since the Epoch.""" aprtime = svn_time_from_cstring(svn_datetime, pool)