don't sync mod time; media conflicts are very unlikely

This commit is contained in:
Damien Elmes 2011-10-03 13:33:55 +09:00
parent 49181ee738
commit 866fe8a283

View file

@ -179,7 +179,6 @@ If the same name exists, compare checksums."""
########################################################################## ##########################################################################
def _initDB(self): def _initDB(self):
# in the log, a mod time of zero indicates a delete
self.db.executescript(""" self.db.executescript("""
create table media (fname text primary key, csum text, mod int); create table media (fname text primary key, csum text, mod int);
create table meta (dirMod int, usn int); insert into meta values (0, 0); create table meta (dirMod int, usn int); insert into meta values (0, 0);
@ -300,24 +299,18 @@ create table log (fname text primary key, type int);
# last zip in set # last zip in set
finished = True finished = True
else: else:
# prepare sql
data = z.read(i) data = z.read(i)
csum = checksum(data) csum = checksum(data)
mod = meta[i.filename]['mod']
name = meta[i.filename]['name'] name = meta[i.filename]['name']
# malicious chars? # malicious chars?
for c in '/\\': for c in '/\\':
assert c not in name assert c not in name
media.append((name, csum, mod))
# remove entries from local log
self.db.execute("delete from log where fname = ?", name)
# save file # save file
open(name, "wb").write(data) open(name, "wb").write(data)
# set mod time if possible; may fail on some filesystems # update db
try: media.append((name, csum, self._mtime(name)))
os.utime(name, (mod, mod)) # remove entries from local log
except: self.db.execute("delete from log where fname = ?", name)
print "failed to set utime"
# update media db # update media db
if media: if media:
self.db.executemany( self.db.executemany(
@ -350,8 +343,7 @@ create table log (fname text primary key, type int);
break break
fname = fname[0] fname = fname[0]
z.write(fname, str(cnt)) z.write(fname, str(cnt))
files[str(cnt)] = dict( files[str(cnt)] = fname
name=fname, mod=self._mtime(fname))
sz += os.path.getsize(fname) sz += os.path.getsize(fname)
if sz > SYNC_ZIP_SIZE: if sz > SYNC_ZIP_SIZE:
break break