Added a is_modified flag to Results.

This commit is contained in:
Virgil Dupras 2010-08-13 11:37:45 +02:00
parent a5797a2350
commit 1b6b058097
2 changed files with 59 additions and 0 deletions

View File

@ -33,6 +33,7 @@ class Results(Markable):
self.__marked_size = 0
self.data = data_module
self.problems = [] # (dupe, error_msg)
self.is_modified = False
def _did_mark(self, dupe):
self.__marked_size += dupe.size
@ -115,6 +116,7 @@ class Results(Markable):
self.__group_of_duplicate[dupe] = g
if not hasattr(dupe, 'is_ref'):
dupe.is_ref = False
self.is_modified = True
old_filters = nonone(self.__filters, [])
self.apply_filter(None)
for filter_str in old_filters:
@ -216,6 +218,7 @@ class Results(Markable):
self.groups = groups
for dupe_file in marked:
self.mark(dupe_file)
self.is_modified = False
def make_ref(self, dupe):
g = self.get_group_of_duplicate(dupe)
@ -229,6 +232,7 @@ class Results(Markable):
self.__total_count -= 1
self.__total_size -= dupe.size
self.__dupes = None
self.is_modified = True
def perform_on_marked(self, func, remove_from_results):
# Performs `func` on all marked dupes. If an EnvironmentError is raised during the call,
@ -269,6 +273,7 @@ class Results(Markable):
for group in affected_groups:
group.discard_matches()
self.__dupes = None
self.is_modified = True
def save_to_xml(self, outfile):
self.apply_filter(None)
@ -299,6 +304,7 @@ class Results(Markable):
tree = etree.ElementTree(root)
with FileOrPath(outfile, 'wb') as fp:
tree.write(fp, encoding='utf-8')
self.is_modified = False
def sort_dupes(self, key, asc=True, delta=False):
if not self.__dupes:

View File

@ -70,6 +70,9 @@ class TCResultsEmpty(TestCase):
root = doc.getroot()
eq_('results', root.tag)
def test_is_modified(self):
assert not self.results.is_modified
class TCResultsWithSomeGroups(TestCase):
def setUp(self):
@ -201,6 +204,56 @@ class TCResultsWithSomeGroups(TestCase):
self.results.remove_duplicates([o2])
eq_(2,len(self.results.dupes))
def test_is_modified(self):
# Changing the groups sets the modified flag
assert self.results.is_modified
def test_is_modified_after_save_and_load(self):
# Saving/Loading a file sets the modified flag back to False
def get_file(path):
return [f for f in self.objects if str(f.path) == path][0]
f = io.BytesIO()
self.results.save_to_xml(f)
assert not self.results.is_modified
self.results.groups = self.groups # sets the flag back
f.seek(0)
self.results.load_from_xml(f, get_file)
assert not self.results.is_modified
class ResultsWithSavedResults(TestCase):
def setUp(self):
self.results = Results(data)
self.objects,self.matches,self.groups = GetTestGroups()
self.results.groups = self.groups
self.f = io.BytesIO()
self.results.save_to_xml(self.f)
self.f.seek(0)
def test_is_modified(self):
# Saving a file sets the modified flag back to False
assert not self.results.is_modified
def test_is_modified_after_load(self):
# Loading a file sets the modified flag back to False
def get_file(path):
return [f for f in self.objects if str(f.path) == path][0]
self.results.groups = self.groups # sets the flag back
self.results.load_from_xml(self.f, get_file)
assert not self.results.is_modified
def test_is_modified_after_remove(self):
# Removing dupes sets the modified flag
self.results.remove_duplicates([self.results.groups[0].dupes[0]])
assert self.results.is_modified
def test_is_modified_after_make_ref(self):
# Making a dupe ref sets the modified flag
self.results.make_ref(self.results.groups[0].dupes[0])
assert self.results.is_modified
class TCResultsMarkings(TestCase):
def setUp(self):