/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar
6614.1.3 by Vincent Ladeuil
Fix assertEquals being deprecated by using assertEqual.
1
# Copyright (C) 2005-2011, 2013, 2016 Canonical Ltd
1850.3.4 by John Arbash Meinel
Add copyright to test_uncommit.py
2
#
3
# This program is free software; you can redistribute it and/or modify
4
# it under the terms of the GNU General Public License as published by
5
# the Free Software Foundation; either version 2 of the License, or
6
# (at your option) any later version.
7
#
8
# This program is distributed in the hope that it will be useful,
9
# but WITHOUT ANY WARRANTY; without even the implied warranty of
10
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11
# GNU General Public License for more details.
12
#
13
# You should have received a copy of the GNU General Public License
14
# along with this program; if not, write to the Free Software
4183.7.1 by Sabin Iacob
update FSF mailing address
15
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
1850.3.4 by John Arbash Meinel
Add copyright to test_uncommit.py
16
17
"""Test the uncommit command."""
1558.1.12 by Aaron Bentley
Got uncommit working properly with checkouts
18
19
import os
20
6622.1.34 by Jelmer Vernooij
Rename brzlib => breezy.
21
from breezy import uncommit
6670.4.3 by Jelmer Vernooij
Fix more imports.
22
from breezy.bzr.bzrdir import BzrDirMetaFormat1
6622.1.34 by Jelmer Vernooij
Rename brzlib => breezy.
23
from breezy.errors import BoundBranchOutOfDate
24
from breezy.tests import TestCaseWithTransport
25
from breezy.tests.matchers import ContainsNoVfsCalls
26
from breezy.tests.script import (
5416.1.9 by Martin Pool
Add a test that uncommit confirms its action
27
    run_script,
28
    ScriptRunner,
29
    )
1850.3.1 by John Arbash Meinel
cleanup the uncommit tests
30
31
32
class TestUncommit(TestCaseWithTransport):
1956.1.1 by John Arbash Meinel
Fix bug #57660: 'bzr uncommit' should preserve pending merges
33
1850.3.1 by John Arbash Meinel
cleanup the uncommit tests
34
    def create_simple_tree(self):
35
        wt = self.make_branch_and_tree('tree')
36
        self.build_tree(['tree/a', 'tree/b', 'tree/c'])
37
        wt.add(['a', 'b', 'c'])
6855.4.1 by Jelmer Vernooij
Yet more bees.
38
        wt.commit('initial commit', rev_id=b'a1')
1850.3.1 by John Arbash Meinel
cleanup the uncommit tests
39
6855.4.1 by Jelmer Vernooij
Yet more bees.
40
        self.build_tree_contents([('tree/a', b'new contents of a\n')])
41
        wt.commit('second commit', rev_id=b'a2')
1850.3.1 by John Arbash Meinel
cleanup the uncommit tests
42
43
        return wt
44
0.3.11 by John Arbash Meinel
Updated to latest bzr.dev code, and added tests.
45
    def test_uncommit(self):
46
        """Test uncommit functionality."""
1850.3.1 by John Arbash Meinel
cleanup the uncommit tests
47
        wt = self.create_simple_tree()
48
49
        os.chdir('tree')
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
50
        out, err = self.run_bzr('uncommit --dry-run --force')
7027.4.1 by Jelmer Vernooij
Use StringIOWithEncoding on Python3.
51
        self.assertContainsRe(out, 'Dry-run')
52
        self.assertNotContainsRe(out, 'initial commit')
53
        self.assertContainsRe(out, 'second commit')
1850.3.1 by John Arbash Meinel
cleanup the uncommit tests
54
55
        # Nothing has changed
6973.14.7 by Jelmer Vernooij
Bees bees bees.
56
        self.assertEqual([b'a2'], wt.get_parent_ids())
