Rev 992: Wrap stream functions. in file:///data/jelmer/bzr-svn/pyrex/
Jelmer Vernooij
jelmer at samba.org
Sun Mar 16 13:12:05 GMT 2008
At file:///data/jelmer/bzr-svn/pyrex/
------------------------------------------------------------
revno: 992
revision-id:jelmer at samba.org-20080316131204-2whdut1lz5qw5qzf
parent: jelmer at samba.org-20080316122631-bhzx47o9a3f997dk
committer: Jelmer Vernooij <jelmer at samba.org>
branch nick: pyrex
timestamp: Sun 2008-03-16 14:12:04 +0100
message:
Wrap stream functions.
modified:
commit.py commit.py-20060607190346-qvq128wgfubhhgm2-1
ra.pyx ra.pyx-20080313140933-qybkqaxe3m4mcll7-1
types.pxd types.pxi-20080313202425-vtt1ry64o98kgpg8-1
=== modified file 'commit.py'
--- a/commit.py 2008-03-16 06:11:05 +0000
+++ b/commit.py 2008-03-16 13:12:04 +0000
@@ -393,14 +393,32 @@
"""Finish the commit.
"""
- def done(revision_data):
+ def done(revision, author, date):
"""Callback that is called by the Subversion commit editor
once the commit finishes.
-
- :param revision_data: Revision metadata
"""
- self.revision_metadata = revision_data
-
+
+ # Make sure the logwalker doesn't try to use ra
+ # during checkouts...
+ self.repository._log.fetch_revisions(revision)
+
+ revid = self.branch.generate_revision_id(revision)
+ self.mutter('commit %d finished. author: %r, date: %r, revid: %r' %
+ (revision, author, date, revid))
+
+ assert self._new_revision_id is None or self._new_revision_id == revid
+
+ if self.repository.get_config().get_override_svn_revprops():
+ set_svn_revprops(self.repository.transport, revision, {
+ constants.PROP_REVISION_AUTHOR: self._committer,
+ constants.PROP_REVISION_DATE: svn_time_to_cstring(1000000*self._timestamp)})
+
+ try:
+ set_svn_revprops(self.repository.transport, revision,
+ self._svn_revprops)
+ except RevpropChangeFailed:
+ pass # Ignore for now
+
bp_parts = self.branch.get_branch_path().split("/")
repository_latest_revnum = self.repository.transport.get_latest_revnum()
lock = self.repository.transport.lock_write(".")
@@ -440,7 +458,6 @@
try:
existing_bp_parts = _check_dirs_exist(self.repository.transport,
bp_parts, -1)
- self.revision_metadata = None
try:
self.editor = self.repository.transport.get_commit_editor(
self._svn_revprops, done, None, False)
@@ -486,32 +503,6 @@
finally:
lock.unlock()
- assert self.revision_metadata is not None
-
- # Make sure the logwalker doesn't try to use ra
- # during checkouts...
- self.repository._log.fetch_revisions(self.revision_metadata.revision)
-
- revid = self.branch.generate_revision_id(self.revision_metadata.revision)
-
- assert self._new_revision_id is None or self._new_revision_id == revid
-
- self.mutter('commit %d finished. author: %r, date: %r, revid: %r' %
- (self.revision_metadata.revision, self.revision_metadata.author,
- self.revision_metadata.date, revid))
-
- if self.repository.get_config().get_override_svn_revprops():
- set_svn_revprops(self.repository.transport,
- self.revision_metadata.revision, {
- constants.PROP_REVISION_AUTHOR: self._committer,
- constants.PROP_REVISION_DATE: svn_time_to_cstring(1000000*self._timestamp)})
-
- try:
- set_svn_revprops(self.repository.transport, self.revision_metadata.revision,
- self._svn_revprops)
- except RevpropChangeFailed:
- pass # Ignore for now
-
return revid
def record_entry_contents(self, ie, parent_invs, path, tree,
=== modified file 'ra.pyx'
--- a/ra.pyx 2008-03-16 12:26:31 +0000
+++ b/ra.pyx 2008-03-16 13:12:04 +0000
@@ -23,7 +23,9 @@
from core import SubversionException
from constants import PROP_REVISION_LOG, PROP_REVISION_AUTHOR, PROP_REVISION_DATE
from types cimport svn_error_t, svn_revnum_t, svn_string_t, svn_version_t
-from types cimport svn_string_ncreate, svn_lock_t, svn_auth_baton_t, svn_auth_open, svn_auth_set_parameter, svn_auth_get_parameter, svn_node_kind_t, svn_commit_info_t, svn_stream_t, svn_filesize_t, svn_dirent_t, svn_log_message_receiver_t
+from types cimport svn_string_ncreate, svn_lock_t, svn_auth_baton_t, svn_auth_open, svn_auth_set_parameter, svn_auth_get_parameter, svn_node_kind_t, svn_commit_info_t, svn_filesize_t, svn_dirent_t, svn_log_message_receiver_t
+from types cimport svn_stream_t, svn_stream_set_read, svn_stream_set_write, svn_stream_set_close, svn_stream_from_stringbuf, svn_stream_create
+from types cimport svn_stringbuf_t, svn_stringbuf_ncreate
apr_initialize()
@@ -31,6 +33,12 @@
object PyString_FromStringAndSize(char *, unsigned long)
void Py_INCREF(object)
void Py_DECREF(object)
+ char *PyString_AS_STRING(object)
+
+
+cdef extern from "string.h":
+ ctypedef unsigned long size_t
+ void *memcpy(void *dest, void *src, size_t len)
cdef extern from "svn_delta.h":
ctypedef enum svn_delta_action:
@@ -132,7 +140,7 @@
ctypedef svn_error_t *(*svn_commit_callback2_t) (svn_commit_info_t *commit_info, baton, apr_pool_t *pool) except *
cdef svn_error_t *py_commit_callback(svn_commit_info_t *commit_info, baton, apr_pool_t *pool) except *:
- baton(commit_info.revision, commit_info.date, commit_info.author, commit_info.post_commit_err)
+ baton(commit_info.revision, commit_info.date, commit_info.author)
cdef extern from "svn_ra.h":
svn_version_t *svn_ra_version()
@@ -1002,13 +1010,41 @@
def get_ssl_client_cert_pw_file_provider():
pass # FIXME
-cdef svn_stream_t *new_read_stream(object py):
- return NULL #FIXME
+cdef svn_error_t *py_stream_read(void *baton, char *buffer, apr_size_t *length):
+ self = <object>baton
+ ret = self.read(length[0])
+ length[0] = len(ret)
+ memcpy(buffer, PyString_AS_STRING(ret), len(ret))
+ return NULL
+
+cdef svn_error_t *py_stream_write(void *baton, char *data, apr_size_t *len):
+ self = <object>baton
+ self.write(PyString_FromStringAndSize(data, len[0]))
+ return NULL
+
+cdef svn_error_t *py_stream_close(void *baton):
+ self = <object>baton
+ self.close()
+ Py_DECREF(self)
+
+cdef svn_stream_t *string_stream(apr_pool_t *pool, text):
+ cdef svn_stringbuf_t *buf
+ buf = svn_stringbuf_ncreate(text, len(text), pool)
+ return svn_stream_from_stringbuf(buf, pool)
+
+cdef svn_stream_t *new_py_stream(apr_pool_t *pool, object py):
+ cdef svn_stream_t *stream
+ Py_INCREF(py)
+ stream = svn_stream_create(<void *>py, pool)
+ svn_stream_set_read(stream, py_stream_read)
+ svn_stream_set_write(stream, py_stream_write)
+ svn_stream_set_close(stream, py_stream_close)
+ return stream
def txdelta_send_stream(stream, TxDeltaWindowHandler handler):
cdef unsigned char digest[16]
cdef apr_pool_t *pool
pool = Pool(NULL)
- check_error(svn_txdelta_send_stream(new_read_stream(stream), handler.txdelta, handler.txbaton, <unsigned char *>digest, pool))
+ check_error(svn_txdelta_send_stream(new_py_stream(pool, stream), handler.txdelta, handler.txbaton, <unsigned char *>digest, pool))
apr_pool_destroy(pool)
return PyString_FromStringAndSize(<char *>digest, 16)
=== modified file 'types.pxd'
--- a/types.pxd 2008-03-16 12:26:31 +0000
+++ b/types.pxd 2008-03-16 13:12:04 +0000
@@ -15,7 +15,7 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-from apr cimport apr_status_t, apr_pool_t, apr_time_t, apr_array_header_t, apr_hash_t
+from apr cimport apr_status_t, apr_pool_t, apr_time_t, apr_array_header_t, apr_hash_t, apr_size_t
cdef extern from "svn_version.h":
ctypedef struct svn_version_t:
@@ -24,9 +24,6 @@
int patch
char *tag
-cdef extern from "svn_io.h":
- ctypedef struct svn_stream_t
- ctypedef unsigned long long svn_filesize_t
cdef extern from "svn_error.h":
ctypedef struct svn_error_t:
@@ -39,6 +36,7 @@
cdef extern from "svn_types.h":
ctypedef int svn_boolean_t
+ ctypedef unsigned long long svn_filesize_t
ctypedef svn_error_t *(*svn_cancel_func_t)(cancel_baton)
ctypedef long svn_revnum_t
ctypedef struct svn_lock_t:
@@ -76,7 +74,25 @@
ctypedef struct svn_string_t:
char *data
long len
+ ctypedef struct svn_stringbuf_t:
+ apr_pool_t *pool
+ char *data
+ apr_size_t len
+ apr_size_t blocksize
svn_string_t *svn_string_ncreate(char *bytes, long size, apr_pool_t *pool)
+ svn_stringbuf_t *svn_stringbuf_ncreate(char *bytes, apr_size_t size, apr_pool_t *pool)
+
+
+cdef extern from "svn_io.h":
+ ctypedef struct svn_stream_t
+ ctypedef svn_error_t *(*svn_read_fn_t)(void *baton, char *buffer, apr_size_t *len)
+ ctypedef svn_error_t *(*svn_write_fn_t)(void *baton, char *data, apr_size_t *len)
+ ctypedef svn_error_t *(*svn_close_fn_t)(void *baton)
+ void svn_stream_set_read(svn_stream_t *stream, svn_read_fn_t read_fn)
+ void svn_stream_set_write(svn_stream_t *stream, svn_write_fn_t write_fn)
+ void svn_stream_set_close(svn_stream_t *stream, svn_close_fn_t close_fn)
+ svn_stream_t *svn_stream_from_stringbuf(svn_stringbuf_t *str, apr_pool_t *pool)
+ svn_stream_t *svn_stream_create(void *baton, apr_pool_t *pool)
cdef extern from "svn_props.h":
ctypedef struct svn_prop_t:
More information about the bazaar-commits
mailing list