if media.db import fails, start anew

This commit is contained in:
Damien Elmes 2014-06-28 05:06:43 +09:00
parent 61b0072dcc
commit eba3aa583c

View file

@ -3,6 +3,7 @@
# License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
import re import re
import traceback
import urllib import urllib
import unicodedata import unicodedata
import sys import sys
@ -77,21 +78,26 @@ create table meta (dirMod int, lastUsn int); insert into meta values (0, 0);
def maybeUpgrade(self): def maybeUpgrade(self):
oldpath = self.dir()+".db" oldpath = self.dir()+".db"
if os.path.exists(oldpath): if os.path.exists(oldpath):
self.db.execute('attach "../collection.media.db" as old') try:
self.db.execute(""" self.db.execute('attach "../collection.media.db" as old')
insert into media self.db.execute("""
select m.fname, csum, mod, ifnull((select 1 from log l2 where l2.fname=m.fname), 0) as dirty insert into media
from old.media m select m.fname, csum, mod, ifnull((select 1 from log l2 where l2.fname=m.fname), 0) as dirty
left outer join old.log l using (fname) from old.media m
union left outer join old.log l using (fname)
select fname, null, 0, 1 from old.log where type=1;""") union
self.db.execute("delete from meta") select fname, null, 0, 1 from old.log where type=1;""")
self.db.execute(""" self.db.execute("delete from meta")
insert into meta select dirMod, usn from old.meta self.db.execute("""
""") insert into meta select dirMod, usn from old.meta
self.db.execute("detach old") """)
self.db.commit() self.db.execute("detach old")
self.db.execute("vacuum analyze") self.db.commit()
self.db.execute("vacuum analyze")
except Exception, e:
# if we couldn't import the old db for some reason, just start
# anew
self.col.log("failed to import old media db:"+traceback.format_exc())
os.rename("../collection.media.db", "../collection.media.db.old") os.rename("../collection.media.db", "../collection.media.db.old")
def close(self): def close(self):