Ali Gholami Rudi  committed b595258

history: added drop argument to History.undo()

  • Participants
  • Parent commits a51d9c1
  • Branches trunk

Comments (0)

Files changed (2)

File rope/base/

                 return True
         return False
-    def undo(self, change=None, task_handle=taskhandle.NullTaskHandle()):
+    def undo(self, change=None, drop=False,
+             task_handle=taskhandle.NullTaskHandle()):
         """Redo done changes from the history
         When `change` is `None`, the last done change will be undone.
         it will be undone.  In both cases the list of undone changes
         will be returned.
+        If `drop` is `True`, the undone change will not be appended to
+        the redo list.
         if not self._undo_list:
             raise exceptions.HistoryError('Undo list is empty')
         dependencies = self._find_dependencies(self.undo_list, change)
         self._move_front(self.undo_list, dependencies)
         self._perform_undos(len(dependencies), task_handle)
-        return self.redo_list[-len(dependencies):]
+        result = self.redo_list[-len(dependencies):]
+        if drop:
+            del self.redo_list[-len(dependencies):]
+        return result
     def redo(self, change=None, task_handle=taskhandle.NullTaskHandle()):
         """Redo undone changes from the history

File ropetest/

     def test_redo_list_underflow(self):
+    @testutils.assert_raises(exceptions.HistoryError)
+    def test_dropping_undone_changes(self):
+        self.file1.write('1')
+        self.history.undo(drop=True)
+        self.history.redo()
     def test_undoing_choosen_changes(self):
         change = ChangeContents(self.file1, '1')