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
28
30
class TestBranch(ExternalBase):
30
def example_branch(test):
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')])
36
tree.commit(message='setup')
37
self.build_tree_contents([(path + '/goodbye', 'baz')])
39
tree.commit(message='setup')
39
41
def test_branch(self):
40
42
"""Branch from one branch to another."""
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')
50
self.runbzr('commit -m foo --unchanged')
47
self.run_bzr('branch a c -r 1')
48
b.bzrdir.open_workingtree().commit(message='foo', allow_pointless=True)
53
50
def test_branch_only_copies_history(self):
54
51
# Knit branches should only push the history for the current revision.
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'))
88
def test_branch_hardlink(self):
89
self.requireFeature(HardlinkFeature)
90
source = self.make_branch_and_tree('source')
91
self.build_tree(['source/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)
100
class TestRemoteBranch(TestCaseWithSFTPServer):
103
super(TestRemoteBranch, self).setUp()
104
tree = self.make_branch_and_tree('branch')
105
self.build_tree_contents([('branch/file', 'file content\n')])
107
tree.commit('file created')
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'))
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'))