1850.3.1 by John Arbash Meinel
cleanup the uncommit tests
57
58
        # Uncommit, don't prompt
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
59
        out, err = self.run_bzr('uncommit --force')
7027.4.1 by Jelmer Vernooij
Use StringIOWithEncoding on Python3.
60
        self.assertNotContainsRe(out, 'initial commit')
61
        self.assertContainsRe(out, 'second commit')
1850.3.1 by John Arbash Meinel
cleanup the uncommit tests
62
63
        # This should look like we are back in revno 1
6973.14.7 by Jelmer Vernooij
Bees bees bees.
64
        self.assertEqual([b'a1'], wt.get_parent_ids())
1850.3.1 by John Arbash Meinel
cleanup the uncommit tests
65
        out, err = self.run_bzr('status')
7027.4.1 by Jelmer Vernooij
Use StringIOWithEncoding on Python3.
66
        self.assertEqual(out, 'modified:\n  a\n')
1850.3.1 by John Arbash Meinel
cleanup the uncommit tests
67
5416.1.9 by Martin Pool
Add a test that uncommit confirms its action
68
    def test_uncommit_interactive(self):
69
        """Uncommit seeks confirmation, and doesn't proceed without it."""
70
        wt = self.create_simple_tree()
71
        os.chdir('tree')
6973.14.7 by Jelmer Vernooij
Bees bees bees.
72
        run_script(self, """
6622.1.29 by Jelmer Vernooij
Fix some more tests.
73
        $ brz uncommit
5416.1.12 by Martin Pool
Tweak uncommit doctest for python 2.4
74
        ...
5416.1.9 by Martin Pool
Add a test that uncommit confirms its action
75
        The above revision(s) will be removed.
6182.2.15 by Benoît Pierre
Fix uncommit tests.
76
        2>Uncommit these revisions? ([y]es, [n]o): no
5416.1.9 by Martin Pool
Add a test that uncommit confirms its action
77
        <n
78
        Canceled
79
        """)
6973.14.7 by Jelmer Vernooij
Bees bees bees.
80
        self.assertEqual([b'a2'], wt.get_parent_ids())
5416.1.9 by Martin Pool
Add a test that uncommit confirms its action
81
2948.2.1 by John Arbash Meinel
Fix 'bzr uncommit' when there is no revision history.
82
    def test_uncommit_no_history(self):
83
        wt = self.make_branch_and_tree('tree')
84
        out, err = self.run_bzr('uncommit --force', retcode=1)
7027.4.1 by Jelmer Vernooij
Use StringIOWithEncoding on Python3.
85
        self.assertEqual('', err)
86
        self.assertEqual('No revisions to uncommit.\n', out)
2948.2.1 by John Arbash Meinel
Fix 'bzr uncommit' when there is no revision history.
87
1850.3.1 by John Arbash Meinel
cleanup the uncommit tests
88
    def test_uncommit_checkout(self):
89
        wt = self.create_simple_tree()
1997.1.5 by Robert Collins
``Branch.bind(other_branch)`` no longer takes a write lock on the
90
        checkout_tree = wt.branch.create_checkout('checkout')
1850.3.1 by John Arbash Meinel
cleanup the uncommit tests
91
6973.13.2 by Jelmer Vernooij
Fix some more tests.
92
        self.assertEqual([b'a2'], checkout_tree.get_parent_ids())
1850.3.1 by John Arbash Meinel
cleanup the uncommit tests
93
94
        os.chdir('checkout')
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
95
        out, err = self.run_bzr('uncommit --dry-run --force')
7027.4.1 by Jelmer Vernooij
Use StringIOWithEncoding on Python3.
96
        self.assertContainsRe(out, 'Dry-run')
97
        self.assertNotContainsRe(out, 'initial commit')
98
        self.assertContainsRe(out, 'second commit')
1850.3.1 by John Arbash Meinel
cleanup the uncommit tests
99
6973.13.2 by Jelmer Vernooij
Fix some more tests.
100
        self.assertEqual([b'a2'], checkout_tree.get_parent_ids())
