Remove more uses of official svn bindings.
authorJelmer Vernooij <jelmer@samba.org>
Thu, 13 Mar 2008 21:04:01 +0000 (22:04 +0100)
committerJelmer Vernooij <jelmer@samba.org>
Thu, 13 Mar 2008 21:04:01 +0000 (22:04 +0100)
20 files changed:
apr.pxi
auth.py
branch.py
branchprops.py
commit.py
convert.py
errors.py
fetch.py
format.py
logwalker.py
mapping.py
ra.pyx
remote.py
repository.py
setup.py
transport.py
tree.py
types.pxi
wc.pyx
workingtree.py

diff --git a/apr.pxi b/apr.pxi
index da065554f1b63fdfd0ecd78acb043f81cd122575..1f4a2e68d6bd83e2ecad097ffd0fd53f291aec92 100644 (file)
--- a/apr.pxi
+++ b/apr.pxi
@@ -47,4 +47,7 @@ cdef extern from "apr_hash.h":
     void apr_hash_this(apr_hash_index_t *hi, void **key, 
                                 long *klen, void **val)
 
+cdef extern from "apr_time.h":
+    ctypedef unsigned long long apr_time_t
+
 
diff --git a/auth.py b/auth.py
index ec4d9a2fb51cadee30525065dd15973bfb72f52f..b51e4d8366849ca4df3e59793788ec380c9b023f 100644 (file)
--- a/auth.py
+++ b/auth.py
@@ -83,11 +83,11 @@ class SubversionAuthenticationConfig(AuthenticationConfig):
             credentials.has_key("verify_certificates") and 
             credentials["verify_certificates"] == False):
             ssl_server_trust.accepted_failures = (
-                    svn.core.SVN_AUTH_SSL_NOTYETVALID + 
-                    svn.core.SVN_AUTH_SSL_EXPIRED +
-                    svn.core.SVN_AUTH_SSL_CNMISMATCH +
-                    svn.core.SVN_AUTH_SSL_UNKNOWNCA +
-                    svn.core.SVN_AUTH_SSL_OTHER)
+                    core.SVN_AUTH_SSL_NOTYETVALID + 
+                    core.SVN_AUTH_SSL_EXPIRED +
+                    core.SVN_AUTH_SSL_CNMISMATCH +
+                    core.SVN_AUTH_SSL_UNKNOWNCA +
+                    core.SVN_AUTH_SSL_OTHER)
         else:
             ssl_server_trust.accepted_failures = 0
         ssl_server_trust.may_save = False
index 1a6609ab2cfe5a2faf9343e58f7a8ba214846f81..d2ee52356104c74b608e27875ec67a233332c535 100644 (file)
--- a/branch.py
+++ b/branch.py
@@ -24,8 +24,8 @@ from bzrlib.inventory import (Inventory)
 from bzrlib.revision import ensure_null
 from bzrlib.workingtree import WorkingTree
 
-import svn.client, svn.core
-from svn.core import SubversionException, Pool
+import svn.client, core
+from core import SubversionException, Pool
 
 from commit import push
 from errors import NotSvnBranchPath
@@ -75,10 +75,10 @@ class SvnBranch(Branch):
         self._branch_path = branch_path.strip("/")
         try:
             if self.repository.transport.check_path(branch_path.strip("/"), 
-                self.get_revnum()) != svn.core.svn_node_dir:
+                self.get_revnum()) != core.svn_node_dir:
                 raise NotBranchError(self.base)
         except SubversionException, (_, num):
-            if num == svn.core.SVN_ERR_FS_NO_SUCH_REVISION:
+            if num == core.SVN_ERR_FS_NO_SUCH_REVISION:
                 raise NotBranchError(self.base)
             raise
         if not self.mapping.is_branch(branch_path):
index 3483eb1e59a34590d93e963e79f311f1dc37f043..d75f855ffcf33db2da5e29e6e38999d032e76b52 100644 (file)
@@ -21,8 +21,7 @@ from bzrlib.trace import mutter
 
 from cache import CacheTable
 
-from svn.core import SubversionException, Pool
-import svn.core
+from core import SubversionException, Pool
 
 class BranchPropertyList(CacheTable):
     """Simple class that retrieves file properties set on branches."""
@@ -51,7 +50,7 @@ class BranchPropertyList(CacheTable):
             (_, _, props) = self.log._get_transport().get_dir(path, 
                 revnum)
         except SubversionException, (_, num):
-            if num == svn.core.SVN_ERR_FS_NO_SUCH_REVISION:
+            if num == core.SVN_ERR_FS_NO_SUCH_REVISION:
                 raise NoSuchRevision(self, revnum)
             raise
 
index d8b89333f0dffd6a7bb291deac7f4d96f086103f..425d7d24cb11d6783b101fecf344838f86027cb7 100644 (file)
--- a/commit.py
+++ b/commit.py
@@ -16,7 +16,9 @@
 """Committing and pushing to Subversion repositories."""
 
 import svn.delta
-from svn.core import Pool, SubversionException, svn_time_to_cstring
+from svn.core import Pool, SubversionException
+
+from core import time_to_cstring
 
 from bzrlib import debug, osutils, urlutils
 from bzrlib.branch import Branch
@@ -61,7 +63,7 @@ def _check_dirs_exist(transport, bp_parts, base_rev):
     for i in range(len(bp_parts), 0, -1):
         current = bp_parts[:i]
         path = "/".join(current).strip("/")
-        if transport.check_path(path, base_rev) == svn.core.svn_node_dir:
+        if transport.check_path(path, base_rev) == core.svn_node_dir:
             return current
     return []
 
@@ -77,7 +79,7 @@ def set_svn_revprops(transport, revnum, revprops):
     for (name, value) in revprops.items():
         try:
             transport.change_rev_prop(revnum, name, value)
-        except SubversionException, (_, svn.core.SVN_ERR_REPOS_DISABLED_FEATURE):
+        except SubversionException, (_, core.SVN_ERR_REPOS_DISABLED_FEATURE):
             raise RevpropChangeFailed(name)
 
 
@@ -276,20 +278,20 @@ class SvnCommitBuilder(RootCommitBuilder):
             if child_baton is not None:
                 if old_executable != child_ie.executable:
                     if child_ie.executable:
-                        value = svn.core.SVN_PROP_EXECUTABLE_VALUE
+                        value = core.SVN_PROP_EXECUTABLE_VALUE
                     else:
                         value = None
                     self.editor.change_file_prop(child_baton, 
-                            svn.core.SVN_PROP_EXECUTABLE, value, self.pool)
+                            core.SVN_PROP_EXECUTABLE, value, self.pool)
 
                 if old_special != (child_ie.kind == 'symlink'):
                     if child_ie.kind == 'symlink':
-                        value = svn.core.SVN_PROP_SPECIAL_VALUE
+                        value = core.SVN_PROP_SPECIAL_VALUE
                     else:
                         value = None
 
                     self.editor.change_file_prop(child_baton, 
-                            svn.core.SVN_PROP_SPECIAL, value, self.pool)
+                            core.SVN_PROP_SPECIAL, value, self.pool)
 
             # handle the file
             if child_ie.file_id in self.modified_files:
@@ -439,7 +441,7 @@ class SvnCommitBuilder(RootCommitBuilder):
             fileids[path] = id
 
         self.base_mapping.export_fileid_map(fileids, self._svn_revprops, self._svnprops)
