Fix merge conflicts.
authorWayne Davison <wayne@opencoder.net>
Mon, 13 Jul 2020 01:45:15 +0000 (18:45 -0700)
committerWayne Davison <wayne@opencoder.net>
Mon, 13 Jul 2020 01:48:32 +0000 (18:48 -0700)
checksum-reading.diff
clone-dest.diff
db.diff
fileflags.diff
fsync.diff
hfs-compression.diff
ignore-case.diff
link-by-hash.diff
slow-down.diff
slp.diff

index e208e39943a2d79055b74861fa735ece85b7b0ca..f414fef25ae589145d6bbb22e1b47aa295796e95 100644 (file)
@@ -16,7 +16,7 @@ To use this patch, run these commands for a successful build:
     ./configure                               (optional if already run)
     make
 
-based-on: e1e4ffe057346de61972b2d995ebc9c720a7d8bd
+based-on: af531cf787995f6a3bc381cd1da1988192e7ef59
 diff --git a/clientserver.c b/clientserver.c
 --- a/clientserver.c
 +++ b/clientserver.c
@@ -355,7 +355,7 @@ diff --git a/flist.c b/flist.c
  /* Call this with EITHER (1) "file, NULL, 0" to chdir() to the file's
   * F_PATHNAME(), or (2) "NULL, dir, dirlen" to chdir() to the supplied dir,
   * with dir == NULL taken to be the starting directory, and dirlen < 0
-@@ -1150,7 +1401,7 @@ struct file_struct *make_file(const char *fname, struct file_list *flist,
+@@ -1158,7 +1409,7 @@ struct file_struct *make_file(const char *fname, struct file_list *flist,
                              STRUCT_STAT *stp, int flags, int filter_level)
  {
        static char *lastdir;
@@ -364,7 +364,7 @@ diff --git a/flist.c b/flist.c
        struct file_struct *file;
        char thisname[MAXPATHLEN];
        char linkname[MAXPATHLEN];
-@@ -1296,9 +1547,16 @@ struct file_struct *make_file(const char *fname, struct file_list *flist,
+@@ -1304,9 +1555,16 @@ struct file_struct *make_file(const char *fname, struct file_list *flist,
                        memcpy(lastdir, thisname, len);
                        lastdir[len] = '\0';
                        lastdir_len = len;
@@ -382,7 +382,7 @@ diff --git a/flist.c b/flist.c
        basename_len = strlen(basename) + 1; /* count the '\0' */
  
  #ifdef SUPPORT_LINKS
