Mercurial > dovecot > core-2.2
changeset 11682:c36dbec5cb9f HEAD
dsync backup: Added -R parameter to reverse backup direction.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Thu, 01 Jul 2010 18:06:40 +0100 |
parents | 28639e01a479 |
children | 148fccbe9f32 |
files | src/dsync/dsync.c |
diffstat | 1 files changed, 18 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/src/dsync/dsync.c Thu Jul 01 18:02:06 2010 +0100 +++ b/src/dsync/dsync.c Thu Jul 01 18:06:40 2010 +0100 @@ -123,7 +123,7 @@ usage(void) { fprintf(stderr, -"usage: dsync [-C <alt char>] [-m <mailbox>] [-u <user>] [-frv]\n" +"usage: dsync [-C <alt char>] [-m <mailbox>] [-u <user>] [-frRv]\n" " mirror <local mail_location> | [<user>@]<host> | <remote dsync command>\n" ); exit(1); @@ -145,17 +145,17 @@ struct mail_storage_service_user *service_user; struct mail_storage_service_input input; struct mail_user *mail_user, *mail_user2 = NULL; - struct dsync_worker *worker1, *worker2; + struct dsync_worker *worker1, *worker2, *workertmp; const char *error, *username, *cmd_name, *mailbox = NULL; const char *local_location = NULL, *const *remote_cmd_args = NULL; bool dsync_server = FALSE, readonly = FALSE, unexpected_changes = FALSE; - bool dsync_debug = FALSE; + bool dsync_debug = FALSE, reverse_workers = FALSE; char alt_char = '_'; int c, ret, fd_in = STDIN_FILENO, fd_out = STDOUT_FILENO; master_service = master_service_init("dsync", MASTER_SERVICE_FLAG_STANDALONE, - &argc, &argv, "+C:Dfm:ru:v"); + &argc, &argv, "+C:Dfm:rRu:v"); username = getenv("USER"); while ((c = master_getopt(master_service)) > 0) { @@ -176,6 +176,9 @@ case 'r': readonly = TRUE; break; + case 'R': + reverse_workers = TRUE; + break; case 'f': brain_flags |= DSYNC_BRAIN_FLAG_FULL_SYNC; break; @@ -257,6 +260,11 @@ i_fatal("User init failed"); worker2 = dsync_worker_init_local(mail_user2, alt_char); + if (reverse_workers) { + workertmp = worker1; + worker1 = worker2; + worker2 = workertmp; + } i_set_failure_prefix(t_strdup_printf("dsync(%s): ", username)); brain = dsync_brain_init(worker1, worker2, @@ -280,6 +288,12 @@ if (readonly) dsync_worker_set_readonly(worker1); worker2 = dsync_worker_init_proxy_client(fd_in, fd_out); + if (reverse_workers) { + workertmp = worker1; + worker1 = worker2; + worker2 = workertmp; + } + brain = dsync_brain_init(worker1, worker2, mailbox, brain_flags); server = NULL;