-        self._svn_revprops[svn.core.SVN_PROP_REVISION_LOG] = message.encode("utf-8")
+        self._svn_revprops[core.SVN_PROP_REVISION_LOG] = message.encode("utf-8")
 
         try:
             existing_bp_parts = _check_dirs_exist(self.repository.transport, 
@@ -454,9 +456,9 @@ class SvnCommitBuilder(RootCommitBuilder):
                     raise
                 # Try without bzr: revprops
                 self.editor = self.repository.transport.get_commit_editor({
-                    svn.core.SVN_PROP_REVISION_LOG: self._svn_revprops[svn.core.SVN_PROP_REVISION_LOG]},
+                    core.SVN_PROP_REVISION_LOG: self._svn_revprops[svn.core.SVN_PROP_REVISION_LOG]},
                     done, None, False)
-                del self._svn_revprops[svn.core.SVN_PROP_REVISION_LOG]
+                del self._svn_revprops[core.SVN_PROP_REVISION_LOG]
 
             root = self.editor.open_root(self.base_revnum)
 
@@ -508,8 +510,8 @@ class SvnCommitBuilder(RootCommitBuilder):
         if self.repository.get_config().get_override_svn_revprops():
             set_svn_revprops(self.repository.transport, 
                  self.revision_metadata.revision, {
-                svn.core.SVN_PROP_REVISION_AUTHOR: self._committer,
-                svn.core.SVN_PROP_REVISION_DATE: svn_time_to_cstring(1000000*self._timestamp)})
+                core.SVN_PROP_REVISION_AUTHOR: self._committer,
+                core.SVN_PROP_REVISION_DATE: svn_time_to_cstring(1000000*self._timestamp)})
 
         try:
             set_svn_revprops(self.repository.transport, self.revision_metadata.revision, 
@@ -693,7 +695,7 @@ def push(target, source, revision_id):
     try:
         builder.commit(rev.message)
     except SubversionException, (_, num):
-        if num == svn.core.SVN_ERR_FS_TXN_OUT_OF_DATE:
+        if num == core.SVN_ERR_FS_TXN_OUT_OF_DATE:
             raise DivergedBranches(source, target)
         raise
     except ChangesRootLHSHistory:
index aafdfd35dc59dd8b92f9383cf752d0af3f8c52ad..8b742aae3ec14d55fcc75cc78694e2519c362891 100644 (file)
@@ -25,7 +25,7 @@ from bzrlib.transport import get_transport
 
 from format import get_rich_root_format
 
-import svn.core, svn.repos
+import core, svn.repos
 
 def transport_makedirs(transport, location_url):
     """Create missing directories.
@@ -73,8 +73,8 @@ def load_dumpfile(dumpfile, outputdir):
     try:
         svn.repos.load_fs2(repos, file, StringIO(), 
                 svn.repos.load_uuid_default, '', 0, 0, None)
-    except svn.core.SubversionException, (_, num):
-        if num == svn.core.SVN_ERR_STREAM_MALFORMED_DATA:
+    except core.SubversionException, (_, num):
+        if num == core.SVN_ERR_STREAM_MALFORMED_DATA:
             raise NotDumpFile(dumpfile)
         raise
     return repos
@@ -132,7 +132,7 @@ def convert_repository(source_repos, output_url, scheme=None,
                    source_repos.find_branchpaths(source_repos.get_scheme()))]
 
     def is_dir((branch, revnum)):
-        return source_repos.transport.check_path(branch, revnum) == svn.core.svn_node_dir
+        return source_repos.transport.check_path(branch, revnum) == core.svn_node_dir
 
     existing_branches = filter(is_dir, existing_branches)
 
index 29d03e29abc53a0ab45e9c81b094e6d84282028b..885a5f5619865637ab5362557b9eaff3eecdd0bb 100644 (file)
--- a/errors.py
+++ b/errors.py
@@ -21,10 +21,8 @@ from bzrlib.errors import (BzrError, ConnectionError, ConnectionReset,
                            TransportError, UnexpectedEndOfContainerError)
 
 import urllib
-import svn.core
-
-# APR define, not in svn.core
-SVN_ERR_UNKNOWN_HOSTNAME = 670002
+import core
+from bzrlib.plugins.svn import constants
 
 class NotSvnBranchPath(NotBranchError):
     """Error raised when a path was specified that did not exist."""
@@ -83,19 +81,19 @@ def convert_error(err):
     """
     (msg, num) = err.args
 
-    if num == svn.core.SVN_ERR_RA_SVN_CONNECTION_CLOSED:
+    if num == core.SVN_ERR_RA_SVN_CONNECTION_CLOSED:
         return ConnectionReset(msg=msg)
-    elif num == svn.core.SVN_ERR_WC_LOCKED:
+    elif num == core.SVN_ERR_WC_LOCKED:
         return LockError(message=msg)
-    elif num == svn.core.SVN_ERR_RA_NOT_AUTHORIZED:
+    elif num == core.SVN_ERR_RA_NOT_AUTHORIZED:
         return PermissionDenied('.', msg)
-    elif num == svn.core.SVN_ERR_INCOMPLETE_DATA:
+    elif num == core.SVN_ERR_INCOMPLETE_DATA:
         return UnexpectedEndOfContainerError()
-    elif num == svn.core.SVN_ERR_RA_SVN_MALFORMED_DATA:
+    elif num == core.SVN_ERR_RA_SVN_MALFORMED_DATA:
         return TransportError("Malformed data", msg)
-    elif num == svn.core.SVN_ERR_RA_NOT_IMPLEMENTED:
+    elif num == core.SVN_ERR_RA_NOT_IMPLEMENTED:
         return NotImplementedError("Function not implemented in remote server")
-    elif num == SVN_ERR_UNKNOWN_HOSTNAME:
+    elif num == constants.ERR_UNKNOWN_HOSTNAME:
         return ConnectionError(msg=msg)
     elif num > 0 and num < 1000:
         return OSError(num, msg)
@@ -110,7 +108,7 @@ def convert_svn_error(unbound):
     def convert(*args, **kwargs):
         try:
             return unbound(*args, **kwargs)
-        except svn.core.SubversionException, e:
+        except core.SubversionException, e:
             raise convert_error(e)
 
     convert.__doc__ = unbound.__doc__
index e3783dd28fd1ce8e808c62cb532e1ad809590800..1b690771ac49d93096b3d760e18850ee983563cf 100644 (file)
--- a/fetch.py
+++ b/fetch.py
@@ -25,8 +25,8 @@ from bzrlib.trace import mutter
 from cStringIO import StringIO
 import md5
 
-from svn.core import Pool
-import svn.core
+from core import Pool
+import core
 
 from bzrlib.plugins.svn.errors import InvalidFileName
 from mapping import (SVN_PROP_BZR_ANCESTRY, SVN_PROP_BZR_MERGE, 
@@ -269,41 +269,41 @@ class RevisionBuildEditor(svn.delta.Editor):
                 mutter('rogue %r on non-root directory' % SVN_PROP_BZR_REVISION_INFO)
                 return
  
-        elif name in (svn.core.SVN_PROP_ENTRY_COMMITTED_DATE,
-                      svn.core.SVN_PROP_ENTRY_COMMITTED_REV,
-                      svn.core.SVN_PROP_ENTRY_LAST_AUTHOR,
-                      svn.core.SVN_PROP_ENTRY_LOCK_TOKEN,
-                      svn.core.SVN_PROP_ENTRY_UUID,
-                      svn.core.SVN_PROP_EXECUTABLE):
+        elif name in (core.SVN_PROP_ENTRY_COMMITTED_DATE,
+                      core.SVN_PROP_ENTRY_COMMITTED_REV,
+                      core.SVN_PROP_ENTRY_LAST_AUTHOR,
+                      core.SVN_PROP_ENTRY_LOCK_TOKEN,
+                      core.SVN_PROP_ENTRY_UUID,
+                      core.SVN_PROP_EXECUTABLE):
             pass
-        elif name.startswith(svn.core.SVN_PROP_WC_PREFIX):
+        elif name.startswith(core.SVN_PROP_WC_PREFIX):
             pass
         elif name in (SVN_PROP_BZR_MERGE, SVN_PROP_BZR_FILEIDS):
             pass
-        elif (name.startswith(svn.core.SVN_PROP_PREFIX) or
+        elif (name.startswith(core.SVN_PROP_PREFIX) or
               name.startswith(SVN_PROP_BZR_PREFIX)):
             mutter('unsupported dir property %r' % name)
 
     def change_file_prop(self, id, name, value, pool):
-        if name == svn.core.SVN_PROP_EXECUTABLE: 
+        if name == core.SVN_PROP_EXECUTABLE: 
             # You'd expect executable to match 
-            # svn.core.SVN_PROP_EXECUTABLE_VALUE, but that's not 
+            # core.SVN_PROP_EXECUTABLE_VALUE, but that's not 
             # how SVN behaves. It appears to consider the presence 
             # of the property sufficient to mark it executable.
             self.is_executable = (value != None)
-        elif (name == svn.core.SVN_PROP_SPECIAL):
+        elif (name == core.SVN_PROP_SPECIAL):
             self.is_symlink = (value != None)
-        elif name == svn.core.SVN_PROP_ENTRY_COMMITTED_REV:
+        elif name == core.SVN_PROP_ENTRY_COMMITTED_REV:
             self.last_file_rev = int(value)
-        elif name in (svn.core.SVN_PROP_ENTRY_COMMITTED_DATE,
-                      svn.core.SVN_PROP_ENTRY_LAST_AUTHOR,
-                      svn.core.SVN_PROP_ENTRY_LOCK_TOKEN,
-                      svn.core.SVN_PROP_ENTRY_UUID,
-                      svn.core.SVN_PROP_MIME_TYPE):
+        elif name in (core.SVN_PROP_ENTRY_COMMITTED_DATE,
+                      core.SVN_PROP_ENTRY_LAST_AUTHOR,
+                      core.SVN_PROP_ENTRY_LOCK_TOKEN,
+                      core.SVN_PROP_ENTRY_UUID,
+                      core.SVN_PROP_MIME_TYPE):
             pass
-        elif name.startswith(svn.core.SVN_PROP_WC_PREFIX):
+        elif name.startswith(core.SVN_PROP_WC_PREFIX):
             pass
-        elif (name.startswith(svn.core.SVN_PROP_PREFIX) or
+        elif (name.startswith(core.SVN_PROP_PREFIX) or
               name.startswith(SVN_PROP_BZR_PREFIX)):
             mutter('unsupported file property %r' % name)
 
index 81d4d5313f773d958c6923adf14b2595df68f33b..037e1cabafab4d611f9b81a7260d5d19d5864388 100644 (file)
--- a/format.py
+++ b/format.py
@@ -52,25 +52,25 @@ class SvnRemoteFormat(BzrDirFormat):
     @classmethod
     def probe_transport(klass, transport):
         from transport import get_svn_ra_transport
-        import svn.core
+        import core
         format = klass()
 
         try:
             transport = get_svn_ra_transport(transport)
-        except svn.core.SubversionException, (_, num):
-            if num in (svn.core.SVN_ERR_RA_ILLEGAL_URL, \
-                       svn.core.SVN_ERR_RA_LOCAL_REPOS_OPEN_FAILED, \
-                       svn.core.SVN_ERR_BAD_URL):
+        except core.SubversionException, (_, num):
+            if num in (core.SVN_ERR_RA_ILLEGAL_URL, \
+                       core.SVN_ERR_RA_LOCAL_REPOS_OPEN_FAILED, \
+                       core.SVN_ERR_BAD_URL):
                 raise bzr_errors.NotBranchError(path=transport.base)
 
         return format
 
     def _open(self, transport):
-        import svn.core
+        import core
         try: 
             return remote.SvnRemoteAccess(transport, self)
-        except svn.core.SubversionException, (_, num):
-            if num == svn.core.SVN_ERR_RA_DAV_REQUEST_FAILED:
+        except core.SubversionException, (_, num):
+            if num == core.SVN_ERR_RA_DAV_REQUEST_FAILED:
                 raise bzr_errors.NotBranchError(transport.base)
             raise
 
@@ -126,15 +126,15 @@ class SvnWorkingTreeDirFormat(BzrDirFormat):
         raise bzr_errors.NotBranchError(path=transport.base)
 
     def _open(self, transport):
-        import svn.core
+        import core
         from workingtree import SvnCheckout
-        subr_version = svn.core.svn_subr_version()
+        subr_version = core.svn_subr_version()
         if subr_version.major == 1 and subr_version.minor < 4:
             raise errors.NoCheckoutSupport()
         try:
             return SvnCheckout(transport, self)
-        except svn.core.SubversionException, (_, num):
-            if num in (svn.core.SVN_ERR_RA_LOCAL_REPOS_OPEN_FAILED,):
+        except core.SubversionException, (_, num):
+            if num in (core.SVN_ERR_RA_LOCAL_REPOS_OPEN_FAILED,):
                 raise errors.NoSvnRepositoryPresent(transport.base)
             raise
 
index 0dbc2de65e0de4a9bf4627f13f6348a1124e4262..1e97392f4a957370d095eb5870f60a34974ddf09 100644 (file)
@@ -20,9 +20,9 @@ from bzrlib.errors import NoSuchRevision
 import bzrlib.ui as ui
 from copy import copy
 
-from svn.core import SubversionException, Pool
+from core import SubversionException, Pool
 from transport import SvnRaTransport
-import svn.core
+import core
 
 from cache import sqlite3
 
@@ -113,7 +113,7 @@ class LogWalker(object):
             finally:
                 pb.finished()
         except SubversionException, (_, num):
-            if num == svn.core.SVN_ERR_FS_NO_SUCH_REVISION:
+            if num == core.SVN_ERR_FS_NO_SUCH_REVISION:
                 raise NoSuchRevision(branch=self, 
                     revision="Revision number %d" % to_revnum)
             raise
@@ -248,9 +248,9 @@ class LogWalker(object):
         path = path.strip("/")
         transport = self._get_transport()
         ft = transport.check_path(path, revnum)
-        if ft == svn.core.svn_node_file:
+        if ft == core.svn_node_file:
             return []
-        assert ft == svn.core.svn_node_dir
+        assert ft == core.svn_node_dir
 
         class TreeLister(svn.delta.Editor):
             def __init__(self, base):
index ff6448fb2ab6385ef2367c0fba185f9eb8cd71cb..11e366d8014f2cd002c5d74b69c2443c35664da2 100644 (file)
@@ -140,12 +140,12 @@ def parse_merge_property(line):
     return filter(lambda x: x != "", line.split("\t"))
 
 def parse_svn_revprops(svn_revprops, rev):
-    if svn_revprops.has_key(svn.core.SVN_PROP_REVISION_AUTHOR):
-        rev.committer = svn_revprops[svn.core.SVN_PROP_REVISION_AUTHOR]
+    if svn_revprops.has_key(core.SVN_PROP_REVISION_AUTHOR):
+        rev.committer = svn_revprops[core.SVN_PROP_REVISION_AUTHOR]
     else:
         rev.committer = ""
 
-    rev.message = svn_revprops.get(svn.core.SVN_PROP_REVISION_LOG)
+    rev.message = svn_revprops.get(core.SVN_PROP_REVISION_LOG)
 
     if rev.message:
         try:
@@ -153,8 +153,8 @@ def parse_svn_revprops(svn_revprops, rev):
         except UnicodeDecodeError:
             pass
 
-    if svn_revprops.has_key(svn.core.SVN_PROP_REVISION_DATE):
-        rev.timestamp = 1.0 * svn.core.secs_from_timestr(svn_revprops[svn.core.SVN_PROP_REVISION_DATE], None)
+    if svn_revprops.has_key(core.SVN_PROP_REVISION_DATE):
+        rev.timestamp = 1.0 * core.secs_from_timestr(svn_revprops[core.SVN_PROP_REVISION_DATE], None)
     else:
         rev.timestamp = 0.0 # FIXME: Obtain repository creation time
     rev.timezone = None
diff --git a/ra.pyx b/ra.pyx
index 421678ffc4c673d6f9e0f795e6aff7a93a681660..49eb50a733f05ce6f398bf03375d142c10c75b04 100644 (file)
--- a/ra.pyx
+++ b/ra.pyx
@@ -19,16 +19,6 @@ include "types.pxi"
 
 apr_initialize()
 
-cdef apr_pool_t *Pool(apr_pool_t *parent):
-    cdef apr_status_t status
-    cdef apr_pool_t *ret
-    ret = NULL
-    status = apr_pool_create(&ret, parent)
-    if status != 0:
-        # FIXME: Clearer error
-        raise Exception("APR Error")
-    return ret
-
 cdef extern from "svn_auth.h":
     ctypedef struct svn_auth_baton_t
     void svn_auth_open(svn_auth_baton_t **auth_baton,
@@ -36,7 +26,7 @@ cdef extern from "svn_auth.h":
                        apr_pool_t *pool)
     void svn_auth_set_parameter(svn_auth_baton_t *auth_baton, 
                                 char *name, void *value)
-    void * svn_auth_get_parameter(svn_auth_baton_t *auth_baton,
+    void *svn_auth_get_parameter(svn_auth_baton_t *auth_baton,
                                   char *name)
 
     ctypedef struct svn_auth_provider_t:
@@ -81,7 +71,8 @@ cdef extern from "svn_delta.h":
     ctypedef svn_error_t *(*svn_txdelta_window_handler_t) (svn_txdelta_window_t *window, void *baton)
 
     ctypedef struct svn_delta_editor_t:
-        svn_error_t *(*set_target_revision)(void *edit_baton, long target_revision, apr_pool_t *pool)
+        svn_error_t *(*set_target_revision)(void *edit_baton, 
+                                               svn_revnum_t target_revision, apr_pool_t *pool)
         svn_error_t *(*open_root)(void *edit_baton, long base_revision, 
                                   apr_pool_t *dir_pool, void **root_baton)
 
@@ -359,22 +350,22 @@ cdef class Reporter:
     cdef apr_pool_t *pool
 
     def set_path(self, path, revision, start_empty, lock_token):
-        _check_error(self.reporter.set_path(self.report_baton, path, revision, 
+        check_error(self.reporter.set_path(self.report_baton, path, revision, 
                      start_empty, lock_token, self.pool))
 
     def delete_path(self, path):
-        _check_error(self.reporter.delete_path(self.report_baton, path, 
+        check_error(self.reporter.delete_path(self.report_baton, path, 
                      self.pool))
 
     def link_path(self, path, url, revision, start_empty, lock_token):
-        _check_error(self.reporter.link_path(self.report_baton, path, url, 
+        check_error(self.reporter.link_path(self.report_baton, path, url, 
                      revision, start_empty, lock_token, self.pool))
 
     def finish_report(self):
-        _check_error(self.reporter.finish_report(self.report_baton, self.pool))
+        check_error(self.reporter.finish_report(self.report_baton, self.pool))
 
     def abort_report(self):
-        _check_error(self.reporter.abort_report(self.report_baton, self.pool))
+        check_error(self.reporter.abort_report(self.report_baton, self.pool))
 
 
 def version():
@@ -385,12 +376,9 @@ def version():
     return (svn_ra_version().major, svn_ra_version().minor, 
             svn_ra_version().minor, svn_ra_version().tag)
 
-cdef void _check_error(svn_error_t *error):
-    if error:
-        # FIXME
-        raise Exception("SVN error")
 
 cdef class RemoteAccess:
+    """Connection to a remote Subversion repository."""
     cdef svn_ra_session_t *ra
     cdef apr_pool_t *pool
     cdef char *url
@@ -407,11 +395,11 @@ cdef class RemoteAccess:
         self.url = url
         self.pool = Pool(NULL)
         assert self.pool != NULL
-        _check_error(svn_ra_create_callbacks(&callbacks2, self.pool))
+        check_error(svn_ra_create_callbacks(&callbacks2, self.pool))
         config_hash = apr_hash_make(self.pool)
         for (key, val) in config.items():
             apr_hash_set(config_hash, key, len(key), val)
-        _check_error(svn_ra_open2(&self.ra, url, callbacks2, None, config_hash, 
+        check_error(svn_ra_open2(&self.ra, url, callbacks2, None, config_hash, 
                      self.pool))
 
     def get_uuid(self):
@@ -419,7 +407,7 @@ cdef class RemoteAccess:
         cdef char *uuid
         cdef apr_pool_t *temp_pool
         temp_pool = Pool(self.pool)
-        _check_error(svn_ra_get_uuid(self.ra, &uuid, temp_pool))
+        check_error(svn_ra_get_uuid(self.ra, &uuid, temp_pool))
         apr_pool_destroy(temp_pool)
         return uuid
 
@@ -427,7 +415,7 @@ cdef class RemoteAccess:
         """Switch to a different url."""
         cdef apr_pool_t *temp_pool
         temp_pool = Pool(self.pool)
-        _check_error(svn_ra_reparent(self.ra, url, temp_pool))
+        check_error(svn_ra_reparent(self.ra, url, temp_pool))
         apr_pool_destroy(temp_pool)
 
     def get_latest_revnum(self):
@@ -437,7 +425,7 @@ cdef class RemoteAccess:
         cdef long latest_revnum
         cdef apr_pool_t *temp_pool
         temp_pool = Pool(self.pool)
-        _check_error(svn_ra_get_latest_revnum(self.ra, &latest_revnum, 
+        check_error(svn_ra_get_latest_revnum(self.ra, &latest_revnum, 
                      temp_pool))
         apr_pool_destroy(temp_pool)
         return latest_revnum
@@ -447,7 +435,7 @@ cdef class RemoteAccess:
                 revprops=[SVN_PROP_REVISION_LOG,SVN_PROP_REVISION_AUTHOR,SVN_PROP_REVISION_DATE]):
         cdef apr_array_header_t *paths_array
         cdef apr_pool_t *temp_pool
-        _check_error(svn_ra_get_log(self.ra, paths_array, start, end, limit,
+        check_error(svn_ra_get_log(self.ra, paths_array, start, end, limit,
             discover_changed_paths, strict_node_history, py_svn_log_wrapper, 
             callback, temp_pool))
         apr_pool_destroy(temp_pool)
@@ -457,7 +445,7 @@ cdef class RemoteAccess:
         cdef char *root
         cdef apr_pool_t *temp_pool
         temp_pool = Pool(self.pool)
-        _check_error(svn_ra_get_repos_root(self.ra, &root, 
+        check_error(svn_ra_get_repos_root(self.ra, &root, 
                      temp_pool))
         apr_pool_destroy(temp_pool)
         return root
@@ -469,7 +457,7 @@ cdef class RemoteAccess:
         cdef apr_pool_t *temp_pool
         cdef svn_delta_editor_t *editor
         temp_pool = Pool(self.pool)
-        _check_error(svn_ra_do_update(self.ra, &reporter, &report_baton, 
+        check_error(svn_ra_do_update(self.ra, &reporter, &report_baton, 
                      revision_to_update_to, update_target, recurse, 
                      editor, update_editor, temp_pool))
         apr_pool_destroy(temp_pool)
@@ -486,7 +474,7 @@ cdef class RemoteAccess:
         cdef apr_pool_t *temp_pool
         cdef svn_delta_editor_t *editor
         temp_pool = Pool(self.pool)
-        _check_error(svn_ra_do_update(self.ra, &reporter, &report_baton, 
+        check_error(svn_ra_do_update(self.ra, &reporter, &report_baton, 
                      revision_to_update_to, update_target, recurse, 
                      editor, update_editor, temp_pool))
         apr_pool_destroy(temp_pool)
@@ -498,7 +486,7 @@ cdef class RemoteAccess:
         cdef apr_pool_t *temp_pool
         cdef svn_delta_editor_t *editor
         temp_pool = Pool(self.pool)
-        _check_error(svn_ra_replay(self.ra, revision, low_water_mark,
+        check_error(svn_ra_replay(self.ra, revision, low_water_mark,
                      send_deltas, editor, update_editor, temp_pool))
         apr_pool_destroy(temp_pool)
         return Reporter(reporter, report_baton, temp_pool)
@@ -507,7 +495,7 @@ cdef class RemoteAccess:
         cdef apr_pool_t *temp_pool
         cdef apr_hash_t *props
         temp_pool = Pool(self.pool)
-        _check_error(svn_ra_rev_proplist(self.ra, rev, &props, temp_pool))
+        check_error(svn_ra_rev_proplist(self.ra, rev, &props, temp_pool))
         py_props = {}
         # FIXME: Convert props to py_props
         apr_pool_destroy(temp_pool)
@@ -520,7 +508,7 @@ cdef class RemoteAccess:
         cdef void *edit_baton
         cdef apr_hash_t *hash_lock_tokens
         temp_pool = Pool(self.pool)
-        _check_error(svn_ra_get_commit_editor2(self.ra, &editor, 
+        check_error(svn_ra_get_commit_editor2(self.ra, &editor, 
             &edit_baton, revprops[SVN_PROP_REVISION_LOG], py_commit_callback, 
             commit_callback, hash_lock_tokens, keep_locks, temp_pool))
         apr_pool_destroy(temp_pool)
@@ -531,7 +519,7 @@ cdef class RemoteAccess:
         cdef svn_string_t *val_string
         temp_pool = Pool(self.pool)
         val_string = svn_string_ncreate(value, len(value), temp_pool)
-        _check_error(svn_ra_change_rev_prop(self.ra, rev, name, 
+        check_error(svn_ra_change_rev_prop(self.ra, rev, name, 
                      val_string, temp_pool))
         apr_pool_destroy(temp_pool)
     
@@ -541,7 +529,7 @@ cdef class RemoteAccess:
         cdef apr_hash_t *props
         cdef long fetch_rev
         temp_pool = Pool(self.pool)
-        _check_error(svn_ra_get_dir2(self.ra, &dirents, &fetch_rev, &props,
+        check_error(svn_ra_get_dir2(self.ra, &dirents, &fetch_rev, &props,
                      path, revision, dirent_fields, temp_pool))
         # FIXME: Convert dirents to python hash
         # FIXME: Convert props to python hash
@@ -554,7 +542,7 @@ cdef class RemoteAccess:
         cdef svn_lock_t *lock
         cdef apr_pool_t *temp_pool
         temp_pool = Pool(self.pool)
-        _check_error(svn_ra_get_lock(self.ra, &lock, path, temp_pool))
+        check_error(svn_ra_get_lock(self.ra, &lock, path, temp_pool))
         apr_pool_destroy(temp_pool)
         return lock
 
@@ -562,7 +550,7 @@ cdef class RemoteAccess:
         cdef svn_node_kind_t kind
         cdef apr_pool_t *temp_pool
         temp_pool = Pool(self.pool)
-        _check_error(svn_ra_check_path(self.ra, path, revision, &kind, 
+        check_error(svn_ra_check_path(self.ra, path, revision, &kind, 
                      temp_pool))
         apr_pool_destroy(temp_pool)
         return kind
@@ -571,7 +559,7 @@ cdef class RemoteAccess:
         cdef apr_pool_t *temp_pool
         cdef int has
         temp_pool = Pool(self.pool)
-        _check_error(svn_ra_has_capability(self.ra, &has, capability, 
+        check_error(svn_ra_has_capability(self.ra, &has, capability, 
                      temp_pool))
         apr_pool_destroy(temp_pool)
         return has
@@ -581,7 +569,7 @@ cdef class RemoteAccess:
         cdef apr_hash_t *hash_path_tokens
         temp_pool = Pool(self.pool)
         # FIXME: Convert path_tokens to a apr_hash
-        _check_error(svn_ra_unlock(self.ra, hash_path_tokens, break_lock,
+        check_error(svn_ra_unlock(self.ra, hash_path_tokens, break_lock,
                      py_lock_func, lock_func, temp_pool))
         apr_pool_destroy(temp_pool)
 
@@ -590,7 +578,7 @@ cdef class RemoteAccess:
         cdef apr_hash_t *hash_path_revs
         # FIXME: Create hash_path_revs
         temp_pool = Pool(self.pool)
-        _check_error(svn_ra_lock(self.ra, hash_path_revs, comment, steal_lock,
+        check_error(svn_ra_lock(self.ra, hash_path_revs, comment, steal_lock,
                      py_lock_func, lock_func, temp_pool))
         apr_pool_destroy(temp_pool)
 
index 8656bd109fe582688e2aa1b9804976b9db7f362f..768c68f4d4b6ea12456fafbd3d5b03b50ae89fbb 100644 (file)
--- a/remote.py
+++ b/remote.py
@@ -21,8 +21,8 @@ from bzrlib.errors import (NotBranchError, NotLocalUrl, NoRepositoryPresent,
                            NoWorkingTree, AlreadyBranchError)
 from bzrlib.transport.local import LocalTransport
 
-from svn.core import SubversionException
-import svn.core, svn.repos
+from core import SubversionException
+import core, svn.repos
 
 from errors import NoSvnRepositoryPresent
 from format import get_rich_root_format, SvnRemoteFormat
@@ -143,7 +143,7 @@ class SvnRemoteAccess(BzrDir):
         full_branch_url = urlutils.join(repos.transport.base, 
                                         target_branch_path)
         if repos.transport.check_path(target_branch_path,
-            repos.transport.get_latest_revnum()) != svn.core.svn_node_none:
+            repos.transport.get_latest_revnum()) != core.svn_node_none:
             raise AlreadyBranchError(full_branch_url)
         push_new(repos, target_branch_path, source, stop_revision)
         branch = self.open_branch()
index ce9e0538cba2488c7c3ba8ae60354f706be6f1bc..66329824996ac1c8495aa8a0e8978b44cadee299 100644 (file)
@@ -28,8 +28,8 @@ from bzrlib.revision import Revision, NULL_REVISION
 from bzrlib.transport import Transport, get_transport
 from bzrlib.trace import info, mutter
 
-from svn.core import SubversionException, Pool
-import svn.core
+from core import SubversionException, Pool
+import core
 
 import os
 
@@ -240,7 +240,7 @@ class SvnRepository(Repository):
         def done(revmetadata, pool):
             pass
         editor = self.transport.get_commit_editor(
-                {svn.core.SVN_PROP_REVISION_LOG: "Updating branching scheme for Bazaar."},
+                {core.SVN_PROP_REVISION_LOG: "Updating branching scheme for Bazaar."},
                 done, None, False)
         root = editor.open_root(-1)
         editor.change_dir_prop(root, SVN_PROP_BZR_BRANCHING_SCHEME, 
@@ -352,9 +352,9 @@ class SvnRepository(Repository):
             return False
 
         try:
-            return (svn.core.svn_node_dir == self.transport.check_path(path, revnum))
+            return (core.svn_node_dir == self.transport.check_path(path, revnum))
         except SubversionException, (_, num):
-            if num == svn.core.SVN_ERR_FS_NO_SUCH_REVISION:
+            if num == core.SVN_ERR_FS_NO_SUCH_REVISION:
                 return False
             raise
 
@@ -529,7 +529,7 @@ class SvnRepository(Repository):
             (bzr_revno, revid) = mapping.get_revision_id(path, revprops, 
                                                          fileprops)
         except SubversionException, (_, num):
-            if num == svn.core.SVN_ERR_FS_NO_SUCH_REVISION:
+            if num == core.SVN_ERR_FS_NO_SUCH_REVISION:
                 raise NoSuchRevision(path, revnum)
             raise
 
@@ -939,7 +939,7 @@ class SvnRepository(Repository):
                                         elif (scheme.is_branch_parent(n) or 
                                               scheme.is_tag_parent(n)):
                                             parents.append(n)
-                                except SubversionException, (_, svn.core.SVN_ERR_FS_NOT_DIRECTORY):
+                                except SubversionException, (_, core.SVN_ERR_FS_NOT_DIRECTORY):
                                     pass
         finally:
             pb.finished()
index 5c6d4f2ad1e50cc1362c8f7d2689d033373b27c3..68ad5cf0603ed7d6b1723689992f42b06c657079 100755 (executable)
--- a/setup.py
+++ b/setup.py
@@ -34,6 +34,8 @@ setup(name='bzr-svn',
       packages=['bzrlib.plugins.svn', 
                 'bzrlib.plugins.svn.tests'],
       ext_modules=[
+          Extension("core", ["core.pyx"], libraries=["svn_subr-1"], 
+                    include_dirs=[apr_include_dir(), svn_include_dir()]), 
           Extension("ra", ["ra.pyx"], libraries=["svn_ra-1"], 
                     include_dirs=[apr_include_dir(), svn_include_dir()]), 
           Extension("wc", ["wc.pyx"], libraries=["svn_wc-1"],
index be2e6c68b36d3833ab88bd3cb820a5a15705040c..9191ddcbef8350a0587a8f6f16c27ea6c944b4c6 100644 (file)
@@ -21,14 +21,14 @@ from bzrlib.errors import (NoSuchFile, NotBranchError, TransportNotPossible,
 from bzrlib.trace import mutter
 from bzrlib.transport import Transport
 
-from svn.core import SubversionException, Pool
+from core import SubversionException, Pool
 import ra
-import svn.core
+import core
 import svn.client
 
 from errors import convert_svn_error, NoSvnRepositoryPresent
 
-svn_config = svn.core.svn_config_get_config(None)
+svn_config = core.svn_config_get_config(None)
 
 def get_client_string():
     """Return a string that can be send as part of the User Agent string."""
@@ -41,7 +41,7 @@ def _create_auth_baton(pool):
     # providers.h
     providers = []
 
-    if svn.core.SVN_VER_MAJOR == 1 and svn.core.SVN_VER_MINOR >= 5:
+    if core.SVN_VER_MAJOR == 1 and svn.core.SVN_VER_MINOR >= 5:
         import auth
         providers += auth.SubversionAuthenticationConfig().get_svn_auth_providers()
         providers += [auth.get_ssl_client_cert_pw_provider(1)]
@@ -63,7 +63,7 @@ def _create_auth_baton(pool):
     if hasattr(svn.client, 'get_windows_ssl_server_trust_provider'):
         providers.append(svn.client.get_windows_ssl_server_trust_provider(pool))
 
-    return svn.core.svn_auth_open(providers, pool)
+    return core.svn_auth_open(providers, pool)
 
 
 def create_svn_client(pool):
@@ -212,9 +212,9 @@ class SvnRaTransport(Transport):
             self._ra = svn.client.open_ra_session(self._backing_url.encode('utf8'), 
                     self._client, self.pool)
         except SubversionException, (_, num):
-            if num in (svn.core.SVN_ERR_RA_SVN_REPOS_NOT_FOUND,):
+            if num in (core.SVN_ERR_RA_SVN_REPOS_NOT_FOUND,):
                 raise NoSvnRepositoryPresent(url=url)
-            if num == svn.core.SVN_ERR_BAD_URL:
+            if num == core.SVN_ERR_BAD_URL:
                 raise InvalidURL(url)
             raise
 
@@ -321,7 +321,7 @@ class SvnRaTransport(Transport):
         # slash while other backends don't.
         fields = 0
         if kind:
-            fields += svn.core.SVN_DIRENT_KIND
+            fields += core.SVN_DIRENT_KIND
         return self._ra.get_dir(path, revnum, fields)
 
     def _request_path(self, relpath):
@@ -342,7 +342,7 @@ class SvnRaTransport(Transport):
             (dirents, _, _) = self.get_dir(self._request_path(relpath),
                                            self.get_latest_revnum())
         except SubversionException, (msg, num):
-            if num == svn.core.SVN_ERR_FS_NOT_DIRECTORY:
+            if num == core.SVN_ERR_FS_NOT_DIRECTORY:
                 raise NoSuchFile(relpath)
             raise
         return dirents.keys()
@@ -388,9 +388,9 @@ class SvnRaTransport(Transport):
         try:
             svn.client.mkdir([path.encode("utf-8")], self._client)
         except SubversionException, (msg, num):
-            if num == svn.core.SVN_ERR_FS_NOT_FOUND:
+            if num == core.SVN_ERR_FS_NOT_FOUND:
                 raise NoSuchFile(path)
-            if num == svn.core.SVN_ERR_FS_ALREADY_EXISTS:
+            if num == core.SVN_ERR_FS_ALREADY_EXISTS:
                 raise FileExists(path)
             raise
 
diff --git a/tree.py b/tree.py
index e9d2239c264faa689c50263467a5ad8493c0ca25..183ff255008ae9d4f37d94156a37a89a353fe102 100644 (file)
--- a/tree.py
+++ b/tree.py
@@ -26,8 +26,8 @@ import md5
 from cStringIO import StringIO
 import urllib
 
-import svn.core, svn.wc, svn.delta
-from svn.core import Pool
+import core, svn.wc, svn.delta
+from core import Pool
 
 # Deal with Subversion 1.5 and the patched Subversion 1.4 (which are 
 # slightly different).
@@ -112,9 +112,9 @@ class TreeBuildEditor(svn.delta.Editor):
                         SVN_PROP_BZR_FILEIDS, SVN_PROP_BZR_REVISION_ID,
                         SVN_PROP_BZR_BRANCHING_SCHEME, SVN_PROP_BZR_MERGE)
 
-        if name == svn.core.SVN_PROP_ENTRY_COMMITTED_REV:
+        if name == core.SVN_PROP_ENTRY_COMMITTED_REV:
             self.dir_revnum[id] = int(value)
-        elif name == svn.core.SVN_PROP_IGNORE:
+        elif name == core.SVN_PROP_IGNORE:
             self.dir_ignores[id] = value
         elif name.startswith(SVN_PROP_BZR_ANCESTRY):
             if id != self.tree._inventory.root.file_id:
@@ -124,41 +124,41 @@ class TreeBuildEditor(svn.delta.Editor):
             if id != self.tree._inventory.root.file_id:
                 mutter('%r set on non-root dir!' % name)
                 return
-        elif name in (svn.core.SVN_PROP_ENTRY_COMMITTED_DATE,
-                      svn.core.SVN_PROP_ENTRY_LAST_AUTHOR,
-                      svn.core.SVN_PROP_ENTRY_LOCK_TOKEN,
-                      svn.core.SVN_PROP_ENTRY_UUID,
-                      svn.core.SVN_PROP_EXECUTABLE):
+        elif name in (SVN_PROP_ENTRY_COMMITTED_DATE,
+                      SVN_PROP_ENTRY_LAST_AUTHOR,
+                      SVN_PROP_ENTRY_LOCK_TOKEN,
+                      SVN_PROP_ENTRY_UUID,
+                      SVN_PROP_EXECUTABLE):
             pass
-        elif name.startswith(svn.core.SVN_PROP_WC_PREFIX):
+        elif name.startswith(core.SVN_PROP_WC_PREFIX):
             pass
         elif (name == SVN_PROP_BZR_REVISION_INFO or 
               name.startswith(SVN_PROP_BZR_REVISION_ID)):
             pass
         elif name == SVN_PROP_BZR_MERGE:
             pass
-        elif (name.startswith(svn.core.SVN_PROP_PREFIX) or
+        elif (name.startswith(core.SVN_PROP_PREFIX) or
               name.startswith(SVN_PROP_BZR_PREFIX)):
             mutter('unsupported dir property %r' % name)
 
     def change_file_prop(self, id, name, value, pool):
         from mapping import SVN_PROP_BZR_PREFIX
 
-        if name == svn.core.SVN_PROP_EXECUTABLE:
+        if name == core.SVN_PROP_EXECUTABLE:
             self.is_executable = (value != None)
-        elif name == svn.core.SVN_PROP_SPECIAL:
+        elif name == core.SVN_PROP_SPECIAL:
             self.is_symlink = (value != None)
-        elif name == svn.core.SVN_PROP_ENTRY_COMMITTED_REV:
+        elif name == core.SVN_PROP_ENTRY_COMMITTED_REV:
             self.last_file_rev = int(value)
-        elif name in (svn.core.SVN_PROP_ENTRY_COMMITTED_DATE,
-                      svn.core.SVN_PROP_ENTRY_LAST_AUTHOR,
-                      svn.core.SVN_PROP_ENTRY_LOCK_TOKEN,
-                      svn.core.SVN_PROP_ENTRY_UUID,
-                      svn.core.SVN_PROP_MIME_TYPE):
+        elif name in (core.SVN_PROP_ENTRY_COMMITTED_DATE,
+                      core.SVN_PROP_ENTRY_LAST_AUTHOR,
+                      core.SVN_PROP_ENTRY_LOCK_TOKEN,
+                      core.SVN_PROP_ENTRY_UUID,
+                      core.SVN_PROP_MIME_TYPE):
             pass
-        elif name.startswith(svn.core.SVN_PROP_WC_PREFIX):
+        elif name.startswith(core.SVN_PROP_WC_PREFIX):
             pass
-        elif (name.startswith(svn.core.SVN_PROP_PREFIX) or
+        elif (name.startswith(core.SVN_PROP_PREFIX) or
               name.startswith(SVN_PROP_BZR_PREFIX)):
             mutter('unsupported file property %r' % name)
 
@@ -232,7 +232,7 @@ class SvnBasisTree(RevisionTree):
             props = svn.wc.get_prop_diffs(self.workingtree.abspath(relpath), wc)
             if isinstance(props, list): # Subversion 1.5
                 props = props[1]
-            if props.has_key(svn.core.SVN_PROP_SPECIAL):
+            if props.has_key(core.SVN_PROP_SPECIAL):
                 ie = self._inventory.add_path(relpath, 'symlink', id)
                 ie.symlink_target = open(self._abspath(relpath)).read()[len("link "):]
                 ie.text_sha1 = None
@@ -244,7 +244,7 @@ class SvnBasisTree(RevisionTree):
                 data = osutils.fingerprint_file(open(self._abspath(relpath)))
                 ie.text_sha1 = data['sha1']
                 ie.text_size = data['size']
-                ie.executable = props.has_key(svn.core.SVN_PROP_EXECUTABLE)
+                ie.executable = props.has_key(core.SVN_PROP_EXECUTABLE)
             ie.revision = revid
             return ie
 
@@ -278,7 +278,7 @@ class SvnBasisTree(RevisionTree):
                 entry = entries[name]
                 assert entry
                 
-                if entry.kind == svn.core.svn_node_dir:
+                if entry.kind == core.svn_node_dir:
                     subwc = svn.wc.adm_open3(wc, 
                             self.workingtree.abspath(subrelpath), 
                                              False, 0, None)
index b73cc0a10a996f3837e5ea16806e11b778a225fd..51d1956a9de06c349aeb34f3e75e61b6e9bb47d1 100644 (file)
--- a/types.pxi
+++ b/types.pxi
@@ -26,12 +26,17 @@ cdef extern from "svn_version.h":
 
 
 cdef extern from "svn_error.h":
-    ctypedef struct svn_error_t
+    ctypedef struct svn_error_t:
+        apr_status_t apr_err
+        char *message
+        char *file
+        char *line
 
 
 cdef extern from "svn_types.h":
     ctypedef int svn_boolean_t
     ctypedef svn_error_t *(*svn_cancel_func_t)(cancel_baton)
+    ctypedef long svn_revnum_t
 
 cdef extern from "svn_string.h":
     ctypedef struct svn_string_t:
diff --git a/wc.pyx b/wc.pyx
index 4b48501dbefd2993a783542f44a82caa1b08a223..717444c4841bdf9fbb0c9287e40c7b0d2d4fda19 100644 (file)
--- a/wc.pyx
+++ b/wc.pyx
 include "apr.pxi"
 include "types.pxi"
 
+from core import check_error, Pool
+
+cdef svn_error_t *py_cancel_func(cancel_baton):
+    cancel_baton()
+    return NULL
+
 apr_initialize()
 
 cdef extern from "svn_wc.h":
@@ -25,15 +31,15 @@ cdef extern from "svn_wc.h":
     svn_error_t *svn_wc_adm_open3(svn_wc_adm_access_t **adm_access,
                                   svn_wc_adm_access_t *associated,
                                   char *path,
-                                  types.svn_boolean_t write_lock,
+                                  svn_boolean_t write_lock,
                                   int depth,
-                                  types.svn_cancel_func_t cancel_func,
+                                  svn_cancel_func_t cancel_func,
                                   cancel_baton,
-                                  apr.apr_pool_t *pool)
+                                  apr_pool_t *pool)
     svn_error_t *svn_wc_adm_close(svn_wc_adm_access_t *adm_access)
     char *svn_wc_adm_access_path(svn_wc_adm_access_t *adm_access)
     svn_boolean_t svn_wc_adm_locked(svn_wc_adm_access_t *adm_access)
-    svn_error_t *svn_wc_locked(svn_boolean_t *locked, char *path, apr.apr_pool_t *pool)
+    svn_error_t *svn_wc_locked(svn_boolean_t *locked, char *path, apr_pool_t *pool)
     ctypedef struct svn_wc_revision_status_t:
         long min_rev
         long max_rev
@@ -42,19 +48,19 @@ cdef extern from "svn_wc.h":
     svn_error_t *svn_wc_revision_status(svn_wc_revision_status_t **result_p,
                        char *wc_path,
                        char *trail_url,
-                       types.svn_boolean_t committed,
-                       types.svn_cancel_func_t cancel_func,
+                       svn_boolean_t committed,
+                       svn_cancel_func_t cancel_func,
                        void *cancel_baton,
-                       apr.apr_pool_t *pool)
+                       apr_pool_t *pool)
     svn_error_t *svn_wc_prop_get(svn_string_t **value,
                              char *name,
                              char *path,
                              svn_wc_adm_access_t *adm_access,
-                             apr.apr_pool_t *pool)
+                             apr_pool_t *pool)
     svn_error_t *svn_wc_entries_read(apr_hash_t **entries,
                                  svn_wc_adm_access_t *adm_access,
                                  svn_boolean_t show_hidden,
-                                 apr.apr_pool_t *pool)
+                                 apr_pool_t *pool)
 
 def version():
     """Get libsvn_wc version information.
@@ -66,10 +72,11 @@ def version():
 
 cdef class WorkingCopy:
     cdef svn_wc_adm_access_t *adm
+    cdef apr_pool_t *pool
     def __init__(self, path, associated=None, write_lock=False, depth=0, 
                  cancel_func=None):
         self.pool = Pool(NULL)
-        _check_error(svn_wc_adm_open3(&self.adm, associated, path, 
+        check_error(svn_wc_adm_open3(&self.adm, associated, path, 
                      write_lock, depth, py_cancel_func, cancel_func, 
                      self.pool))
 
@@ -81,12 +88,12 @@ cdef class WorkingCopy:
 
     def prop_get(self, name, path):
         cdef svn_string_t *value
-        _check_error(svn_wc_prop_get(&value, name, path, self.adm, temp_pool))
-        return PyString_FromStringAndSize(value.data, value.length)
+        check_error(svn_wc_prop_get(&value, name, path, self.adm, temp_pool))
+        return PyString_FromStringAndSize(value.data, value.len)
 
     def entries_read(self, show_hidden):
         cdef apr_hash_t *entries
-        _check_error(svn_wc_entries_read(&entries, self.adm, 
+        check_error(svn_wc_entries_read(&entries, self.adm, 
                      show_hidden, temp_pool))
         # FIXME: Create py_entries
         py_entries = {}
@@ -98,7 +105,7 @@ cdef class WorkingCopy:
 
 def revision_status(wc_path, trail_url, committed, cancel_func=None):
     cdef svn_wc_revision_status_t *revstatus
-    _check_error(svn_wc_revision_status(&revstatus, wc_path, trail_url,
+    check_error(svn_wc_revision_status(&revstatus, wc_path, trail_url,
                  committed, py_cancel_func, cancel_func, temp_pool))
     return (revstatus.min_rev, revstatus.max_rev, 
             revstatus.switched, revstatus.modified)
index 97dbbe278190dc57a57081387a2f848f0114d92d..38812cfb7a36e793f7a45eded421492b4057ae79 100644 (file)
@@ -51,8 +51,8 @@ from tree import SvnBasisTree
 import os
 import urllib
 
-import svn.core, svn.wc
-from svn.core import SubversionException, Pool, svn_time_to_cstring
+import core. svn.wc
+from core.import SubversionException, Pool, svn_time_to_cstring
 
 from errors import NoCheckoutSupport
 from format import get_rich_root_format
@@ -82,8 +82,8 @@ class SvnWorkingTree(WorkingTree):
         status = wc.revision_status(self.basedir, None, True)
         if status.min_rev != status.max_rev:
             #raise WorkingTreeInconsistent(status.min_rev, status.max_rev)
-            rev = svn.core.svn_opt_revision_t()
-            rev.kind = svn.core.svn_opt_revision_number
+            rev = core.svn_opt_revision_t()
+            rev.kind = core.svn_opt_revision_number
             rev.value.number = status.max_rev
             assert status.max_rev == svn.client.update(self.basedir, rev,
                                      True, self.client_ctx, Pool())
@@ -110,7 +110,7 @@ class SvnWorkingTree(WorkingTree):
         ignores.update(wc.get_default_ignores(svn_config))
 
         def dir_add(wc, prefix, patprefix):
-            ignorestr = wc.prop_get(svn.core.SVN_PROP_IGNORE, 
+            ignorestr = wc.prop_get(core.SVN_PROP_IGNORE, 
                                     self.abspath(prefix).rstrip("/"))
             if ignorestr is not None:
                 for pat in ignorestr.splitlines():
@@ -121,7 +121,7 @@ class SvnWorkingTree(WorkingTree):
                 if entry == "":
                     continue
 
-                if entries[entry].kind != svn.core.svn_node_dir:
+                if entries[entry].kind != core.svn_node_dir:
                     continue
 
                 subprefix = os.path.join(prefix, entry)
@@ -148,8 +148,8 @@ class SvnWorkingTree(WorkingTree):
         raise NotImplementedError(self.apply_inventory_delta)
 
     def update(self, change_reporter=None):
-        rev = svn.core.svn_opt_revision_t()
-        rev.kind = svn.core.svn_opt_revision_head
+        rev = core.svn_opt_revision_t()
+        rev.kind = core.svn_opt_revision_head
         svn.client.update(self.basedir, rev, True, self.client_ctx)
 
     def remove(self, files, verbose=False, to_file=None):
@@ -179,8 +179,8 @@ class SvnWorkingTree(WorkingTree):
     def move(self, from_paths, to_dir=None, after=False, **kwargs):
         # FIXME: Use after argument
         assert after != True
-        revt = svn.core.svn_opt_revision_t()
-        revt.kind = svn.core.svn_opt_revision_working
+        revt = core.svn_opt_revision_t()
+        revt.kind = core.svn_opt_revision_working
         for entry in from_paths:
             try:
                 to_wc = self._get_wc(to_dir, write_lock=True)
@@ -202,8 +202,8 @@ class SvnWorkingTree(WorkingTree):
     def rename_one(self, from_rel, to_rel, after=False):
         # FIXME: Use after
         assert after != True
-        revt = svn.core.svn_opt_revision_t()
-        revt.kind = svn.core.svn_opt_revision_unspecified
+        revt = core.svn_opt_revision_t()
+        revt.kind = core.svn_opt_revision_unspecified
         (to_wc, to_file) = self._get_rel_wc(to_rel, write_lock=True)
         if os.path.dirname(from_rel) == os.path.dirname(to_rel):
             # Prevent lock contention
@@ -333,7 +333,7 @@ class SvnWorkingTree(WorkingTree):
                 entry = entries[name]
                 assert entry
                 
-                if entry.kind == svn.core.svn_node_dir:
+                if entry.kind == core.svn_node_dir:
                     subwc = svn.wc.adm_open3(wc, self.abspath(subrelpath), 
                                              False, 0, None)
                     try:
@@ -458,7 +458,7 @@ class SvnWorkingTree(WorkingTree):
                 commit_info = svn.client.commit3(specific_files, True, False, 
                                                  self.client_ctx)
             except SubversionException, (_, num):
-                if num == svn.core.SVN_ERR_FS_TXN_OUT_OF_DATE:
+                if num == core.SVN_ERR_FS_TXN_OUT_OF_DATE:
                     raise OutOfDateTree(self)
                 raise
         except:
@@ -544,9 +544,9 @@ class SvnWorkingTree(WorkingTree):
                     if ids is not None:
                         self._change_fileid_mapping(ids.next(), f, wc)
                 except SubversionException, (_, num):
-                    if num == svn.core.SVN_ERR_ENTRY_EXISTS:
+                    if num == core.SVN_ERR_ENTRY_EXISTS:
                         continue
-                    elif num == svn.core.SVN_ERR_WC_PATH_NOT_FOUND:
+                    elif num == core.SVN_ERR_WC_PATH_NOT_FOUND:
                         raise NoSuchFile(path=f)
                     raise
             finally:
@@ -570,8 +570,8 @@ class SvnWorkingTree(WorkingTree):
         (result.old_revno, result.old_revid) = self.branch.last_revision_info()
         if stop_revision is None:
             stop_revision = self.branch.last_revision()
-        rev = svn.core.svn_opt_revision_t()
-        rev.kind = svn.core.svn_opt_revision_number
+        rev = core.svn_opt_revision_t()
+        rev.kind = core.svn_opt_revision_number
         rev.value.number = self.branch.lookup_revision_id(stop_revision)
         fetched = svn.client.update(self.basedir, rev, True, self.client_ctx)
         self.base_revid = self.branch.generate_revision_id(fetched)
@@ -798,7 +798,7 @@ class SvnCheckout(BzrDir):
             branch = SvnBranch(self.svn_root_transport.base, repos, 
                                self.remote_bzrdir.branch_path)
         except SubversionException, (_, num):
-            if num == svn.core.SVN_ERR_WC_NOT_DIRECTORY:
+            if num == core.SVN_ERR_WC_NOT_DIRECTORY:
                 raise NotBranchError(path=self.base)
             raise