"""Checkouts and working trees (working copies)."""
import bzrlib
+from bzrlib import urlutils
from bzrlib.branch import PullResult
from bzrlib.bzrdir import BzrDirFormat, BzrDir
from bzrlib.errors import (InvalidRevisionId, NotBranchError, NoSuchFile,
- NoRepositoryPresent, BzrError)
+ NoRepositoryPresent, BzrError, UninitializableFormat)
from bzrlib.inventory import Inventory, InventoryFile, InventoryLink
from bzrlib.lockable_files import TransportLock, LockableFiles
from bzrlib.lockdir import LockDir
from branch import SvnBranch
from convert import SvnConverter
-from errors import LocalCommitsUnsupported
+from errors import LocalCommitsUnsupported, NoSvnRepositoryPresent
+from remote import SvnRemoteAccess
from repository import (SvnRepository, SVN_PROP_BZR_ANCESTRY,
SVN_PROP_SVK_MERGE, SVN_PROP_BZR_FILEIDS,
SVN_PROP_BZR_REVISION_ID, SVN_PROP_BZR_REVISION_INFO,
_create_auth_baton)
from tree import SvnBasisTree
-from copy import copy
import os
import urllib
def apply_inventory_delta(self, changes):
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
+ svn.client.update(self.basedir, rev, True, self.client_ctx)
+
def remove(self, files, verbose=False, to_file=None):
# FIXME: Use to_file argument
# FIXME: Use verbose argument
svn.wc.delete2(self.abspath(entry), from_wc, None, None, None)
finally:
svn.wc.adm_close(from_wc)
- new_name = "%s/%s" % (to_dir, os.path.basename(entry))
+ new_name = urlutils.join(to_dir, os.path.basename(entry))
self._change_fileid_mapping(self.inventory.path2id(entry), new_name)
self._change_fileid_mapping(None, entry)
def commit(self, message=None, message_callback=None, revprops=None,
timestamp=None, timezone=None, committer=None, rev_id=None,
allow_pointless=True, strict=False, verbose=False, local=False,
- reporter=None, config=None, specific_files=None):
+ reporter=None, config=None, specific_files=None, author=None):
+ if author is not None:
+ revprops['author'] = author
# FIXME: Use allow_pointless
# FIXME: Use verbose
# FIXME: Use reporter
rev.kind = svn.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.repository.generate_revision_id(
- fetched, self.branch.get_branch_path(fetched))
- result.new_revid = self.branch.generate_revision_id(fetched)
+ self.base_revid = self.branch.generate_revision_id(fetched)
+ result.new_revid = self.base_revid
result.new_revno = self.branch.revision_id_to_revno(result.new_revid)
return result
finally:
svn.wc.adm_close(wc)
- self.remote_transport = SvnRaTransport(svn_url)
- self.svn_root_transport = SvnRaTransport(
- self.remote_transport.get_repos_root())
+ remote_transport = SvnRaTransport(svn_url)
+ self.remote_bzrdir = SvnRemoteAccess(remote_transport)
+ self.svn_root_transport = remote_transport.clone_root()
self.root_transport = self.transport = transport
-
- self.branch_path = svn_url[len(bzr_to_svn_url(self.svn_root_transport.base)):]
def clone(self, path, revision_id=None, force_new_repo=False):
raise NotImplementedError(self.clone)
raise NoRepositoryPresent(self)
def find_repository(self):
- return SvnRepository(self, self.svn_root_transport, self.branch_path)
+ return SvnRepository(self, self.svn_root_transport, self.remote_bzrdir.branch_path)
+
+ def needs_format_conversion(self, format=None):
+ if format is None:
+ format = BzrDirFormat.get_default_format()
+ return not isinstance(self._format, format.__class__)
def create_workingtree(self, revision_id=None):
"""See BzrDir.create_workingtree().
repos = self.find_repository()
try:
- branch = SvnBranch(self.root_transport.base, repos,
- self.branch_path)
+ 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:
raise NotBranchError(path=self.base)
raise
+
+ branch.bzrdir = self.remote_bzrdir
- branch.bzrdir = self
return branch
-class SvnWorkingTreeDirFormat(BzrDirFormat):
- """Working Tree implementation that uses Subversion working copies."""
- _lock_class = TransportLock
-
- @classmethod
- def probe_transport(klass, transport):
- format = klass()
-
- if isinstance(transport, LocalTransport) and \
- transport.has(svn.wc.get_adm_dir()):
- return format
- raise NotBranchError(path=transport.base)
-
- def _open(self, transport):
- subr_version = svn.core.svn_subr_version()
- if subr_version.major == 1 and subr_version.minor < 4:
- raise NoCheckoutSupport()
- return SvnCheckout(transport, self)
-
- def get_format_string(self):
- return 'Subversion Local Checkout'
-
- def get_format_description(self):
- return 'Subversion Local Checkout'
-
- def initialize_on_transport(self, transport):
- raise NotImplementedError(self.initialize_on_transport)
-
- def get_converter(self, format=None):
- """See BzrDirFormat.get_converter()."""
- if format is None:
- format = get_rich_root_format()
- return SvnConverter(format)