~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

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

Merge trunk

Show diffs side-by-side

added added

removed removed

Lines of Context:
22
22
from bzrlib import branch, bzrdir
23
23
from bzrlib.repofmt.knitrepo import RepositoryFormatKnit1
24
24
from bzrlib.tests.blackbox import ExternalBase
 
25
from bzrlib.tests import HardlinkFeature
 
26
from bzrlib.tests.test_sftp_transport import TestCaseWithSFTPServer
25
27
from bzrlib.workingtree import WorkingTree
26
28
 
27
29
 
28
30
class TestBranch(ExternalBase):
29
31
 
30
 
    def example_branch(test):
31
 
        test.runbzr('init')
32
 
        file('hello', 'wt').write('foo')
33
 
        test.runbzr('add hello')
34
 
        test.runbzr('commit -m setup hello')
35
 
        file('goodbye', 'wt').write('baz')
36
 
        test.runbzr('add goodbye')
37
 
        test.runbzr('commit -m setup goodbye')
 
32
    def example_branch(self, path='.'):
 
33
        tree = self.make_branch_and_tree(path)
 
34
        self.build_tree_contents([(path + '/hello', 'foo')])
 
35
        tree.add('hello')
 
36
        tree.commit(message='setup')
 
37
        self.build_tree_contents([(path + '/goodbye', 'baz')])
 
38
        tree.add('goodbye')
 
39
        tree.commit(message='setup')
38
40
 
39
41
    def test_branch(self):
40
42
        """Branch from one branch to another."""
41
 
        os.mkdir('a')
42
 
        os.chdir('a')
43
 
        self.example_branch()
44
 
        os.chdir('..')
45
 
        self.runbzr('branch a b')
 
43
        self.example_branch('a')
 
44
        self.run_bzr('branch a b')
46
45
        b = branch.Branch.open('b')
47
46
        self.assertEqual('b\n', b.control_files.get_utf8('branch-name').read())
48
 
        self.runbzr('branch a c -r 1')
49
 
        os.chdir('b')
50
 
        self.runbzr('commit -m foo --unchanged')
51
 
        os.chdir('..')
 
47
        self.run_bzr('branch a c -r 1')
 
48
        b.bzrdir.open_workingtree().commit(message='foo', allow_pointless=True)
52
49
 
53
50
    def test_branch_only_copies_history(self):
54
51
        # Knit branches should only push the history for the current revision.
81
78
 
82
79
        # Now that we have a repository with shared files, make sure
83
80
        # that things aren't copied out by a 'branch'
84
 
        self.run_bzr('branch', 'repo/b', 'branch-b')
 
81
        self.run_bzr('branch repo/b branch-b')
85
82
        pushed_tree = WorkingTree.open('branch-b')
86
83
        pushed_repo = pushed_tree.branch.repository
87
84
        self.assertFalse(pushed_repo.has_revision('a-1'))
88
85
        self.assertFalse(pushed_repo.has_revision('a-2'))
89
86
        self.assertTrue(pushed_repo.has_revision('b-1'))
90
87
 
 
88
    def test_branch_hardlink(self):
 
89
        self.requireFeature(HardlinkFeature)
 
90
        source = self.make_branch_and_tree('source')
 
91
        self.build_tree(['source/file1'])
 
92
        source.add('file1')
 
93
        source.commit('added file')
 
94
        self.run_bzr(['branch', 'source', 'target', '--hardlink'])
 
95
        source_stat = os.stat('source/file1')
 
96
        target_stat = os.stat('target/file1')
 
97
        self.assertEqual(source_stat, target_stat)
 
98
 
 
99
 
 
100
class TestRemoteBranch(TestCaseWithSFTPServer):
 
101
 
 
102
    def setUp(self):
 
103
        super(TestRemoteBranch, self).setUp()
 
104
        tree = self.make_branch_and_tree('branch')
 
105
        self.build_tree_contents([('branch/file', 'file content\n')])
 
106
        tree.add('file')
 
107
        tree.commit('file created')
 
108
 
 
109
    def test_branch_local_remote(self):
 
110
        self.run_bzr(['branch', 'branch', self.get_url('remote')])
 
111
        t = self.get_transport()
 
112
        # Ensure that no working tree what created remotely
 
113
        self.assertFalse(t.has('remote/file'))
 
114
 
 
115
    def test_branch_remote_remote(self):
 
116
        # Light cheat: we access the branch remotely
 
117
        self.run_bzr(['branch', self.get_url('branch'),
 
118
                      self.get_url('remote')])
 
119
        t = self.get_transport()
 
120
        # Ensure that no working tree what created remotely
 
121
        self.assertFalse(t.has('remote/file'))
91
122