f.write("%s%s\n" % (path_prefix, filename))
f.close()
-def sync(dry_run, source, dest, files):
+def sync(dry_run, source, dest, files_to_copy):
join = os.path.join
logging.info("Calculating files to sync and deleting old files")
source = source.encode("utf-8")
dest = dest.encode("utf-8")
filemap = {}
- for f in files:
- filemap[encode_filename(f)] = f.encode("utf-8")
- files = set(filemap.keys())
+ class SyncFile(object): pass
+ for f in files_to_copy:
+ sf = SyncFile()
+ sf.orig_filename = f.encode("utf-8")
+ sf.encoded_filename = encode_filename(f)
+ filemap[sf.encoded_filename.lower()] = sf
+ files_to_copy = set(filemap)
+
for dirpath, dirnames, filenames in os.walk(dest):
full_dirpath = dirpath
dirpath = strip_prefix(dirpath, dest)
if not os.path.exists(join(dest, filename)):
continue
- if filename in files:
- sourcestat = os.stat(join(source, filemap[filename]))
+ if filename.lower() in files_to_copy:
+ source_filename = filemap[filename.lower()].orig_filename
+ sourcestat = os.stat(join(source, source_filename))
deststat = os.stat(join(dest, filename))
same_time = abs(sourcestat.st_mtime - deststat.st_mtime) < 5
same_size = sourcestat.st_size == deststat.st_size
if same_time and same_size:
- files.remove(filename)
+ files_to_copy.remove(filename.lower())
yield "Keep: " + filename
else:
yield "Update: " + filename
logging.info("Copying new files")
- files = list(files)
- files.sort()
- for filename in files:
- yield "Copy: " + filename
+ files_to_copy = list(files_to_copy)
+ files_to_copy.sort()
+ for filename in files_to_copy:
+ yield "Copy: " + filemap[filename].orig_filename
if not dry_run:
mkdirhier(os.path.dirname(join(dest, filename)))
- shutil.copy2(join(source, filemap[filename]), join(dest, filename))
+ shutil.copy2(
+ join(source, filemap[filename].orig_filename),
+ join(dest, filemap[filename].encoded_filename)
+ )