~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

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

  • Committer: Canonical.com Patch Queue Manager
  • Date: 2008-05-06 11:40:10 UTC
  • mfrom: (3400.1.3 trivial)
  • Revision ID: pqm@pqm.ubuntu.com-20080506114010-jwclr2qtiekvawjg
Remove erroneous creation of branch-name file in cmd_branch

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2005-2010 Canonical Ltd
 
1
# Copyright (C) 2005, 2006, 2008 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
12
12
#
13
13
# You should have received a copy of the GNU General Public License
14
14
# along with this program; if not, write to the Free Software
15
 
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
16
16
 
17
17
"""Test the uncommit command."""
18
18
 
19
19
import os
20
20
 
21
 
from bzrlib import uncommit
 
21
from bzrlib import uncommit, workingtree
22
22
from bzrlib.bzrdir import BzrDirMetaFormat1
23
 
from bzrlib.errors import BoundBranchOutOfDate
 
23
from bzrlib.errors import BzrError, BoundBranchOutOfDate
24
24
from bzrlib.tests import TestCaseWithTransport
25
 
from bzrlib.tests.matchers import ContainsNoVfsCalls
26
 
from bzrlib.tests.script import (
27
 
    run_script,
28
 
    ScriptRunner,
29
 
    )
30
25
 
31
26
 
32
27
class TestUncommit(TestCaseWithTransport):
37
32
        wt.add(['a', 'b', 'c'])
38
33
        wt.commit('initial commit', rev_id='a1')
39
34
 
40
 
        self.build_tree_contents([('tree/a', 'new contents of a\n')])
 
35
        open('tree/a', 'wb').write('new contents of a\n')
41
36
        wt.commit('second commit', rev_id='a2')
42
37
 
43
38
        return wt
65
60
        out, err = self.run_bzr('status')
66
61
        self.assertEquals(out, 'modified:\n  a\n')
67
62
 
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')
72
 
        run_script(self, """    
73
 
        $ bzr uncommit
74
 
        ...
75
 
        The above revision(s) will be removed.
76
 
        2>Uncommit these revisions? ([y]es, [n]o): no
77
 
        <n
78
 
        Canceled
79
 
        """)
80
 
        self.assertEqual(['a2'], wt.get_parent_ids())
81
 
 
82
63
    def test_uncommit_no_history(self):
83
64
        wt = self.make_branch_and_tree('tree')
84
65
        out, err = self.run_bzr('uncommit --force', retcode=1)
120
101
        t_a.commit('commit 3')
121
102
        b = t_a.branch.create_checkout('b').branch
122
103
        uncommit.uncommit(b)
123
 
        self.assertEqual(b.last_revision_info()[0], 2)
124
 
        self.assertEqual(t_a.branch.last_revision_info()[0], 2)
125
 
        # update A's tree to not have the uncommitted revision referenced.
 
104
        self.assertEqual(len(b.revision_history()), 2)
 
105
        self.assertEqual(len(t_a.branch.revision_history()), 2)
 
106
        # update A's tree to not have the uncomitted revision referenced.
126
107
        t_a.update()
127
108
        t_a.commit('commit 3b')
128
109
        self.assertRaises(BoundBranchOutOfDate, uncommit.uncommit, b)
192
173
        wt = self.create_simple_tree()
193
174
 
194
175
        tree2 = wt.bzrdir.sprout('tree2').open_workingtree()
 
176
 
195
177
        tree2.commit('unchanged', rev_id='b3')
196
178
 
197
 
        tree3 = wt.bzrdir.sprout('tree3').open_workingtree()
198
 
        tree3.commit('unchanged', rev_id='c3')
199
 
 
200
179
        wt.merge_from_branch(tree2.branch)
201
180
        wt.commit('merge b3', rev_id='a3')
202
181
 
203
 
        wt.merge_from_branch(tree3.branch)
204
 
        wt.commit('merge c3', rev_id='a4')
 
182
        tree2.commit('unchanged', rev_id='b4')
 
183
 
 
184
        wt.merge_from_branch(tree2.branch)
 
185
        wt.commit('merge b4', rev_id='a4')
205
186
 
206
187
        self.assertEqual(['a4'], wt.get_parent_ids())
207
188
 
208
189
        os.chdir('tree')
209
190
        out, err = self.run_bzr('uncommit --force -r 2')
210
191
 
211
 
        self.assertEqual(['a2', 'b3', 'c3'], wt.get_parent_ids())
 
192
        self.assertEqual(['a2', 'b3', 'b4'], wt.get_parent_ids())
212
193
 
213
194
    def test_uncommit_merge_plus_pending(self):
214
195
        wt = self.create_simple_tree()
215
196
 
216
197
        tree2 = wt.bzrdir.sprout('tree2').open_workingtree()
 
198
 
217
199
        tree2.commit('unchanged', rev_id='b3')
218
 
        tree3 = wt.bzrdir.sprout('tree3').open_workingtree()
219
 
        tree3.commit('unchanged', rev_id='c3')
220
 
 
221
200
        wt.branch.fetch(tree2.branch)
222
201
        wt.set_pending_merges(['b3'])
223
202
        wt.commit('merge b3', rev_id='a3')
224
203
 
