~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
  • Date: 2006-09-13 02:44:23 UTC
  • mto: This revision was merged to the branch mainline in revision 2071.
  • Revision ID: john@arbash-meinel.com-20060913024423-2f0729076ddd4e31
lazy_import osutils and sign_my_commits
Move doc tests into test_osutils, since lazy_import doesn't play nicely
with DocTest

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2005-2010 Canonical Ltd
 
1
# Copyright (C) 2005, 2006 by 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
 
22
22
from bzrlib.bzrdir import BzrDirMetaFormat1
23
23
from bzrlib.errors import BzrError, BoundBranchOutOfDate
24
24
from bzrlib.tests import TestCaseWithTransport
25
 
from bzrlib.tests.script import ScriptRunner
26
25
 
27
26
 
28
27
class TestUncommit(TestCaseWithTransport):
33
32
        wt.add(['a', 'b', 'c'])
34
33
        wt.commit('initial commit', rev_id='a1')
35
34
 
36
 
        self.build_tree_contents([('tree/a', 'new contents of a\n')])
 
35
        open('tree/a', 'wb').write('new contents of a\n')
37
36
        wt.commit('second commit', rev_id='a2')
38
37
 
39
38
        return wt
43
42
        wt = self.create_simple_tree()
44
43
 
45
44
        os.chdir('tree')
46
 
        out, err = self.run_bzr('uncommit --dry-run --force')
 
45
        out, err = self.run_bzr('uncommit', '--dry-run', '--force')
47
46
        self.assertContainsRe(out, 'Dry-run')
48
47
        self.assertNotContainsRe(out, 'initial commit')
49
48
        self.assertContainsRe(out, 'second commit')
52
51
        self.assertEqual(['a2'], wt.get_parent_ids())
53
52
 
54
53
        # Uncommit, don't prompt
55
 
        out, err = self.run_bzr('uncommit --force')
 
54
        out, err = self.run_bzr('uncommit', '--force')
56
55
        self.assertNotContainsRe(out, 'initial commit')
57
56
        self.assertContainsRe(out, 'second commit')
58
57
 
61
60
        out, err = self.run_bzr('status')
62
61
        self.assertEquals(out, 'modified:\n  a\n')
63
62
 
64
 
    def test_uncommit_no_history(self):
65
 
        wt = self.make_branch_and_tree('tree')
66
 
        out, err = self.run_bzr('uncommit --force', retcode=1)
67
 
        self.assertEqual('', err)
68
 
        self.assertEqual('No revisions to uncommit.\n', out)
69
 
 
70
63
    def test_uncommit_checkout(self):
71
64
        wt = self.create_simple_tree()
72
 
        checkout_tree = wt.branch.create_checkout('checkout')
 
65
 
 
66
        checkout_tree = wt.bzrdir.sprout('checkout').open_workingtree()
 
67
        checkout_tree.branch.bind(wt.branch)
73
68
 
74
69
        self.assertEqual(['a2'], checkout_tree.get_parent_ids())
75
70
 
76
71
        os.chdir('checkout')
77
 
        out, err = self.run_bzr('uncommit --dry-run --force')
 
72
        out, err = self.run_bzr('uncommit', '--dry-run', '--force')
78
73
        self.assertContainsRe(out, 'Dry-run')
79
74
        self.assertNotContainsRe(out, 'initial commit')
80
75
        self.assertContainsRe(out, 'second commit')
81
76
 
82
77
        self.assertEqual(['a2'], checkout_tree.get_parent_ids())
83
78
 
84
 
        out, err = self.run_bzr('uncommit --force')
 
79
        out, err = self.run_bzr('uncommit', '--force')
85
80
        self.assertNotContainsRe(out, 'initial commit')
86
81
        self.assertContainsRe(out, 'second commit')
87
82
 
100
95
        t_a.commit('commit 1')
101
96
        t_a.commit('commit 2')
102
97
        t_a.commit('commit 3')
103
 
        b = t_a.branch.create_checkout('b').branch
 
98
        b = t_a.bzrdir.sprout('b').open_branch()
 
99
        b.bind(t_a.branch)
104
100
        uncommit.uncommit(b)
