~jelmer/bzr-svn/merge-fetch

« back to all changes in this revision

Viewing changes to remote.py

  • Committer: Jelmer Vernooij
  • Date: 2011-03-23 20:45:55 UTC
  • mfrom: (3648.1.5 sprout)
  • Revision ID: jelmer@samba.org-20110323204555-6dyaegd2txkw31hh
Merge fix for compatibility with bzr 2.4.

Show diffs side-by-side

added added

removed removed

Lines of Context:
40
40
    )
41
41
from bzrlib.transport import (
42
42
    do_catching_redirections,
 
43
    get_transport,
43
44
    )
44
45
 
45
46
 
202
203
        """
203
204
        raise NotImplementedError(SvnRemoteAccess.clone)
204
205
 
205
 
    def sprout(self, *args, **kwargs):
 
206
    def sprout(self, url, revision_id=None, force_new_repo=False,
 
207
               recurse='down', possible_transports=None,
 
208
               accelerator_tree=None, hardlink=False, stacked=False,
 
209
               source_branch=None, create_tree_if_local=True):
 
210
        from bzrlib.repository import InterRepository
 
211
        from bzrlib.transport.local import LocalTransport
206
212
        if self.branch_path == "":
207
213
            guessed_layout = self.find_repository().get_guessed_layout()
208
214
            if guessed_layout is not None and not guessed_layout.is_branch(""):
209
215
                trace.warning('Cloning Subversion repository as branch. '
210
216
                        'To import the individual branches in the repository, '
211
217
                        'use "bzr svn-import".')
212
 
        return super(SvnRemoteAccess, self).sprout(*args, **kwargs)
 
218
        target_transport = get_transport(url, possible_transports)
 
219
        target_transport.ensure_base()
 
220
        cloning_format = self.cloning_metadir()
 
221
        # Create/update the result branch
 
222
        result = cloning_format.initialize_on_transport(target_transport)
 
223
        source_branch = self.open_branch()
 
224
        source_repository = self.find_repository()
 
225
        try:
 
226
            result_repo = result.find_repository()
 
227
        except errors.NoRepositoryPresent:
 
228
            result_repo = result.create_repository()
 
229
            target_is_empty = True
 
230
        else:
 
231
            target_is_empty = None # Unknown
 
232
        if stacked:
 
233
            raise errors.IncompatibleRepositories(source_repository, result_repo)
 
234
        interrepo = InterRepository.get(source_repository, result_repo)
 
235
        interrepo.fetch(revision_id=revision_id,
 
236
            project=source_branch.project, mapping=source_branch.mapping)
 
237
        result_branch = source_branch.sprout(result,
 
238
            revision_id=revision_id, repository=result_repo)
 
239
        if (create_tree_if_local and isinstance(target_transport, LocalTransport)
 
240
            and (result_repo is None or result_repo.make_working_trees())):
 
241
            result.create_workingtree(accelerator_tree=accelerator_tree,
 
242
                hardlink=hardlink, from_branch=result_branch)
 
243
        return result
213
244
 
214
245
    def is_control_filename(self, path):
215
246
        # Bare, so anything is a control file