160
161
def test_uncommit_merges(self):
161
162
wt = self.create_simple_tree()
163
tree2 = wt.controldir.sprout('tree2').open_workingtree()
164
tree2 = wt.bzrdir.sprout('tree2').open_workingtree()
165
tree2.commit('unchanged', rev_id=b'b3')
166
tree2.commit('unchanged', rev_id=b'b4')
166
tree2.commit('unchanged', rev_id='b3')
167
tree2.commit('unchanged', rev_id='b4')
168
169
wt.merge_from_branch(tree2.branch)
169
wt.commit('merge b4', rev_id=b'a3')
170
wt.commit('merge b4', rev_id='a3')
171
self.assertEqual([b'a3'], wt.get_parent_ids())
172
self.assertEqual(['a3'], wt.get_parent_ids())
174
175
out, err = self.run_bzr('uncommit --force')
176
self.assertEqual([b'a2', b'b4'], wt.get_parent_ids())
177
self.assertEqual(['a2', 'b4'], wt.get_parent_ids())
178
179
def test_uncommit_pending_merge(self):
179
180
wt = self.create_simple_tree()
180
tree2 = wt.controldir.sprout('tree2').open_workingtree()
181
tree2.commit('unchanged', rev_id=b'b3')
181
tree2 = wt.bzrdir.sprout('tree2').open_workingtree()
182
tree2.commit('unchanged', rev_id='b3')
183
184
wt.branch.fetch(tree2.branch)
184
wt.set_pending_merges([b'b3'])
185
wt.set_pending_merges(['b3'])
187
188
out, err = self.run_bzr('uncommit --force')
188
self.assertEqual([b'a1', b'b3'], wt.get_parent_ids())
189
self.assertEqual(['a1', 'b3'], wt.get_parent_ids())
190
191
def test_uncommit_multiple_merge(self):
191
192
wt = self.create_simple_tree()
193
tree2 = wt.controldir.sprout('tree2').open_workingtree()
194
tree2.commit('unchanged', rev_id=b'b3')
194
tree2 = wt.bzrdir.sprout('tree2').open_workingtree()
195
tree2.commit('unchanged', rev_id='b3')
196
tree3 = wt.controldir.sprout('tree3').open_workingtree()
197
tree3.commit('unchanged', rev_id=b'c3')
197
tree3 = wt.bzrdir.sprout('tree3').open_workingtree()
198
tree3.commit('unchanged', rev_id='c3')
199
200
wt.merge_from_branch(tree2.branch)
200
wt.commit('merge b3', rev_id=b'a3')
201
wt.commit('merge b3', rev_id='a3')
202
203
wt.merge_from_branch(tree3.branch)
203
wt.commit('merge c3', rev_id=b'a4')
204
wt.commit('merge c3', rev_id='a4')
205
self.assertEqual([b'a4'], wt.get_parent_ids())
206
self.assertEqual(['a4'], wt.get_parent_ids())
208
209
out, err = self.run_bzr('uncommit --force -r 2')
210
self.assertEqual([b'a2', b'b3', b'c3'], wt.get_parent_ids())
211
self.assertEqual(['a2', 'b3', 'c3'], wt.get_parent_ids())
212
213
def test_uncommit_merge_plus_pending(self):
213
214
wt = self.create_simple_tree()
215
tree2 = wt.controldir.sprout('tree2').open_workingtree()
216
tree2.commit('unchanged', rev_id=b'b3')
217
tree3 = wt.controldir.sprout('tree3').open_workingtree()
218
tree3.commit('unchanged', rev_id=b'c3')
216
tree2 = wt.bzrdir.sprout('tree2').open_workingtree()
217
tree2.commit('unchanged', rev_id='b3')
218
tree3 = wt.bzrdir.sprout('tree3').open_workingtree()
219
tree3.commit('unchanged', rev_id='c3')
220
221
wt.branch.fetch(tree2.branch)
221
wt.set_pending_merges([b'b3'])
222
wt.commit('merge b3', rev_id=b'a3')
222
wt.set_pending_merges(['b3'])
223
wt.commit('merge b3', rev_id='a3')
224
226
wt.merge_from_branch(tree3.branch)
226
self.assertEqual([b'a3', b'c3'], wt.get_parent_ids())
228
self.assertEqual(['a3', 'c3'], wt.get_parent_ids())
229
231
out, err = self.run_bzr('uncommit --force -r 2')
231
self.assertEqual([b'a2', b'b3', b'c3'], wt.get_parent_ids())
233
self.assertEqual(['a2', 'b3', 'c3'], wt.get_parent_ids())
233
235
def test_uncommit_shows_log_with_revision_id(self):
234
236
wt = self.create_simple_tree()
245
247
brz pull . -r revid:a2
248
def test_uncommit_shows_pull_with_location(self):
249
wt = self.create_simple_tree()
251
script = ScriptRunner()
252
script.run_script(self, """
253
$ brz uncommit --force tree
257
The above revision(s) will be removed.
258
You can restore the old tip by running:
259
brz pull -d tree tree -r revid:a2
262
250
def test_uncommit_octopus_merge(self):
263
251
# Check that uncommit keeps the pending merges in the same order
264
252
# though it will also filter out ones in the ancestry
265
253
wt = self.create_simple_tree()
267
tree2 = wt.controldir.sprout('tree2').open_workingtree()
268
tree3 = wt.controldir.sprout('tree3').open_workingtree()
255
tree2 = wt.bzrdir.sprout('tree2').open_workingtree()
256
tree3 = wt.bzrdir.sprout('tree3').open_workingtree()
270
tree2.commit('unchanged', rev_id=b'b3')
271
tree3.commit('unchanged', rev_id=b'c3')
258
tree2.commit('unchanged', rev_id='b3')
259
tree3.commit('unchanged', rev_id='c3')
273
261
wt.merge_from_branch(tree2.branch)
274
262
wt.merge_from_branch(tree3.branch, force=True)
275
wt.commit('merge b3, c3', rev_id=b'a3')
263
wt.commit('merge b3, c3', rev_id='a3')
277
tree2.commit('unchanged', rev_id=b'b4')
278
tree3.commit('unchanged', rev_id=b'c4')
265
tree2.commit('unchanged', rev_id='b4')
266
tree3.commit('unchanged', rev_id='c4')
280
268
wt.merge_from_branch(tree3.branch)
281
269
wt.merge_from_branch(tree2.branch, force=True)
282
wt.commit('merge b4, c4', rev_id=b'a4')
270
wt.commit('merge b4, c4', rev_id='a4')
284
self.assertEqual([b'a4'], wt.get_parent_ids())
272
self.assertEqual(['a4'], wt.get_parent_ids())
287
275
out, err = self.run_bzr('uncommit --force -r 2')
289
self.assertEqual([b'a2', b'c4', b'b4'], wt.get_parent_ids())
277
self.assertEqual(['a2', 'c4', 'b4'], wt.get_parent_ids())
291
279
def test_uncommit_nonascii(self):
292
280
tree = self.make_branch_and_tree('tree')
309
297
self.assertEqual({"atag": revid}, tree.branch.tags.get_tag_dict())
300
class TestSmartServerUncommit(TestCaseWithTransport):
302
def test_uncommit(self):
303
self.setup_smart_server_with_call_log()
304
t = self.make_branch_and_tree('from')
305
for count in range(2):
306
t.commit(message='commit %d' % count)
307
self.reset_smart_call_log()
308
out, err = self.run_bzr(['uncommit', '--force', self.get_url('from')])
309
# This figure represent the amount of work to perform this use case. It
310
# is entirely ok to reduce this number if a test fails due to rpc_count
311
# being too low. If rpc_count increases, more network roundtrips have
312
# become necessary for this use case. Please do not adjust this number
313
# upwards without agreement from bzr's network support maintainers.
314
self.assertLength(14, self.hpss_calls)
315
self.assertLength(1, self.hpss_connections)
316
self.assertThat(self.hpss_calls, ContainsNoVfsCalls)
312
319
class TestInconsistentDelta(TestCaseWithTransport):
313
320
# See https://bugs.launchpad.net/bzr/+bug/855155
314
321
# See https://bugs.launchpad.net/bzr/+bug/1100385