mojibake support + exception handling

This commit is contained in:
ed 2021-01-10 09:48:26 +01:00
parent 7bd2b9c23a
commit 98cc9a6755

View File

@ -102,14 +102,25 @@ class Up2k(object):
db.commit() db.commit()
def _build_dir(self, dbw, top, excl, cdir): def _build_dir(self, dbw, top, excl, cdir):
try:
inodes = [fsdec(x) for x in os.listdir(fsenc(cdir))]
except Exception as ex:
self.log("up2k", "listdir: " + repr(ex))
return
histdir = os.path.join(top, ".hist") histdir = os.path.join(top, ".hist")
for inode in [fsdec(x) for x in os.listdir(fsenc(cdir))]: for inode in inodes:
abspath = os.path.join(cdir, inode) abspath = os.path.join(cdir, inode)
inf = os.stat(fsenc(abspath)) try:
inf = os.stat(fsenc(abspath))
except Exception as ex:
self.log("up2k", "stat: " + repr(ex))
continue
if stat.S_ISDIR(inf.st_mode): if stat.S_ISDIR(inf.st_mode):
if abspath in excl or abspath == histdir: if abspath in excl or abspath == histdir:
continue continue
self.log("up2k", "dir: {}".format(abspath)) self.log("up2k", " dir: {}".format(abspath))
self._build_dir(dbw, top, excl, abspath) self._build_dir(dbw, top, excl, abspath)
else: else:
# self.log("up2k", "file: {}".format(abspath)) # self.log("up2k", "file: {}".format(abspath))
@ -135,7 +146,12 @@ class Up2k(object):
in_db = None in_db = None
self.log("up2k", "file: {}".format(abspath)) self.log("up2k", "file: {}".format(abspath))
hashes = self._hashlist_from_file(abspath) try:
hashes = self._hashlist_from_file(abspath)
except Exception as ex:
self.log("up2k", "hash: " + repr(ex))
continue
wark = self._wark_from_hashlist(inf.st_size, hashes) wark = self._wark_from_hashlist(inf.st_size, hashes)
self.db_add(dbw[0], wark, rp, inf.st_mtime, inf.st_size) self.db_add(dbw[0], wark, rp, inf.st_mtime, inf.st_size)
dbw[1] += 1 dbw[1] += 1
@ -148,8 +164,11 @@ class Up2k(object):
c = db.execute("select * from up") c = db.execute("select * from up")
for dwark, dts, dsz, drp in c: for dwark, dts, dsz, drp in c:
abspath = os.path.join(top, drp) abspath = os.path.join(top, drp)
if not os.path.exists(abspath): try:
rm.append(drp) if not os.path.exists(fsenc(abspath)):
rm.append(drp)
except Exception as ex:
self.log("up2k", "stat-rm: " + repr(ex))
if not rm: if not rm:
return return
@ -213,7 +232,7 @@ class Up2k(object):
for _, dtime, dsize, dp_rel in cur: for _, dtime, dsize, dp_rel in cur:
dp_abs = os.path.join(cj["ptop"], dp_rel).replace("\\", "/") dp_abs = os.path.join(cj["ptop"], dp_rel).replace("\\", "/")
# relying on path.exists to return false on broken symlinks # relying on path.exists to return false on broken symlinks
if os.path.exists(dp_abs): if os.path.exists(fsenc(dp_abs)):
try: try:
prel, name = dp_rel.rsplit("/", 1) prel, name = dp_rel.rsplit("/", 1)
except: except: