22
22
from bzrlib import branch, bzrdir
23
from bzrlib.repofmt.knitrepo import RepositoryFormatKnit1
23
from bzrlib.repository import RepositoryFormatKnit1
24
24
from bzrlib.tests.blackbox import ExternalBase
25
from bzrlib.tests.test_sftp_transport import TestCaseWithSFTPServer
26
25
from bzrlib.workingtree import WorkingTree
29
28
class TestBranch(ExternalBase):
31
30
def example_branch(test):
33
32
file('hello', 'wt').write('foo')
34
test.run_bzr('add hello')
35
test.run_bzr('commit -m setup hello')
33
test.runbzr('add hello')
34
test.runbzr('commit -m setup hello')
36
35
file('goodbye', 'wt').write('baz')
37
test.run_bzr('add goodbye')
38
test.run_bzr('commit -m setup goodbye')
36
test.runbzr('add goodbye')
37
test.runbzr('commit -m setup goodbye')
40
39
def test_branch(self):
41
40
"""Branch from one branch to another."""
44
43
self.example_branch()
46
self.run_bzr('branch a b')
45
self.runbzr('branch a b')
47
46
b = branch.Branch.open('b')
48
47
self.assertEqual('b\n', b.control_files.get_utf8('branch-name').read())
49
self.run_bzr('branch a c -r 1')
48
self.runbzr('branch a c -r 1')
51
self.run_bzr('commit -m foo --unchanged')
50
self.runbzr('commit -m foo --unchanged')
53
def test_branch_basis(self):
54
# ensure that basis really does grab from the basis by having incomplete source
55
tree = self.make_branch_and_tree('commit_tree')
56
self.build_tree(['foo'], transport=tree.bzrdir.transport.clone('..'))
58
tree.commit('revision 1', rev_id='1')
59
source = self.make_branch_and_tree('source')
60
# this gives us an incomplete repository
61
tree.bzrdir.open_repository().copy_content_into(source.branch.repository)
62
tree.commit('revision 2', rev_id='2', allow_pointless=True)
63
tree.bzrdir.open_branch().copy_content_into(source.branch)
64
tree.copy_content_into(source)
65
self.assertFalse(source.branch.repository.has_revision('2'))
67
self.runbzr('branch source target --basis commit_tree')
68
target = bzrdir.BzrDir.open('target')
69
self.assertEqual('2', target.open_branch().last_revision())
70
self.assertEqual(['2'], target.open_workingtree().get_parent_ids())
71
self.assertTrue(target.open_branch().repository.has_revision('2'))
54
73
def test_branch_only_copies_history(self):
55
74
# Knit branches should only push the history for the current revision.
56
75
format = bzrdir.BzrDirMetaFormat1()
83
102
# Now that we have a repository with shared files, make sure
84
103
# that things aren't copied out by a 'branch'
85
self.run_bzr('branch repo/b branch-b')
104
self.run_bzr('branch', 'repo/b', 'branch-b')
86
105
pushed_tree = WorkingTree.open('branch-b')
87
106
pushed_repo = pushed_tree.branch.repository
88
107
self.assertFalse(pushed_repo.has_revision('a-1'))
90
109
self.assertTrue(pushed_repo.has_revision('b-1'))
93
class TestRemoteBranch(TestCaseWithSFTPServer):
96
super(TestRemoteBranch, self).setUp()
97
tree = self.make_branch_and_tree('branch')
98
self.build_tree_contents([('branch/file', 'file content\n')])
100
tree.commit('file created')
102
def test_branch_local_remote(self):
103
self.run_bzr(['branch', 'branch', self.get_url('remote')])
104
t = self.get_transport()
105
# Ensure that no working tree what created remotely
106
self.assertFalse(t.has('remote/file'))
108
def test_branch_remote_remote(self):
109
# Light cheat: we access the branch remotely
110
self.run_bzr(['branch', self.get_url('branch'),
111
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'))