From c4fb2d195550a13d3ef69fd47c5851a2fb6a4dca Mon Sep 17 00:00:00 2001 From: wordofglass Date: Tue, 22 Aug 2017 18:21:47 +0200 Subject: [PATCH] Item: Do not reset the mtime in __setitem__ unless the value actually changes Unbreaks the remaining edit plugin tests. --- beets/dbcore/db.py | 15 ++++++++++++--- beets/library.py | 6 +++--- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/beets/dbcore/db.py b/beets/dbcore/db.py index a714d9492..82371fb17 100755 --- a/beets/dbcore/db.py +++ b/beets/dbcore/db.py @@ -242,8 +242,9 @@ class Model(object): else: raise KeyError(key) - def __setitem__(self, key, value): - """Assign the value for a field. + def _setitem(self, key, value): + """Assign the value for a field, return whether new and old value + differ. """ # Choose where to place the value. if key in self._fields: @@ -257,9 +258,17 @@ class Model(object): # Assign value and possibly mark as dirty. old_value = source.get(key) source[key] = value - if self._always_dirty or old_value != value: + changed = old_value != value + if self._always_dirty or changed: self._dirty.add(key) + return changed + + def __setitem__(self, key, value): + """Assign the value for a field. + """ + self._setitem(key, value) + def __delitem__(self, key): """Remove a flexible attribute from the model. """ diff --git a/beets/library.py b/beets/library.py index f294e6d4f..988628a5c 100644 --- a/beets/library.py +++ b/beets/library.py @@ -547,10 +547,10 @@ class Item(LibModel): elif isinstance(value, BLOB_TYPE): value = bytes(value) - if key in MediaFile.fields(): - self.mtime = 0 # Reset mtime on dirty. + changed = super(Item, self)._setitem(key, value) - super(Item, self).__setitem__(key, value) + if changed and key in MediaFile.fields(): + self.mtime = 0 # Reset mtime on dirty. def update(self, values): """Set all key/value pairs in the mapping. If mtime is