diff --git a/agkyra/agkyra/syncer/common.py b/agkyra/agkyra/syncer/common.py index cea5a48c09f0a1b33872dbbdc007baa5e02de7e6..3cd17acf3d372939e4e64789e7920990059c4af0 100644 --- a/agkyra/agkyra/syncer/common.py +++ b/agkyra/agkyra/syncer/common.py @@ -1,6 +1,9 @@ from collections import namedtuple import threading +OBJECT_DIRSEP = '/' + + FileStateTuple = namedtuple('FileStateTuple', ['archive', 'objname', 'serial', 'info']) diff --git a/agkyra/agkyra/syncer/localfs_client.py b/agkyra/agkyra/syncer/localfs_client.py index 38b54b792797dd36735f9976b9d8bc80e0fb6ddc..0d57e0d5c8aae2b2c09301fb299bb2420f8b9dab 100644 --- a/agkyra/agkyra/syncer/localfs_client.py +++ b/agkyra/agkyra/syncer/localfs_client.py @@ -467,12 +467,16 @@ class LocalfsFileClient(FileClient): # if self.exclude_dir_exp.match(dirpath): # continue if rel_dirpath != '.': - candidates[rel_dirpath] = None + candidates[utils.to_standard_sep(rel_dirpath)] = None for filename in files: # if self.exclude_files_exp.match(filename) or \ # self.exclude_dir_exp.match(filename): # continue - objname = utils.join_path(rel_dirpath, filename) + if rel_dirpath == '.': + prefix = "" + else: + prefix = utils.to_standard_sep(rel_dirpath) + objname = utils.join_objname(prefix, filename) candidates[objname] = None db_cands = dict((name, None) for name in db.list_files(self.SIGNATURE)) @@ -507,8 +511,9 @@ class LocalfsFileClient(FileClient): def notifier(self, callback=None): def handle_path(path): rel_path = os.path.relpath(path, start=self.ROOTPATH) + objname = utils.to_standard_sep(rel_path) if callback is not None: - callback(self.SIGNATURE, rel_path) + callback(self.SIGNATURE, objname) class EventHandler(FileSystemEventHandler): def on_created(this, event): diff --git a/agkyra/agkyra/syncer/syncer.py b/agkyra/agkyra/syncer/syncer.py index 16d672cb8c268d7ae4b544eb482f2fea74e28b14..51e366b2b8bf7895198434cc3e45175b9d2206af 100644 --- a/agkyra/agkyra/syncer/syncer.py +++ b/agkyra/agkyra/syncer/syncer.py @@ -2,7 +2,6 @@ import time import threading import logging import re -import os from agkyra.syncer import common from agkyra.syncer.setup import SyncerSettings @@ -69,7 +68,7 @@ class FileSyncer(object): self.decide_event.clear() def exclude_file(self, objname): - parts = objname.split(os.path.sep) + parts = objname.split(common.OBJECT_DIRSEP) init_part = parts[0] if init_part in [self.settings.cache_name]: return True diff --git a/agkyra/agkyra/syncer/utils.py b/agkyra/agkyra/syncer/utils.py index bbc80cf5fd032954bfa77ad049ffbec72cd518a8..6f234066c591173f6ddbb6600b018f665d1802c0 100644 --- a/agkyra/agkyra/syncer/utils.py +++ b/agkyra/agkyra/syncer/utils.py @@ -2,13 +2,27 @@ import os import hashlib import datetime +from agkyra.syncer.common import OBJECT_DIRSEP + BUF_SIZE = 65536 +def to_local_sep(filename): + return filename.replace(OBJECT_DIRSEP, os.path.sep) + + +def to_standard_sep(filename): + return filename.replace(os.path.sep, OBJECT_DIRSEP) + + def join_path(dirpath, filename): - if dirpath == ".": - dirpath = "" - return os.path.join(dirpath, filename) + return os.path.join(dirpath, to_local_sep(filename)) + + +def join_objname(prefix, filename): + if prefix != "": + prefix = prefix.rstrip(OBJECT_DIRSEP) + OBJECT_DIRSEP + return prefix + filename def hash_string(s):