~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_bundle.py

  • Committer: Jelmer Vernooij
  • Date: 2012-02-20 12:19:29 UTC
  • mfrom: (6437.23.11 2.5)
  • mto: (6581.1.1 trunk)
  • mto: This revision was merged to the branch mainline in revision 6582.
  • Revision ID: jelmer@samba.org-20120220121929-7ni2psvjoatm1yp4
Merge bzr/2.5.

Show diffs side-by-side

added added

removed removed

Lines of Context:
16
16
 
17
17
from cStringIO import StringIO
18
18
import os
19
 
import socket
 
19
import SocketServer
20
20
import sys
21
 
import threading
22
21
 
23
22
from bzrlib import (
24
23
    bzrdir,
28
27
    merge,
29
28
    osutils,
30
29
    revision as _mod_revision,
31
 
    symbol_versioning,
32
30
    tests,
33
31
    treebuilder,
34
32
    )
42
40
from bzrlib.bundle.serializer.v4 import BundleSerializerV4
43
41
from bzrlib.repofmt import knitrepo
44
42
from bzrlib.tests import (
 
43
    features,
 
44
    test_commit,
45
45
    test_read_bundle,
46
 
    test_commit,
 
46
    test_server,
47
47
    )
48
48
from bzrlib.transform import TreeTransform
49
 
from bzrlib.tests import (
50
 
    features,
51
 
    )
52
49
 
53
50
 
54
51
def get_text(vf, key):
510
507
                new.unlock()
511
508
                old.unlock()
512
509
        if not _mod_revision.is_null(rev_id):
513
 
            rh = self.b1.revision_history()
514
 
            self.applyDeprecated(symbol_versioning.deprecated_in((2, 4, 0)),
515
 
                tree.branch.set_revision_history, rh[:rh.index(rev_id)+1])
 
510
            tree.branch.generate_revision_history(rev_id)
516
511
            tree.update()
517
512
            delta = tree.changes_from(self.b1.repository.revision_tree(rev_id))
