diff --git a/pym/cl_client.py b/pym/cl_client.py index 357b174..b59c878 100644 --- a/pym/cl_client.py +++ b/pym/cl_client.py @@ -514,6 +514,16 @@ class client(share, commandServer, encrypt): """ flagError = False execStr = "" + skipPaths = self.clVars.Get("cl_sync_skip_path") + if not skipPaths: + self.printERROR(_("Variable 'cl_sync_skip_path' is empty")%userHome) + return False + deletePaths = self.clVars.Get("cl_sync_del_path") + if not deletePaths: + deletePaths = [] + excludePaths = " ".join(map(lambda x: '--exclude="/%s"'\ + %x.replace('"',"").replace("'",""), + skipPaths + deletePaths)) if sync == "login": # исключаемые пути при синхронизации # /.local/share/akonadi/db_data @@ -528,42 +538,16 @@ class client(share, commandServer, encrypt): # содержит данные о виртуальных машинах if os.path.exists(userHome) and\ os.path.exists(homeTemplate): - execStr = '/usr/bin/rsync --delete-excluded --delete \ ---exclude="/.googleearth" --exclude="/.kde4/share/config/phonondevicesrc" \ ---exclude="*~" --exclude="/Home" --exclude="/Disks" --exclude="/FTP" \ ---exclude="/.local/share/akonadi/db_data" --exclude="/.VirtualBox" \ ---exclude="/.mozilla/firefox/calculate.default/urlclassifier3.sqlite" \ ---exclude="/.local/share/mime/mime.cache" \ ---exclude="/.kde4/share/apps/nepomuk/repository/main/data" \ ---exclude="/.logout" \ ---exclude="/.Xauthority" \ ---exclude="/.thumbnails" \ ---exclude="/.mozilla/firefox/*/Cache" \ ---filter="P /.googleearth" --filter="P /Home" --filter="P /Disks" \ ---filter="P /.local/share/akonadi/db_data" --filter="P /.VirtualBox" \ ---filter="P /.mozilla/firefox/calculate.default/urlclassifier3.sqlite" \ ---filter="P /.local/share/mime/mime.cache" \ ---filter="P /.kde4/share/apps/nepomuk/repository/main/data" \ ---filter="P /.logout" \ ---filter="P /.Xauthority" \ ---filter="P /.thumbnails" \ ---filter="P /.mozilla/firefox/*/Cache" \ ---filter="P /FTP" -a -x -v -v -v %s/ %s/' %(homeTemplate,userHome) + filterPath = " ".join(map(lambda x: '--filter="P /%s"'\ + %x.replace('"',"").replace("'",""), + skipPaths)) + execStr = '/usr/bin/rsync --delete-excluded --delete %s %s \ +-a -x -v -v -v %s/ %s/' %(excludePaths, filterPath, homeTemplate, userHome) elif sync == "logout": if os.path.exists(userHome) and os.listdir(userHome) and\ os.path.exists(homeTemplate): - execStr = '/usr/bin/rsync --delete-excluded --delete \ ---exclude="/.googleearth" --exclude="/Home" --exclude="/Disks" --exclude="/FTP"\ - --exclude="*~" --exclude="/.kde4/cache-*" --exclude="/.kde4/tmp-*" \ ---exclude="/.local/share/akonadi/db_data" --exclude="/.VirtualBox" \ ---exclude="/.mozilla/firefox/calculate.default/urlclassifier3.sqlite" \ ---exclude="/.local/share/mime/mime.cache" \ ---exclude="/.Xauthority" \ ---exclude="/.kde4/share/apps/nepomuk/repository/main/data" \ ---exclude="/.kde4/socket-*" --exclude="/.kde4/share/config/phonondevicesrc" \ ---exclude="/.thumbnails" \ ---exclude="/.mozilla/firefox/*/Cache" \ --a -x -v -v -v %s/ %s/'%(userHome,homeTemplate) + execStr = '/usr/bin/rsync --delete-excluded --delete %s \ +-a -x -v -v -v %s/ %s/'%(excludePaths, userHome, homeTemplate) else: self.printERROR(_("Method syncUser: option sync=%s incorrect")\ %str(sync)) @@ -1208,8 +1192,11 @@ class client(share, commandServer, encrypt): files = [] movedLink = os.path.join('Moved') movedPath = os.path.join('Home',"Moved") + skipPaths = self.clVars.Get("cl_moved_skip_path") + if not skipPaths: + skipPaths = ['Disks','Home','Moved','FTP','Desktop'] filesAndDir = filter(lambda x: not ('.' in x[0] or x in\ - ['Disks','Home','Moved','FTP','Desktop'] or os.path.islink(x)), + skipPaths or os.path.islink(x)), os.listdir('.')) filesDir = [] for fd in filesAndDir: diff --git a/pym/cl_vars_client.py b/pym/cl_vars_client.py index e62ce48..990330b 100644 --- a/pym/cl_vars_client.py +++ b/pym/cl_vars_client.py @@ -51,6 +51,9 @@ class Data: # Почтовый адрес пользователя ur_mail = {'mode':"r"} + # Домашняя директория пользователя + ur_home_path = {'mode':"r"} + # Режим работы клиента # (local или имя хоста клиента) os_remote_auth = {'mode':'w'} @@ -61,4 +64,21 @@ class Data: #Пароль пользователя client cl_remote_pw = {'mode':'w'} + # Директории которые не переносятся в ~/Moved + cl_moved_skip_path = {'value':['Disks','Home','Moved','FTP','Desktop']} + + # Директории или файлы которые не переносятся + # при синхронизации профиля пользователя + cl_sync_skip_path = {'value':[".googleearth", "Home", "Disks", "FTP", + ".local/share/akonadi/db_data", ".VirtualBox", + ".mozilla/firefox/calculate.default/urlclassifier3.sqlite", + ".local/share/mime/mime.cache", + ".kde4/share/apps/nepomuk/repository/main/data", ".logout", + ".Xauthority", ".thumbnails", ".mozilla/firefox/*/Cache"]} + + # Директории или файлы которые удаляются + # при синхронизации профиля пользователя + cl_sync_del_path = {'value':[".kde4/share/config/phonondevicesrc", + ".kde4/cache-*", ".kde4/tmp-*"]} +