24
from bzrlib.repository import RepositoryFormatKnit1
22
from bzrlib import branch, bzrdir
23
from bzrlib.repofmt.knitrepo import RepositoryFormatKnit1
25
24
from bzrlib.tests.blackbox import ExternalBase
25
from bzrlib.tests import HardlinkFeature
26
from bzrlib.tests.test_sftp_transport import TestCaseWithSFTPServer
26
27
from bzrlib.workingtree import WorkingTree
29
30
class TestBranch(ExternalBase):
31
def example_branch(test):
33
file('hello', 'wt').write('foo')
34
test.runbzr('add hello')
35
test.runbzr('commit -m setup hello')
36
file('goodbye', 'wt').write('baz')
37
test.runbzr('add goodbye')
38
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')
40
41
def test_branch(self):
41
42
"""Branch from one branch to another."""
46
self.runbzr('branch a b')
47
b = bzrlib.branch.Branch.open('b')
48
self.assertEqual('b\n', b.control_files.get_utf8('branch-name').read())
49
self.runbzr('branch a c -r 1')
51
self.runbzr('commit -m foo --unchanged')
54
def test_branch_basis(self):
55
# ensure that basis really does grab from the basis by having incomplete source
56
tree = self.make_branch_and_tree('commit_tree')
57
self.build_tree(['foo'], transport=tree.bzrdir.transport.clone('..'))
59
tree.commit('revision 1', rev_id='1')
60
source = self.make_branch_and_tree('source')
61
# this gives us an incomplete repository
62
tree.bzrdir.open_repository().copy_content_into(source.branch.repository)
63
tree.commit('revision 2', rev_id='2', allow_pointless=True)
64
tree.bzrdir.open_branch().copy_content_into(source.branch)
65
tree.copy_content_into(source)
66
self.assertFalse(source.branch.repository.has_revision('2'))
68
self.runbzr('branch source target --basis commit_tree')
69
target = bzrlib.bzrdir.BzrDir.open('target')
70
self.assertEqual('2', target.open_branch().last_revision())
71
self.assertEqual('2', target.open_workingtree().last_revision())
72
self.assertTrue(target.open_branch().repository.has_revision('2'))
43
self.example_branch('a')
44
self.run_bzr('branch a b')
45
b = branch.Branch.open('b')
46
self.run_bzr('branch a c -r 1')
47
# previously was erroneously created by branching
48
self.assertFalse(b._transport.has('branch-name'))
49
b.bzrdir.open_workingtree().commit(message='foo', allow_pointless=True)
74
51
def test_branch_only_copies_history(self):
75
52
# Knit branches should only push the history for the current revision.
76
format = bzrlib.bzrdir.BzrDirMetaFormat1()
53
format = bzrdir.BzrDirMetaFormat1()
77
54
format.repository_format = RepositoryFormatKnit1()
78
55
shared_repo = self.make_repository('repo', format=format, shared=True)
79
56
shared_repo.set_make_working_trees(True)
103
80
# Now that we have a repository with shared files, make sure
104
81
# that things aren't copied out by a 'branch'
105
self.run_bzr('branch', 'repo/b', 'branch-b')
82
self.run_bzr('branch repo/b branch-b')
106
83
pushed_tree = WorkingTree.open('branch-b')
107
84
pushed_repo = pushed_tree.branch.repository
108
85
self.assertFalse(pushed_repo.has_revision('a-1'))
109
86
self.assertFalse(pushed_repo.has_revision('a-2'))
110
87
self.assertTrue(pushed_repo.has_revision('b-1'))
89
def test_branch_hardlink(self):
90
self.requireFeature(HardlinkFeature)
91
source = self.make_branch_and_tree('source')
92
self.build_tree(['source/file1'])
94
source.commit('added file')
95
self.run_bzr(['branch', 'source', 'target', '--hardlink'])
96
source_stat = os.stat('source/file1')
97
target_stat = os.stat('target/file1')
98
self.assertEqual(source_stat, target_stat)
101
class TestRemoteBranch(TestCaseWithSFTPServer):
104
super(TestRemoteBranch, self).setUp()
105
tree = self.make_branch_and_tree('branch')
106
self.build_tree_contents([('branch/file', 'file content\n')])
108
tree.commit('file created')
110
def test_branch_local_remote(self):
111
self.run_bzr(['branch', 'branch', self.get_url('remote')])
112
t = self.get_transport()
113
# Ensure that no working tree what created remotely
114
self.assertFalse(t.has('remote/file'))
116
def test_branch_remote_remote(self):
117
# Light cheat: we access the branch remotely
118
self.run_bzr(['branch', self.get_url('branch'),
119
self.get_url('remote')])
120
t = self.get_transport()
121
# Ensure that no working tree what created remotely
122
self.assertFalse(t.has('remote/file'))