/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to bzrlib/tests/blackbox/test_uncommit.py

  • Committer: Marius Kruger
  • Date: 2010-07-10 21:28:56 UTC
  • mto: (5384.1.1 integration)
  • mto: This revision was merged to the branch mainline in revision 5385.
  • Revision ID: marius.kruger@enerweb.co.za-20100710212856-uq4ji3go0u5se7hx
* Update documentation
* add NEWS

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2005-2011, 2013, 2016 Canonical Ltd
 
1
# Copyright (C) 2005-2010 Canonical Ltd
2
2
#
3
3
# This program is free software; you can redistribute it and/or modify
4
4
# it under the terms of the GNU General Public License as published by
18
18
 
19
19
import os
20
20
 
21
 
from breezy import uncommit
22
 
from breezy.bzr.bzrdir import BzrDirMetaFormat1
23
 
from breezy.errors import BoundBranchOutOfDate
24
 
from breezy.tests import TestCaseWithTransport
25
 
from breezy.tests.script import (
26
 
    run_script,
27
 
    ScriptRunner,
28
 
    )
 
21
from bzrlib import uncommit, workingtree
 
22
from bzrlib.bzrdir import BzrDirMetaFormat1
 
23
from bzrlib.errors import BzrError, BoundBranchOutOfDate
 
24
from bzrlib.tests import TestCaseWithTransport
 
25
from bzrlib.tests.script import ScriptRunner
29
26
 
30
27
 
31
28
class TestUncommit(TestCaseWithTransport):
34
31
        wt = self.make_branch_and_tree('tree')
35
32
        self.build_tree(['tree/a', 'tree/b', 'tree/c'])
36
33
        wt.add(['a', 'b', 'c'])
37
 
        wt.commit('initial commit', rev_id=b'a1')
 
34
        wt.commit('initial commit', rev_id='a1')
38
35
 
39
 
        self.build_tree_contents([('tree/a', b'new contents of a\n')])
40
 
        wt.commit('second commit', rev_id=b'a2')
 
36
        self.build_tree_contents([('tree/a', 'new contents of a\n')])
 
37
        wt.commit('second commit', rev_id='a2')
41
38
 
42
39
        return wt
43
40
 
52
49
        self.assertContainsRe(out, 'second commit')
53
50
 
54
51
        # Nothing has changed
55
 
        self.assertEqual([b'a2'], wt.get_parent_ids())
 
52
        self.assertEqual(['a2'], wt.get_parent_ids())
56
53
 
57
54
        # Uncommit, don't prompt
58
55
        out, err = self.run_bzr('uncommit --force')
60
57
        self.assertContainsRe(out, 'second commit')
61
58
 
62
59
        # This should look like we are back in revno 1
63
 
        self.assertEqual([b'a1'], wt.get_parent_ids())
 
60
        self.assertEqual(['a1'], wt.get_parent_ids())
64
61
        out, err = self.run_bzr('status')
65
 
        self.assertEqual(out, 'modified:\n  a\n')
66
 
 
67
 
    def test_uncommit_interactive(self):
68
 
        """Uncommit seeks confirmation, and doesn't proceed without it."""
69
 
        wt = self.create_simple_tree()
70
 
        os.chdir('tree')
71
 
        run_script(self, """
72
 
        $ brz uncommit
73
 
        ...
74
 
        The above revision(s) will be removed.
75
 
        2>Uncommit these revisions? ([y]es, [n]o): no
76
 
        <n
77
 
        Canceled
78
 
        """)
79
 
        self.assertEqual([b'a2'], wt.get_parent_ids())
 
62
        self.assertEquals(out, 'modified:\n  a\n')
80
63
 
81
64
    def test_uncommit_no_history(self):
82
65
        wt = self.make_branch_and_tree('tree')
88
71
        wt = self.create_simple_tree()
89
72
        checkout_tree = wt.branch.create_checkout('checkout')
90
73
 
91
 
        self.assertEqual([b'a2'], checkout_tree.get_parent_ids())
 
74
        self.assertEqual(['a2'], checkout_tree.get_parent_ids())
92
75
 
93
76
        os.chdir('checkout')
94
77
        out, err = self.run_bzr('uncommit --dry-run --force')
96
79
        self.assertNotContainsRe(out, 'initial commit')