1850.3.1 by John Arbash Meinel
cleanup the uncommit tests
101
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
102
        out, err = self.run_bzr('uncommit --force')
7027.4.1 by Jelmer Vernooij
Use StringIOWithEncoding on Python3.
103
        self.assertNotContainsRe(out, 'initial commit')
104
        self.assertContainsRe(out, 'second commit')
1850.3.1 by John Arbash Meinel
cleanup the uncommit tests
105
106
        # uncommit in a checkout should uncommit the parent branch
107
        # (but doesn't effect the other working tree)
6973.13.2 by Jelmer Vernooij
Fix some more tests.
108
        self.assertEqual([b'a1'], checkout_tree.get_parent_ids())
7045.1.14 by Jelmer Vernooij
More fixes.
109
        self.assertEqual(b'a1', wt.branch.last_revision())
6973.13.2 by Jelmer Vernooij
Fix some more tests.
110
        self.assertEqual([b'a2'], wt.get_parent_ids())
1558.9.1 by Aaron Bentley
Fix uncommit to handle bound branches, and to do locking
111
112
    def test_uncommit_bound(self):
113
        os.mkdir('a')
114
        a = BzrDirMetaFormat1().initialize('a')
115
        a.create_repository()
116
        a.create_branch()
1908.6.1 by Robert Collins
Change all callers of set_last_revision to use set_parent_trees.
117
        t_a = a.create_workingtree()
118
        t_a.commit('commit 1')
119
        t_a.commit('commit 2')
120
        t_a.commit('commit 3')
1997.1.5 by Robert Collins
``Branch.bind(other_branch)`` no longer takes a write lock on the
121
        b = t_a.branch.create_checkout('b').branch
1850.3.1 by John Arbash Meinel
cleanup the uncommit tests
122
        uncommit.uncommit(b)
6165.4.4 by Jelmer Vernooij
Avoid .revision_history().
123
        self.assertEqual(b.last_revision_info()[0], 2)
124
        self.assertEqual(t_a.branch.last_revision_info()[0], 2)
4031.3.1 by Frank Aspell
Fixing various typos
125
        # update A's tree to not have the uncommitted revision referenced.
1908.6.1 by Robert Collins
Change all callers of set_last_revision to use set_parent_trees.
126
        t_a.update()
127
        t_a.commit('commit 3b')
1850.3.1 by John Arbash Meinel
cleanup the uncommit tests
128
        self.assertRaises(BoundBranchOutOfDate, uncommit.uncommit, b)
1908.6.1 by Robert Collins
Change all callers of set_last_revision to use set_parent_trees.
129
        b.pull(t_a.branch)
1850.3.1 by John Arbash Meinel
cleanup the uncommit tests
130
        uncommit.uncommit(b)
1558.9.1 by Aaron Bentley
Fix uncommit to handle bound branches, and to do locking
131
3280.4.1 by John Arbash Meinel
Add uncommit --local.
132
    def test_uncommit_bound_local(self):
133
        t_a = self.make_branch_and_tree('a')
134
        rev_id1 = t_a.commit('commit 1')
135
        rev_id2 = t_a.commit('commit 2')
136
        rev_id3 = t_a.commit('commit 3')
137
        b = t_a.branch.create_checkout('b').branch
138
139
        out, err = self.run_bzr(['uncommit', '--local', 'b', '--force'])
140
        self.assertEqual(rev_id3, t_a.last_revision())
141
        self.assertEqual((3, rev_id3), t_a.branch.last_revision_info())
142
        self.assertEqual((2, rev_id2), b.last_revision_info())
143
1850.3.2 by John Arbash Meinel
Change uncommit -r 10 so that it uncommits *to* 10, rather than removing 10
144
    def test_uncommit_revision(self):
145
        wt = self.create_simple_tree()
