diff --git a/beets/library.py b/beets/library.py index 3a120b720..9a921b9a6 100644 --- a/beets/library.py +++ b/beets/library.py @@ -121,8 +121,10 @@ class Item(object): Otherwise, performs an ordinary setattr.""" if key in item_keys: - self.record[key] = value - self.dirty[key] = True + if (not (key in self.record)) or (self.record[key] != value): + # don't dirty if value unchanged + self.record[key] = value + self.dirty[key] = True else: object.__setattr__(self, key, value) diff --git a/test/test_db.py b/test/test_db.py index 07f5eeed9..ad3076d48 100755 --- a/test/test_db.py +++ b/test/test_db.py @@ -117,8 +117,12 @@ class GetSetTest(unittest.TestCase): self.assertEqual(self.i.bpm, 4915) def test_set_sets_dirty_flag(self): - self.i.comp = True + self.i.comp = not self.i.comp self.assertTrue(self.i.dirty['comp']) + + def test_set_does_not_dirty_if_value_unchanged(self): + self.i.title = self.i.title + self.assertTrue(not self.i.dirty['title']) class DestinationTest(unittest.TestCase): def setUp(self):