105
101
        self.assertEqual(len(b.revision_history()), 2)
106
102
        self.assertEqual(len(t_a.branch.revision_history()), 2)
107
 
        # update A's tree to not have the uncommitted revision referenced.
 
103
        # update A's tree to not have the uncomitted revision referenced.
108
104
        t_a.update()
109
105
        t_a.commit('commit 3b')
110
106
        self.assertRaises(BoundBranchOutOfDate, uncommit.uncommit, b)
111
107
        b.pull(t_a.branch)
112
108
        uncommit.uncommit(b)
113
109
 
114
 
    def test_uncommit_bound_local(self):
115
 
        t_a = self.make_branch_and_tree('a')
116
 
        rev_id1 = t_a.commit('commit 1')
117
 
        rev_id2 = t_a.commit('commit 2')
118
 
        rev_id3 = t_a.commit('commit 3')
119
 
        b = t_a.branch.create_checkout('b').branch
120
 
 
121
 
        out, err = self.run_bzr(['uncommit', '--local', 'b', '--force'])
122
 
        self.assertEqual(rev_id3, t_a.last_revision())
123
 
        self.assertEqual((3, rev_id3), t_a.branch.last_revision_info())
124
 
        self.assertEqual((2, rev_id2), b.last_revision_info())
125
 
 
126
110
    def test_uncommit_revision(self):
127
111
        wt = self.create_simple_tree()
128
112
 
129
113
        os.chdir('tree')
130
 
        out, err = self.run_bzr('uncommit -r1 --force')
 
114
        out, err = self.run_bzr('uncommit', '-r1', '--force')
131
115
 
132
116
        self.assertNotContainsRe(out, 'initial commit')
133
117
        self.assertContainsRe(out, 'second commit')
137
121
    def test_uncommit_neg_1(self):
138
122
        wt = self.create_simple_tree()
139
123
        os.chdir('tree')
140
 
        out, err = self.run_bzr('uncommit -r -1', retcode=1)
 
124
        out, err = self.run_bzr('uncommit', '-r', '-1', retcode=1)
141
125
        self.assertEqual('No revisions to uncommit.\n', out)
142
126
 
143
127
    def test_uncommit_merges(self):
154
138
        self.assertEqual(['a3'], wt.get_parent_ids())
155
139
 
156
140
        os.chdir('tree')
157
 
        out, err = self.run_bzr('uncommit --force')
 
141
        out, err = self.run_bzr('uncommit', '--force')
158
142
 
159
143
        self.assertEqual(['a2', 'b4'], wt.get_parent_ids())
160
144
 
167
151
        wt.set_pending_merges(['b3'])
168
152
 
169
153
        os.chdir('tree')
170
 
        out, err = self.run_bzr('uncommit --force')
 
154
        out, err = self.run_bzr('uncommit', '--force')
171
155
        self.assertEqual(['a1', 'b3'], wt.get_parent_ids())
172
156
 
173
157
    def test_uncommit_multiple_merge(self):
174
158
        wt = self.create_simple_tree()
175
159
 
176
160
        tree2 = wt.bzrdir.sprout('tree2').open_workingtree()
 
161
 
177
162
        tree2.commit('unchanged', rev_id='b3')
178
163
 
179
 
        tree3 = wt.bzrdir.sprout('tree3').open_workingtree()
180
 
        tree3.commit('unchanged', rev_id='c3')
181
 
 
182
164
        wt.merge_from_branch(tree2.branch)
183
165
        wt.commit('merge b3', rev_id='a3')
184
166
 
185
 
        wt.merge_from_branch(tree3.branch)
186
 
        wt.commit('merge c3', rev_id='a4')
 
167
        tree2.commit('unchanged', rev_id='b4')
 
168
 
 
169
        wt.merge_from_branch(tree2.branch)
 
170
        wt.commit('merge b4', rev_id='a4')
187
171
 
188
172
        self.assertEqual(['a4'], wt.get_parent_ids())
189
173
 
190
174
        os.chdir('tree')
191
 
        out, err = self.run_bzr('uncommit --force -r 2')
 
175
        out, err = self.run_bzr('uncommit', '--force', '-r', '2')
