~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

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

  • Committer: Patch Queue Manager
  • Date: 2014-02-12 18:22:22 UTC
  • mfrom: (6589.2.1 trunk)
  • Revision ID: pqm@pqm.ubuntu.com-20140212182222-beouo25gaf1cny76
(vila) The XDG Base Directory Specification uses the XDG_CACHE_HOME,
 not XDG_CACHE_DIR. (Andrew Starr-Bochicchio)

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2005, 2006, 2008 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 bzrlib import uncommit, workingtree
 
21
from bzrlib import uncommit
22
22
from bzrlib.bzrdir import BzrDirMetaFormat1
23
 
from bzrlib.errors import BzrError, BoundBranchOutOfDate
 
23
from bzrlib.errors import 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
    )
25
30
 
26
31
 
27
32
class TestUncommit(TestCaseWithTransport):
60
65
        out, err = self.run_bzr('status')
61
66
        self.assertEquals(out, 'modified:\n  a\n')
62
67
 
 
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
 
63
82
    def test_uncommit_no_history(self):
64
83
        wt = self.make_branch_and_tree('tree')
65
84
        out, err = self.run_bzr('uncommit --force', retcode=1)
101
120
        t_a.commit('commit 3')
102
121
        b = t_a.branch.create_checkout('b').branch
103
122
        uncommit.uncommit(b)
104
 
        self.assertEqual(len(b.revision_history()), 2)
105
 
        self.assertEqual(len(t_a.branch.revision_history()), 2)
 
123
        self.assertEqual(b.last_revision_info()[0], 2)
 
124
        self.assertEqual(t_a.branch.last_revision_info()[0], 2)
106
125
        # update A's tree to not have the uncommitted revision referenced.
107
126
        t_a.update()
108
127
        t_a.commit('commit 3b')
216
235
    def test_uncommit_shows_log_with_revision_id(self):
217
236
        wt = self.create_simple_tree()
218
237
 
219
 
        out, err = self.run_bzr('uncommit --force', working_dir='tree')
220
 
        self.assertContainsRe(out, r'second commit')
221
 
        self.assertContainsRe(err, r'You can restore the old tip by running')
222
 
        self.assertContainsRe(err, r'bzr pull . -r revid:a2')
 
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
""")
223
249
 
224
250
    def test_uncommit_octopus_merge(self):
225
251
        # Check that uncommit keeps the pending merges in the same order
233
259
        tree3.commit('unchanged', rev_id='c3')
234
260
 
235
261
        wt.merge_from_branch(tree2.branch)
236
 
        wt.merge_from_branch(tree3.branch)
 
262
        wt.merge_from_branch(tree3.branch, force=True)
237
263
        wt.commit('merge b3, c3', rev_id='a3')
238
264
 
239
265
        tree2.commit('unchanged', rev_id='b4')
240
266
        tree3.commit('unchanged', rev_id='c4')
241
267
 
242
268
        wt.merge_from_branch(tree3.branch)
243
 
        wt.merge_from_branch(tree2.branch)
 
269
        wt.merge_from_branch(tree2.branch, force=True)
244
270
        wt.commit('merge b4, c4', rev_id='a4')
245
271
 
246
272
        self.assertEqual(['a4'], wt.get_parent_ids())
255
281
        tree.commit(u'\u1234 message')
256
282
        out, err = self.run_bzr('uncommit --force tree', encoding='ascii')
257
283
        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")