225
 
 
226
 
        wt.merge_from_branch(tree3.branch)
227
 
 
228
 
        self.assertEqual(['a3', 'c3'], wt.get_parent_ids())
 
204
        tree2.commit('unchanged', rev_id='b4')
 
205
        wt.branch.fetch(tree2.branch)
 
206
        wt.set_pending_merges(['b4'])
 
207
 
 
208
        self.assertEqual(['a3', 'b4'], wt.get_parent_ids())
229
209
 
230
210
        os.chdir('tree')
231
211
        out, err = self.run_bzr('uncommit --force -r 2')
232
212
 
233
 
        self.assertEqual(['a2', 'b3', 'c3'], wt.get_parent_ids())
234
 
 
235
 
    def test_uncommit_shows_log_with_revision_id(self):
236
 
        wt = self.create_simple_tree()
237
 
 
238
 
        script = ScriptRunner()
239
 
        script.run_script(self, """
240
 
$ cd tree
241
 
$ bzr uncommit --force 
242
 
    2 ...
243
 
      second commit
244
 
...
245
 
The above revision(s) will be removed.
246
 
You can restore the old tip by running:
247
 
  bzr pull . -r revid:a2
248
 
""")
 
213
        self.assertEqual(['a2', 'b3', 'b4'], wt.get_parent_ids())
249
214
 
250
215
    def test_uncommit_octopus_merge(self):
251
216
        # Check that uncommit keeps the pending merges in the same order
252
 
        # though it will also filter out ones in the ancestry
253
217
        wt = self.create_simple_tree()
254
218
 
255
219
        tree2 = wt.bzrdir.sprout('tree2').open_workingtree()
257
221
 
258
222
        tree2.commit('unchanged', rev_id='b3')
259
223
        tree3.commit('unchanged', rev_id='c3')
260
 
 
 
224
        
261
225
        wt.merge_from_branch(tree2.branch)
262
 
        wt.merge_from_branch(tree3.branch, force=True)
 
226
        wt.merge_from_branch(tree3.branch)
263
227
        wt.commit('merge b3, c3', rev_id='a3')
264
228
 
265
229
        tree2.commit('unchanged', rev_id='b4')
266
230
        tree3.commit('unchanged', rev_id='c4')
267
231
 
268
232
        wt.merge_from_branch(tree3.branch)
269
 
        wt.merge_from_branch(tree2.branch, force=True)
 
233
        wt.merge_from_branch(tree2.branch)
270
234
        wt.commit('merge b4, c4', rev_id='a4')
271
235
 
272
236
        self.assertEqual(['a4'], wt.get_parent_ids())
274
238
        os.chdir('tree')
275
239
        out, err = self.run_bzr('uncommit --force -r 2')
276
240
 
277
 
        self.assertEqual(['a2', 'c4', 'b4'], wt.get_parent_ids())
 
241
        self.assertEqual(['a2', 'b3', 'c3', 'c4', 'b4'], wt.get_parent_ids())
278
242
 
279
243
    def test_uncommit_nonascii(self):
280
244
        tree = self.make_branch_and_tree('tree')
281
245
        tree.commit(u'\u1234 message')
282
246
        out, err = self.run_bzr('uncommit --force tree', encoding='ascii')
283
247
        self.assertContainsRe(out, r'\? message')
284
 
 
285
 
    def test_uncommit_removes_tags(self):
286
 
        tree = self.make_branch_and_tree('tree')
287
 
        revid = tree.commit('message')
288
 
        tree.branch.tags.set_tag("atag", revid)
289
 
        out, err = self.run_bzr('uncommit --force tree')
290
 
        self.assertEquals({}, tree.branch.tags.get_tag_dict())
291
 
 
292
 
    def test_uncommit_keep_tags(self):
293
 
        tree = self.make_branch_and_tree('tree')
294
 
        revid = tree.commit('message')
295
 
        tree.branch.tags.set_tag("atag", revid)
296
 
        out, err = self.run_bzr('uncommit --keep-tags --force tree')
297
 
        self.assertEquals({"atag": revid}, tree.branch.tags.get_tag_dict())
298
 
 
299
 
 
300
 
class TestSmartServerUncommit(TestCaseWithTransport):
301
 
 
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)
317
 
 
318
 
 
319
 
class TestInconsistentDelta(TestCaseWithTransport):
320
 
    # See https://bugs.launchpad.net/bzr/+bug/855155
321
 
    # See https://bugs.launchpad.net/bzr/+bug/1100385
322
 
    # bzr uncommit may result in error
323
 
    # 'An inconsistent delta was supplied involving'
324
 
 
325
 
    def test_inconsistent_delta(self):
326
 
        # Script taken from https://bugs.launchpad.net/bzr/+bug/855155/comments/26
327
 
        wt = self.make_branch_and_tree('test')
328
 
        self.build_tree(['test/a/', 'test/a/b', 'test/a/c'])
329
 
        wt.add(['a', 'a/b', 'a/c'])
330
 
        wt.commit('initial commit', rev_id='a1')
331
 
        wt.remove(['a/b', 'a/c'])
332
 
        wt.commit('remove b and c', rev_id='a2')
333
 
        self.run_bzr("uncommit --force test")