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
17
17
"""Test the uncommit command."""
174
173
wt = self.create_simple_tree()
176
175
tree2 = wt.bzrdir.sprout('tree2').open_workingtree()
177
177
tree2.commit('unchanged', rev_id='b3')
179
tree3 = wt.bzrdir.sprout('tree3').open_workingtree()
180
tree3.commit('unchanged', rev_id='c3')
182
179
wt.merge_from_branch(tree2.branch)
183
180
wt.commit('merge b3', rev_id='a3')
185
wt.merge_from_branch(tree3.branch)
186
wt.commit('merge c3', rev_id='a4')
182
tree2.commit('unchanged', rev_id='b4')
184
wt.merge_from_branch(tree2.branch)
185
wt.commit('merge b4', rev_id='a4')
188
187
self.assertEqual(['a4'], wt.get_parent_ids())
191
190
out, err = self.run_bzr('uncommit --force -r 2')
193
self.assertEqual(['a2', 'b3', 'c3'], wt.get_parent_ids())
192
self.assertEqual(['a2', 'b3', 'b4'], wt.get_parent_ids())
195
194
def test_uncommit_merge_plus_pending(self):
196
195
wt = self.create_simple_tree()
198
197
tree2 = wt.bzrdir.sprout('tree2').open_workingtree()
199
199
tree2.commit('unchanged', rev_id='b3')
200
tree3 = wt.bzrdir.sprout('tree3').open_workingtree()
201
tree3.commit('unchanged', rev_id='c3')
203
200
wt.branch.fetch(tree2.branch)
204
201
wt.set_pending_merges(['b3'])
205
202
wt.commit('merge b3', rev_id='a3')
208
wt.merge_from_branch(tree3.branch)
210
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'])
208
self.assertEqual(['a3', 'b4'], wt.get_parent_ids())
213
211
out, err = self.run_bzr('uncommit --force -r 2')
215
self.assertEqual(['a2', 'b3', 'c3'], wt.get_parent_ids())
217
def test_uncommit_shows_log_with_revision_id(self):
218
wt = self.create_simple_tree()
220
script = ScriptRunner()
221
script.run_script(self, """
223
$ bzr uncommit --force
227
The above revision(s) will be removed.
228
You can restore the old tip by running:
229
bzr pull . -r revid:a2
213
self.assertEqual(['a2', 'b3', 'b4'], wt.get_parent_ids())
232
215
def test_uncommit_octopus_merge(self):
233
216
# Check that uncommit keeps the pending merges in the same order
234
# though it will also filter out ones in the ancestry
235
217
wt = self.create_simple_tree()
237
219
tree2 = wt.bzrdir.sprout('tree2').open_workingtree()
240
222
tree2.commit('unchanged', rev_id='b3')
241
223
tree3.commit('unchanged', rev_id='c3')
243
225
wt.merge_from_branch(tree2.branch)
244
wt.merge_from_branch(tree3.branch, force=True)
226
wt.merge_from_branch(tree3.branch)
245
227
wt.commit('merge b3, c3', rev_id='a3')
247
229
tree2.commit('unchanged', rev_id='b4')
248
230
tree3.commit('unchanged', rev_id='c4')
250
232
wt.merge_from_branch(tree3.branch)
251
wt.merge_from_branch(tree2.branch, force=True)
233
wt.merge_from_branch(tree2.branch)
252
234
wt.commit('merge b4, c4', rev_id='a4')
254
236
self.assertEqual(['a4'], wt.get_parent_ids())
257
239
out, err = self.run_bzr('uncommit --force -r 2')
259
self.assertEqual(['a2', 'c4', 'b4'], wt.get_parent_ids())
241
self.assertEqual(['a2', 'b3', 'c3', 'c4', 'b4'], wt.get_parent_ids())
261
243
def test_uncommit_nonascii(self):
262
244
tree = self.make_branch_and_tree('tree')