def test_switch_branches(self): # switch_branches moves a branch to the new location and places a # branch (with no revisions) stacked on the new branch in the old # location. chroot_server = ChrootServer(self.get_transport()) chroot_server.start_server() self.addCleanup(chroot_server.stop_server) scheme = chroot_server.get_url().rstrip('/:') old_branch = FakeBranch(1) self.get_transport(old_branch.unique_name).create_prefix() tree = self.make_branch_and_tree(old_branch.unique_name) # XXX: AaronBentley 2010-08-06 bug=614404: a bzr username is # required to generate the revision-id. with override_environ(BZR_EMAIL='*****@*****.**'): tree.commit(message='.') new_branch = FakeBranch(2) switch_branches('.', scheme, old_branch, new_branch) # Post conditions: # 1. unstacked branch in new_branch's location # 2. stacked branch with no revisions in repo at old_branch # 3. last_revision() the same for two branches old_location_bzrdir = BzrDir.open( str(URI(scheme=scheme, host='', path='/' + old_branch.unique_name))) new_location_bzrdir = BzrDir.open( str(URI(scheme=scheme, host='', path='/' + new_branch.unique_name))) old_location_branch = old_location_bzrdir.open_branch() new_location_branch = new_location_bzrdir.open_branch() # 1. unstacked branch in new_branch's location self.assertRaises(NotStacked, new_location_branch.get_stacked_on_url) # 2. stacked branch with no revisions in repo at old_branch self.assertEqual('/' + new_branch.unique_name, old_location_branch.get_stacked_on_url()) self.assertEqual( [], old_location_bzrdir.open_repository().all_revision_ids()) # 3. last_revision() the same for two branches self.assertEqual(old_location_branch.last_revision(), new_location_branch.last_revision())
def test_switch_branches(self): # switch_branches moves a branch to the new location and places a # branch (with no revisions) stacked on the new branch in the old # location. chroot_server = ChrootServer(self.get_transport()) chroot_server.start_server() self.addCleanup(chroot_server.stop_server) scheme = chroot_server.get_url().rstrip("/:") old_branch = FakeBranch(1) self.get_transport(old_branch.unique_name).create_prefix() tree = self.make_branch_and_tree(old_branch.unique_name) # XXX: AaronBentley 2010-08-06 bug=614404: a bzr username is # required to generate the revision-id. with override_environ(BZR_EMAIL="*****@*****.**"): tree.commit(message=".") new_branch = FakeBranch(2) switch_branches(".", scheme, old_branch, new_branch) # Post conditions: # 1. unstacked branch in new_branch's location # 2. stacked branch with no revisions in repo at old_branch # 3. last_revision() the same for two branches old_location_bzrdir = BzrDir.open(str(URI(scheme=scheme, host="", path="/" + old_branch.unique_name))) new_location_bzrdir = BzrDir.open(str(URI(scheme=scheme, host="", path="/" + new_branch.unique_name))) old_location_branch = old_location_bzrdir.open_branch() new_location_branch = new_location_bzrdir.open_branch() # 1. unstacked branch in new_branch's location self.assertRaises(NotStacked, new_location_branch.get_stacked_on_url) # 2. stacked branch with no revisions in repo at old_branch self.assertEqual("/" + new_branch.unique_name, old_location_branch.get_stacked_on_url()) self.assertEqual([], old_location_bzrdir.open_repository().all_revision_ids()) # 3. last_revision() the same for two branches self.assertEqual(old_location_branch.last_revision(), new_location_branch.last_revision())
class SmartTCPServer_for_testing(TestingTCPServerInAThread): """Server suitable for use by transport tests. This server is backed by the process's cwd. """ def __init__(self, thread_name_suffix=''): self.client_path_extra = None self.thread_name_suffix = thread_name_suffix self.host = '127.0.0.1' self.port = 0 super(SmartTCPServer_for_testing, self).__init__( (self.host, self.port), TestingSmartServer, TestingSmartConnectionHandler) def create_server(self): return self.server_class((self.host, self.port), self.request_handler_class, self.backing_transport, self.root_client_path) def start_server(self, backing_transport_server=None, client_path_extra='/extra/'): """Set up server for testing. :param backing_transport_server: backing server to use. If not specified, a LocalURLServer at the current working directory will be used. :param client_path_extra: a path segment starting with '/' to append to the root URL for this server. For instance, a value of '/foo/bar/' will mean the root of the backing transport will be published at a URL like `bzr://127.0.0.1:nnnn/foo/bar/`, rather than `bzr://127.0.0.1:nnnn/`. Default value is `extra`, so that tests by default will fail unless they do the necessary path translation. """ if not client_path_extra.startswith('/'): raise ValueError(client_path_extra) self.root_client_path = self.client_path_extra = client_path_extra from bzrlib.transport.chroot import ChrootServer if backing_transport_server is None: backing_transport_server = LocalURLServer() self.chroot_server = ChrootServer( self.get_backing_transport(backing_transport_server)) self.chroot_server.start_server() self.backing_transport = transport.get_transport_from_url( self.chroot_server.get_url()) super(SmartTCPServer_for_testing, self).start_server() def stop_server(self): try: super(SmartTCPServer_for_testing, self).stop_server() finally: self.chroot_server.stop_server() def get_backing_transport(self, backing_transport_server): """Get a backing transport from a server we are decorating.""" return transport.get_transport_from_url( backing_transport_server.get_url()) def get_url(self): url = self.server.get_url() return url[:-1] + self.client_path_extra def get_bogus_url(self): """Return a URL which will fail to connect""" return 'bzr://127.0.0.1:1/'