Rev 1241: Change API to be more similar to cext branch. in http://people.samba.org/bzr/jelmer/bzr-svn/0.4/

Jelmer Vernooij jelmer at samba.org
Wed Jun 18 12:58:26 BST 2008


At http://people.samba.org/bzr/jelmer/bzr-svn/0.4/

------------------------------------------------------------
revno: 1241
revision-id: jelmer at samba.org-20080618115824-vzo020t2d83ik66x
parent: jelmer at samba.org-20080617225233-2b79ggobt2sc0qet
committer: Jelmer Vernooij <jelmer at samba.org>
branch nick: 0.4
timestamp: Wed 2008-06-18 13:58:24 +0200
message:
  Change API to be more similar to cext branch.
modified:
  auth.py                        auth.py-20071209174622-w8d42k6nm5yhxvi8-1
  commit.py                      commit.py-20060607190346-qvq128wgfubhhgm2-1
  fetch.py                       fetch.py-20060625004942-x2lfaib8ra707a8p-1
  ra.py                          ra.py-20080615005305-t5221niknu8rm6bt-1
  tree.py                        tree.py-20060624222557-dudlwqcmkf22lt2s-1
  workingtree.py                 workingtree.py-20060306120941-b083cb0fdd4a69de
=== modified file 'auth.py'
--- a/auth.py	2008-06-15 02:48:51 +0000
+++ b/auth.py	2008-06-18 11:58:24 +0000
@@ -18,24 +18,9 @@
 from bzrlib.config import AuthenticationConfig
 from bzrlib.ui import ui_factory
 
-from bzrlib.plugins.svn.ra import (get_username_prompt_provider, 
-                                   get_simple_prompt_provider,
-                                   get_ssl_server_trust_prompt_provider,
-                                   get_ssl_client_cert_pw_prompt_provider,
-                                   get_simple_provider,
-                                   get_username_provider,
-                                   get_ssl_client_cert_file_provider,
-                                   get_ssl_client_cert_pw_file_provider,
-                                   get_ssl_server_trust_file_provider,
-                                   Auth
-                                   )
+from bzrlib.plugins.svn import ra
 
 import svn.core
-from svn.core import (svn_auth_cred_username_t, 
-                      svn_auth_cred_simple_t,
-                      svn_auth_cred_ssl_client_cert_t,
-                      svn_auth_cred_ssl_client_cert_pw_t,
-                      svn_auth_cred_ssl_server_trust_t)
 import urlparse
 import urllib
 
@@ -59,41 +44,31 @@
         self.port = port
         self.path = path
        
-    def get_svn_username(self, realm, may_save, pool=None):
+    def get_svn_username(self, realm, may_save):
         """Look up a Subversion user name in the Bazaar authentication cache.
 
         :param realm: Authentication realm (optional)
         :param may_save: Whether or not the username should be saved.
-        :param pool: Allocation pool, is ignored.
-        :param default: Assumed username
         """
-        username_cred = svn_auth_cred_username_t()
-        username_cred.username = self.get_user(self.scheme, 
-                host=self.host, path=self.path, 
-                realm=realm)
-        username_cred.may_save = False
-        return username_cred
+        username = self.get_user(self.scheme, host=self.host, path=self.path, realm=realm)
+        return (username, False)
 
-    def get_svn_simple(self, realm, username, may_save, pool):
+    def get_svn_simple(self, realm, username, may_save):
         """Look up a Subversion user name+password combination in the Bazaar 
         authentication cache.
 
         :param realm: Authentication realm (optional)
         :param username: Username, if it is already known, or None.
         :param may_save: Whether or not the username should be saved.
-        :param pool: Allocation pool, is ignored.
         """
