/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to bzrlib/tests/blackbox/test_push.py

1st cut merge of bzr.dev r3907

Show diffs side-by-side

added added

removed removed

Lines of Context:
22
22
 
23
23
from bzrlib import (
24
24
    errors,
 
25
    transport,
25
26
    urlutils,
26
27
    )
27
28
from bzrlib.branch import Branch
30
31
from bzrlib.repofmt.knitrepo import RepositoryFormatKnit1
31
32
from bzrlib.tests.blackbox import ExternalBase
32
33
from bzrlib.tests.http_server import HttpServer
33
 
from bzrlib.transport import register_transport, unregister_transport
34
34
from bzrlib.transport.memory import MemoryServer, MemoryTransport
35
35
from bzrlib.uncommit import uncommit
36
36
from bzrlib.urlutils import local_path_from_url
87
87
        out, err = self.run_bzr('push')
88
88
        path = branch_a.get_push_location()
89
89
        self.assertEquals(out,
90
 
                          'Using saved location: %s\n' 
 
90
                          'Using saved push location: %s\n' 
91
91
                          'Pushed up to revision 2.\n'
92
92
                          % local_path_from_url(path))
93
93
        self.assertEqual(err,
343
343
        self.assertFalse(self.get_transport('published').has('.'))
344
344
 
345
345
    def test_push_notifies_default_stacking(self):
346
 
        self.make_branch('stack_on', format='development1')
 
346
        self.make_branch('stack_on', format='1.6')
347
347
        self.make_bzrdir('.').get_config().set_default_stack_on('stack_on')
348
 
        self.make_branch('from', format='development1')
 
348
        self.make_branch('from', format='1.6')
349
349
        out, err = self.run_bzr('push -d from to')
350
350
        self.assertContainsRe(err,
351
351
                              'Using default stacking branch stack_on at .*')
353
353
 
354
354
class RedirectingMemoryTransport(MemoryTransport):
355
355
 
356
 
    def mkdir(self, path, mode=None):
357
 
        path = self.abspath(path)[len(self._scheme):]
358
 
        if path == '/source':
359
 
            raise errors.RedirectRequested(
360
 
                path, self._scheme + '/target', is_permanent=True)
361
 
        elif path == '/infinite-loop':
362
 
            raise errors.RedirectRequested(
363
 
                path, self._scheme + '/infinite-loop', is_permanent=True)
 
356
    def mkdir(self, relpath, mode=None):
 
357
        from bzrlib.trace import mutter
 
358
        mutter('cwd: %r, rel: %r, abs: %r' % (self._cwd, relpath, abspath))
 
359
        if self._cwd == '/source/':
 
360
            raise errors.RedirectRequested(self.abspath(relpath),
 
361
                                           self.abspath('../target'),
 
362
                                           is_permanent=True)
 
363
        elif self._cwd == '/infinite-loop/':
 
364
            raise errors.RedirectRequested(self.abspath(relpath),
 
365
                                           self.abspath('../infinite-loop'),
 
366
                                           is_permanent=True)
364
367
        else:
365
368
            return super(RedirectingMemoryTransport, self).mkdir(
366
 
                path, mode)
 
369
                relpath, mode)
 
370
 
 
371
    def _redirected_to(self, source, target):
 
372
        # We do accept redirections
 
373
        return transport.get_transport(target)
367
374
 
368
375
 
369
376
class RedirectingMemoryServer(MemoryServer):
373
380
        self._files = {}
374
381
        self._locks = {}
375
382
        self._scheme = 'redirecting-memory+%s:///' % id(self)
376
 
        register_transport(self._scheme, self._memory_factory)
 
383
        transport.register_transport(self._scheme, self._memory_factory)
377
384
 
378
385
    def _memory_factory(self, url):
379
386
        result = RedirectingMemoryTransport(url)
383
390
        return result
384
391
 
385
392
    def tearDown(self):
386
 
        unregister_transport(self._scheme, self._memory_factory)
 
393
        transport.unregister_transport(self._scheme, self._memory_factory)
387
394
 
388
395
 
389
396
class TestPushRedirect(ExternalBase):
406
413
        This is added primarily to handle lp:/ URI support, so that users can
407
414
        push to new branches by specifying lp:/ URIs.
408
415
        """
409
 
        os.chdir('tree')
410
416
        destination_url = self.memory_server.get_url() + 'source'
411
 
        self.run_bzr('push %s' % destination_url)
412
 
        os.chdir('..')
 
417
        self.run_bzr(['push', '-d', 'tree', destination_url])
413
418
 
414
419
        local_revision = Branch.open('tree').last_revision()
415
420
        remote_revision = Branch.open(
420
425
        """Push fails gracefully if the mkdir generates a large number of
421
426
        redirects.
422
427
        """
423
 
        os.chdir('tree')
424
428
        destination_url = self.memory_server.get_url() + 'infinite-loop'
425
429
        out, err = self.run_bzr_error(
426
430
            ['Too many redirections trying to make %s\\.\n'
427
431
             % re.escape(destination_url)],
428
 
            'push %s' % destination_url, retcode=3)
429
 
        os.chdir('..')
 
432
            ['push', '-d', 'tree', destination_url], retcode=3)
430
433
        self.assertEqual('', out)