146
147
        os.chdir('tree')
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
148
        out, err = self.run_bzr('uncommit -r1 --force')
1850.3.2 by John Arbash Meinel
Change uncommit -r 10 so that it uncommits *to* 10, rather than removing 10
149
7027.4.1 by Jelmer Vernooij
Use StringIOWithEncoding on Python3.
150
        self.assertNotContainsRe(out, 'initial commit')
151
        self.assertContainsRe(out, 'second commit')
6973.13.2 by Jelmer Vernooij
Fix some more tests.
152
        self.assertEqual([b'a1'], wt.get_parent_ids())
153
        self.assertEqual(b'a1', wt.branch.last_revision())
1850.3.2 by John Arbash Meinel
Change uncommit -r 10 so that it uncommits *to* 10, rather than removing 10
154
155
    def test_uncommit_neg_1(self):
156
        wt = self.create_simple_tree()
157
        os.chdir('tree')
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
158
        out, err = self.run_bzr('uncommit -r -1', retcode=1)
7027.4.1 by Jelmer Vernooij
Use StringIOWithEncoding on Python3.
159
        self.assertEqual('No revisions to uncommit.\n', out)
1850.3.5 by John Arbash Meinel
Fix bug 31426, have uncommit keep track of pending merges.
160
161
    def test_uncommit_merges(self):
162
        wt = self.create_simple_tree()
163
6653.6.1 by Jelmer Vernooij
Rename a number of attributes from bzrdir to controldir.
164
        tree2 = wt.controldir.sprout('tree2').open_workingtree()
1850.3.5 by John Arbash Meinel
Fix bug 31426, have uncommit keep track of pending merges.
165
6855.4.1 by Jelmer Vernooij
Yet more bees.
166
        tree2.commit('unchanged', rev_id=b'b3')
167
        tree2.commit('unchanged', rev_id=b'b4')
1850.3.5 by John Arbash Meinel
Fix bug 31426, have uncommit keep track of pending merges.
168
1979.2.1 by Robert Collins
(robertc) adds a convenience method "merge_from_branch" to WorkingTree.
169
        wt.merge_from_branch(tree2.branch)
6855.4.1 by Jelmer Vernooij
Yet more bees.
170
        wt.commit('merge b4', rev_id=b'a3')
1850.3.5 by John Arbash Meinel
Fix bug 31426, have uncommit keep track of pending merges.
171
6973.13.2 by Jelmer Vernooij
Fix some more tests.
172
        self.assertEqual([b'a3'], wt.get_parent_ids())
1850.3.5 by John Arbash Meinel
Fix bug 31426, have uncommit keep track of pending merges.
173
174
        os.chdir('tree')
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
175
        out, err = self.run_bzr('uncommit --force')
1850.3.5 by John Arbash Meinel
Fix bug 31426, have uncommit keep track of pending merges.
176
6973.13.2 by Jelmer Vernooij
Fix some more tests.
177
        self.assertEqual([b'a2', b'b4'], wt.get_parent_ids())
1850.3.5 by John Arbash Meinel
Fix bug 31426, have uncommit keep track of pending merges.
178
1956.1.1 by John Arbash Meinel
Fix bug #57660: 'bzr uncommit' should preserve pending merges
179
    def test_uncommit_pending_merge(self):
180
        wt = self.create_simple_tree()
6653.6.1 by Jelmer Vernooij
Rename a number of attributes from bzrdir to controldir.
181
        tree2 = wt.controldir.sprout('tree2').open_workingtree()
6855.4.1 by Jelmer Vernooij
Yet more bees.
182
        tree2.commit('unchanged', rev_id=b'b3')
1956.1.1 by John Arbash Meinel
Fix bug #57660: 'bzr uncommit' should preserve pending merges
183
184
        wt.branch.fetch(tree2.branch)