-        simple_cred = svn_auth_cred_simple_t()
-        simple_cred.username = self.get_user(self.scheme, 
+        username = self.get_user(self.scheme, 
                 host=self.host, path=self.path, realm=realm) or username
-        simple_cred.password = self.get_password(self.scheme, host=self.host, 
+        password = self.get_password(self.scheme, host=self.host, 
             path=self.path, user=simple_cred.username, 
             realm=realm, prompt="%s %s password" % (realm, simple_cred.username))
-        simple_cred.may_save = False
-        return simple_cred
+        return (username, password, False)
 
-    def get_svn_ssl_server_trust(self, realm, failures, cert_info, may_save, 
-                                     pool):
+    def get_svn_ssl_server_trust(self, realm, failures, cert_info, may_save):
         """Return a Subversion auth provider that verifies SSL server trust.
 
         :param realm: Realm name (optional)
@@ -101,21 +76,19 @@
         :param cert_info: Certificate information
         :param may_save: Whether this information may be stored.
         """
-        ssl_server_trust = svn_auth_cred_ssl_server_trust_t()
         credentials = self.get_credentials(self.scheme, host=self.host)
         if (credentials is not None and 
             credentials.has_key("verify_certificates") and 
             credentials["verify_certificates"] == False):
-            ssl_server_trust.accepted_failures = (
+            accepted_failures = (
                     SSL_NOTYETVALID + 
                     SSL_EXPIRED +
                     SSL_CNMISMATCH +
                     SSL_UNKNOWNCA +
                     SSL_OTHER)
         else:
-            ssl_server_trust.accepted_failures = 0
-        ssl_server_trust.may_save = False
-        return ssl_server_trust
+            accepted_failures = 0
+        return (accepted_failures, False)
 
     def get_svn_username_prompt_provider(self, retries):
         """Return a Subversion auth provider for retrieving the username, as 
@@ -123,7 +96,7 @@
         
         :param retries: Number of allowed retries.
         """
-        return get_username_prompt_provider(self.get_svn_username, 
+        return ra.get_username_prompt_provider(self.get_svn_username, 
                                                      retries)
 
     def get_svn_simple_prompt_provider(self, retries):
@@ -132,12 +105,12 @@
         
         :param retries: Number of allowed retries.
         """
-        return get_simple_prompt_provider(self.get_svn_simple, retries)
+        return ra.get_simple_prompt_provider(self.get_svn_simple, retries)
 
     def get_svn_ssl_server_trust_prompt_provider(self):
         """Return a Subversion auth provider for checking 
         whether a SSL server is trusted."""
-        return get_ssl_server_trust_prompt_provider(self.get_svn_ssl_server_trust)
+        return ra.get_ssl_server_trust_prompt_provider(self.get_svn_ssl_server_trust)
 
     def get_svn_auth_providers(self):
         """Return a list of auth providers for this authentication file.
@@ -146,40 +119,38 @@
                 self.get_svn_simple_prompt_provider(1),
                 self.get_svn_ssl_server_trust_prompt_provider()]
 
-def get_ssl_client_cert_pw(realm, may_save, pool):
+def get_ssl_client_cert_pw(realm, may_save):
     """Simple SSL client certificate password prompter.
 
     :param realm: Realm, optional.
     :param may_save: Whether the password can be cached.
     """
-    ssl_cred_pw = svn_auth_cred_ssl_client_cert_pw_t()
-    ssl_cred_pw.password = ui_factory.get_password(
+    password = ui_factory.get_password(
             "Please enter password for client certificate[realm=%s]" % realm)
-    ssl_cred_pw.may_save = False
-    return ssl_cred_pw
+    return (password, False)
 
 
 def get_ssl_client_cert_pw_provider(tries):
-    return get_ssl_client_cert_pw_prompt_provider(
+    return ra.get_ssl_client_cert_pw_prompt_provider(
                 get_ssl_client_cert_pw, tries)
 
 
 def get_stock_svn_providers():
-    providers = [get_simple_provider(),
-            get_username_provider(),
-            get_ssl_client_cert_file_provider(),
-            get_ssl_client_cert_pw_file_provider(),
-            get_ssl_server_trust_file_provider(),
+    providers = [ra.get_simple_provider(),
+            ra.get_username_provider(),
+            ra.get_ssl_client_cert_file_provider(),
+            ra.get_ssl_client_cert_pw_file_provider(),
+            ra.get_ssl_server_trust_file_provider(),
             ]
 
-    if hasattr(svn.client, 'get_windows_simple_provider'):
-        providers.append(svn.client.get_windows_simple_provider())
-
-    if hasattr(svn.client, 'get_keychain_simple_provider'):
-        providers.append(svn.client.get_keychain_simple_provider())
-
-    if hasattr(svn.client, 'get_windows_ssl_server_trust_provider'):
-        providers.append(svn.client.get_windows_ssl_server_trust_provider())
+    if hasattr(ra, 'get_windows_simple_provider'):
+        providers.append(ra.get_windows_simple_provider())
+
+    if hasattr(ra, 'get_keychain_simple_provider'):
+        providers.append(ra.get_keychain_simple_provider())
+
+    if hasattr(ra, 'get_windows_ssl_server_trust_provider'):
+        providers.append(ra.get_windows_ssl_server_trust_provider())
 
     return providers
 
@@ -201,7 +172,7 @@
         providers += auth_config.get_svn_auth_providers()
         providers += [get_ssl_client_cert_pw_provider(1)]
 
-    auth_baton = Auth(providers)
+    auth_baton = ra.Auth(providers)
     if creds is not None:
         (user, password) = urllib.splitpasswd(creds)
         if user is not None:

=== modified file 'commit.py'
--- a/commit.py	2008-06-17 22:26:00 +0000
+++ b/commit.py	2008-06-18 11:58:24 +0000
@@ -298,7 +298,7 @@
                     self.modified_files[child_ie.file_id], child_editor)
 
             if child_editor is not None:
-                child_editor.close(None)
+                child_editor.close()
 
         # Loop over subdirectories of file_id in self.new_inventory
         for child_name in self.new_inventory[file_id].children:

=== modified file 'fetch.py'
--- a/fetch.py	2008-06-17 22:52:33 +0000
+++ b/fetch.py	2008-06-18 11:58:24 +0000
@@ -25,8 +25,6 @@
 from cStringIO import StringIO
 import md5
 
-import svn.delta
-
 from bzrlib.plugins.svn import properties
 from bzrlib.plugins.svn.delta import apply_txdelta_handler
 from bzrlib.plugins.svn.errors import InvalidFileName
@@ -42,6 +40,7 @@
 from bzrlib.plugins.svn.tree import (parse_externals_description, 
                   inventory_add_external)
 
+import svn.delta
 
 def _escape_commit_message(message):
     """Replace xml-incompatible control characters."""
@@ -86,7 +85,7 @@
         raise InvalidFileName(path)
 
 
-class RevisionBuildEditor(svn.delta.Editor):
+class RevisionBuildEditor:
     """Implementation of the Subversion commit editor interface that builds a 
     Bazaar revision.
     """
@@ -95,6 +94,9 @@
         self.source = source
         self.transact = target.get_transaction()
 
+    def set_target_revision(self, revnum):
+        assert self.revnum == revnum
+
     def start_revision(self, revid, prev_inventory, revmeta):
         self.revid = revid
         (self.branch_path, self.revnum, self.mapping) = self.source.lookup_revision_id(revid)

=== modified file 'ra.py'
--- a/ra.py	2008-06-17 22:52:33 +0000
+++ b/ra.py	2008-06-18 11:58:24 +0000
@@ -24,15 +24,46 @@
 
 import bzrlib.plugins.svn.errors as svn_errors
 
-get_username_prompt_provider = svn.core.svn_auth_get_username_prompt_provider
-get_simple_prompt_provider = svn.core.svn_auth_get_simple_prompt_provider
-get_ssl_client_cert_pw_prompt_provider = svn.core.svn_auth_get_ssl_client_cert_pw_prompt_provider
-get_ssl_server_trust_prompt_provider = svn.core.svn_auth_get_ssl_server_trust_prompt_provider
+def get_username_prompt_provider(fn, retries):
+    def wrap_fn(realm, may_save, pool):
+        username_cred = svn.core.svn_auth_cred_username_t()
+        (username_cred.username, username_cred.may_save) = fn(realm, may_save)
+        return username_cred
+    return svn.core.svn_auth_get_username_prompt_provider(wrap_fn, retries)
+
+def get_simple_prompt_provider(fn, retries):
+    def wrap_fn(realm, username, may_save, pool):
+        simple_cred = svn.core.svn_auth_cred_simple_t()
+        (simple_cred.username, simple_cred.password, simple_cred.may_save) = \
+                fn(realm, username, may_save)
+        return simple_cred
+    return svn.core.svn_auth_get_simple_prompt_provider(wrap_fn, retries)
+
+def get_ssl_server_trust_prompt_provider(fn):
+    def wrap_fn(realm, failures, cert_info, may_save, pool):
+        ssl_server_trust = svn.core.svn_auth_cred_ssl_server_trust_t()
+        (ssl_server_trust.accepted_failures, ssl_server_trust.may_save) = fn(realm, failures, cert_info, may_save)
+        return ssl_server_trust
+    return svn.core.svn_auth_get_ssl_server_trust_prompt_provider(wrap_fn)
+
+def get_ssl_client_cert_pw_prompt_provider(fn, retries):
+    def wrap_fn(realm, may_save, pool):
+        ssl_cred_pw = svn.core.svn_auth_cred_ssl_client_cert_pw_t()
+        (ssl_cred_pw.password, ssl_cred_pw.may_save) = fn(realm, may_save)
+        return ssl_cred_pw
+    return svn.core.svn_auth_get_ssl_client_cert_pw_prompt_provider(wrap_fn, retries)
+
 get_simple_provider = svn.client.get_simple_provider
 get_username_provider = svn.client.get_username_provider
 get_ssl_client_cert_file_provider = svn.client.get_ssl_client_cert_file_provider
 get_ssl_client_cert_pw_file_provider = svn.client.get_ssl_client_cert_pw_file_provider
 get_ssl_server_trust_file_provider = svn.client.get_ssl_server_trust_file_provider
+if hasattr(svn.client, 'get_windows_simple_provider'):
+    get_windows_simple_provider = svn.client.get_windows_simple_provider
+if hasattr(svn.client, 'get_keychain_simple_provider'):
+    get_keychain_simple_provider = svn.client.get_keychain_simple_provider
+if hasattr(svn.client, 'get_windows_ssl_server_trust_provider'):
+    get_windows_ssl_server_trust_provider = svn.client.get_windows_ssl_server_trust_provider
 
 txdelta_send_stream = svn.delta.svn_txdelta_send_stream
 
@@ -114,6 +145,9 @@
         self.recent_baton = []
         self._connection = connection
 
+    def set_target_revision(self, revnum):
+        svn.delta.editor_invoke_set_target_revision(self.editor, self.editor_baton, revnum)        
+
     def open_root(self, base_revnum=-1):
         assert self.recent_baton == [], "root already opened"
         baton = svn.delta.editor_invoke_open_root(self.editor, 
@@ -165,6 +199,59 @@
     return client
 
 
+class WrappedEditor:
+    def __init__(self, actual):
+        self.actual = actual
+
+    def set_target_revision(self, revision):
+        if getattr(self.actual, "set_target_revision", None) is not None:
+            self.actual.set_target_revision(revision)
+
+    def open_root(self, base_revision):
+        if getattr(self.actual, "open_root", None) is not None:
+            return self.actual.open_root(base_revision)
+        return None
+
+    def add_directory(self, path, baton, copyfrom_path, copyfrom_rev):
+        if baton is not None and getattr(baton, "add_directory", None) is not None:
+            return baton.add_directory(path, copyfrom_path, copyfrom_rev)
+        return None
+
+    def open_directory(self, path, baton, base_rev):
+        if baton is not None and getattr(baton, "open_directory", None) is not None:
+            return baton.open_directory(path, base_rev)
+        return None
+
+    def close_directory(self, baton):
+        if baton is not None and getattr(baton, "close", None) is not None:
+            return baton.close()
+
+    def change_file_prop(self, baton, name, value):
+        if baton is not None and getattr(baton, "change_prop", None) is not None:
+            return baton.change_prop(name, value)
+
+    def change_dir_prop(self, baton, name, value):
+        if baton is not None and getattr(baton, "change_prop", None) is not None:
+            return baton.change_prop(name, value)
+
+    def apply_textdelta(self, baton, checksum):
+        if baton is not None and getattr(baton, "apply_textdelta", None) is not None:
+            return baton.apply_textdelta(checksum)
+
+    def close_file(self, baton, checksum):
+        if baton is not None and getattr(baton, "close", None) is not None:
+            return baton.close(checksum)
+
+    def open_file(self, path, baton, base_rev):
+        if baton is not None and getattr(self.actual, "open_file", None) is not None:
+            return baton.open_file(path, base_rev)
+        return None
+
+    def close_edit(self):
+        if getattr(self.actual, "close_edit", None) is not None:
+            self.actual.close_edit()
+
+
 class RemoteAccess(object):
     """An single connection to a Subversion repository. This usually can 
     only do one operation at a time."""
@@ -338,10 +425,6 @@
         return svn.ra.rev_proplist(self._ra, revnum, None)
 
     def get_commit_editor(self, revprops, done_cb=None, lock_token=None, keep_locks=False):
-        def dummy_done(meta, pool):
-            pass
-        if done_cb is None:
-            done_cb = dummy_done
         self._mark_busy()
         try:
             if hasattr(svn.ra, 'get_commit_editor3'):

=== modified file 'tree.py'
--- a/tree.py	2008-06-17 22:52:33 +0000
+++ b/tree.py	2008-06-18 11:58:24 +0000
@@ -184,7 +184,7 @@
         self.is_executable = False
         return path
 
-    def close_dir(self, id):
+    def close_directory(self, id):
         pass
 
     def close_file(self, path, checksum):

=== modified file 'workingtree.py'
--- a/workingtree.py	2008-06-17 22:52:33 +0000
+++ b/workingtree.py	2008-06-18 11:58:24 +0000
@@ -72,7 +72,7 @@
 class SvnWorkingTree(WorkingTree):
     """WorkingTree implementation that uses a Subversion Working Copy for storage."""
     def __init__(self, bzrdir, local_path, branch):
-        version = wc.check_wc(local_path)
+        version = svn.wc.check_wc(local_path)
         self._format = SvnWorkingTreeFormat(version)
         self.basedir = local_path
         assert isinstance(self.basedir, unicode)




More information about the bazaar-commits mailing list