/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

Tweak font settings in stylesheet

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')
50
49
 
51
50
        # Nothing has changed
52
 
        self.assertEqual(['a2'], wt.get_parent_ids())
 
51
        self.assertEqual('a2', wt.last_revision())
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
 
59
58
        # This should look like we are back in revno 1
60
 
        self.assertEqual(['a1'], wt.get_parent_ids())
 
59
        self.assertEqual('a1', wt.last_revision())
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')
73
 
 
74
 
        self.assertEqual(['a2'], checkout_tree.get_parent_ids())
 
65
 
 
66
        checkout_tree = wt.bzrdir.sprout('checkout').open_workingtree()
 
67
        checkout_tree.branch.bind(wt.branch)
 
68
 
 
69
        self.assertEqual('a2', checkout_tree.last_revision())
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
 
        self.assertEqual(['a2'], checkout_tree.get_parent_ids())
 
77
        self.assertEqual('a2', checkout_tree.last_revision())
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
 
88
83
        # uncommit in a checkout should uncommit the parent branch
89
84
        # (but doesn't effect the other working tree)
90
 
        self.assertEquals(['a1'], checkout_tree.get_parent_ids())
 
85
        self.assertEquals('a1', checkout_tree.last_revision())
91
86
        self.assertEquals('a1', wt.branch.last_revision())
92
 
        self.assertEquals(['a2'], wt.get_parent_ids())
 
87
        self.assertEquals('a2', wt.last_revision())
93
88
 
94
89
    def test_uncommit_bound(self):
95
90
        os.mkdir('a')
96
91
        a = BzrDirMetaFormat1().initialize('a')
97
92
        a.create_repository()
98
93
        a.create_branch()
99
 
        t_a = a.create_workingtree()
100
 
        t_a.commit('commit 1')
101
 
        t_a.commit('commit 2')
102
 
        t_a.commit('commit 3')
103
 
        b = t_a.branch.create_checkout('b').branch
 
94
        t = a.create_workingtree()
 
95
        t.commit('commit 1')
 
96
        t.commit('commit 2')
 
97
        t.commit('commit 3')
 
98
        b = t.bzrdir.sprout('b').open_branch()
 
99
        b.bind(t.branch)
104
100
        uncommit.uncommit(b)
 
101
        t.set_last_revision(t.branch.last_revision())
105
102
        self.assertEqual(len(b.revision_history()), 2)
106
 
        self.assertEqual(len(t_a.branch.revision_history()), 2)
107
 
        # update A's tree to not have the uncommitted revision referenced.
108
 
        t_a.update()
109
 
        t_a.commit('commit 3b')
 
103
        self.assertEqual(len(t.branch.revision_history()), 2)
 
104
        t.commit('commit 3b')
110
105
        self.assertRaises(BoundBranchOutOfDate, uncommit.uncommit, b)
111
 
        b.pull(t_a.branch)
 
106
        b.pull(t.branch)
112
107
        uncommit.uncommit(b)
113
108
 
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
109
    def test_uncommit_revision(self):
127
110
        wt = self.create_simple_tree()
128
111
 
129
112
        os.chdir('tree')
130
 
        out, err = self.run_bzr('uncommit -r1 --force')
 
113
        out, err = self.run_bzr('uncommit', '-r1', '--force')
131
114
 
132
115
        self.assertNotContainsRe(out, 'initial commit')
133
116
        self.assertContainsRe(out, 'second commit')
134
 
        self.assertEqual(['a1'], wt.get_parent_ids())
 
117
        self.assertEqual('a1', wt.last_revision())
135
118
        self.assertEqual('a1', wt.branch.last_revision())
136
119
 
137
120
    def test_uncommit_neg_1(self):
138
121
        wt = self.create_simple_tree()
139
122
        os.chdir('tree')
140
 
        out, err = self.run_bzr('uncommit -r -1', retcode=1)
 
123
        out, err = self.run_bzr('uncommit', '-r', '-1', retcode=1)
141
124
        self.assertEqual('No revisions to uncommit.\n', out)
142
125
 
143
126
    def test_uncommit_merges(self):
148
131
        tree2.commit('unchanged', rev_id='b3')
149
132
        tree2.commit('unchanged', rev_id='b4')
150
133
 
151
 
        wt.merge_from_branch(tree2.branch)
 
134
        wt.branch.fetch(tree2.branch)
 
135
        wt.set_pending_merges(['b4'])
152
136
        wt.commit('merge b4', rev_id='a3')
153
137
 
154
 
        self.assertEqual(['a3'], wt.get_parent_ids())
 
138
        self.assertEqual('a3', wt.last_revision())
 
139
        self.assertEqual([], wt.pending_merges())
155
140
 
156
141
        os.chdir('tree')
157
 
        out, err = self.run_bzr('uncommit --force')
 
142
        out, err = self.run_bzr('uncommit', '--force')
158
143
 
159
 
        self.assertEqual(['a2', 'b4'], wt.get_parent_ids())
 
144
        self.assertEqual('a2', wt.last_revision())
 
145
        self.assertEqual(['b4'], wt.pending_merges())
160
146
 
161
147
    def test_uncommit_pending_merge(self):
162
148
        wt = self.create_simple_tree()
167
153
        wt.set_pending_merges(['b3'])
168
154
 
169
155
        os.chdir('tree')
170
 
        out, err = self.run_bzr('uncommit --force')
171
 
        self.assertEqual(['a1', 'b3'], wt.get_parent_ids())
 