6973.13.2 by Jelmer Vernooij
Fix some more tests.
185
        wt.set_pending_merges([b'b3'])
1956.1.1 by John Arbash Meinel
Fix bug #57660: 'bzr uncommit' should preserve pending merges
186
187
        os.chdir('tree')
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
188
        out, err = self.run_bzr('uncommit --force')
6973.13.2 by Jelmer Vernooij
Fix some more tests.
189
        self.assertEqual([b'a1', b'b3'], wt.get_parent_ids())
1956.1.1 by John Arbash Meinel
Fix bug #57660: 'bzr uncommit' should preserve pending merges
190
1850.3.5 by John Arbash Meinel
Fix bug 31426, have uncommit keep track of pending merges.
191
    def test_uncommit_multiple_merge(self):
192
        wt = self.create_simple_tree()
193
6653.6.1 by Jelmer Vernooij
Rename a number of attributes from bzrdir to controldir.
194
        tree2 = wt.controldir.sprout('tree2').open_workingtree()
6855.4.1 by Jelmer Vernooij
Yet more bees.
195
        tree2.commit('unchanged', rev_id=b'b3')
1908.6.7 by Robert Collins
Remove all users of set_pending_merges and add_pending_merge except tests that they work correctly.
196
6653.6.1 by Jelmer Vernooij
Rename a number of attributes from bzrdir to controldir.
197
        tree3 = wt.controldir.sprout('tree3').open_workingtree()
6855.4.1 by Jelmer Vernooij
Yet more bees.
198
        tree3.commit('unchanged', rev_id=b'c3')
3462.1.4 by John Arbash Meinel
fix up the uncommit tests now that set_parent_ids is filtering out ancestors.
199
1979.2.1 by Robert Collins
(robertc) adds a convenience method "merge_from_branch" to WorkingTree.
200
        wt.merge_from_branch(tree2.branch)
6855.4.1 by Jelmer Vernooij
Yet more bees.
201
        wt.commit('merge b3', rev_id=b'a3')
1850.3.5 by John Arbash Meinel
Fix bug 31426, have uncommit keep track of pending merges.
202
3462.1.4 by John Arbash Meinel
fix up the uncommit tests now that set_parent_ids is filtering out ancestors.
203
        wt.merge_from_branch(tree3.branch)
6855.4.1 by Jelmer Vernooij
Yet more bees.
204
        wt.commit('merge c3', rev_id=b'a4')
1850.3.5 by John Arbash Meinel
Fix bug 31426, have uncommit keep track of pending merges.
205
6973.13.2 by Jelmer Vernooij
Fix some more tests.
206
        self.assertEqual([b'a4'], wt.get_parent_ids())
1850.3.5 by John Arbash Meinel
Fix bug 31426, have uncommit keep track of pending merges.
207
208
        os.chdir('tree')
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
209
        out, err = self.run_bzr('uncommit --force -r 2')
1850.3.5 by John Arbash Meinel
Fix bug 31426, have uncommit keep track of pending merges.
210
6973.13.2 by Jelmer Vernooij
Fix some more tests.
211
        self.assertEqual([b'a2', b'b3', b'c3'], wt.get_parent_ids())
1850.3.5 by John Arbash Meinel
Fix bug 31426, have uncommit keep track of pending merges.
212
1956.1.1 by John Arbash Meinel
Fix bug #57660: 'bzr uncommit' should preserve pending merges
213
    def test_uncommit_merge_plus_pending(self):
214
        wt = self.create_simple_tree()
215
6653.6.1 by Jelmer Vernooij
Rename a number of attributes from bzrdir to controldir.
216
        tree2 = wt.controldir.sprout('tree2').open_workingtree()
6855.4.1 by Jelmer Vernooij
Yet more bees.
217
        tree2.commit('unchanged', rev_id=b'b3')
6653.6.1 by Jelmer Vernooij
Rename a number of attributes from bzrdir to controldir.
218
        tree3 = wt.controldir.sprout('tree3').open_workingtree()
