We now look for the ITEM_USING_ALT_BASIS flag for an --inplace
[rsync/rsync.git] / options.c
index 280df0e..09b4055 100644 (file)
--- a/options.c
+++ b/options.c
@@ -59,6 +59,7 @@ int delete_during = 0;
 int delete_before = 0;
 int delete_after = 0;
 int delete_excluded = 0;
+int remove_sent_files = 0;
 int one_file_system = 0;
 int protocol_version = PROTOCOL_VERSION;
 int sparse_files = 0;
@@ -93,6 +94,7 @@ int fuzzy_basis = 0;
 size_t bwlimit_writemax = 0;
 int only_existing = 0;
 int opt_ignore_existing = 0;
+int need_messages_from_generator = 0;
 int max_delete = 0;
 OFF_T max_size = 0;
 int ignore_errors = 0;
@@ -114,7 +116,12 @@ int default_af_hint = AF_INET;     /* Must use IPv4 */
 /** Do not go into the background when run as --daemon.  Good
  * for debugging and required for running as a service on W32,
  * or under Unix process-monitors. **/
-int no_detach = 0;
+int no_detach
+#if defined _WIN32 || defined __WIN32__
+       = 1;
+#else
+       = 0;
+#endif
 
 int write_batch = 0;
 int read_batch = 0;
@@ -288,6 +295,7 @@ void usage(enum logcode F)
   rprintf(F,"     --rsync-path=PATH       specify path to rsync on the remote machine\n");
   rprintf(F,"     --existing              only update files that already exist on receiver\n");
   rprintf(F,"     --ignore-existing       ignore files that already exist on receiving side\n");
+  rprintf(F,"     --remove-sent-files     sent files/symlinks are removed from sending side\n");
   rprintf(F,"     --del                   an alias for --delete-during\n");
   rprintf(F,"     --delete                delete files that don't exist on the sending side\n");
   rprintf(F,"     --delete-before         receiver deletes before transfer (default)\n");
@@ -371,6 +379,7 @@ static struct poptOption long_options[] = {
   {"delete-during",    0,  POPT_ARG_NONE,   &delete_during, 0, 0, 0 },
   {"delete-after",     0,  POPT_ARG_NONE,   &delete_after, 0, 0, 0 },
   {"delete-excluded",  0,  POPT_ARG_NONE,   &delete_excluded, 0, 0, 0 },
+  {"remove-sent-files",0,  POPT_ARG_NONE,   &remove_sent_files, 0, 0, 0 },
   {"force",            0,  POPT_ARG_NONE,   &force_delete, 0, 0, 0 },
   {"numeric-ids",      0,  POPT_ARG_NONE,   &numeric_ids, 0, 0, 0 },
   {"filter",          'f', POPT_ARG_STRING, 0, OPT_FILTER, 0, 0 },
@@ -398,7 +407,7 @@ static struct poptOption long_options[] = {
   {"group",           'g', POPT_ARG_NONE,   &preserve_gid, 0, 0, 0 },
   {"devices",         'D', POPT_ARG_NONE,   &preserve_devices, 0, 0, 0 },
   {"times",           't', POPT_ARG_NONE,   &preserve_times, 0, 0, 0 },
-  {"omit-dir-times",  'O', POPT_ARG_NONE,   &omit_dir_times, 0, 0, 0 },
+  {"omit-dir-times",  'O', POPT_ARG_VAL,    &omit_dir_times, 2, 0, 0 },
   {"checksum",        'c', POPT_ARG_NONE,   &always_checksum, 0, 0, 0 },
   {"verbose",         'v', POPT_ARG_NONE,   0, 'v', 0, 0 },
   {"quiet",           'q', POPT_ARG_NONE,   0, 'q', 0, 0 },
@@ -452,6 +461,7 @@ static struct poptOption long_options[] = {
   {"address",          0,  POPT_ARG_STRING, 0, OPT_DAEMON, 0, 0 },
   {"config",           0,  POPT_ARG_STRING, 0, OPT_DAEMON, 0, 0 },
   {"daemon",           0,  POPT_ARG_NONE,   0, OPT_DAEMON, 0, 0 },
+  {"detach",           0,  POPT_ARG_NONE,   0, OPT_DAEMON, 0, 0 },
   {"no-detach",        0,  POPT_ARG_NONE,   0, OPT_DAEMON, 0, 0 },
   {0,0,0,0, 0, 0, 0}
 };
@@ -487,7 +497,8 @@ static struct poptOption long_daemon_options[] = {
   {"ipv4",            '4', POPT_ARG_VAL,    &default_af_hint, AF_INET, 0, 0 },
   {"ipv6",            '6', POPT_ARG_VAL,    &default_af_hint, AF_INET6, 0, 0 },
 #endif
-  {"no-detach",        0,  POPT_ARG_NONE,   &no_detach, 0, 0, 0 },
+  {"detach",           0,  POPT_ARG_VAL,    &no_detach, 0, 0, 0 },
+  {"no-detach",        0,  POPT_ARG_VAL,    &no_detach, 1, 0, 0 },
   {"port",             0,  POPT_ARG_INT,    &rsync_port, 0, 0, 0 },
   {"protocol",         0,  POPT_ARG_INT,    &protocol_version, 0, 0, 0 },
   {"server",           0,  POPT_ARG_NONE,   &am_server, 0, 0, 0 },
@@ -978,6 +989,17 @@ int parse_arguments(int *argc, const char ***argv, int frommain)
                return 0;
        }
 
+       if (remove_sent_files) {
+               /* We only want to infer this refusal of --remove-sent-files
+                * via the refusal of "delete", not any of the "delete-FOO"
+                * options. */
+               if (refused_delete && am_sender) {
+                       create_refuse_error(refused_delete);
+                       return 0;
+               }
+               need_messages_from_generator = 1;
+       }
+
        *argv = poptGetArgs(pc);
        *argc = count_args(*argv);
 
@@ -1066,6 +1088,8 @@ int parse_arguments(int *argc, const char ***argv, int frommain)
                        "--suffix cannot be a null string without --backup-dir\n");
                return 0;
        }
+       if (make_backups && !backup_dir)
+               omit_dir_times = 1;
 
        if (log_format) {
                if (strstr(log_format, "%i") != NULL)
@@ -1250,7 +1274,7 @@ void server_options(char **args,int *argc)
                argstr[x++] = 'D';
        if (preserve_times)
                argstr[x++] = 't';
-       if (omit_dir_times && am_sender)
+       if (omit_dir_times == 2 && am_sender)
                argstr[x++] = 'O';
        if (preserve_perms)
                argstr[x++] = 'p';
@@ -1435,6 +1459,9 @@ void server_options(char **args,int *argc)
        if (fuzzy_basis && am_sender)
                args[ac++] = "--fuzzy";
 
+       if (remove_sent_files)
+               args[ac++] = "--remove-sent-files";
+
        *argc = ac;
        return;