97
80
        self.assertContainsRe(out, 'second commit')
98
81
 
99
 
        self.assertEqual([b'a2'], checkout_tree.get_parent_ids())
 
82
        self.assertEqual(['a2'], checkout_tree.get_parent_ids())
100
83
 
101
84
        out, err = self.run_bzr('uncommit --force')
102
85
        self.assertNotContainsRe(out, 'initial commit')
104
87
 
105
88
        # uncommit in a checkout should uncommit the parent branch
106
89
        # (but doesn't effect the other working tree)
107
 
        self.assertEqual([b'a1'], checkout_tree.get_parent_ids())
108
 
        self.assertEqual(b'a1', wt.branch.last_revision())
109
 
        self.assertEqual([b'a2'], wt.get_parent_ids())
 
90
        self.assertEquals(['a1'], checkout_tree.get_parent_ids())
 
91
        self.assertEquals('a1', wt.branch.last_revision())
 
92
        self.assertEquals(['a2'], wt.get_parent_ids())
110
93
 
111
94
    def test_uncommit_bound(self):
112
95
        os.mkdir('a')
119
102
        t_a.commit('commit 3')
120
103
        b = t_a.branch.create_checkout('b').branch
121
104
        uncommit.uncommit(b)
122
 
        self.assertEqual(b.last_revision_info()[0], 2)
123
 
        self.assertEqual(t_a.branch.last_revision_info()[0], 2)
 
105
        self.assertEqual(len(b.revision_history()), 2)
 
106
        self.assertEqual(len(t_a.branch.revision_history()), 2)
124
107
        # update A's tree to not have the uncommitted revision referenced.
125
108
        t_a.update()
126
109
        t_a.commit('commit 3b')
148
131
 
149
132
        self.assertNotContainsRe(out, 'initial commit')
150
133
        self.assertContainsRe(out, 'second commit')
151
 
        self.assertEqual([b'a1'], wt.get_parent_ids())
152
 
        self.assertEqual(b'a1', wt.branch.last_revision())
 
134
        self.assertEqual(['a1'], wt.get_parent_ids())
 
135
        self.assertEqual('a1', wt.branch.last_revision())
153
136
 
154
137
    def test_uncommit_neg_1(self):
155
138
        wt = self.create_simple_tree()
160
143
    def test_uncommit_merges(self):
161
144
        wt = self.create_simple_tree()
162
145
 
163
 
        tree2 = wt.controldir.sprout('tree2').open_workingtree()
 
146
        tree2 = wt.bzrdir.sprout('tree2').open_workingtree()
164
147
 
165
 
        tree2.commit('unchanged', rev_id=b'b3')
166
 
        tree2.commit('unchanged', rev_id=b'b4')
 
148
        tree2.commit('unchanged', rev_id='b3')
 
149
        tree2.commit('unchanged', rev_id='b4')
167
150
 
168
151
        wt.merge_from_branch(tree2.branch)
169
 
        wt.commit('merge b4', rev_id=b'a3')
 
152
        wt.commit('merge b4', rev_id='a3')
170
153
 
171
 
        self.assertEqual([b'a3'], wt.get_parent_ids())
 
154
        self.assertEqual(['a3'], wt.get_parent_ids())
172
155
 
173
156
        os.chdir('tree')
174
157
        out, err = self.run_bzr('uncommit --force')
175
158
 
176
 
        self.assertEqual([b'a2', b'b4'], wt.get_parent_ids())
 
159
        self.assertEqual(['a2', 'b4'], wt.get_parent_ids())
177
160
 
178
161
    def test_uncommit_pending_merge(self):
179
162
        wt = self.create_simple_tree()
180
 
        tree2 = wt.controldir.sprout('tree2').open_workingtree()
181
 
        tree2.commit('unchanged', rev_id=b'b3')
 
163
        tree2 = wt.bzrdir.sprout('tree2').open_workingtree()
 
164
        tree2.commit('unchanged', rev_id='b3')
182
165
 
183
166
        wt.branch.fetch(tree2.branch)
184
 
        wt.set_pending_merges([b'b3'])
 
167
        wt.set_pending_merges(['b3'])
185
168
 
186
169
        os.chdir('tree')
187
170
        out, err = self.run_bzr('uncommit --force')
188
 
        self.assertEqual([b'a1', b'b3'], wt.get_parent_ids())
 