6855.4.1 by Jelmer Vernooij
Yet more bees.
219
        tree3.commit('unchanged', rev_id=b'c3')
3462.1.4 by John Arbash Meinel
fix up the uncommit tests now that set_parent_ids is filtering out ancestors.
220
1956.1.1 by John Arbash Meinel
Fix bug #57660: 'bzr uncommit' should preserve pending merges
221
        wt.branch.fetch(tree2.branch)
6973.13.2 by Jelmer Vernooij
Fix some more tests.
222
        wt.set_pending_merges([b'b3'])
6855.4.1 by Jelmer Vernooij
Yet more bees.
223
        wt.commit('merge b3', rev_id=b'a3')
1956.1.1 by John Arbash Meinel
Fix bug #57660: 'bzr uncommit' should preserve pending merges
224
3462.1.4 by John Arbash Meinel
fix up the uncommit tests now that set_parent_ids is filtering out ancestors.
225
        wt.merge_from_branch(tree3.branch)
226
6973.13.2 by Jelmer Vernooij
Fix some more tests.
227
        self.assertEqual([b'a3', b'c3'], wt.get_parent_ids())
1956.1.1 by John Arbash Meinel
Fix bug #57660: 'bzr uncommit' should preserve pending merges
228
229
        os.chdir('tree')
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
230
        out, err = self.run_bzr('uncommit --force -r 2')
1956.1.1 by John Arbash Meinel
Fix bug #57660: 'bzr uncommit' should preserve pending merges
231
6973.13.2 by Jelmer Vernooij
Fix some more tests.
232
        self.assertEqual([b'a2', b'b3', b'c3'], wt.get_parent_ids())
1956.1.1 by John Arbash Meinel
Fix bug #57660: 'bzr uncommit' should preserve pending merges
233
3629.1.1 by John Arbash Meinel
Change 'bzr uncommit' to display the revision ids and log them.
234
    def test_uncommit_shows_log_with_revision_id(self):
235
        wt = self.create_simple_tree()
236
5010.1.2 by Martin Pool
Uncommit sends some output to stdout; change it to a script test
237
        script = ScriptRunner()
238
        script.run_script(self, """
239
$ cd tree
7195.5.1 by Martin
Fix remaining whitespace lint in codebase
240
$ brz uncommit --force
5010.1.3 by Martin Pool
uncommit tests aren't isolated; shouldn't check committer/date
241
    2 ...
5010.1.2 by Martin Pool
Uncommit sends some output to stdout; change it to a script test
242
      second commit
243
...
244
The above revision(s) will be removed.
245
You can restore the old tip by running:
6622.1.29 by Jelmer Vernooij
Fix some more tests.
246
  brz pull . -r revid:a2
5010.1.2 by Martin Pool
Uncommit sends some output to stdout; change it to a script test
247
""")
3629.1.1 by John Arbash Meinel
Change 'bzr uncommit' to display the revision ids and log them.
248
7290.3.1 by Jelmer Vernooij
Display "-d $LOCATION" in example bzr pull command output by 'brz uncommit'
249
    def test_uncommit_shows_pull_with_location(self):
250
        wt = self.create_simple_tree()
251
252
        script = ScriptRunner()
253
        script.run_script(self, """
254
$ brz uncommit --force tree
255
    2 ...
256
      second commit
257
...
258
The above revision(s) will be removed.
259
You can restore the old tip by running:
7290.3.2 by Jelmer Vernooij
Fix location.
260
  brz pull -d tree tree -r revid:a2
7290.3.1 by Jelmer Vernooij
Display "-d $LOCATION" in example bzr pull command output by 'brz uncommit'
261
""")
262
1850.3.5 by John Arbash Meinel
Fix bug 31426, have uncommit keep track of pending merges.
263
    def test_uncommit_octopus_merge(self):
