~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

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

  • Committer: John Arbash Meinel
  • Author(s): Mark Hammond
  • Date: 2008-09-09 17:02:21 UTC
  • mto: This revision was merged to the branch mainline in revision 3697.
  • Revision ID: john@arbash-meinel.com-20080909170221-svim3jw2mrz0amp3
An updated transparent icon for bzr.

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, 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):
63
58
        # This should look like we are back in revno 1
64
59
        self.assertEqual(['a1'], wt.get_parent_ids())
65
60
        out, err = self.run_bzr('status')
66
 
        self.assertEqual(out, 'modified:\n  a\n')
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())
 
61
        self.assertEquals(out, 'modified:\n  a\n')
81
62
 
82
63
    def test_uncommit_no_history(self):
83
64
        wt = self.make_branch_and_tree('tree')
105
86
 
106
87
        # uncommit in a checkout should uncommit the parent branch
107
88
        # (but doesn't effect the other working tree)
108
 
        self.assertEqual(['a1'], checkout_tree.get_parent_ids())
109
 
        self.assertEqual('a1', wt.branch.last_revision())
110
 
        self.assertEqual(['a2'], wt.get_parent_ids())
 
89
        self.assertEquals(['a1'], checkout_tree.get_parent_ids())
 
90
        self.assertEquals('a1', wt.branch.last_revision())
 
91
        self.assertEquals(['a2'], wt.get_parent_ids())
111
92
 
112
93
    def test_uncommit_bound(self):
113
94
        os.mkdir('a')
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)
235
216
    def test_uncommit_shows_log_with_revision_id(self):
236
217
        wt = self.create_simple_tree()
237
218
 
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
 
""")
 
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')
249
223
 
250
224
    def test_uncommit_octopus_merge(self):
251
225
        # Check that uncommit keeps the pending merges in the same order
259
233
        tree3.commit('unchanged', rev_id='c3')
260
234
 
261
235
        wt.merge_from_branch(tree2.branch)
262
 
        wt.merge_from_branch(tree3.branch, force=True)
 
236
        wt.merge_from_branch(tree3.branch)
263
237
        wt.commit('merge b3, c3', rev_id='a3')
264
238
 
265
239
        tree2.commit('unchanged', rev_id='b4')
266
240
        tree3.commit('unchanged', rev_id='c4')
267
241
 
268
242
        wt.merge_from_branch(tree3.branch)
269
 
        wt.merge_from_branch(tree2.branch, force=True)
 
243
        wt.merge_from_branch(tree2.branch)
270
244
        wt.commit('merge b4, c4', rev_id='a4')
271
245
 
272
246
        self.assertEqual(['a4'], wt.get_parent_ids())
281
255
        tree.commit(u'\u1234 message')
282
256
        out, err = self.run_bzr('uncommit --force tree', encoding='ascii')
283
257
        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.assertEqual({}, 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.assertEqual({"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")