171
        self.assertEqual(['a1', 'b3'], wt.get_parent_ids())
189
172
 
190
173
    def test_uncommit_multiple_merge(self):
191
174
        wt = self.create_simple_tree()
192
175
 
193
 
        tree2 = wt.controldir.sprout('tree2').open_workingtree()
194
 
        tree2.commit('unchanged', rev_id=b'b3')
 
176
        tree2 = wt.bzrdir.sprout('tree2').open_workingtree()
 
177
        tree2.commit('unchanged', rev_id='b3')
195
178
 
196
 
        tree3 = wt.controldir.sprout('tree3').open_workingtree()
197
 
        tree3.commit('unchanged', rev_id=b'c3')
 
179
        tree3 = wt.bzrdir.sprout('tree3').open_workingtree()
 
180
        tree3.commit('unchanged', rev_id='c3')
198
181
 
199
182
        wt.merge_from_branch(tree2.branch)
200
 
        wt.commit('merge b3', rev_id=b'a3')
 
183
        wt.commit('merge b3', rev_id='a3')
201
184
 
202
185
        wt.merge_from_branch(tree3.branch)
203
 
        wt.commit('merge c3', rev_id=b'a4')
 
186
        wt.commit('merge c3', rev_id='a4')
204
187
 
205
 
        self.assertEqual([b'a4'], wt.get_parent_ids())
 
188
        self.assertEqual(['a4'], wt.get_parent_ids())
206
189
 
207
190
        os.chdir('tree')
208
191
        out, err = self.run_bzr('uncommit --force -r 2')
209
192
 
210
 
        self.assertEqual([b'a2', b'b3', b'c3'], wt.get_parent_ids())
 
193
        self.assertEqual(['a2', 'b3', 'c3'], wt.get_parent_ids())
211
194
 
212
195
    def test_uncommit_merge_plus_pending(self):
213
196
        wt = self.create_simple_tree()
214
197
 
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')
 
198
        tree2 = wt.bzrdir.sprout('tree2').open_workingtree()
 
199
        tree2.commit('unchanged', rev_id='b3')
 
200
        tree3 = wt.bzrdir.sprout('tree3').open_workingtree()
 
201
        tree3.commit('unchanged', rev_id='c3')
219
202
 
220
203
        wt.branch.fetch(tree2.branch)
221
 
        wt.set_pending_merges([b'b3'])
222
 
        wt.commit('merge b3', rev_id=b'a3')
 
204
        wt.set_pending_merges(['b3'])
 
205
        wt.commit('merge b3', rev_id='a3')
 
206
 
223
207
 
224
208
        wt.merge_from_branch(tree3.branch)
225
209
 
226
 
        self.assertEqual([b'a3', b'c3'], wt.get_parent_ids())
 
210
        self.assertEqual(['a3', 'c3'], wt.get_parent_ids())
227
211
 
228
212
        os.chdir('tree')
229
213
        out, err = self.run_bzr('uncommit --force -r 2')
230
214
 
231
 
        self.assertEqual([b'a2', b'b3', b'c3'], wt.get_parent_ids())
 
215
        self.assertEqual(['a2', 'b3', 'c3'], wt.get_parent_ids())
232
216
 
233
217
    def test_uncommit_shows_log_with_revision_id(self):
234
218
        wt = self.create_simple_tree()
236
220
        script = ScriptRunner()
237
221
        script.run_script(self, """
238
222
$ cd tree
239
 
$ brz uncommit --force
240
 
    2 ...
241
 
      second commit
242
 
...
243
 
The above revision(s) will be removed.
244
 
You can restore the old tip by running:
245
 
  brz pull . -r revid:a2
246
 
""")
247
 
 
248
 
    def test_uncommit_shows_pull_with_location(self):
249
 
        wt = self.create_simple_tree()
250
 
 
251
 
        script = ScriptRunner()
252
 
        script.run_script(self, """
253
 
$ brz uncommit --force tree
254
 
    2 ...
255
 
      second commit
256
 
...
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
 
223
$ bzr uncommit --force 
 
224
    2 ...
 
225
      second commit
 
226
...
 
227
The above revision(s) will be removed.
 
228
You can restore the old tip by running:
 
229
  bzr pull . -r revid:a2
260
230
""")
261
231
 