264
        # Check that uncommit keeps the pending merges in the same order
3462.1.4 by John Arbash Meinel
fix up the uncommit tests now that set_parent_ids is filtering out ancestors.
265
        # though it will also filter out ones in the ancestry
1850.3.5 by John Arbash Meinel
Fix bug 31426, have uncommit keep track of pending merges.
266
        wt = self.create_simple_tree()
267
6653.6.1 by Jelmer Vernooij
Rename a number of attributes from bzrdir to controldir.
268
        tree2 = wt.controldir.sprout('tree2').open_workingtree()
269
        tree3 = wt.controldir.sprout('tree3').open_workingtree()
1850.3.5 by John Arbash Meinel
Fix bug 31426, have uncommit keep track of pending merges.
270
6855.4.1 by Jelmer Vernooij
Yet more bees.
271
        tree2.commit('unchanged', rev_id=b'b3')
272
        tree3.commit('unchanged', rev_id=b'c3')
3629.1.1 by John Arbash Meinel
Change 'bzr uncommit' to display the revision ids and log them.
273
1979.2.1 by Robert Collins
(robertc) adds a convenience method "merge_from_branch" to WorkingTree.
274
        wt.merge_from_branch(tree2.branch)
4721.3.2 by Vincent Ladeuil
Simplify mutable_tree.has_changes() and update call sites.
275
        wt.merge_from_branch(tree3.branch, force=True)
6855.4.1 by Jelmer Vernooij
Yet more bees.
276
        wt.commit('merge b3, c3', rev_id=b'a3')
1850.3.5 by John Arbash Meinel
Fix bug 31426, have uncommit keep track of pending merges.
277
6855.4.1 by Jelmer Vernooij
Yet more bees.
278
        tree2.commit('unchanged', rev_id=b'b4')
279
        tree3.commit('unchanged', rev_id=b'c4')
1908.6.7 by Robert Collins
Remove all users of set_pending_merges and add_pending_merge except tests that they work correctly.
280
1979.2.1 by Robert Collins
(robertc) adds a convenience method "merge_from_branch" to WorkingTree.
281
        wt.merge_from_branch(tree3.branch)
4721.3.2 by Vincent Ladeuil
Simplify mutable_tree.has_changes() and update call sites.
282
        wt.merge_from_branch(tree2.branch, force=True)
6855.4.1 by Jelmer Vernooij
Yet more bees.
283
        wt.commit('merge b4, c4', rev_id=b'a4')
1850.3.5 by John Arbash Meinel
Fix bug 31426, have uncommit keep track of pending merges.
284
6973.13.2 by Jelmer Vernooij
Fix some more tests.
285
        self.assertEqual([b'a4'], wt.get_parent_ids())
1850.3.5 by John Arbash Meinel
Fix bug 31426, have uncommit keep track of pending merges.
286
287
        os.chdir('tree')
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
288
        out, err = self.run_bzr('uncommit --force -r 2')
1850.3.5 by John Arbash Meinel
Fix bug 31426, have uncommit keep track of pending merges.
289
6973.13.2 by Jelmer Vernooij
Fix some more tests.
290
        self.assertEqual([b'a2', b'c4', b'b4'], wt.get_parent_ids())
3101.1.1 by Aaron Bentley
Uncommit doesn't throw when it encounters un-encodable characters
291
292
    def test_uncommit_nonascii(self):
293
        tree = self.make_branch_and_tree('tree')
294
        tree.commit(u'\u1234 message')
3101.1.2 by Aaron Bentley
Improve uncommit test
295
        out, err = self.run_bzr('uncommit --force tree', encoding='ascii')
7027.4.1 by Jelmer Vernooij
Use StringIOWithEncoding on Python3.
296
        self.assertContainsRe(out, r'\? message')
6091.1.4 by Jelmer Vernooij
More tests.
297
298
    def test_uncommit_removes_tags(self):
