1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
|
# Copyright (C) 2009, 2010, 2016 Canonical Ltd
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
"""Tests for bzrdir implementations - push."""
from ...errors import (
LossyPushToSameVCS,
TagsNotSupported,
NoSuchRevision,
)
from ...revision import NULL_REVISION
from .. import TestNotApplicable
from breezy.tests.per_controldir import (
TestCaseWithControlDir,
)
class TestPush(TestCaseWithControlDir):
def create_simple_tree(self):
tree = self.make_branch_and_tree('tree')
self.build_tree(['tree/a'])
tree.add(['a'])
rev_1 = tree.commit('one')
return tree, rev_1
def test_push_new_branch(self):
tree, rev_1 = self.create_simple_tree()
dir = self.make_repository('dir').controldir
result = dir.push_branch(tree.branch)
self.assertEqual(tree.branch, result.source_branch)
self.assertEqual(dir.open_branch().base, result.target_branch.base)
self.assertEqual(dir.open_branch().base,
tree.branch.get_push_location())
def test_push_no_such_revision(self):
tree, rev_1 = self.create_simple_tree()
dir = self.make_repository('dir').controldir
self.assertRaises(
NoSuchRevision, dir.push_branch,
tree.branch, revision_id=b'idonotexist')
def test_push_new_branch_fetch_tags(self):
builder = self.make_branch_builder('from')
builder.start_series()
rev_1 = builder.build_snapshot(None, [
('add', ('', None, 'directory', '')),
('add', ('filename', None, 'file', b'content'))])
rev_2 = builder.build_snapshot(
[rev_1], [('modify', ('filename', b'new-content\n'))])
rev_3 = builder.build_snapshot(
[rev_1], [('modify', ('filename', b'new-new-content\n'))])
builder.finish_series()
branch = builder.get_branch()
try:
branch.tags.set_tag('atag', rev_2)
except TagsNotSupported:
raise TestNotApplicable('source format does not support tags')
dir = self.make_repository('target').controldir
branch.get_config().set_user_option('branch.fetch_tags', True)
result = dir.push_branch(branch)
self.assertEqual(
set([rev_1, rev_2, rev_3]),
set(result.source_branch.repository.all_revision_ids()))
self.assertEqual(
{'atag': rev_2}, result.source_branch.tags.get_tag_dict())
def test_push_new_branch_lossy(self):
tree, rev_1 = self.create_simple_tree()
dir = self.make_repository('dir').controldir
self.assertRaises(LossyPushToSameVCS, dir.push_branch,
tree.branch, lossy=True)
def test_push_new_empty(self):
tree = self.make_branch_and_tree('tree')
dir = self.make_repository('dir').controldir
result = dir.push_branch(tree.branch)
self.assertEqual(tree.branch.base, result.source_branch.base)
self.assertEqual(dir.open_branch().base,
result.target_branch.base)
def test_push_incremental(self):
tree, rev1 = self.create_simple_tree()
dir = self.make_repository('dir').controldir
dir.push_branch(tree.branch)
self.build_tree(['tree/b'])
tree.add(['b'])
rev_2 = tree.commit('two')
result = dir.push_branch(tree.branch)
self.assertEqual(tree.last_revision(),
result.branch_push_result.new_revid)
self.assertEqual(2, result.branch_push_result.new_revno)
self.assertEqual(tree.branch.base, result.source_branch.base)
self.assertEqual(dir.open_branch().base, result.target_branch.base)
def test_push_tag_selector(self):
tree, rev1 = self.create_simple_tree()
try:
tree.branch.tags.set_tag('tag1', rev1)
except TagsNotSupported:
raise TestNotApplicable('tags not supported')
tree.branch.tags.set_tag('tag2', rev1)
dir = self.make_repository('dir').controldir
dir.push_branch(tree.branch, tag_selector=lambda x: x == 'tag1')
self.assertEqual({'tag1': rev1}, dir.open_branch().tags.get_tag_dict())
|