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