299
        tree = self.make_branch_and_tree('tree')
300
        revid = tree.commit('message')
301
        tree.branch.tags.set_tag("atag", revid)
302
        out, err = self.run_bzr('uncommit --force tree')
6614.1.3 by Vincent Ladeuil
Fix assertEquals being deprecated by using assertEqual.
303
        self.assertEqual({}, tree.branch.tags.get_tag_dict())
6091.1.4 by Jelmer Vernooij
More tests.
304
305
    def test_uncommit_keep_tags(self):
306
        tree = self.make_branch_and_tree('tree')
307
        revid = tree.commit('message')
308
        tree.branch.tags.set_tag("atag", revid)
309
        out, err = self.run_bzr('uncommit --keep-tags --force tree')
6614.1.3 by Vincent Ladeuil
Fix assertEquals being deprecated by using assertEqual.
310
        self.assertEqual({"atag": revid}, tree.branch.tags.get_tag_dict())
6345.2.3 by Jelmer Vernooij
Add hpss call count test for 'bzr uncommit'.
311
312
313
class TestSmartServerUncommit(TestCaseWithTransport):
314
315
    def test_uncommit(self):
316
        self.setup_smart_server_with_call_log()
317
        t = self.make_branch_and_tree('from')
318
        for count in range(2):
319
            t.commit(message='commit %d' % count)
320
        self.reset_smart_call_log()
321
        out, err = self.run_bzr(['uncommit', '--force', self.get_url('from')])
322
        # This figure represent the amount of work to perform this use case. It
323
        # is entirely ok to reduce this number if a test fails due to rpc_count
324
        # being too low. If rpc_count increases, more network roundtrips have
325
        # become necessary for this use case. Please do not adjust this number
326
        # upwards without agreement from bzr's network support maintainers.
327
        self.assertLength(14, self.hpss_calls)
6366.1.4 by Jelmer Vernooij
Test connection count calls for most blackbox commands.
328
        self.assertLength(1, self.hpss_connections)
6352.2.3 by Jelmer Vernooij
s/NoVfsCalls/ContainsNoVfsCalls/.
329
        self.assertThat(self.hpss_calls, ContainsNoVfsCalls)
6437.78.2 by John Arbash Meinel
Merge lp:bzr/2.4 @6078.
330
6015.45.2 by Brian de Alwis, John Arbash Meinel
Backport the fix for bug #855155 to bzr-2.4
331
332
class TestInconsistentDelta(TestCaseWithTransport):
333
    # See https://bugs.launchpad.net/bzr/+bug/855155
334
    # See https://bugs.launchpad.net/bzr/+bug/1100385
6622.1.29 by Jelmer Vernooij
Fix some more tests.
335
    # brz uncommit may result in error
6015.45.2 by Brian de Alwis, John Arbash Meinel
Backport the fix for bug #855155 to bzr-2.4
336
    # 'An inconsistent delta was supplied involving'
337
338
    def test_inconsistent_delta(self):
339
        # Script taken from https://bugs.launchpad.net/bzr/+bug/855155/comments/26
340
        wt = self.make_branch_and_tree('test')
341
        self.build_tree(['test/a/', 'test/a/b', 'test/a/c'])
342
        wt.add(['a', 'a/b', 'a/c'])
6855.4.1 by Jelmer Vernooij
Yet more bees.
343
        wt.commit('initial commit', rev_id=b'a1')
6015.45.2 by Brian de Alwis, John Arbash Meinel
Backport the fix for bug #855155 to bzr-2.4
344
        wt.remove(['a/b', 'a/c'])
6855.4.1 by Jelmer Vernooij
Yet more bees.
345
        wt.commit('remove b and c', rev_id=b'a2')
6015.45.2 by Brian de Alwis, John Arbash Meinel
Backport the fix for bug #855155 to bzr-2.4
346
        self.run_bzr("uncommit --force test")