Anonymous avatar Anonymous committed b595258

history: added drop argument to History.undo()

Comments (0)

Files changed (2)


                 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


     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')
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.