262
232
    def test_uncommit_octopus_merge(self):
264
234
        # though it will also filter out ones in the ancestry
265
235
        wt = self.create_simple_tree()
266
236
 
267
 
        tree2 = wt.controldir.sprout('tree2').open_workingtree()
268
 
        tree3 = wt.controldir.sprout('tree3').open_workingtree()
 
237
        tree2 = wt.bzrdir.sprout('tree2').open_workingtree()
 
238
        tree3 = wt.bzrdir.sprout('tree3').open_workingtree()
269
239
 
270
 
        tree2.commit('unchanged', rev_id=b'b3')
271
 
        tree3.commit('unchanged', rev_id=b'c3')
 
240
        tree2.commit('unchanged', rev_id='b3')
 
241
        tree3.commit('unchanged', rev_id='c3')
272
242
 
273
243
        wt.merge_from_branch(tree2.branch)
274
244
        wt.merge_from_branch(tree3.branch, force=True)
275
 
        wt.commit('merge b3, c3', rev_id=b'a3')
 
245
        wt.commit('merge b3, c3', rev_id='a3')
276
246
 
277
 
        tree2.commit('unchanged', rev_id=b'b4')
278
 
        tree3.commit('unchanged', rev_id=b'c4')
 
247
        tree2.commit('unchanged', rev_id='b4')
 
248
        tree3.commit('unchanged', rev_id='c4')
279
249
 
280
250
        wt.merge_from_branch(tree3.branch)
281
251
        wt.merge_from_branch(tree2.branch, force=True)
282
 
        wt.commit('merge b4, c4', rev_id=b'a4')
 
252
        wt.commit('merge b4, c4', rev_id='a4')
283
253
 
284
 
        self.assertEqual([b'a4'], wt.get_parent_ids())
 
254
        self.assertEqual(['a4'], wt.get_parent_ids())
285
255
 
286
256
        os.chdir('tree')
287
257
        out, err = self.run_bzr('uncommit --force -r 2')
288
258
 
289
 
        self.assertEqual([b'a2', b'c4', b'b4'], wt.get_parent_ids())
 
259
        self.assertEqual(['a2', 'c4', 'b4'], wt.get_parent_ids())
290
260
 
291
261
    def test_uncommit_nonascii(self):
292
262
        tree = self.make_branch_and_tree('tree')
293
263
        tree.commit(u'\u1234 message')
294
264
        out, err = self.run_bzr('uncommit --force tree', encoding='ascii')
295
265
        self.assertContainsRe(out, r'\? message')
296
 
 
297
 
    def test_uncommit_removes_tags(self):
298
 
        tree = self.make_branch_and_tree('tree')
299
 
        revid = tree.commit('message')
300
 
        tree.branch.tags.set_tag("atag", revid)
301
 
        out, err = self.run_bzr('uncommit --force tree')
302
 
        self.assertEqual({}, tree.branch.tags.get_tag_dict())
303
 
 
304
 
    def test_uncommit_keep_tags(self):
305
 
        tree = self.make_branch_and_tree('tree')
306
 
        revid = tree.commit('message')
307
 
        tree.branch.tags.set_tag("atag", revid)
308
 
        out, err = self.run_bzr('uncommit --keep-tags --force tree')
309
 
        self.assertEqual({"atag": revid}, tree.branch.tags.get_tag_dict())
310
 
 
311
 
 
312
 
class TestInconsistentDelta(TestCaseWithTransport):
313
 
    # See https://bugs.launchpad.net/bzr/+bug/855155
314
 
    # See https://bugs.launchpad.net/bzr/+bug/1100385
315
 
    # brz uncommit may result in error
316
 
    # 'An inconsistent delta was supplied involving'
317
 
 
318
 
    def test_inconsistent_delta(self):
319
 
        # Script taken from https://bugs.launchpad.net/bzr/+bug/855155/comments/26
320
 
        wt = self.make_branch_and_tree('test')
321
 
        self.build_tree(['test/a/', 'test/a/b', 'test/a/c'])
322
 
        wt.add(['a', 'a/b', 'a/c'])
323
 
        wt.commit('initial commit', rev_id=b'a1')
324
 
        wt.remove(['a/b', 'a/c'])
325
 
        wt.commit('remove b and c', rev_id=b'a2')
326
 
        self.run_bzr("uncommit --force test")