From cdb33cf6a86a1e9293f257ad305d49cd78b18021 Mon Sep 17 00:00:00 2001 From: Damien Elmes Date: Sun, 4 Dec 2011 13:51:13 +0900 Subject: [PATCH] don't bump mod time unless the db has actually been changed --- anki/collection.py | 15 +++++++++------ anki/db.py | 8 ++++++++ anki/decks.py | 1 + 3 files changed, 18 insertions(+), 6 deletions(-) diff --git a/anki/collection.py b/anki/collection.py index e14c5e6f6..d2eb2ea21 100644 --- a/anki/collection.py +++ b/anki/collection.py @@ -96,15 +96,18 @@ conf, models, decks, dconf, tags from col""") crt=?, mod=?, scm=?, dty=?, usn=?, ls=?, conf=?""", self.crt, self.mod, self.scm, self.dty, self._usn, self.ls, simplejson.dumps(self.conf)) - self.models.flush() - self.decks.flush() - self.tags.flush() def save(self, name=None, mod=None): "Flush, commit DB, and take out another write lock." - self.flush(mod=mod) - self.db.commit() - self.lock() + # let the managers conditionally flush + self.models.flush() + self.decks.flush() + self.tags.flush() + # and flush deck + bump mod if db has been changed + if self.db.mod: + self.flush(mod=mod) + self.db.commit() + self.lock() self._markOp(name) self._lastSave = time.time() diff --git a/anki/db.py b/anki/db.py index 7db4497c2..f6d53345d 100644 --- a/anki/db.py +++ b/anki/db.py @@ -17,8 +17,14 @@ class DB(object): self._db.text_factory = text self._path = path self.echo = os.environ.get("DBECHO") + self.mod = False def execute(self, sql, *a, **ka): + s = sql.strip().lower() + # mark modified? + for stmt in "insert", "update", "delete": + if s.startswith(stmt): + self.mod = True if self.echo: print sql #, a, ka if ka: @@ -30,6 +36,7 @@ class DB(object): return res def executemany(self, sql, l): + self.mod = True if self.echo: print sql #, l self._db.executemany(sql, l) @@ -38,6 +45,7 @@ class DB(object): self._db.commit() def executescript(self, sql): + self.mod = True if self.echo: print sql self._db.executescript(sql) diff --git a/anki/decks.py b/anki/decks.py index a4a76a098..1cb727760 100644 --- a/anki/decks.py +++ b/anki/decks.py @@ -29,6 +29,7 @@ defaultDeck = { 'lrnToday': [0, 0], 'timeToday': [0, 0], # time in ms 'conf': 1, + 'usn': 0, } # configuration only available to top level decks