New --ignore-existing option, patch previously distributed with
[rsync/rsync.git] / options.c
index 66c2d0c..612eafd 100644 (file)
--- a/options.c
+++ b/options.c
@@ -65,6 +65,7 @@ int size_only=0;
 int bwlimit=0;
 int delete_after=0;
 int only_existing=0;
+int opt_ignore_existing=0;
 int max_delete=0;
 int ignore_errors=0;
 #ifdef _WIN32
@@ -208,6 +209,7 @@ void usage(enum logcode F)
   rprintf(F,"     --rsync-path=PATH       specify path to rsync on the remote machine\n");
   rprintf(F," -C, --cvs-exclude           auto ignore files in the same way CVS does\n");
   rprintf(F,"     --existing              only update files that already exist\n");
+  rprintf(F,"     --ignore-existing       ignore files that already exist on the receiving side\n");
   rprintf(F,"     --delete                delete files that don't exist on the sending side\n");
   rprintf(F,"     --delete-excluded       also delete excluded files on the receiving side\n");
   rprintf(F,"     --delete-after          delete after transferring, not before\n");
@@ -240,8 +242,8 @@ void usage(enum logcode F)
   rprintf(F,"     --log-format=FORMAT     log file transfers using specified format\n");  
   rprintf(F,"     --password-file=FILE    get password from FILE\n");
   rprintf(F,"     --bwlimit=KBPS          limit I/O bandwidth, KBytes per second\n");
-  rprintf(F," -f  --read-batch=EXT        read batch file\n");
-  rprintf(F," -F  --write-batch           write batch file\n");
+  rprintf(F,"     --read-batch=EXT        read batch file\n");
+  rprintf(F,"     --write-batch           write batch file\n");
   rprintf(F," -h, --help                  show this help screen\n");
 #ifdef INET6
   rprintf(F," -4                          prefer IPv4\n");
@@ -262,7 +264,7 @@ enum {OPT_VERSION = 1000, OPT_SUFFIX, OPT_SENDER, OPT_SERVER, OPT_EXCLUDE,
       OPT_LOG_FORMAT, OPT_PASSWORD_FILE, OPT_SIZE_ONLY, OPT_ADDRESS,
       OPT_DELETE_AFTER, OPT_EXISTING, OPT_MAX_DELETE, OPT_BACKUP_DIR, 
       OPT_IGNORE_ERRORS, OPT_BWLIMIT, OPT_BLOCKING_IO,
-      OPT_MODIFY_WINDOW};
+      OPT_MODIFY_WINDOW, OPT_READ_BATCH, OPT_WRITE_BATCH, OPT_IGNORE_EXISTING};
 
 static struct poptOption long_options[] = {
   /* longName, shortName, argInfo, argPtr, value, descrip, argDesc */
@@ -276,6 +278,7 @@ static struct poptOption long_options[] = {
   {"one-file-system", 'x', POPT_ARG_NONE,   &one_file_system},
   {"delete",           0,  POPT_ARG_NONE,   &delete_mode},
   {"existing",         0,  POPT_ARG_NONE,   &only_existing},
+  {"ignore-existing",  0,  POPT_ARG_NONE,   &opt_ignore_existing},
   {"delete-after",     0,  POPT_ARG_NONE,   &delete_after},
   {"delete-excluded",  0,  POPT_ARG_NONE,   0,              OPT_DELETE_EXCLUDED},
   {"force",            0,  POPT_ARG_NONE,   &force_delete},
@@ -331,8 +334,8 @@ static struct poptOption long_options[] = {
   {"address",          0,  POPT_ARG_STRING, &bind_address, 0},
   {"backup-dir",       0,  POPT_ARG_STRING, &backup_dir},
   {"hard-links",      'H', POPT_ARG_NONE,   &preserve_hard_links},
-  {"read-batch",      'f', POPT_ARG_STRING, &batch_ext, 'f'},
-  {"write-batch",     'F', POPT_ARG_NONE,   &write_batch, 0},
+  {"read-batch",       0,  POPT_ARG_STRING, &batch_ext, OPT_READ_BATCH},
+  {"write-batch",      0,  POPT_ARG_NONE,   &write_batch},
 #ifdef INET6
   {0,                '4', POPT_ARG_VAL,    &default_af_hint,   AF_INET },
   {0,                '6', POPT_ARG_VAL,    &default_af_hint,   AF_INET6 },
@@ -511,9 +514,8 @@ int parse_arguments(int *argc, const char ***argv, int frommain)
                        keep_partial = 1;
                        break;
 
-
-               case 'f':
-                       /* The filename is stored for us by popt */
+               case OPT_READ_BATCH:
+                       /* The filename is stored in batch_ext for us by popt */
                        read_batch = 1;
                        break;
 
@@ -550,7 +552,8 @@ void server_options(char **args,int *argc)
        static char mdelete[30];
        static char mwindow[30];
        static char bw[50];
-       static char fext[20]; /* dw */
+       static char fext[20];
+       static char wbatch[14];
 
        int i, x;
 
@@ -605,8 +608,6 @@ void server_options(char **args,int *argc)
                argstr[x++] = 'S';
        if (do_compression)
                argstr[x++] = 'z';
-       if (write_batch)
-           argstr[x++] = 'F'; /* dw */
 
        /* this is a complete hack - blame Rusty 
 
@@ -629,8 +630,13 @@ void server_options(char **args,int *argc)
                args[ac++] = mdelete;
        }    
        
+       if (write_batch) {
+               snprintf(wbatch,sizeof(wbatch),"--write-batch");
+               args[ac++] = wbatch;
+       }
+
        if (batch_ext != NULL) {
-               sprintf(fext,"-f%s",batch_ext);
+               snprintf(fext,sizeof(fext),"--read-batch=%s",batch_ext);
                args[ac++] = fext;
        }
 
@@ -688,6 +694,9 @@ void server_options(char **args,int *argc)
        if (only_existing && am_sender)
                args[ac++] = "--existing";
 
+       if (opt_ignore_existing && am_sender) 
+               args[ac++] = "--ignore-existing";
+
        if (tmpdir) {
                args[ac++] = "--temp-dir";
                args[ac++] = tmpdir;