-@@ -1316,11 +1574,8 @@ struct file_struct *make_file(const char *fname, struct file_list *flist,
+@@ -1324,11 +1582,8 @@ struct file_struct *make_file(const char *fname, struct file_list *flist,
                extra_len += EXTRA_LEN;
  #endif
  
@@ -396,7 +396,7 @@ diff --git a/flist.c b/flist.c
  
  #if EXTRA_ROUNDING > 0
        if (extra_len & (EXTRA_ROUNDING * EXTRA_LEN))
-@@ -1405,8 +1660,14 @@ struct file_struct *make_file(const char *fname, struct file_list *flist,
+@@ -1413,8 +1668,14 @@ struct file_struct *make_file(const char *fname, struct file_list *flist,
                return NULL;
        }
  
@@ -413,7 +413,7 @@ diff --git a/flist.c b/flist.c
  
        if (unsort_ndx)
                F_NDX(file) = stats.num_dirs;
-@@ -2618,7 +2879,7 @@ struct file_list *recv_file_list(int f, int dir_ndx)
+@@ -2626,7 +2887,7 @@ struct file_list *recv_file_list(int f, int dir_ndx)
        /* The --relative option sends paths with a leading slash, so we need
         * to specify the strip_root option here.  We rejected leading slashes
         * for a non-relative transfer in recv_file_entry(). */
@@ -422,7 +422,7 @@ diff --git a/flist.c b/flist.c
  
        if (protocol_version < 30) {
                /* Recv the io_error flag */
-@@ -2868,7 +3129,7 @@ void flist_free(struct file_list *flist)
+@@ -2876,7 +3137,7 @@ void flist_free(struct file_list *flist)
  
  /* This routine ensures we don't have any duplicate names in our file list.
   * duplicate names can cause corruption because of the pipelining. */
@@ -431,7 +431,7 @@ diff --git a/flist.c b/flist.c
  {
        char fbuf[MAXPATHLEN];
        int i, prev_i;
-@@ -2919,7 +3180,7 @@ static void flist_sort_and_clean(struct file_list *flist, int strip_root)
+@@ -2927,7 +3188,7 @@ static void flist_sort_and_clean(struct file_list *flist, int strip_root)
                        /* If one is a dir and the other is not, we want to
                         * keep the dir because it might have contents in the
                         * list.  Otherwise keep the first one. */
@@ -440,7 +440,7 @@ diff --git a/flist.c b/flist.c
                                struct file_struct *fp = flist->sorted[j];
                                if (!S_ISDIR(fp->mode))
                                        keep = i, drop = j;
-@@ -2935,8 +3196,8 @@ static void flist_sort_and_clean(struct file_list *flist, int strip_root)
+@@ -2943,8 +3204,8 @@ static void flist_sort_and_clean(struct file_list *flist, int strip_root)
                        } else
                                keep = j, drop = i;
  
@@ -451,7 +451,7 @@ diff --git a/flist.c b/flist.c
                                        rprintf(FINFO,
                                            "removing duplicate name %s from file list (%d)\n",
                                            f_name(file, fbuf), drop + flist->ndx_start);
-@@ -2958,7 +3219,7 @@ static void flist_sort_and_clean(struct file_list *flist, int strip_root)
+@@ -2966,7 +3227,7 @@ static void flist_sort_and_clean(struct file_list *flist, int strip_root)
        }
        flist->high = prev_i;
  
@@ -616,27 +616,27 @@ diff --git a/options.c b/options.c
  int ignore_non_existing = 0;
  int need_messages_from_generator = 0;
 +int checksum_files = CSF_IGNORE_FILES;
+ time_t stop_at_utime = 0;
  int max_delete = INT_MIN;
  OFF_T max_size = -1;
- OFF_T min_size = -1;
-@@ -776,7 +777,7 @@ enum {OPT_SERVER = 1000, OPT_DAEMON, OPT_SENDER, OPT_EXCLUDE, OPT_EXCLUDE_FROM,
-       OPT_FILTER, OPT_COMPARE_DEST, OPT_COPY_DEST, OPT_LINK_DEST, OPT_HELP,
+@@ -783,7 +784,7 @@ enum {OPT_SERVER = 1000, OPT_DAEMON, OPT_SENDER, OPT_EXCLUDE, OPT_EXCLUDE_FROM,
        OPT_INCLUDE, OPT_INCLUDE_FROM, OPT_MODIFY_WINDOW, OPT_MIN_SIZE, OPT_CHMOD,
        OPT_READ_BATCH, OPT_WRITE_BATCH, OPT_ONLY_WRITE_BATCH, OPT_MAX_SIZE,
--      OPT_NO_D, OPT_APPEND, OPT_NO_ICONV, OPT_INFO, OPT_DEBUG,
-+      OPT_NO_D, OPT_APPEND, OPT_NO_ICONV, OPT_INFO, OPT_DEBUG, OPT_SUMFILES,
-       OPT_USERMAP, OPT_GROUPMAP, OPT_CHOWN, OPT_BWLIMIT,
+       OPT_NO_D, OPT_APPEND, OPT_NO_ICONV, OPT_INFO, OPT_DEBUG, OPT_BLOCK_SIZE,
+-      OPT_USERMAP, OPT_GROUPMAP, OPT_CHOWN, OPT_BWLIMIT,
++      OPT_USERMAP, OPT_GROUPMAP, OPT_CHOWN, OPT_BWLIMIT, OPT_SUMFILES,
        OPT_OLD_COMPRESS, OPT_NEW_COMPRESS, OPT_NO_COMPRESS,
+       OPT_STOP_AFTER, OPT_STOP_AT,
        OPT_REFUSED_BASE = 9000};
-@@ -928,6 +929,7 @@ static struct poptOption long_options[] = {
+@@ -935,6 +936,7 @@ static struct poptOption long_options[] = {
    {"no-c",             0,  POPT_ARG_VAL,    &always_checksum, 0, 0, 0 },
    {"checksum-choice",  0,  POPT_ARG_STRING, &checksum_choice, 0, 0, 0 },
    {"cc",               0,  POPT_ARG_STRING, &checksum_choice, 0, 0, 0 },
 +  {"sumfiles",         0,  POPT_ARG_STRING, 0, OPT_SUMFILES, 0, 0 },
-   {"block-size",      'B', POPT_ARG_LONG,   &block_size, 0, 0, 0 },
+   {"block-size",      'B', POPT_ARG_STRING, 0, OPT_BLOCK_SIZE, 0, 0 },
    {"compare-dest",     0,  POPT_ARG_STRING, 0, OPT_COMPARE_DEST, 0, 0 },
    {"copy-dest",        0,  POPT_ARG_STRING, 0, OPT_COPY_DEST, 0, 0 },
-@@ -1751,6 +1753,23 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -1935,6 +1937,23 @@ int parse_arguments(int *argc_p, const char ***argv_p)
                        }
                        break;
  
@@ -660,16 +660,16 @@ diff --git a/options.c b/options.c
                case OPT_INFO:
                        arg = poptGetOptArg(pc);
                        parse_output_words(info_words, info_levels, arg, USER_PRIORITY);
-@@ -2037,6 +2056,9 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -2247,6 +2266,9 @@ int parse_arguments(int *argc_p, const char ***argv_p)
        }
  #endif
  
 +      if (!always_checksum)
 +              checksum_files = CSF_IGNORE_FILES;
 +
-       if (block_size) {
-               /* We may not know the real protocol_version at this point if this is the client
-                * option parsing, but we still want to check it so that the client can specify
+       if (write_batch && read_batch) {
+               snprintf(err_buf, sizeof err_buf,
+                       "--write-batch and --read-batch can not be used together\n");
 diff --git a/rsync.1.md b/rsync.1.md
 --- a/rsync.1.md
 +++ b/rsync.1.md
@@ -681,7 +681,7 @@ diff --git a/rsync.1.md b/rsync.1.md
  --archive, -a            archive mode; equals -rlptgoD (no -H,-A,-X)
  --no-OPTION              turn off an implied OPTION (e.g. --no-D)
  --recursive, -r          recurse into directories
-@@ -681,6 +682,8 @@ your home directory (remove the '=' for that).
+@@ -683,6 +684,8 @@ your home directory (remove the '=' for that).
      file that has the same size as the corresponding sender's file: files with
      either a changed size or a changed checksum are selected for transfer.
  
@@ -690,7 +690,7 @@ diff --git a/rsync.1.md b/rsync.1.md
      Note that rsync always verifies that each _transferred_ file was correctly
      reconstructed on the receiving side by checking a whole-file checksum that
      is generated as the file is transferred, but that automatic
-@@ -691,6 +694,38 @@ your home directory (remove the '=' for that).
+@@ -693,6 +696,38 @@ your home directory (remove the '=' for that).
      can be overridden using either the `--checksum-choice` (`--cc`) option or an
      environment variable that is discussed in that option's section.
  
@@ -732,7 +732,7 @@ diff --git a/rsync.1.md b/rsync.1.md
 diff --git a/rsync.h b/rsync.h
 --- a/rsync.h
 +++ b/rsync.h
-@@ -848,6 +848,10 @@ extern int xattrs_ndx;
+@@ -866,6 +866,10 @@ extern int xattrs_ndx;
  #define F_SUM(f) ((char*)OPT_EXTRA(f, START_BUMP(f) + HLINK_BUMP(f) \
                                    + SUM_EXTRA_CNT - 1))
  
@@ -743,7 +743,7 @@ diff --git a/rsync.h b/rsync.h
  /* Some utility defines: */
  #define F_IS_ACTIVE(f) (f)->basename[0]
  #define F_IS_HLINKED(f) ((f)->flags & FLAG_HLINKED)
-@@ -1060,6 +1064,13 @@ typedef struct {
+@@ -1078,6 +1082,13 @@ typedef struct {
  #define RELNAMECACHE_LEN (offsetof(relnamecache, fname))
  #endif
  
index 4992de5ab86bf11df35299d448321d2e612d26ce..c5c797c62c7fbd0042040c02e8f2e72c6a4a2c61 100644 (file)
@@ -13,7 +13,7 @@ To use this patch, run these commands for a successful build:
     ./configure                         (optional if already run)
     make
 
-based-on: 194cee671d5e178f20c4494f41911fa8db942935
+based-on: af531cf787995f6a3bc381cd1da1988192e7ef59
 diff --git a/Makefile.in b/Makefile.in
 --- a/Makefile.in
 +++ b/Makefile.in
@@ -73,16 +73,16 @@ diff --git a/generator.c b/generator.c
 diff --git a/options.c b/options.c
 --- a/options.c
 +++ b/options.c
-@@ -777,7 +777,7 @@ enum {OPT_SERVER = 1000, OPT_DAEMON, OPT_SENDER, OPT_EXCLUDE, OPT_EXCLUDE_FROM,
+@@ -783,7 +783,7 @@ enum {OPT_SERVER = 1000, OPT_DAEMON, OPT_SENDER, OPT_EXCLUDE, OPT_EXCLUDE_FROM,
        OPT_INCLUDE, OPT_INCLUDE_FROM, OPT_MODIFY_WINDOW, OPT_MIN_SIZE, OPT_CHMOD,
        OPT_READ_BATCH, OPT_WRITE_BATCH, OPT_ONLY_WRITE_BATCH, OPT_MAX_SIZE,
-       OPT_NO_D, OPT_APPEND, OPT_NO_ICONV, OPT_INFO, OPT_DEBUG,
+       OPT_NO_D, OPT_APPEND, OPT_NO_ICONV, OPT_INFO, OPT_DEBUG, OPT_BLOCK_SIZE,
 -      OPT_USERMAP, OPT_GROUPMAP, OPT_CHOWN, OPT_BWLIMIT,
 +      OPT_USERMAP, OPT_GROUPMAP, OPT_CHOWN, OPT_BWLIMIT, OPT_CLONE_DEST,
        OPT_OLD_COMPRESS, OPT_NEW_COMPRESS, OPT_NO_COMPRESS,
+       OPT_STOP_AFTER, OPT_STOP_AT,
        OPT_REFUSED_BASE = 9000};
-@@ -932,6 +932,7 @@ static struct poptOption long_options[] = {
+@@ -939,6 +939,7 @@ static struct poptOption long_options[] = {
    {"compare-dest",     0,  POPT_ARG_STRING, 0, OPT_COMPARE_DEST, 0, 0 },
    {"copy-dest",        0,  POPT_ARG_STRING, 0, OPT_COPY_DEST, 0, 0 },
    {"link-dest",        0,  POPT_ARG_STRING, 0, OPT_LINK_DEST, 0, 0 },
@@ -90,26 +90,26 @@ diff --git a/options.c b/options.c
    {"fuzzy",           'y', POPT_ARG_NONE,   0, 'y', 0, 0 },
    {"no-fuzzy",         0,  POPT_ARG_VAL,    &fuzzy_basis, 0, 0, 0 },
    {"no-y",             0,  POPT_ARG_VAL,    &fuzzy_basis, 0, 0, 0 },
-@@ -1192,6 +1193,9 @@ static void set_refuse_options(void)
+@@ -1202,6 +1203,9 @@ static void set_refuse_options(void)
  #ifndef SUPPORT_HARD_LINKS
        parse_one_refuse_match(0, "link-dest", list_end);
  #endif
 +#ifndef FICLONE
 +      parse_one_refuse_match(0, "clone-dest", list_end);
 +#endif
- #ifndef ICONV_OPTION
-       parse_one_refuse_match(0, "iconv", list_end);
+ #ifndef HAVE_MKTIME
+       parse_one_refuse_match(0, "stop-at", list_end);
  #endif
-@@ -1357,6 +1361,8 @@ char *alt_dest_opt(int type)
+@@ -1528,6 +1532,8 @@ char *alt_dest_opt(int type)
                return "--copy-dest";
        case LINK_DEST:
                return "--link-dest";
 +      case CLONE_DEST:
 +              return "--clone-dest";
        default:
-               assert(0);
+               NOISY_DEATH("Unknown alt_dest_opt type");
        }
-@@ -1714,6 +1720,10 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -1898,6 +1904,10 @@ int parse_arguments(int *argc_p, const char ***argv_p)
                        want_dest_type = LINK_DEST;
                        goto set_dest_dir;
  
@@ -131,7 +131,7 @@ diff --git a/rsync.1.md b/rsync.1.md
  --compress, -z           compress file data during the transfer
  --compress-choice=STR    choose the compression algorithm (aka --zc)
  --compress-level=NUM     explicitly set compression level (aka --zl)
-@@ -2282,6 +2283,17 @@ your home directory (remove the '=' for that).
+@@ -2290,6 +2291,17 @@ your home directory (remove the '=' for that).
      specified (or implied by `-a`).  You can work-around this bug by avoiding
      the `-o` option when sending to an old rsync.
  
@@ -225,7 +225,7 @@ diff --git a/syscall.c b/syscall.c
 diff --git a/t_stub.c b/t_stub.c
 --- a/t_stub.c
 +++ b/t_stub.c
-@@ -37,6 +37,7 @@ size_t max_alloc = 1024*1024*1024; /* max_alloc is needed when combined with uti
+@@ -37,6 +37,7 @@ size_t max_alloc = 0; /* max_alloc is needed when combined with util2.o */
  char *partial_dir;
  char *module_dir;
  filter_rule_list daemon_filter_list;
diff --git a/db.diff b/db.diff
index d2160f1b39718ef88aedf8c616a920d14c6ed677..56b846af3bc8c05e5a38c96ff0632aa93f7e766e 100644 (file)
--- a/db.diff
+++ b/db.diff
@@ -21,7 +21,7 @@ To use this patch, run these commands for a successful build:
     ./configure
     make
 
-based-on: bcc273d460c4d231001a361fd0e5702578f9f1be
+based-on: af531cf787995f6a3bc381cd1da1988192e7ef59
 diff --git a/.gitignore b/.gitignore
 --- a/.gitignore
 +++ b/.gitignore
@@ -2378,7 +2378,7 @@ diff --git a/io.c b/io.c
  extern int io_error;
  extern int batch_fd;
  extern int eol_nulls;
-@@ -1482,6 +1484,32 @@ static void read_a_msg(void)
+@@ -1487,6 +1489,32 @@ static void read_a_msg(void)
                if (am_sender)
                        maybe_send_keepalive(time(NULL), MSK_ALLOW_FLUSH);
                break;
@@ -2411,7 +2411,7 @@ diff --git a/io.c b/io.c
        case MSG_DELETED:
                if (msg_bytes >= sizeof data)
                        goto overflow;
-@@ -1633,6 +1661,7 @@ static void read_a_msg(void)
+@@ -1638,6 +1666,7 @@ static void read_a_msg(void)
                 * with a duplicate exit message. */
                _exit_cleanup(val, __FILE__, 0 - __LINE__);
        default:
@@ -2495,7 +2495,7 @@ diff --git a/options.c b/options.c
  int connect_timeout = 0;
  int keep_partial = 0;
  int safe_symlinks = 0;
-@@ -287,6 +292,7 @@ static struct output_struct debug_words[COUNT_DEBUG+1] = {
+@@ -288,6 +293,7 @@ static struct output_struct debug_words[COUNT_DEBUG+1] = {
        DEBUG_WORD(CHDIR, W_CLI|W_SRV, "Debug when the current directory changes"),
        DEBUG_WORD(CONNECT, W_CLI, "Debug connection events (levels 1-2)"),
        DEBUG_WORD(CMD, W_CLI, "Debug commands+options that are issued (levels 1-2)"),
@@ -2503,9 +2503,9 @@ diff --git a/options.c b/options.c
        DEBUG_WORD(DEL, W_REC, "Debug delete actions (levels 1-3)"),
        DEBUG_WORD(DELTASUM, W_SND|W_REC, "Debug delta-transfer checksumming (levels 1-4)"),
        DEBUG_WORD(DUP, W_REC, "Debug weeding of duplicate names"),
-@@ -664,6 +670,16 @@ static void print_info_flags(enum logcode f)
+@@ -670,6 +676,16 @@ static void print_info_flags(enum logcode f)
  #endif
-                       "prealloc",
+                       "stop-at",
  
 +#if !defined HAVE_MYSQL_MYSQL_H || !defined HAVE_LIBMYSQLCLIENT
 +              "no "
@@ -2520,15 +2520,15 @@ diff --git a/options.c b/options.c
        "*Optimizations",
  
  #ifndef HAVE_SIMD
-@@ -777,6 +793,7 @@ enum {OPT_SERVER = 1000, OPT_DAEMON, OPT_SENDER, OPT_EXCLUDE, OPT_EXCLUDE_FROM,
+@@ -783,6 +799,7 @@ enum {OPT_SERVER = 1000, OPT_DAEMON, OPT_SENDER, OPT_EXCLUDE, OPT_EXCLUDE_FROM,
        OPT_INCLUDE, OPT_INCLUDE_FROM, OPT_MODIFY_WINDOW, OPT_MIN_SIZE, OPT_CHMOD,
        OPT_READ_BATCH, OPT_WRITE_BATCH, OPT_ONLY_WRITE_BATCH, OPT_MAX_SIZE,
-       OPT_NO_D, OPT_APPEND, OPT_NO_ICONV, OPT_INFO, OPT_DEBUG,
+       OPT_NO_D, OPT_APPEND, OPT_NO_ICONV, OPT_INFO, OPT_DEBUG, OPT_BLOCK_SIZE,
 +      OPT_NO_DB, OPT_DBONLY,
        OPT_USERMAP, OPT_GROUPMAP, OPT_CHOWN, OPT_BWLIMIT,
        OPT_OLD_COMPRESS, OPT_NEW_COMPRESS, OPT_NO_COMPRESS,
-       OPT_REFUSED_BASE = 9000};
-@@ -928,6 +945,10 @@ static struct poptOption long_options[] = {
+       OPT_STOP_AFTER, OPT_STOP_AT,
+@@ -935,6 +952,10 @@ static struct poptOption long_options[] = {
    {"no-c",             0,  POPT_ARG_VAL,    &always_checksum, 0, 0, 0 },
    {"checksum-choice",  0,  POPT_ARG_STRING, &checksum_choice, 0, 0, 0 },
    {"cc",               0,  POPT_ARG_STRING, &checksum_choice, 0, 0, 0 },
@@ -2536,10 +2536,10 @@ diff --git a/options.c b/options.c
 +  {"no-db",            0,  POPT_ARG_NONE,   0, OPT_NO_DB, 0, 0 },
 +  {"db-lax",           0,  POPT_ARG_VAL,    &db_lax, 1, 0, 0 },
 +  {"no-db-lax",        0,  POPT_ARG_VAL,    &db_lax, 0, 0, 0 },
-   {"block-size",      'B', POPT_ARG_LONG,   &block_size, 0, 0, 0 },
+   {"block-size",      'B', POPT_ARG_STRING, 0, OPT_BLOCK_SIZE, 0, 0 },
    {"compare-dest",     0,  POPT_ARG_STRING, 0, OPT_COMPARE_DEST, 0, 0 },
    {"copy-dest",        0,  POPT_ARG_STRING, 0, OPT_COPY_DEST, 0, 0 },
-@@ -1019,6 +1040,9 @@ static struct poptOption long_options[] = {
+@@ -1029,6 +1050,9 @@ static struct poptOption long_options[] = {
    {"dparam",           0,  POPT_ARG_STRING, 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 },
@@ -2549,7 +2549,7 @@ diff --git a/options.c b/options.c
    {0,0,0,0, 0, 0, 0}
  };
  
-@@ -1059,6 +1083,39 @@ static struct poptOption long_daemon_options[] = {
+@@ -1069,6 +1093,39 @@ static struct poptOption long_daemon_options[] = {
    {0,0,0,0, 0, 0, 0}
  };
  
@@ -2589,7 +2589,7 @@ diff --git a/options.c b/options.c
  
  static char err_buf[200];
  
-@@ -1184,6 +1241,8 @@ static void set_refuse_options(void)
+@@ -1194,6 +1251,8 @@ static void set_refuse_options(void)
                        parse_one_refuse_match(0, "iconv", list_end);
  #endif
                parse_one_refuse_match(0, "log-file*", list_end);
@@ -2598,7 +2598,7 @@ diff --git a/options.c b/options.c
        }
  
  #ifndef SUPPORT_ATIMES
-@@ -1327,6 +1386,102 @@ static void create_refuse_error(int which)
+@@ -1498,6 +1557,102 @@ static void create_refuse_error(int which)
                snprintf(err_buf + n, sizeof err_buf - n, " (-%c)\n", op->shortName);
  }
  
@@ -2701,7 +2701,7 @@ diff --git a/options.c b/options.c
  /* This is used to make sure that --daemon & --server cannot be aliased to
   * something else. These options have always disabled popt aliases for the
   * parsing of a daemon or server command-line, but we have to make sure that
-@@ -1383,6 +1538,12 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -1554,6 +1709,12 @@ int parse_arguments(int *argc_p, const char ***argv_p)
                return 0;
        }
  
@@ -2714,7 +2714,7 @@ diff --git a/options.c b/options.c
        set_refuse_options();
  
  #ifdef ICONV_OPTION
-@@ -1501,6 +1662,12 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -1672,6 +1833,12 @@ int parse_arguments(int *argc_p, const char ***argv_p)
                        am_daemon = 1;
                        return 1;
  
@@ -2727,7 +2727,7 @@ diff --git a/options.c b/options.c
                case OPT_MODIFY_WINDOW:
                        /* The value has already been set by popt, but
                         * we need to remember that we're using a
-@@ -1573,6 +1740,10 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -1744,6 +1911,10 @@ int parse_arguments(int *argc_p, const char ***argv_p)
                        preserve_devices = preserve_specials = 0;
                        break;
  
index 6f71a61fc4c3fdd8ac178560956033749a0b7449..2afc75c3a743f18ab95b9faffb66f241bcb4b11c 100644 (file)
@@ -7,7 +7,7 @@ To use this patch, run these commands for a successful build:
     ./configure                         (optional if already run)
     make
 
-based-on: 19d8550cf48fe8b5f21872892f33ae2203d80bf5
+based-on: af531cf787995f6a3bc381cd1da1988192e7ef59
 diff --git a/compat.c b/compat.c
 --- a/compat.c
 +++ b/compat.c
@@ -157,7 +157,7 @@ diff --git a/flist.c b/flist.c
  #ifdef SUPPORT_HARD_LINKS
        static int64 dev;
  #endif
-@@ -771,6 +790,10 @@ static struct file_struct *recv_file_entry(int f, struct file_list *flist, int x
+@@ -775,6 +794,10 @@ static struct file_struct *recv_file_entry(int f, struct file_list *flist, int x
                        mode = first->mode;
                        if (atimes_ndx && !S_ISDIR(mode))
                                atime = F_ATIME(first);
@@ -168,7 +168,7 @@ diff --git a/flist.c b/flist.c
                        if (preserve_uid)
                                uid = F_OWNER(first);
                        if (preserve_gid)
-@@ -822,6 +845,10 @@ static struct file_struct *recv_file_entry(int f, struct file_list *flist, int x
+@@ -830,6 +853,10 @@ static struct file_struct *recv_file_entry(int f, struct file_list *flist, int x
  
        if (chmod_modes && !S_ISLNK(mode) && mode)
                mode = tweak_mode(mode, chmod_modes);
@@ -179,7 +179,7 @@ diff --git a/flist.c b/flist.c
  
        if (preserve_uid && !(xflags & XMIT_SAME_UID)) {
                if (protocol_version < 30)
-@@ -980,6 +1007,10 @@ static struct file_struct *recv_file_entry(int f, struct file_list *flist, int x
+@@ -988,6 +1015,10 @@ static struct file_struct *recv_file_entry(int f, struct file_list *flist, int x
        }
  #endif
        file->mode = mode;
@@ -190,7 +190,7 @@ diff --git a/flist.c b/flist.c
        if (preserve_uid)
                F_OWNER(file) = uid;
        if (preserve_gid) {
-@@ -1377,6 +1408,10 @@ struct file_struct *make_file(const char *fname, struct file_list *flist,
+@@ -1385,6 +1416,10 @@ struct file_struct *make_file(const char *fname, struct file_list *flist,
        }
  #endif
        file->mode = st.st_mode;
@@ -307,7 +307,7 @@ diff --git a/generator.c b/generator.c
 diff --git a/log.c b/log.c
 --- a/log.c
 +++ b/log.c
-@@ -720,7 +720,8 @@ static void log_formatted(enum logcode code, const char *format, const char *op,
+@@ -724,7 +724,8 @@ static void log_formatted(enum logcode code, const char *format, const char *op,
                             : S_ISLNK(file->mode) ? 'U' : 'u';
                        c[9] = !(iflags & ITEM_REPORT_ACL) ? '.' : 'a';
                        c[10] = !(iflags & ITEM_REPORT_XATTR) ? '.' : 'x';
@@ -380,9 +380,9 @@ diff --git a/options.c b/options.c
  int io_timeout = 0;
  int prune_empty_dirs = 0;
  int use_qsort = 0;
-@@ -664,6 +666,11 @@ static void print_info_flags(enum logcode f)
+@@ -670,6 +672,11 @@ static void print_info_flags(enum logcode f)
  #endif
-                       "prealloc",
+                       "stop-at",
  
 +#ifndef SUPPORT_FILEFLAGS
 +              "no "
@@ -392,7 +392,7 @@ diff --git a/options.c b/options.c
        "*Optimizations",
  
  #ifndef HAVE_SIMD
-@@ -816,6 +823,8 @@ static struct poptOption long_options[] = {
+@@ -823,6 +830,8 @@ static struct poptOption long_options[] = {
    {"perms",           'p', POPT_ARG_VAL,    &preserve_perms, 1, 0, 0 },
    {"no-perms",         0,  POPT_ARG_VAL,    &preserve_perms, 0, 0, 0 },
    {"no-p",             0,  POPT_ARG_VAL,    &preserve_perms, 0, 0, 0 },
@@ -401,7 +401,7 @@ diff --git a/options.c b/options.c
    {"executability",   'E', POPT_ARG_NONE,   &preserve_executability, 0, 0, 0 },
    {"acls",            'A', POPT_ARG_NONE,   0, 'A', 0, 0 },
    {"no-acls",          0,  POPT_ARG_VAL,    &preserve_acls, 0, 0, 0 },
-@@ -910,6 +919,12 @@ static struct poptOption long_options[] = {
+@@ -917,6 +926,12 @@ static struct poptOption long_options[] = {
    {"remove-source-files",0,POPT_ARG_VAL,    &remove_source_files, 1, 0, 0 },
    {"force",            0,  POPT_ARG_VAL,    &force_delete, 1, 0, 0 },
    {"no-force",         0,  POPT_ARG_VAL,    &force_delete, 0, 0, 0 },
@@ -414,7 +414,7 @@ diff --git a/options.c b/options.c
    {"ignore-errors",    0,  POPT_ARG_VAL,    &ignore_errors, 1, 0, 0 },
    {"no-ignore-errors", 0,  POPT_ARG_VAL,    &ignore_errors, 0, 0, 0 },
    {"max-delete",       0,  POPT_ARG_INT,    &max_delete, 0, 0, 0 },
-@@ -1198,6 +1213,14 @@ static void set_refuse_options(void)
+@@ -1211,6 +1226,14 @@ static void set_refuse_options(void)
  #ifndef HAVE_SETVBUF
        parse_one_refuse_match(0, "outbuf", list_end);
  #endif
@@ -429,7 +429,7 @@ diff --git a/options.c b/options.c
  
        /* Now we use the descrip values to actually mark the options for refusal. */
        for (op = long_options; op != list_end; op++) {
-@@ -2647,6 +2670,9 @@ void server_options(char **args, int *argc_p)
+@@ -2844,6 +2867,9 @@ void server_options(char **args, int *argc_p)
        if (xfer_dirs && !recurse && delete_mode && am_sender)
                args[ac++] = "--no-r";
  
@@ -439,7 +439,7 @@ diff --git a/options.c b/options.c
        if (do_compression && do_compression_level != CLVL_NOT_SPECIFIED) {
                if (asprintf(&arg, "--compress-level=%d", do_compression_level) < 0)
                        goto oom;
-@@ -2750,6 +2776,16 @@ void server_options(char **args, int *argc_p)
+@@ -2947,6 +2973,16 @@ void server_options(char **args, int *argc_p)
                        args[ac++] = "--delete-excluded";
                if (force_delete)
                        args[ac++] = "--force";
@@ -479,7 +479,7 @@ diff --git a/rsync.1.md b/rsync.1.md
  --max-delete=NUM         don't delete more than NUM files
  --max-size=SIZE          don't transfer any file larger than SIZE
  --min-size=SIZE          don't transfer any file smaller than SIZE
-@@ -700,6 +704,8 @@ your home directory (remove the '=' for that).
+@@ -702,6 +706,8 @@ your home directory (remove the '=' for that).
  
      Note that `-a` **does not preserve hardlinks**, because finding
      multiply-linked files is expensive.  You must separately specify `-H`.
@@ -488,7 +488,7 @@ diff --git a/rsync.1.md b/rsync.1.md
  
  0.  `--no-OPTION`
  
-@@ -1038,7 +1044,7 @@ your home directory (remove the '=' for that).
+@@ -1040,7 +1046,7 @@ your home directory (remove the '=' for that).
      Without this option, if the sending side has replaced a directory with a
      symlink to a directory, the receiving side will delete anything that is in
      the way of the new symlink, including a directory hierarchy (as long as
@@ -497,7 +497,7 @@ diff --git a/rsync.1.md b/rsync.1.md
  
      See also `--keep-dirlinks` for an analogous option for the receiving side.
  
-@@ -1224,6 +1230,29 @@ your home directory (remove the '=' for that).
+@@ -1226,6 +1232,29 @@ your home directory (remove the '=' for that).
      those used by `--fake-super`) unless you repeat the option (e.g. `-XX`).
      This "copy all xattrs" mode cannot be used with `--fake-super`.
  
@@ -527,7 +527,7 @@ diff --git a/rsync.1.md b/rsync.1.md
  0.  `--chmod=CHMOD`
  
      This option tells rsync to apply one or more comma-separated "chmod" modes
-@@ -1686,7 +1715,7 @@ your home directory (remove the '=' for that).
+@@ -1688,7 +1717,7 @@ your home directory (remove the '=' for that).
      option a step farther: each missing arg will become a deletion request of
      the corresponding destination file on the receiving side (should it exist).
      If the destination file is a non-empty directory, it will only be
@@ -536,7 +536,7 @@ diff --git a/rsync.1.md b/rsync.1.md
      that, this option is independent of any other type of delete processing.
  
      The missing source files are represented by special file-list entries which
-@@ -1697,15 +1726,16 @@ your home directory (remove the '=' for that).
+@@ -1699,15 +1728,16 @@ your home directory (remove the '=' for that).
      Tells `--delete` to go ahead and delete files even when there are I/O
      errors.
  
@@ -557,7 +557,7 @@ diff --git a/rsync.1.md b/rsync.1.md
  
  0.  `--max-delete=NUM`
  
-@@ -2612,7 +2642,7 @@ your home directory (remove the '=' for that).
+@@ -2620,7 +2650,7 @@ your home directory (remove the '=' for that).
      output of other verbose messages).
  
      The "%i" escape has a cryptic output that is 11 letters long.  The general
@@ -1079,7 +1079,7 @@ diff --git a/util.c b/util.c
 diff --git a/xattrs.c b/xattrs.c
 --- a/xattrs.c
 +++ b/xattrs.c
-@@ -1204,7 +1204,7 @@ int set_stat_xattr(const char *fname, struct file_struct *file, mode_t new_mode)
+@@ -1203,7 +1203,7 @@ int set_stat_xattr(const char *fname, struct file_struct *file, mode_t new_mode)
        mode = (fst.st_mode & _S_IFMT) | (fmode & ACCESSPERMS)
             | (S_ISDIR(fst.st_mode) ? 0700 : 0600);
        if (fst.st_mode != mode)
index 0fbfd036a89358e7200605e666b9695f6d13e38a..835a5241a135957565b6d953d6ae775da008a5e6 100644 (file)
@@ -7,7 +7,7 @@ To use this patch, run these commands for a successful build:
     ./configure                         (optional if already run)
     make
 
-based-on: 194cee671d5e178f20c4494f41911fa8db942935
+based-on: af531cf787995f6a3bc381cd1da1988192e7ef59
 diff --git a/options.c b/options.c
 --- a/options.c
 +++ b/options.c
@@ -19,15 +19,15 @@ diff --git a/options.c b/options.c
  int ignore_times = 0;
  int delete_mode = 0;
  int delete_during = 0;
-@@ -988,6 +989,7 @@ static struct poptOption long_options[] = {
+@@ -995,6 +996,7 @@ static struct poptOption long_options[] = {
    {"no-timeout",       0,  POPT_ARG_VAL,    &io_timeout, 0, 0, 0 },
    {"contimeout",       0,  POPT_ARG_INT,    &connect_timeout, 0, 0, 0 },
    {"no-contimeout",    0,  POPT_ARG_VAL,    &connect_timeout, 0, 0, 0 },
 +  {"fsync",            0,  POPT_ARG_NONE,   &do_fsync, 0, 0, 0 },
-   {"rsh",             'e', POPT_ARG_STRING, &shell_cmd, 0, 0, 0 },
-   {"rsync-path",       0,  POPT_ARG_STRING, &rsync_path, 0, 0, 0 },
-   {"temp-dir",        'T', POPT_ARG_STRING, &tmpdir, 0, 0, 0 },
-@@ -2840,6 +2842,9 @@ void server_options(char **args, int *argc_p)
+   {"stop-after",       0,  POPT_ARG_STRING, 0, OPT_STOP_AFTER, 0, 0 },
+   {"time-limit",       0,  POPT_ARG_STRING, 0, OPT_STOP_AFTER, 0, 0 }, /* earlier stop-after name */
+   {"stop-at",          0,  POPT_ARG_STRING, 0, OPT_STOP_AT, 0, 0 },
+@@ -3038,6 +3040,9 @@ void server_options(char **args, int *argc_p)
                        args[ac++] = tmpdir;
                }
  
index 58d68472d0f47bee7fe9063e1be512d47f24af60..84210660a70a79562e6771f35ba6af11fd735aae 100644 (file)
@@ -22,7 +22,7 @@ based-on: patch/master/crtimes
 diff --git a/flist.c b/flist.c
 --- a/flist.c
 +++ b/flist.c
-@@ -1619,6 +1619,9 @@ static struct file_struct *send_file_name(int f, struct file_list *flist,
+@@ -1627,6 +1627,9 @@ static struct file_struct *send_file_name(int f, struct file_list *flist,
  #ifdef SUPPORT_XATTRS
                if (preserve_xattrs) {
                        sx.st.st_mode = file->mode;
@@ -143,7 +143,7 @@ diff --git a/lib/sysxattrs.c b/lib/sysxattrs.c
 diff --git a/main.c b/main.c
 --- a/main.c
 +++ b/main.c
-@@ -31,6 +31,10 @@
+@@ -34,6 +34,10 @@
  #ifdef SUPPORT_FORCE_CHANGE
  #include <sys/sysctl.h>
  #endif
@@ -154,7 +154,7 @@ diff --git a/main.c b/main.c
  
  extern int dry_run;
  extern int list_only;
-@@ -56,6 +60,7 @@ extern int copy_dirlinks;
+@@ -59,6 +63,7 @@ extern int copy_dirlinks;
  extern int copy_unsafe_links;
  extern int keep_dirlinks;
  extern int preserve_hard_links;
@@ -162,7 +162,7 @@ diff --git a/main.c b/main.c
  extern int protocol_version;
  extern int force_change;
  extern int file_total;
-@@ -112,6 +117,7 @@ int daemon_over_rsh = 0;
+@@ -115,6 +120,7 @@ int daemon_over_rsh = 0;
  mode_t orig_umask = 0;
  int batch_gen_fd = -1;
  int sender_keeps_checksum = 0;
@@ -170,7 +170,7 @@ diff --git a/main.c b/main.c
  int raw_argc, cooked_argc;
  char **raw_argv, **cooked_argv;
  
-@@ -662,6 +668,43 @@ static pid_t do_cmd(char *cmd, char *machine, char *user, char **remote_argv, in
+@@ -665,6 +671,43 @@ static pid_t do_cmd(char *cmd, char *machine, char *user, char **remote_argv, in
        return pid;
  }
  
@@ -214,7 +214,7 @@ diff --git a/main.c b/main.c
  /* The receiving side operates in one of two modes:
   *
   * 1. it receives any number of files into a destination directory,
-@@ -720,6 +763,9 @@ static char *get_local_name(struct file_list *flist, char *dest_path)
+@@ -723,6 +766,9 @@ static char *get_local_name(struct file_list *flist, char *dest_path)
                                exit_cleanup(RERR_FILESELECT);
                        }
                        filesystem_dev = st.st_dev; /* ensures --force works right w/-x */
@@ -224,7 +224,7 @@ diff --git a/main.c b/main.c
                        return NULL;
                }
                if (file_total > 1) {
-@@ -779,7 +825,9 @@ static char *get_local_name(struct file_list *flist, char *dest_path)
+@@ -782,7 +828,9 @@ static char *get_local_name(struct file_list *flist, char *dest_path)
                                full_fname(dest_path));
                        exit_cleanup(RERR_FILESELECT);
                }
@@ -235,7 +235,7 @@ diff --git a/main.c b/main.c
                return NULL;
        }
  
-@@ -799,6 +847,9 @@ static char *get_local_name(struct file_list *flist, char *dest_path)
+@@ -802,6 +850,9 @@ static char *get_local_name(struct file_list *flist, char *dest_path)
                        full_fname(dest_path));
                exit_cleanup(RERR_FILESELECT);
        }
@@ -256,7 +256,7 @@ diff --git a/options.c b/options.c
  int preserve_perms = 0;
  int preserve_fileflags = 0;
  int preserve_executability = 0;
-@@ -934,6 +935,10 @@ static struct poptOption long_options[] = {
+@@ -941,6 +942,10 @@ static struct poptOption long_options[] = {
    {"no-force-change",  0,  POPT_ARG_VAL,    &force_change, 0, 0, 0 },
    {"force-uchange",    0,  POPT_ARG_VAL,    &force_change, USR_IMMUTABLE, 0, 0 },
    {"force-schange",    0,  POPT_ARG_VAL,    &force_change, SYS_IMMUTABLE, 0, 0 },
@@ -267,7 +267,7 @@ diff --git a/options.c b/options.c
    {"ignore-errors",    0,  POPT_ARG_VAL,    &ignore_errors, 1, 0, 0 },
    {"no-ignore-errors", 0,  POPT_ARG_VAL,    &ignore_errors, 0, 0, 0 },
    {"max-delete",       0,  POPT_ARG_INT,    &max_delete, 0, 0, 0 },
-@@ -1233,6 +1238,10 @@ static void set_refuse_options(void)
+@@ -1246,6 +1251,10 @@ static void set_refuse_options(void)
  #ifndef SUPPORT_CRTIMES
        parse_one_refuse_match(0, "crtimes", list_end);
  #endif
@@ -278,7 +278,7 @@ diff --git a/options.c b/options.c
  
        /* Now we use the descrip values to actually mark the options for refusal. */
        for (op = long_options; op != list_end; op++) {
-@@ -2072,6 +2081,15 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -2282,6 +2291,15 @@ int parse_arguments(int *argc_p, const char ***argv_p)
        }
  #endif
  
@@ -291,10 +291,10 @@ diff --git a/options.c b/options.c
 +      }
 +#endif
 +
-       if (block_size) {
-               /* We may not know the real protocol_version at this point if this is the client
-                * option parsing, but we still want to check it so that the client can specify
-@@ -2688,6 +2706,11 @@ void server_options(char **args, int *argc_p)
+       if (write_batch && read_batch) {
+               snprintf(err_buf, sizeof err_buf,
+                       "--write-batch and --read-batch can not be used together\n");
+@@ -2886,6 +2904,11 @@ void server_options(char **args, int *argc_p)
        if (preserve_fileflags)
                args[ac++] = "--fileflags";
  
@@ -318,7 +318,7 @@ diff --git a/rsync.1.md b/rsync.1.md
  --owner, -o              preserve owner (super-user only)
  --group, -g              preserve group
  --devices                preserve device files (super-user only)
-@@ -1254,6 +1256,47 @@ your home directory (remove the '=' for that).
+@@ -1256,6 +1258,47 @@ your home directory (remove the '=' for that).
      receiving side.  It does not try to affect user flags.  This option
      overrides `--force-change` and `--force-uchange`.
  
@@ -418,7 +418,7 @@ diff --git a/rsync.c b/rsync.c
 diff --git a/rsync.h b/rsync.h
 --- a/rsync.h
 +++ b/rsync.h
-@@ -579,6 +579,17 @@ typedef unsigned int size_t;
+@@ -597,6 +597,17 @@ typedef unsigned int size_t;
  #define ST_FLAGS(st) NO_FFLAGS
  #endif
  
@@ -445,7 +445,7 @@ diff --git a/t_stub.c b/t_stub.c
  int preserve_executability = 0;
 +int preserve_hfs_compression = 0;
  int open_noatime = 0;
- size_t max_alloc = 1024*1024*1024; /* max_alloc is needed when combined with util2.o */
+ size_t max_alloc = 0; /* max_alloc is needed when combined with util2.o */
  char *partial_dir;
 diff --git a/xattrs.c b/xattrs.c
 --- a/xattrs.c
@@ -633,7 +633,7 @@ diff --git a/xattrs.c b/xattrs.c
                        write_varint(f_out, len); /* length might have changed! */
                        write_bigbuf(f_out, ptr, len);
                        free(ptr);
-@@ -950,7 +1011,7 @@ static int rsync_xal_set(const char *fname, item_list *xalp,
+@@ -949,7 +1010,7 @@ static int rsync_xal_set(const char *fname, item_list *xalp,
        int user_only = am_root <= 0;
  #endif
        size_t name_len;
@@ -642,7 +642,7 @@ diff --git a/xattrs.c b/xattrs.c
  
        /* This puts the current name list into the "namebuf" buffer. */
        if ((list_len = get_xattr_names(fname)) < 0)
-@@ -963,7 +1024,10 @@ static int rsync_xal_set(const char *fname, item_list *xalp,
+@@ -962,7 +1023,10 @@ static int rsync_xal_set(const char *fname, item_list *xalp,
                        int sum_len;
                        /* See if the fnamecmp version is identical. */
                        len = name_len = rxas[i].name_len;
@@ -654,7 +654,7 @@ diff --git a/xattrs.c b/xattrs.c
                          still_abbrev:
                                if (am_generator)
                                        continue;
-@@ -972,6 +1036,8 @@ static int rsync_xal_set(const char *fname, item_list *xalp,
+@@ -971,6 +1035,8 @@ static int rsync_xal_set(const char *fname, item_list *xalp,
                                ret = -1;
                                continue;
                        }
@@ -663,7 +663,7 @@ diff --git a/xattrs.c b/xattrs.c
                        if (len != rxas[i].datum_len) {
                                free(ptr);
                                goto still_abbrev;
-@@ -1049,6 +1115,10 @@ static int rsync_xal_set(const char *fname, item_list *xalp,
+@@ -1048,6 +1114,10 @@ static int rsync_xal_set(const char *fname, item_list *xalp,
                }
        }
  
@@ -674,7 +674,7 @@ diff --git a/xattrs.c b/xattrs.c
        return ret;
  }
  
-@@ -1097,7 +1167,7 @@ char *get_xattr_acl(const char *fname, int is_access_acl, size_t *len_p)
+@@ -1096,7 +1166,7 @@ char *get_xattr_acl(const char *fname, int is_access_acl, size_t *len_p)
  {
        const char *name = is_access_acl ? XACC_ACL_ATTR : XDEF_ACL_ATTR;
        *len_p = 0; /* no extra data alloc needed from get_xattr_data() */
@@ -683,7 +683,7 @@ diff --git a/xattrs.c b/xattrs.c
  }
  
  int set_xattr_acl(const char *fname, int is_access_acl, const char *buf, size_t buf_len)
-@@ -1240,11 +1310,33 @@ int set_stat_xattr(const char *fname, struct file_struct *file, mode_t new_mode)
+@@ -1239,11 +1309,33 @@ int set_stat_xattr(const char *fname, struct file_struct *file, mode_t new_mode)
        return 0;
  }
  
@@ -717,7 +717,7 @@ diff --git a/xattrs.c b/xattrs.c
        return ret;
  }
  
-@@ -1253,6 +1345,9 @@ int x_lstat(const char *fname, STRUCT_STAT *fst, STRUCT_STAT *xst)
+@@ -1252,6 +1344,9 @@ int x_lstat(const char *fname, STRUCT_STAT *fst, STRUCT_STAT *xst)
        int ret = do_lstat(fname, fst);
        if ((ret < 0 || get_stat_xattr(fname, -1, fst, xst) < 0) && xst)
                xst->st_mode = 0;
@@ -727,7 +727,7 @@ diff --git a/xattrs.c b/xattrs.c
        return ret;
  }
  
-@@ -1261,6 +1356,9 @@ int x_fstat(int fd, STRUCT_STAT *fst, STRUCT_STAT *xst)
+@@ -1260,6 +1355,9 @@ int x_fstat(int fd, STRUCT_STAT *fst, STRUCT_STAT *xst)
        int ret = do_fstat(fd, fst);
        if ((ret < 0 || get_stat_xattr(NULL, fd, fst, xst) < 0) && xst)
                xst->st_mode = 0;
index 0e6a20fd2729086fe2a46b31be7068be41c05ceb..3f016e95863489a119192127adff44ee3b15bcff 100644 (file)
@@ -12,7 +12,7 @@ TODO:
  - Make this code handle multibyte character encodings, and honor the
    --iconv setting when converting case.
 
-based-on: 194cee671d5e178f20c4494f41911fa8db942935
+based-on: af531cf787995f6a3bc381cd1da1988192e7ef59
 diff --git a/exclude.c b/exclude.c
 --- a/exclude.c
 +++ b/exclude.c
@@ -48,7 +48,7 @@ diff --git a/flist.c b/flist.c
  extern int ignore_errors;
  extern int numeric_ids;
  extern int quiet;
-@@ -2538,7 +2539,8 @@ struct file_list *recv_file_list(int f, int dir_ndx)
+@@ -2544,7 +2545,8 @@ struct file_list *recv_file_list(int f, int dir_ndx)
                                cur_dir++;
                        if (cur_dir != good_dirname) {
                                const char *d = dir_ndx >= 0 ? f_name(dir_flist->files[dir_ndx], NULL) : empty_dir;
@@ -58,7 +58,7 @@ diff --git a/flist.c b/flist.c
                                        rprintf(FERROR,
                                                "ABORTING due to invalid path from sender: %s/%s\n",
                                                cur_dir, file->basename);
-@@ -3111,6 +3113,7 @@ int f_name_cmp(const struct file_struct *f1, const struct file_struct *f2)
+@@ -3116,6 +3118,7 @@ int f_name_cmp(const struct file_struct *f1, const struct file_struct *f2)
  {
        int dif;
        const uchar *c1, *c2;
@@ -66,7 +66,7 @@ diff --git a/flist.c b/flist.c
        enum fnc_state state1, state2;
        enum fnc_type type1, type2;
        enum fnc_type t_path = protocol_version >= 29 ? t_PATH : t_ITEM;
-@@ -3221,7 +3224,15 @@ int f_name_cmp(const struct file_struct *f1, const struct file_struct *f2)
+@@ -3226,7 +3229,15 @@ int f_name_cmp(const struct file_struct *f1, const struct file_struct *f2)
                        if (type1 != type2)
                                return type1 == t_PATH ? 1 : -1;
                }
@@ -214,7 +214,7 @@ diff --git a/lib/wildmatch.c b/lib/wildmatch.c
 diff --git a/options.c b/options.c
 --- a/options.c
 +++ b/options.c
-@@ -124,6 +124,7 @@ OFF_T max_size = -1;
+@@ -125,6 +125,7 @@ OFF_T max_size = -1;
  OFF_T min_size = -1;
  int ignore_errors = 0;
  int modify_window = 0;
@@ -222,7 +222,7 @@ diff --git a/options.c b/options.c
  int blocking_io = -1;
  int checksum_seed = 0;
  int inplace = 0;
-@@ -973,6 +974,8 @@ static struct poptOption long_options[] = {
+@@ -980,6 +981,8 @@ static struct poptOption long_options[] = {
    {"read-batch",       0,  POPT_ARG_STRING, &batch_name, OPT_READ_BATCH, 0, 0 },
    {"write-batch",      0,  POPT_ARG_STRING, &batch_name, OPT_WRITE_BATCH, 0, 0 },
    {"only-write-batch", 0,  POPT_ARG_STRING, &batch_name, OPT_ONLY_WRITE_BATCH, 0, 0 },
@@ -231,7 +231,7 @@ diff --git a/options.c b/options.c
    {"files-from",       0,  POPT_ARG_STRING, &files_from, 0, 0, 0 },
    {"from0",           '0', POPT_ARG_VAL,    &eol_nulls, 1, 0, 0},
    {"no-from0",         0,  POPT_ARG_VAL,    &eol_nulls, 0, 0, 0},
-@@ -2790,6 +2793,9 @@ void server_options(char **args, int *argc_p)
+@@ -2988,6 +2991,9 @@ void server_options(char **args, int *argc_p)
                args[ac++] = arg;
        }
  
@@ -252,7 +252,7 @@ diff --git a/rsync.1.md b/rsync.1.md
  --address=ADDRESS        bind address for outgoing socket to daemon
  --port=PORT              specify double-colon alternate port number
  --sockopts=OPTIONS       specify custom TCP options
-@@ -2146,6 +2147,12 @@ your home directory (remove the '=' for that).
+@@ -2154,6 +2155,12 @@ your home directory (remove the '=' for that).
  
      >     sudo rsync -aive lsh -M--copy-as=joe src/ lh:dest/
  
@@ -273,7 +273,7 @@ diff --git a/t_stub.c b/t_stub.c
  int preserve_executability = 0;
  int open_noatime = 0;
 +int ignore_case = 0;
- size_t max_alloc = 1024*1024*1024; /* max_alloc is needed when combined with util2.o */
+ size_t max_alloc = 0; /* max_alloc is needed when combined with util2.o */
  char *partial_dir;
  char *module_dir;
 diff --git a/wildtest.c b/wildtest.c
index 94c36d8f193d86291c9b57f1a387a7f6376241fc..8dfd387cfd42dba913fad783a3c8b4a8647e3534 100644 (file)
@@ -12,7 +12,7 @@ To use this patch, run these commands for a successful build:
     ./configure
     make
 
-based-on: 194cee671d5e178f20c4494f41911fa8db942935
+based-on: af531cf787995f6a3bc381cd1da1988192e7ef59
 diff --git a/Makefile.in b/Makefile.in
 --- a/Makefile.in
 +++ b/Makefile.in
@@ -205,7 +205,7 @@ new file mode 100644
 diff --git a/options.c b/options.c
 --- a/options.c
 +++ b/options.c
-@@ -165,6 +165,7 @@ char *backup_suffix = NULL;
+@@ -166,6 +166,7 @@ char *backup_suffix = NULL;
  char *tmpdir = NULL;
  char *partial_dir = NULL;
  char *basis_dir[MAX_BASIS_DIRS+1];
@@ -213,7 +213,7 @@ diff --git a/options.c b/options.c
  char *config_file = NULL;
  char *shell_cmd = NULL;
  char *logfile_name = NULL;
-@@ -226,7 +227,7 @@ static const char *debug_verbosity[] = {
+@@ -227,7 +228,7 @@ static const char *debug_verbosity[] = {
        /*2*/ "BIND,CMD,CONNECT,DEL,DELTASUM,DUP,FILTER,FLIST,ICONV",
        /*3*/ "ACL,BACKUP,CONNECT2,DELTASUM2,DEL2,EXIT,FILTER2,FLIST2,FUZZY,GENR,OWN,RECV,SEND,TIME",
        /*4*/ "CMD2,DELTASUM3,DEL3,EXIT2,FLIST3,ICONV2,OWN2,PROTO,TIME2",
@@ -222,7 +222,7 @@ diff --git a/options.c b/options.c
  };
  
  #define MAX_VERBOSITY ((int)(sizeof debug_verbosity / sizeof debug_verbosity[0]) - 1)
-@@ -296,6 +297,7 @@ static struct output_struct debug_words[COUNT_DEBUG+1] = {
+@@ -297,6 +298,7 @@ static struct output_struct debug_words[COUNT_DEBUG+1] = {
        DEBUG_WORD(FUZZY, W_REC, "Debug fuzzy scoring (levels 1-2)"),
        DEBUG_WORD(GENR, W_REC, "Debug generator functions"),
        DEBUG_WORD(HASH, W_SND|W_REC, "Debug hashtable code"),
@@ -230,16 +230,16 @@ diff --git a/options.c b/options.c
        DEBUG_WORD(HLINK, W_SND|W_REC, "Debug hard-link actions (levels 1-3)"),
        DEBUG_WORD(ICONV, W_CLI|W_SRV, "Debug iconv character conversions (levels 1-2)"),
        DEBUG_WORD(IO, W_CLI|W_SRV, "Debug I/O routines (levels 1-4)"),
-@@ -776,7 +778,7 @@ enum {OPT_SERVER = 1000, OPT_DAEMON, OPT_SENDER, OPT_EXCLUDE, OPT_EXCLUDE_FROM,
-       OPT_FILTER, OPT_COMPARE_DEST, OPT_COPY_DEST, OPT_LINK_DEST, OPT_HELP,
+@@ -783,7 +785,7 @@ enum {OPT_SERVER = 1000, OPT_DAEMON, OPT_SENDER, OPT_EXCLUDE, OPT_EXCLUDE_FROM,
        OPT_INCLUDE, OPT_INCLUDE_FROM, OPT_MODIFY_WINDOW, OPT_MIN_SIZE, OPT_CHMOD,
        OPT_READ_BATCH, OPT_WRITE_BATCH, OPT_ONLY_WRITE_BATCH, OPT_MAX_SIZE,
--      OPT_NO_D, OPT_APPEND, OPT_NO_ICONV, OPT_INFO, OPT_DEBUG,
-+      OPT_NO_D, OPT_APPEND, OPT_NO_ICONV, OPT_INFO, OPT_DEBUG, OPT_LINK_BY_HASH,
-       OPT_USERMAP, OPT_GROUPMAP, OPT_CHOWN, OPT_BWLIMIT,
+       OPT_NO_D, OPT_APPEND, OPT_NO_ICONV, OPT_INFO, OPT_DEBUG, OPT_BLOCK_SIZE,
+-      OPT_USERMAP, OPT_GROUPMAP, OPT_CHOWN, OPT_BWLIMIT,
++      OPT_USERMAP, OPT_GROUPMAP, OPT_CHOWN, OPT_BWLIMIT, OPT_LINK_BY_HASH,
        OPT_OLD_COMPRESS, OPT_NEW_COMPRESS, OPT_NO_COMPRESS,
+       OPT_STOP_AFTER, OPT_STOP_AT,
        OPT_REFUSED_BASE = 9000};
-@@ -932,6 +934,7 @@ static struct poptOption long_options[] = {
+@@ -939,6 +941,7 @@ static struct poptOption long_options[] = {
    {"compare-dest",     0,  POPT_ARG_STRING, 0, OPT_COMPARE_DEST, 0, 0 },
    {"copy-dest",        0,  POPT_ARG_STRING, 0, OPT_COPY_DEST, 0, 0 },
    {"link-dest",        0,  POPT_ARG_STRING, 0, OPT_LINK_DEST, 0, 0 },
@@ -247,7 +247,7 @@ diff --git a/options.c b/options.c
    {"fuzzy",           'y', POPT_ARG_NONE,   0, 'y', 0, 0 },
    {"no-fuzzy",         0,  POPT_ARG_VAL,    &fuzzy_basis, 0, 0, 0 },
    {"no-y",             0,  POPT_ARG_VAL,    &fuzzy_basis, 0, 0, 0 },
-@@ -1178,6 +1181,9 @@ static void set_refuse_options(void)
+@@ -1188,6 +1191,9 @@ static void set_refuse_options(void)
                ref = cp + 1;
        }
  
@@ -257,7 +257,7 @@ diff --git a/options.c b/options.c
        if (am_daemon) {
  #ifdef ICONV_OPTION
                if (!*lp_charset(module_id))
-@@ -1863,6 +1869,21 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -2047,6 +2053,20 @@ int parse_arguments(int *argc_p, const char ***argv_p)
                        return 0;
  #endif
  
@@ -272,14 +272,13 @@ diff --git a/options.c b/options.c
 +                      snprintf(err_buf, sizeof err_buf,
 +                               "hard links are not supported on this %s\n",
 +                               am_server ? "server" : "client");
-+                      rprintf(FERROR, "ERROR: %s", err_buf);
 +                      return 0;
 +#endif
 +
-               default:
-                       /* A large opt value means that set_refuse_options()
-                        * turned this option off. */
-@@ -2184,6 +2205,8 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+               case OPT_STOP_AFTER: {
+                       long val;
+                       arg = poptGetOptArg(pc);
+@@ -2381,6 +2401,8 @@ int parse_arguments(int *argc_p, const char ***argv_p)
                        tmpdir = sanitize_path(NULL, tmpdir, NULL, 0, SP_DEFAULT);
                if (backup_dir)
                        backup_dir = sanitize_path(NULL, backup_dir, NULL, 0, SP_DEFAULT);
@@ -288,7 +287,7 @@ diff --git a/options.c b/options.c
        }
        if (daemon_filter_list.head && !am_sender) {
                filter_rule_list *elp = &daemon_filter_list;
-@@ -2865,6 +2888,12 @@ void server_options(char **args, int *argc_p)
+@@ -3063,6 +3085,12 @@ void server_options(char **args, int *argc_p)
        } else if (inplace)
                args[ac++] = "--inplace";
  
@@ -312,7 +311,7 @@ diff --git a/rsync.1.md b/rsync.1.md
  --compress, -z           compress file data during the transfer
  --compress-choice=STR    choose the compression algorithm (aka --zc)
  --compress-level=NUM     explicitly set compression level (aka --zl)
-@@ -2282,6 +2283,50 @@ your home directory (remove the '=' for that).
+@@ -2290,6 +2291,50 @@ your home directory (remove the '=' for that).
      specified (or implied by `-a`).  You can work-around this bug by avoiding
      the `-o` option when sending to an old rsync.
  
@@ -388,7 +387,7 @@ diff --git a/rsync.c b/rsync.c
 diff --git a/rsync.h b/rsync.h
 --- a/rsync.h
 +++ b/rsync.h
-@@ -1368,7 +1368,8 @@ extern short info_levels[], debug_levels[];
+@@ -1408,7 +1408,8 @@ extern short info_levels[], debug_levels[];
  #define DEBUG_FUZZY (DEBUG_FLIST+1)
  #define DEBUG_GENR (DEBUG_FUZZY+1)
  #define DEBUG_HASH (DEBUG_GENR+1)
index 2c3b7296230195ac5d1768ab550f3f88f8ba4250..fefc47e6caa16233ad2b3859ed55af45e36ccc65 100644 (file)
@@ -14,7 +14,7 @@ To use this patch, run these commands for a successful build:
     ./configure                           (optional if already run)
     make
 
-based-on: 194cee671d5e178f20c4494f41911fa8db942935
+based-on: af531cf787995f6a3bc381cd1da1988192e7ef59
 diff --git a/flist.c b/flist.c
 --- a/flist.c
 +++ b/flist.c
@@ -26,7 +26,7 @@ diff --git a/flist.c b/flist.c
  extern uid_t our_uid;
  extern struct stats stats;
  extern char *filesfrom_host;
-@@ -1782,6 +1783,9 @@ static void send_directory(int f, struct file_list *flist, char *fbuf, int len,
+@@ -1790,6 +1791,9 @@ static void send_directory(int f, struct file_list *flist, char *fbuf, int len,
                }
  
                send_file_name(f, flist, fbuf, NULL, flags, filter_level);
@@ -47,7 +47,7 @@ diff --git a/options.c b/options.c
  size_t bwlimit_writemax = 0;
  int ignore_existing = 0;
  int ignore_non_existing = 0;
-@@ -963,6 +964,7 @@ static struct poptOption long_options[] = {
+@@ -970,6 +971,7 @@ static struct poptOption long_options[] = {
    {"itemize-changes", 'i', POPT_ARG_NONE,   0, 'i', 0, 0 },
    {"no-itemize-changes",0, POPT_ARG_VAL,    &itemize_changes, 0, 0, 0 },
    {"no-i",             0,  POPT_ARG_VAL,    &itemize_changes, 0, 0, 0 },
@@ -63,6 +63,6 @@ diff --git a/rsync.1.md b/rsync.1.md
  --list-only              list the files instead of copying them
  --bwlimit=RATE           limit socket I/O bandwidth
 +--slow-down=USECs        sleep N usec while creating the filelist
+ --stop-after=MINS        Stop rsync after MINS minutes have elapsed
+ --stop-at=y-m-dTh:m      Stop rsync at the specified moment in time
  --write-batch=FILE       write a batched update to FILE
- --only-write-batch=FILE  like --write-batch but w/o updating dest
- --read-batch=FILE        read a batched update from FILE
index d8da1083ce85317977d13ed1e085a08045481518..b0527c6480452847516e88e39c5020ed4e1b384a 100644 (file)
--- a/slp.diff
+++ b/slp.diff
@@ -10,7 +10,7 @@ To use this patch, run these commands for a successful build:
 TODO: the configure changes should abort if the user requests --enable-slp
 and we can't honor that request.
 
-based-on: 194cee671d5e178f20c4494f41911fa8db942935
+based-on: af531cf787995f6a3bc381cd1da1988192e7ef59
 diff --git a/Makefile.in b/Makefile.in
 --- a/Makefile.in
 +++ b/Makefile.in
@@ -61,7 +61,7 @@ diff --git a/clientserver.c b/clientserver.c
 diff --git a/configure.ac b/configure.ac
 --- a/configure.ac
 +++ b/configure.ac
-@@ -976,6 +976,29 @@ if test $rsync_cv_can_hardlink_special = yes; then
+@@ -985,6 +985,29 @@ if test $rsync_cv_can_hardlink_special = yes; then
      AC_DEFINE(CAN_HARDLINK_SPECIAL, 1, [Define to 1 if link() can hard-link special files.])
  fi
  
@@ -105,7 +105,7 @@ diff --git a/daemon-parm.txt b/daemon-parm.txt
 diff --git a/main.c b/main.c
 --- a/main.c
 +++ b/main.c
-@@ -1362,6 +1362,18 @@ static int start_client(int argc, char *argv[])
+@@ -1365,6 +1365,18 @@ static int start_client(int argc, char *argv[])
  
        if (!read_batch) { /* for read_batch, NO source is specified */
                char *path = check_for_hostspec(argv[0], &shell_machine, &rsync_port);
@@ -127,9 +127,9 @@ diff --git a/main.c b/main.c
 diff --git a/options.c b/options.c
 --- a/options.c
 +++ b/options.c
-@@ -664,6 +664,11 @@ static void print_info_flags(enum logcode f)
+@@ -670,6 +670,11 @@ static void print_info_flags(enum logcode f)
  #endif
-                       "prealloc",
+                       "stop-at",
  
 +#ifndef HAVE_LIBSLP
 +              "no "