Rev 993: Make repos implementation more complete in file:///data/jelmer/bzr-svn/pyrex/
Jelmer Vernooij
jelmer at samba.org
Sun Mar 16 13:40:29 GMT 2008
At file:///data/jelmer/bzr-svn/pyrex/
------------------------------------------------------------
revno: 993
revision-id:jelmer at samba.org-20080316134027-mk1hfpou37zvot0t
parent: jelmer at samba.org-20080316131204-2whdut1lz5qw5qzf
committer: Jelmer Vernooij <jelmer at samba.org>
branch nick: pyrex
timestamp: Sun 2008-03-16 14:40:27 +0100
message:
Make repos implementation more complete
modified:
client.pyx client.pyx-20080313235339-wbyjbw2namuiql8f-1
commit.py commit.py-20060607190346-qvq128wgfubhhgm2-1
core.pxd core.pxd-20080314004625-ng663dn07ewpc26a-1
core.pyx core.pyx-20080313210413-17k59slolpfe5kdq-1
ra.pyx ra.pyx-20080313140933-qybkqaxe3m4mcll7-1
repos.pyx repos.pyx-20080314114432-g2b5lqe776tkbl4k-1
wc.pyx wc.pyx-20080313142018-10l8l23vha2j9e6b-1
workingtree.py workingtree.py-20060306120941-b083cb0fdd4a69de
=== modified file 'client.pyx'
--- a/client.pyx 2008-03-16 12:26:31 +0000
+++ b/client.pyx 2008-03-16 13:40:27 +0000
@@ -172,8 +172,15 @@
apr_pool_t *pool)
cdef svn_error_t *py_log_msg_func2(char **log_msg, char **tmp_file, apr_array_header_t *commit_items, baton, apr_pool_t *pool) except *:
+ if baton is None:
+ return NULL
py_commit_items = []
- (py_log_msg, py_tmp_file) = baton(py_commit_items)
+ ret = baton(py_commit_items)
+ if isinstance(ret, tuple):
+ (py_log_msg, py_tmp_file) = ret
+ else:
+ py_tmp_file = None
+ py_log_msg = ret
if py_log_msg is not None:
log_msg[0] = py_log_msg
if py_tmp_file is not None:
=== modified file 'commit.py'
--- a/commit.py 2008-03-16 13:12:04 +0000
+++ b/commit.py 2008-03-16 13:40:27 +0000
@@ -419,6 +419,8 @@
except RevpropChangeFailed:
pass # Ignore for now
+ self.revid = revid
+
bp_parts = self.branch.get_branch_path().split("/")
repository_latest_revnum = self.repository.transport.get_latest_revnum()
lock = self.repository.transport.lock_write(".")
@@ -503,7 +505,7 @@
finally:
lock.unlock()
- return revid
+ return self.revid
def record_entry_contents(self, ie, parent_invs, path, tree,
content_summary):
=== modified file 'core.pxd'
--- a/core.pxd 2008-03-16 12:26:31 +0000
+++ b/core.pxd 2008-03-16 13:40:27 +0000
@@ -16,10 +16,12 @@
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
from apr cimport apr_pool_t, apr_array_header_t, apr_hash_t
-from types cimport svn_error_t, svn_lock_t
+from types cimport svn_error_t, svn_lock_t, svn_stream_t
cdef apr_pool_t *Pool(apr_pool_t *parent)
cdef check_error(svn_error_t *error)
cdef svn_error_t *py_cancel_func(cancel_baton)
cdef wrap_lock(svn_lock_t *)
cdef apr_array_header_t *string_list_to_apr_array(apr_pool_t *pool, object l)
cdef svn_error_t *py_svn_log_wrapper(baton, apr_hash_t *changed_paths, long revision, char *author, char *date, char *message, apr_pool_t *pool) except *
+cdef svn_stream_t *new_py_stream(apr_pool_t *pool, object py)
+cdef svn_stream_t *string_stream(apr_pool_t *pool, text)
=== modified file 'core.pyx'
--- a/core.pyx 2008-03-16 12:26:31 +0000
+++ b/core.pyx 2008-03-16 13:40:27 +0000
@@ -15,11 +15,22 @@
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
from types cimport svn_error_t, svn_node_kind_t, svn_node_dir, svn_node_file, svn_node_unknown, svn_node_none, svn_error_create, svn_log_message_receiver_t, svn_log_changed_path_t
-from apr cimport apr_initialize, apr_status_t, apr_time_t, apr_hash_t
+from apr cimport apr_initialize, apr_status_t, apr_time_t, apr_hash_t, apr_size_t
from apr cimport apr_pool_t, apr_pool_create, apr_pool_destroy
from apr cimport apr_array_header_t, apr_array_make, apr_array_push
from apr cimport apr_hash_index_t, apr_hash_this, apr_hash_first, apr_hash_next
from constants import PROP_REVISION_LOG, PROP_REVISION_AUTHOR, PROP_REVISION_DATE
+from types cimport 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
+
+cdef extern from "Python.h":
+ 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)
apr_initialize()
@@ -152,4 +163,35 @@
revprops[PROP_REVISION_DATE] = date
baton(py_changed_paths, revision, revprops)
+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
+
=== modified file 'ra.pyx'
--- a/ra.pyx 2008-03-16 13:12:04 +0000
+++ b/ra.pyx 2008-03-16 13:40:27 +0000
@@ -19,13 +19,12 @@
from apr cimport apr_array_header_t, apr_array_make
from apr cimport apr_file_t, apr_off_t, apr_size_t
from apr cimport apr_initialize
-from core cimport check_error, Pool, wrap_lock, string_list_to_apr_array, py_svn_log_wrapper
+from core cimport check_error, Pool, wrap_lock, string_list_to_apr_array, py_svn_log_wrapper, new_py_stream
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_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
+from types cimport svn_stream_t
apr_initialize()
@@ -33,12 +32,6 @@
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:
@@ -1010,37 +1003,6 @@
def get_ssl_client_cert_pw_file_provider():
pass # 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
=== modified file 'repos.pyx'
--- a/repos.pyx 2008-03-15 20:33:59 +0000
+++ b/repos.pyx 2008-03-16 13:40:27 +0000
@@ -17,7 +17,11 @@
from apr cimport apr_pool_t, apr_hash_t, apr_pool_destroy
from types cimport svn_error_t, svn_boolean_t, svn_cancel_func_t, svn_stream_t
-from core cimport Pool, check_error
+from core cimport Pool, check_error, new_py_stream, py_cancel_func
+
+cdef extern from "svn_fs.h":
+ ctypedef struct svn_fs_t
+ svn_error_t *svn_fs_get_uuid(svn_fs_t *fs, char **uuid, apr_pool_t *pool)
cdef extern from "svn_repos.h":
ctypedef struct svn_repos_t
@@ -32,6 +36,9 @@
apr_hash_t *config,
apr_hash_t *fs_config,
apr_pool_t *pool)
+ svn_error_t *svn_repos_open(svn_repos_t **repos_p,
+ char *path,
+ apr_pool_t *pool)
svn_error_t *svn_repos_load_fs2(svn_repos_t *repos,
svn_stream_t *dumpstream,
svn_stream_t *feedback_stream,
@@ -42,6 +49,7 @@
svn_cancel_func_t cancel_func,
void *cancel_baton,
apr_pool_t *pool)
+ svn_fs_t *svn_repos_fs(svn_repos_t *repos)
def create(path, config=None, fs_config=None):
cdef svn_repos_t *repos
@@ -53,4 +61,50 @@
check_error(svn_repos_create(&repos, path, "", "",
hash_config, hash_fs_config, pool))
apr_pool_destroy(pool)
- return None # FIXME: repos
+ return Repository(path)
+
+cdef class Repository:
+ cdef apr_pool_t *pool
+ cdef svn_repos_t *repos
+ def __init__(self, path):
+ self.pool = Pool(NULL)
+ check_error(svn_repos_open(&self.repos, path, self.pool))
+
+ def __dealloc__(self):
+ apr_pool_destroy(self.pool)
+
+ def load_fs(self, dumpstream, feedback_stream, uuid_action,
+ parent_dir, use_pre_commit_hook=False,
+ use_post_commit_hook=False,
+ cancel_func=None):
+ cdef apr_pool_t *temp_pool
+ temp_pool = Pool(self.pool)
+ check_error(svn_repos_load_fs2(self.repos,
+ new_py_stream(temp_pool, dumpstream),
+ new_py_stream(temp_pool, feedback_stream),
+ uuid_action, parent_dir, use_pre_commit_hook,
+ use_post_commit_hook, py_cancel_func, <void *>cancel_func,
+ self.pool))
+ apr_pool_destroy(temp_pool)
+
+ def fs(self):
+ return FileSystem(self)
+
+cdef class FileSystem:
+ cdef svn_fs_t *fs
+ cdef apr_pool_t *pool
+ def __init__(self, Repository repos):
+ self.fs = svn_repos_fs(repos.repos)
+ self.pool = Pool(repos.pool)
+
+ def __dealloc__(self):
+ apr_pool_destroy(self.pool)
+
+ def get_uuid(self):
+ cdef char *uuid
+ check_error(svn_fs_get_uuid(self.fs, &uuid, self.pool))
+ return uuid
+
+LOAD_UUID_DEFAULT = 0
+LOAD_UUID_IGNORE = 1
+LOAD_UUID_FORCE = 2
=== modified file 'wc.pyx'
--- a/wc.pyx 2008-03-16 06:11:05 +0000
+++ b/wc.pyx 2008-03-16 13:40:27 +0000
@@ -165,7 +165,13 @@
repos = entry.repos
ret = Entry(entry.name, entry.revision, url, repos, uuid, entry.kind, entry.schedule, entry.copied, entry.deleted, entry.absent, entry.incomplete)
ret.cmt_rev = entry.cmt_rev
- # FIXME: entry.copyfrom_url, entry.copyfrom_rev, entry.conflict_old, entry.conflict_new, entry.conflict_wrk, entry.prejfile, entry.text_time, entry.prop_time, entry.checksum, entry.cmt_date, entry.cmt_author, entry.lock_token, entry.lock_owner, entry.lock_comment, entry.lock_creation_date, entry.has_props, entry.has_prop_mods, entry.cachable_props, entry.present_props)
+ if entry.copyfrom_url != NULL:
+ ret.copyfrom_url = entry.copyfrom_url
+ ret.copyfrom_rev = entry.copyfrom_rev
+ else:
+ ret.copyfrom_url = None
+ ret.copyfrom_rev = -1
+ # FIXME: entry.conflict_old, entry.conflict_new, entry.conflict_wrk, entry.prejfile, entry.text_time, entry.prop_time, entry.checksum, entry.cmt_date, entry.cmt_author, entry.lock_token, entry.lock_owner, entry.lock_comment, entry.lock_creation_date, entry.has_props, entry.has_prop_mods, entry.cachable_props, entry.present_props)
return ret
cdef class WorkingCopy:
@@ -194,7 +200,10 @@
cdef apr_pool_t *temp_pool
temp_pool = Pool(self.pool)
check_error(svn_wc_prop_get(&value, name, path, self.adm, temp_pool))
- ret = PyString_FromStringAndSize(value.data, value.len)
+ if value == NULL:
+ ret = None
+ else:
+ ret = PyString_FromStringAndSize(value.data, value.len)
apr_pool_destroy(temp_pool)
return ret
@@ -266,7 +275,8 @@
self.adm = NULL
def __dealloc__(self):
- apr_pool_destroy(self.pool)
+ if self.pool != NULL:
+ apr_pool_destroy(self.pool)
def revision_status(wc_path, trail_url=None, committed=False, cancel_func=None):
=== modified file 'workingtree.py'
--- a/workingtree.py 2008-03-16 06:11:05 +0000
+++ b/workingtree.py 2008-03-16 13:40:27 +0000
@@ -326,7 +326,7 @@
assert entry
if entry.kind == core.NODE_DIR:
- subwc = wc.WorkingCopy(wc, self.abspath(subrelpath),
+ subwc = wc.WorkingCopy(adm, self.abspath(subrelpath),
False, 0, None)
try:
add_dir_to_inv(subrelpath, subwc, id)
@@ -467,12 +467,12 @@
adm.close()
raise
- self.client_ctx.log_msg_baton2 = None
+ self.client_ctx.set_log_msg_func(None)
- revid = self.branch.generate_revision_id(commit_info.revision)
+ revid = self.branch.generate_revision_id(commit_info[0])
self.base_revid = revid
- self.base_revnum = commit_info.revision
+ self.base_revnum = commit_info[0]
self.base_tree = SvnBasisTree(self)
return revid
More information about the bazaar-commits
mailing list