From c0c7bca2bb8b2c215d0031695f1ec49b74457a6d Mon Sep 17 00:00:00 2001 From: jamesbunton Date: Fri, 14 Jul 2006 12:35:39 +0000 Subject: [PATCH] Use md5 hashes for spool dir. Moved avatar dir to root of spool dir. git-svn-id: http://delx.cjb.net/svn/pymsnt/trunk@195 55fbd22a-6204-0410-b2f0-b6c764c7e90a committer: jamesbunton --- src/avatar.py | 2 +- src/housekeep.py | 44 ++++++++++++++++++++++++++++++++++++++++---- src/xdb.py | 12 ++++++++---- 3 files changed, 49 insertions(+), 9 deletions(-) diff --git a/src/avatar.py b/src/avatar.py index d8d1a4c..697400a 100644 --- a/src/avatar.py +++ b/src/avatar.py @@ -73,7 +73,7 @@ class AvatarCache: """ Returns the full path to the directory that a particular key is in. Creates that directory if it doesn't already exist. """ X = os.path.sep - d = os.path.os.path.abspath(config.spooldir) + X + config.jid + X + "avatars" + X + key[0:3] + X + d = os.path.os.path.abspath(config.spooldir) + X + "avatars" + X + key[0:3] + X if not os.path.exists(d): os.makedirs(d) return d diff --git a/src/housekeep.py b/src/housekeep.py index 1020481..608c01e 100644 --- a/src/housekeep.py +++ b/src/housekeep.py @@ -8,6 +8,7 @@ import config import xdb import shutil +import sys import os import os.path @@ -77,7 +78,7 @@ def doSpoolPrepCheck(): filej = xdb.mangle(filej) if(os.path.exists(filej)): print "Need to move", file, "to", filej, "but the latter exists!\nAborting!" - os.exit(1) + sys.exit(1) else: shutil.move(pre + file, pre + filej) except: @@ -116,7 +117,7 @@ def doHashDirUpgrade(): if(os.path.exists(pre2 + file)): print "Need to move", file, "to", pre2 + file, "but the latter exists!\nAborting!" - os.exit(1) + sys.exit(1) else: shutil.move(pre + file, pre2 + file) except: @@ -125,7 +126,42 @@ def doHashDirUpgrade(): print "done" +def doMD5HashDirUpgrade(): + print "Moving the avatar directory from msn.host.com up to the spool directory." -noteList = ["doSpoolPrepCheck", "doHashDirUpgrade"] -noteListF = [doSpoolPrepCheck, doHashDirUpgrade] + pre = os.path.join(os.path.abspath(config.spooldir), config.jid) + X + if os.path.exists(pre + "avatars"): + # Remove the avatars dir that gets created when we import + # legacy/glue.py (it only contains the defaultAvatar) + shutil.rmtree(config.spooldir + X + "avatars") + shutil.move(pre + "avatars", config.spooldir + X + "avatars") + else: + print "Could not move your cached avatars directory automatically. It is safe to delete it, the avatars will be recreated as necessary." + + + print "Upgrading your spool directory to use md5 hashes." + + dirlist = os.listdir(pre) + dir, hash, file = "","","" + try: + for dir in dirlist: + if not os.path.isdir(pre + dir) or dir == "avatars" or len(dir) == 3: + continue + pre2 = pre + dir + X + for file in os.listdir(pre2): + if not os.path.isfile(pre2 + file): + continue + hash = xdb.makeHash(os.path.splitext(file)[0]) + if not os.path.exists(pre + hash): + os.makedirs(pre + hash) + shutil.move(pre2 + file, pre + hash + X + file) + os.rmdir(dir) + except Exception, e: + print "Error in migration", pre, dir, hash, file, str(e) + sys.exit(1) + + + +noteList = ["doSpoolPrepCheck", "doHashDirUpgrade", "doMD5HashDirUpgrade"] +noteListF = [doSpoolPrepCheck, doHashDirUpgrade, doMD5HashDirUpgrade] diff --git a/src/xdb.py b/src/xdb.py index 1e3e33e..e3caf0e 100644 --- a/src/xdb.py +++ b/src/xdb.py @@ -6,6 +6,7 @@ from debug import LogEvent, INFO, WARN import os import os.path import shutil +import md5 import config X = os.path.sep @@ -18,8 +19,11 @@ def unmangle(file): file = "%s@%s" % ("%".join(chunks), end) return file -def mangle(jid): - return jid.replace("@", "%") +def mangle(file): + return file.replace("@", "%") + +def makeHash(file): + return md5.md5(file).hexdigest()[0:3] class XDB: @@ -40,7 +44,7 @@ class XDB: if(self.mangle): file = mangle(file) - hash = file[0:2] + hash = makeHash(file) document = xmlw.parseFile(self.name + X + hash + X + file + ".xml") return document @@ -50,7 +54,7 @@ class XDB: file = mangle(file) prev_umask = os.umask(SPOOL_UMASK) - hash = file[0:2] + hash = makeHash(file) pre = self.name + X + hash + X if not os.path.exists(pre): os.makedirs(pre) -- 2.39.2