/usr/share/pyshared/rope/contrib/changestack.py is in python-rope 0.9.2-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | """For performing many refactorings as a single command
`changestack` module can be used to perform many refactorings on top
of each other as one bigger command. It can be used like::
stack = ChangeStack(project, 'my big command')
#..
stack.push(refactoring1.get_changes())
#..
stack.push(refactoring2.get_changes())
#..
stack.push(refactoringX.get_changes())
stack.pop_all()
changes = stack.merged()
Now `changes` can be previewed or performed as before.
"""
from rope.base import change
class ChangeStack(object):
def __init__(self, project, description='merged changes'):
self.project = project
self.description = description
self.stack = []
def push(self, changes):
self.stack.append(changes)
self.project.do(changes)
def pop_all(self):
for i in range(len(self.stack)):
self.project.history.undo(drop=True)
def merged(self):
result = change.ChangeSet(self.description)
for changes in self.stack:
for c in self._basic_changes(changes):
result.add_change(c)
return result
def _basic_changes(self, changes):
if isinstance(changes, change.ChangeSet):
for child in changes.changes:
for atom in self._basic_changes(child):
yield atom
else:
yield changes
|