192
176
 
193
 
        self.assertEqual(['a2', 'b3', 'c3'], wt.get_parent_ids())
 
177
        self.assertEqual(['a2', 'b3', 'b4'], wt.get_parent_ids())
194
178
 
195
179
    def test_uncommit_merge_plus_pending(self):
196
180
        wt = self.create_simple_tree()
197
181
 
198
182
        tree2 = wt.bzrdir.sprout('tree2').open_workingtree()
 
183
 
199
184
        tree2.commit('unchanged', rev_id='b3')
200
 
        tree3 = wt.bzrdir.sprout('tree3').open_workingtree()
201
 
        tree3.commit('unchanged', rev_id='c3')
202
 
 
203
185
        wt.branch.fetch(tree2.branch)
204
186
        wt.set_pending_merges(['b3'])
205
187
        wt.commit('merge b3', rev_id='a3')
206
188
 
207
 
 
208
 
        wt.merge_from_branch(tree3.branch)
209
 
 
210
 
        self.assertEqual(['a3', 'c3'], wt.get_parent_ids())
 
189
        tree2.commit('unchanged', rev_id='b4')
 
190
        wt.branch.fetch(tree2.branch)
 
191
        wt.set_pending_merges(['b4'])
 
192
 
 
193
        self.assertEqual(['a3', 'b4'], wt.get_parent_ids())
211
194
 
212
195
        os.chdir('tree')
213
 
        out, err = self.run_bzr('uncommit --force -r 2')
214
 
 
215
 
        self.assertEqual(['a2', 'b3', 'c3'], wt.get_parent_ids())
216
 
 
217
 
    def test_uncommit_shows_log_with_revision_id(self):
218
 
        wt = self.create_simple_tree()
219
 
 
220
 
        script = ScriptRunner()
221
 
        script.run_script(self, """
222
 
$ cd tree
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
230
 
""")
 
196
        out, err = self.run_bzr('uncommit', '--force', '-r', '2')
 
197
 
 
198
        self.assertEqual(['a2', 'b3', 'b4'], wt.get_parent_ids())
231
199
 
232
200
    def test_uncommit_octopus_merge(self):
233
201
        # Check that uncommit keeps the pending merges in the same order
234
 
        # though it will also filter out ones in the ancestry
235
202
        wt = self.create_simple_tree()
236
203
 
237
204
        tree2 = wt.bzrdir.sprout('tree2').open_workingtree()
239
206
 
240
207
        tree2.commit('unchanged', rev_id='b3')
241
208
        tree3.commit('unchanged', rev_id='c3')
242
 
 
 
209
        
243
210
        wt.merge_from_branch(tree2.branch)
244
 
        wt.merge_from_branch(tree3.branch, force=True)
 
211
        wt.merge_from_branch(tree3.branch)
245
212
        wt.commit('merge b3, c3', rev_id='a3')
246
213
 
247
214
        tree2.commit('unchanged', rev_id='b4')
248
215
        tree3.commit('unchanged', rev_id='c4')
249
216
 
250
217
        wt.merge_from_branch(tree3.branch)
251
 
        wt.merge_from_branch(tree2.branch, force=True)
 
218
        wt.merge_from_branch(tree2.branch)
252
219
        wt.commit('merge b4, c4', rev_id='a4')
253
220
 
254
221
        self.assertEqual(['a4'], wt.get_parent_ids())
255
222
 
256
223
        os.chdir('tree')
257
 
        out, err = self.run_bzr('uncommit --force -r 2')
258
 
 
259
 
        self.assertEqual(['a2', 'c4', 'b4'], wt.get_parent_ids())
260
 
 
261
 
    def test_uncommit_nonascii(self):
262
 
        tree = self.make_branch_and_tree('tree')
263
 
        tree.commit(u'\u1234 message')
264
 
        out, err = self.run_bzr('uncommit --force tree', encoding='ascii')
265
 
        self.assertContainsRe(out, r'\? message')
 
224
        out, err = self.run_bzr('uncommit', '--force', '-r', '2')
 
225
 
 
226
        self.assertEqual(['a2', 'b3', 'c3', 'c4', 'b4'], wt.get_parent_ids())