index b243b07..b884980 100644 --- a/generator.c +++ b/generator.c @@ -52,6 +52,7 @@ extern int missing_args; extern int msgdone_cnt; extern int ignore_errors; extern int remove_source_files; +extern int need_unsorted_flist; extern int delay_updates; extern int update_only; extern int human_readable; @@ -2226,7 +2227,8 @@ void generate_files(int f_out, const char *local_name) } } for (i = cur_flist->low; i <= cur_flist->high; i++) { - struct file_struct *file = cur_flist->sorted[i]; + struct file_struct *file = need_unsorted_flist > 1 + ? cur_flist->files[i] : cur_flist->sorted[i]; if (!F_IS_ACTIVE(file)) continue; index cebf256..d9a57cc 100644 --- a/options.c +++ b/options.c @@ -1034,6 +1034,7 @@ static struct poptOption long_options[] = { #ifdef HAVE_SETVBUF {"outbuf", 0, POPT_ARG_STRING, &outbuf_mode, 0, 0, 0 }, #endif + {"unsorted", 0, POPT_ARG_VAL, &need_unsorted_flist, 2, 0, 0 }, {"remote-option", 'M', POPT_ARG_STRING, 0, 'M', 0, 0 }, {"protocol", 0, POPT_ARG_INT, &protocol_version, 0, 0, 0 }, {"checksum-seed", 0, POPT_ARG_INT, &checksum_seed, 0, 0, 0 }, @@ -1874,7 +1875,7 @@ int parse_arguments(int *argc_p, const char ***argv_p) if (!am_server && strcmp(iconv_opt, "-") == 0) iconv_opt = NULL; else - need_unsorted_flist = 1; + need_unsorted_flist |= 1; } if (refused_no_iconv && !iconv_opt) { create_refuse_error(refused_no_iconv); @@ -2508,6 +2509,9 @@ void server_options(char **args, int *argc_p) if (list_only > 1) args[ac++] = "--list-only"; + if (need_unsorted_flist > 1) + args[ac++] = "--unsorted"; + /* This makes sure that the remote rsync can handle deleting with -d * sans -r because the --no-r option was added at the same time. */ if (xfer_dirs && !recurse && delete_mode && am_sender)