True 1-way sync (backup)
This commit enables true 1-way syncing between repositories. This has often been demanded for backup purposes when you do not want to cause accidental modifications of your backup that would be propagated to the other side. This has been implemented by allowing to configure a Repository as 'readonly' to forbid any modification on it. 'readonly' applies to all the type of repositories. Signed-off-by: Sebastian Spaeth <Sebastian@SSpaeth.de> Signed-off-by: Nicolas Sebrecht <nicolas.s-dev@laposte.net>
This commit is contained in:

committed by
Nicolas Sebrecht

parent
3d4dc11a8b
commit
f3249e0856
@ -260,8 +260,10 @@ class SyncableAccount(Account):
|
||||
remoterepos = self.remoterepos
|
||||
localrepos = self.localrepos
|
||||
statusrepos = self.statusrepos
|
||||
self.ui.syncfolders(remoterepos, localrepos)
|
||||
remoterepos.syncfoldersto(localrepos, [statusrepos])
|
||||
# replicate the folderstructure from REMOTE to LOCAL
|
||||
if not localrepos.getconf('readonly', False):
|
||||
self.ui.syncfolders(remoterepos, localrepos)
|
||||
remoterepos.syncfoldersto(localrepos, [statusrepos])
|
||||
|
||||
siglistener.addfolders(remoterepos.getfolders(), bool(self.refreshperiod), quick)
|
||||
|
||||
@ -374,12 +376,20 @@ def syncfolder(accountname, remoterepos, remotefolder, localrepos,
|
||||
remotefolder.getmessagecount())
|
||||
|
||||
# Synchronize remote changes.
|
||||
ui.syncingmessages(remoterepos, remotefolder, localrepos, localfolder)
|
||||
remotefolder.syncmessagesto(localfolder, statusfolder)
|
||||
if not localrepos.getconf('readonly', False):
|
||||
ui.syncingmessages(remoterepos, remotefolder, localrepos, localfolder)
|
||||
remotefolder.syncmessagesto(localfolder, statusfolder)
|
||||
else:
|
||||
ui.debug('imap', "Not syncing to read-only repository '%s'" \
|
||||
% localrepos.getname())
|
||||
|
||||
# Synchronize local changes
|
||||
ui.syncingmessages(localrepos, localfolder, remoterepos, remotefolder)
|
||||
localfolder.syncmessagesto(remotefolder, statusfolder)
|
||||
|
||||
if not remoterepos.getconf('readonly', False):
|
||||
ui.syncingmessages(localrepos, localfolder, remoterepos, remotefolder)
|
||||
localfolder.syncmessagesto(remotefolder, statusfolder)
|
||||
else:
|
||||
ui.debug('', "Not syncing to read-only repository '%s'" \
|
||||
% remoterepos.getname())
|
||||
|
||||
statusfolder.save()
|
||||
localrepos.restore_atime()
|
||||
|
Reference in New Issue
Block a user