import xdb
import shutil
+import sys
import os
import os.path
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:
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:
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]
import os
import os.path
import shutil
+import md5
import config
X = os.path.sep
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:
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
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)