518
513
            self.assertFalse(delta.has_changed(),
654
649
        bundle = self.get_valid_bundle('null:', 'a@cset-0-4')
655
650
 
656
651
        # Modified files
657
 
        open('b1/sub/dir/WithCaps.txt', 'ab').write('\nAdding some text\n')
658
 
        open('b1/sub/dir/ pre space', 'ab').write(
 
652
        with open('b1/sub/dir/WithCaps.txt', 'ab') as f: f.write('\nAdding some text\n')
 
653
        with open('b1/sub/dir/ pre space', 'ab') as f: f.write(
659
654
             '\r\nAdding some\r\nDOS format lines\r\n')
660
 
        open('b1/sub/dir/nolastnewline.txt', 'ab').write('\n')
 
655
        with open('b1/sub/dir/nolastnewline.txt', 'ab') as f: f.write('\n')
661
656
        self.tree1.rename_one('sub/dir/ pre space',
662
657
                              'sub/ start space')
663
658
        self.tree1.commit('Modified files', rev_id='a@cset-0-5')
812
807
        self.tree1 = self.make_branch_and_tree('b1')
813
808
        self.b1 = self.tree1.branch
814
809
 
815
 
        open('b1/one', 'wb').write('one\n')
 
810
        with open('b1/one', 'wb') as f: f.write('one\n')
816
811
        self.tree1.add('one')
817
812
        self.tree1.commit('add file', rev_id='a@cset-0-1')
818
 
        open('b1/one', 'wb').write('two\n')
 
813
        with open('b1/one', 'wb') as f: f.write('two\n')
819
814
        self.tree1.commit('modify', rev_id='a@cset-0-2')
820
 
        open('b1/one', 'wb').write('three\n')
 
815
        with open('b1/one', 'wb') as f: f.write('three\n')
821
816
        self.tree1.commit('modify', rev_id='a@cset-0-3')
822
817
        bundle_file = StringIO()
823
818
        rev_ids = write_bundle(self.tree1.branch.repository, 'a@cset-0-3',
902
897
        bundle = self.get_valid_bundle('null:', 'white-1')
903
898
 
904
899
        # Modified
905
 
        open('b1/trailing space ', 'ab').write('add some text\n')
 
900
        with open('b1/trailing space ', 'ab') as f: f.write('add some text\n')
906
901
        self.tree1.commit('add text', rev_id='white-2')
907
902
 
908
903
        bundle = self.get_valid_bundle('white-1', 'white-2')
1423
1418
            from bzrlib.testament import Testament
1424
1419
            # monkey patch gpg signing mechanism
1425
1420
            bzrlib.gpg.GPGStrategy = bzrlib.gpg.LoopbackGPGStrategy
1426
 
            new_config = test_commit.MustSignConfig(branch)
1427
 
            commit.Commit(config=new_config).commit(message="base",
 
1421
            new_config = test_commit.MustSignConfig()
 
1422
            commit.Commit(config_stack=new_config).commit(message="base",
1428
1423
                                                    allow_pointless=True,
1429
1424
                                                    rev_id='B',
1430
1425
                                                    working_tree=tree_a)
1839
1834
        bundle, then the ConnectionReset error should be propagated.
1840
1835
        """
1841
1836
        # Instantiate a server that will provoke a ConnectionReset
1842
 
        sock_server = _DisconnectingTCPServer()
 
1837
        sock_server = DisconnectingServer()
1843
1838
        self.start_server(sock_server)
1844
1839
        # We don't really care what the url is since the server will close the
1845
1840
        # connection without interpreting it
1847
1842
        self.assertRaises(errors.ConnectionReset, read_mergeable_from_url, url)
1848
1843
 
1849
1844
 
1850
 
class _DisconnectingTCPServer(object):
1851
 
    """A TCP server that immediately closes any connection made to it."""
1852
 
 
1853
 
    def start_server(self):
1854
 
        self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
1855
 
        self.sock.bind(('127.0.0.1', 0))
1856
 
        self.sock.listen(1)
1857
 
        self.port = self.sock.getsockname()[1]
1858
 
        self.thread = threading.Thread(
1859
 
            name='%s (port %d)' % (self.__class__.__name__, self.port),
1860
 
            target=self.accept_and_close)
1861
 
        self.thread.start()
1862
 
 
1863
 
    def accept_and_close(self):
1864
 
        conn, addr = self.sock.accept()
1865
 
        conn.shutdown(socket.SHUT_RDWR)
1866
 
        conn.close()
 
1845
class DisconnectingHandler(SocketServer.BaseRequestHandler):
 
1846
    """A request handler that immediately closes any connection made to it."""
 
1847
 
 
1848
    def handle(self):
 
1849
        self.request.close()
 
1850
 
 
1851
 
 
1852
class DisconnectingServer(test_server.TestingTCPServerInAThread):
 
1853
 
 
1854
    def __init__(self):
 
1855
        super(DisconnectingServer, self).__init__(
 
1856
            ('127.0.0.1', 0),
 
1857
            test_server.TestingTCPServer,
 
1858
            DisconnectingHandler)
1867
1859
 
1868
1860
    def get_url(self):
1869
 
        return 'bzr://127.0.0.1:%d/' % (self.port,)
1870
 
 
1871
 
    def stop_server(self):
1872
 
        try:
1873
 
            # make sure the thread dies by connecting to the listening socket,
1874
 
            # just in case the test failed to do so.
1875
 
            conn = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
1876
 
            conn.connect(self.sock.getsockname())
1877
 
            conn.close()
1878
 
        except socket.error:
1879
 
            pass
1880
 
        self.sock.close()
1881
 
        self.thread.join()
 
1861
        """Return the url of the server"""
 
1862
        return "bzr://%s:%d/" % self.server.server_address