156
        out, err = self.run_bzr('uncommit', '--force')
 
157
        self.assertEqual('a1', wt.last_revision())
 
158
        self.assertEqual(['b3'], wt.pending_merges())
172
159
 
173
160
    def test_uncommit_multiple_merge(self):
174
161
        wt = self.create_simple_tree()
175
162
 
176
163
        tree2 = wt.bzrdir.sprout('tree2').open_workingtree()
 
164
 
177
165
        tree2.commit('unchanged', rev_id='b3')
178
 
 
179
 
        tree3 = wt.bzrdir.sprout('tree3').open_workingtree()
180
 
        tree3.commit('unchanged', rev_id='c3')
181
 
 
182
 
        wt.merge_from_branch(tree2.branch)
 
166
        wt.branch.fetch(tree2.branch)
 
167
        wt.set_pending_merges(['b3'])
183
168
        wt.commit('merge b3', rev_id='a3')
184
169
 
185
 
        wt.merge_from_branch(tree3.branch)
186
 
        wt.commit('merge c3', rev_id='a4')
 
170
        tree2.commit('unchanged', rev_id='b4')
 
171
        wt.branch.fetch(tree2.branch)
 
172
        wt.set_pending_merges(['b4'])
 
173
        wt.commit('merge b4', rev_id='a4')
187
174
 
188
 
        self.assertEqual(['a4'], wt.get_parent_ids())
 
175
        self.assertEqual('a4', wt.last_revision())
 
176
        self.assertEqual([], wt.pending_merges())
189
177
 
190
178
        os.chdir('tree')
191
 
        out, err = self.run_bzr('uncommit --force -r 2')
 
179
        out, err = self.run_bzr('uncommit', '--force', '-r', '2')
192
180
 
193
 
        self.assertEqual(['a2', 'b3', 'c3'], wt.get_parent_ids())
 
181
        self.assertEqual('a2', wt.last_revision())
 
182
        self.assertEqual(['b3', 'b4'], wt.pending_merges())
194
183
 
195
184
    def test_uncommit_merge_plus_pending(self):
196
185
        wt = self.create_simple_tree()
197
186
 
198
187
        tree2 = wt.bzrdir.sprout('tree2').open_workingtree()
 
188
 
199
189
        tree2.commit('unchanged', rev_id='b3')
200
 
        tree3 = wt.bzrdir.sprout('tree3').open_workingtree()
201
 
        tree3.commit('unchanged', rev_id='c3')
202
 
 
203
190
        wt.branch.fetch(tree2.branch)
204
191
        wt.set_pending_merges(['b3'])
205
192
        wt.commit('merge b3', rev_id='a3')
206
193
 
207
 
 
208
 
        wt.merge_from_branch(tree3.branch)
209
 
 
210
 
        self.assertEqual(['a3', 'c3'], wt.get_parent_ids())
 
194
        tree2.commit('unchanged', rev_id='b4')
 
195
        wt.branch.fetch(tree2.branch)
 
196
        wt.set_pending_merges(['b4'])
 
197
 
 
198
        self.assertEqual('a3', wt.last_revision())
 
199
        self.assertEqual(['b4'], wt.pending_merges())
211
200
 
212
201
        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
 
""")
 
202
        out, err = self.run_bzr('uncommit', '--force', '-r', '2')
 
203
 
 
204
        self.assertEqual('a2', wt.last_revision())
 
205
        self.assertEqual(['b3', 'b4'], wt.pending_merges())
231
206
 
232
207
    def test_uncommit_octopus_merge(self):
233
208
        # Check that uncommit keeps the pending merges in the same order
234
 
        # though it will also filter out ones in the ancestry
235
209
        wt = self.create_simple_tree()
236
210
 
237
211
        tree2 = wt.bzrdir.sprout('tree2').open_workingtree()
239
213
 
240
214
        tree2.commit('unchanged', rev_id='b3')
241
215
        tree3.commit('unchanged', rev_id='c3')
242
 
 
243
 
        wt.merge_from_branch(tree2.branch)
244
 
        wt.merge_from_branch(tree3.branch, force=True)
 
216
        wt.branch.fetch(tree2.branch)
 
217
        wt.branch.fetch(tree3.branch)
 
218
        wt.set_pending_merges(['b3', 'c3'])
245
219
        wt.commit('merge b3, c3', rev_id='a3')
246
220
 
247
221
        tree2.commit('unchanged', rev_id='b4')
248
222
        tree3.commit('unchanged', rev_id='c4')
249
 
 
250
 
        wt.merge_from_branch(tree3.branch)
251
 
        wt.merge_from_branch(tree2.branch, force=True)
 
223
        wt.branch.fetch(tree2.branch)
 
224
        wt.branch.fetch(tree3.branch)
 
225
        wt.set_pending_merges(['c4', 'b4'])
252
226
        wt.commit('merge b4, c4', rev_id='a4')
253
227
 
254
 
        self.assertEqual(['a4'], wt.get_parent_ids())
 
228
        self.assertEqual('a4', wt.last_revision())
 
229
        self.assertEqual([], wt.pending_merges())
255
230
 
256
231
        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')
 
232
        out, err = self.run_bzr('uncommit', '--force', '-r', '2')
 
233
 
 
234
        self.assertEqual('a2', wt.last_revision())
 
235
        self.assertEqual(['b3', 'c3', 'c4', 'b4'], wt.pending_merges())