X-Git-Url: https://mattmccutchen.net/rsync/rsync-patches.git/blobdiff_plain/071bf6dfa97fb51b392e51cbcf3279f394219674..998e0bab068d64092214e4e923e518c599faff61:/checksum-updating.diff diff --git a/checksum-updating.diff b/checksum-updating.diff index bc8a612..ce7cd03 100644 --- a/checksum-updating.diff +++ b/checksum-updating.diff @@ -19,7 +19,7 @@ To use this patch, run these commands for a successful build: extern int io_timeout; extern int no_detach; extern int default_af_hint; -@@ -634,6 +635,8 @@ static int rsync_module(int f_in, int f_ +@@ -641,6 +642,8 @@ static int rsync_module(int f_in, int f_ else if (am_root < 0) /* Treat --fake-super from client as --super. */ am_root = 2; @@ -118,7 +118,7 @@ To use this patch, run these commands for a successful build: + OPT_EXTRA(file, 0)->unum = (uint32)(file_length >> 32); + } + file->dirname = dirname; -+ bp = (char*)F_SUM(file); ++ bp = F_SUM(file); + memcpy(bp, sum, checksum_len); +#if SIZEOF_TIME_T == 4 + OPT_EXTRA(file, LEN64_BUMP(file) + SUM_EXTRA_CNT)->num = ctime; @@ -372,7 +372,7 @@ To use this patch, run these commands for a successful build: int push_pathname(const char *dir, int len) { if (dir == pathname) -@@ -973,34 +1280,24 @@ static struct file_struct *recv_file_ent +@@ -980,34 +1287,24 @@ static struct file_struct *recv_file_ent return file; } @@ -412,8 +412,8 @@ To use this patch, run these commands for a successful build: + STRUCT_STAT st; char *bp; - if (strlcpy(thisname, fname, sizeof thisname) -@@ -1077,6 +1374,8 @@ struct file_struct *make_file(const char + if (strlcpy(thisname, fname, sizeof thisname) >= sizeof thisname) { +@@ -1086,6 +1383,8 @@ struct file_struct *make_file(const char if (is_excluded(thisname, S_ISDIR(st.st_mode) != 0, filter_level)) { if (ignore_perishable) non_perishable_cnt++; @@ -422,7 +422,7 @@ To use this patch, run these commands for a successful build: return NULL; } -@@ -1115,9 +1414,16 @@ struct file_struct *make_file(const char +@@ -1124,9 +1423,16 @@ struct file_struct *make_file(const char memcpy(lastdir, thisname, len); lastdir[len] = '\0'; lastdir_len = len; @@ -440,7 +440,7 @@ To use this patch, run these commands for a successful build: basename_len = strlen(basename) + 1; /* count the '\0' */ #ifdef SUPPORT_LINKS -@@ -1193,11 +1499,44 @@ struct file_struct *make_file(const char +@@ -1202,11 +1508,44 @@ struct file_struct *make_file(const char } #endif @@ -464,7 +464,7 @@ To use this patch, run these commands for a successful build: + if (fp->flags & FLAG_SUM_MISSING) { + fp->flags &= ~FLAG_SUM_MISSING; + file_checksum(thisname, tmp_sum, st.st_size); -+ memcpy((char*)F_SUM(fp), tmp_sum, MAX_DIGEST_LEN); ++ memcpy(F_SUM(fp), tmp_sum, MAX_DIGEST_LEN); + } else { + checksum_matches++; + memcpy(tmp_sum, F_SUM(fp), MAX_DIGEST_LEN); @@ -488,42 +488,7 @@ To use this patch, run these commands for a successful build: /* This code is only used by the receiver when it is building * a list of files for a delete pass. */ if (keep_dirlinks && linkname_len && flist) { -@@ -1241,14 +1580,14 @@ void unmake_file(struct file_struct *fil - - static struct file_struct *send_file_name(int f, struct file_list *flist, - char *fname, STRUCT_STAT *stp, -- int flags, int filter_flags) -+ int flags, int filter_level) - { - struct file_struct *file; - #if defined SUPPORT_ACLS || defined SUPPORT_XATTRS - statx sx; - #endif - -- file = make_file(fname, flist, stp, flags, filter_flags); -+ file = make_file(fname, flist, stp, flags, filter_level); - if (!file) - return NULL; - -@@ -1442,7 +1781,7 @@ static void send_directory(int f, struct - DIR *d; - int divert_dirs = (flags & FLAG_DIVERT_DIRS) != 0; - int start = flist->count; -- int filter_flags = f == -2 ? SERVER_FILTERS : ALL_FILTERS; -+ int filter_level = f == -2 ? SERVER_FILTERS : ALL_FILTERS; - - assert(flist != NULL); - -@@ -1471,7 +1810,7 @@ static void send_directory(int f, struct - continue; - } - -- send_file_name(f, flist, fbuf, NULL, flags, filter_flags); -+ send_file_name(f, flist, fbuf, NULL, flags, filter_level); - } - - fbuf[len] = '\0'; -@@ -1483,6 +1822,9 @@ static void send_directory(int f, struct +@@ -1499,6 +1838,9 @@ static void send_directory(int f, struct closedir(d); @@ -531,9 +496,9 @@ To use this patch, run these commands for a successful build: + write_checksums(NULL, 1); + if (f >= 0 && recurse && !divert_dirs) { - int i, end = flist->count - 1; - /* send_if_directory() bumps flist->count, so use "end". */ -@@ -1916,7 +2258,11 @@ struct file_list *send_file_list(int f, + int i, end = flist->used - 1; + /* send_if_directory() bumps flist->used, so use "end". */ +@@ -1942,7 +2284,11 @@ struct file_list *send_file_list(int f, * file-list to check if this is a 1-file xfer. */ send_extra_file_list(f, 1); } @@ -546,7 +511,7 @@ To use this patch, run these commands for a successful build: return flist; } -@@ -2206,7 +2552,7 @@ void flist_free(struct file_list *flist) +@@ -2235,7 +2581,7 @@ void flist_free(struct file_list *flist) if (!flist->prev || !flist_cnt) pool_destroy(flist->file_pool); @@ -555,17 +520,9 @@ To use this patch, run these commands for a successful build: pool_free_old(flist->file_pool, flist->pool_boundary); if (flist->sorted && flist->sorted != flist->files) -@@ -2225,6 +2571,7 @@ static void clean_flist(struct file_list - if (!flist) - return; - if (flist->count == 0) { -+ flist->low = 0; - flist->high = -1; - return; - } --- old/loadparm.c +++ new/loadparm.c -@@ -149,6 +149,7 @@ typedef struct +@@ -152,6 +152,7 @@ typedef struct int syslog_facility; int timeout; @@ -573,7 +530,7 @@ To use this patch, run these commands for a successful build: BOOL fake_super; BOOL ignore_errors; BOOL ignore_nonreadable; -@@ -197,6 +198,7 @@ static service sDefault = +@@ -200,6 +201,7 @@ static service sDefault = /* syslog_facility; */ LOG_DAEMON, /* timeout; */ 0, @@ -581,7 +538,7 @@ To use this patch, run these commands for a successful build: /* fake_super; */ False, /* ignore_errors; */ False, /* ignore_nonreadable; */ False, -@@ -313,6 +315,7 @@ static struct parm_struct parm_table[] = +@@ -316,6 +318,7 @@ static struct parm_struct parm_table[] = {"lock file", P_STRING, P_LOCAL, &sDefault.lock_file, NULL,0}, {"log file", P_STRING, P_LOCAL, &sDefault.log_file, NULL,0}, {"log format", P_STRING, P_LOCAL, &sDefault.log_format, NULL,0}, @@ -589,7 +546,7 @@ To use this patch, run these commands for a successful build: {"max connections", P_INTEGER,P_LOCAL, &sDefault.max_connections, NULL,0}, {"max verbosity", P_INTEGER,P_LOCAL, &sDefault.max_verbosity, NULL,0}, {"name", P_STRING, P_LOCAL, &sDefault.name, NULL,0}, -@@ -418,6 +421,7 @@ FN_LOCAL_BOOL(lp_fake_super, fake_super) +@@ -421,6 +424,7 @@ FN_LOCAL_BOOL(lp_fake_super, fake_super) FN_LOCAL_BOOL(lp_ignore_errors, ignore_errors) FN_LOCAL_BOOL(lp_ignore_nonreadable, ignore_nonreadable) FN_LOCAL_BOOL(lp_list, list) @@ -604,10 +561,10 @@ To use this patch, run these commands for a successful build: int ignore_non_existing = 0; int need_messages_from_generator = 0; +int checksum_updating = 0; - int max_delete = -1; + int max_delete = INT_MIN; OFF_T max_size = 0; OFF_T min_size = 0; -@@ -302,6 +303,7 @@ void usage(enum logcode F) +@@ -303,6 +304,7 @@ void usage(enum logcode F) rprintf(F," -q, --quiet suppress non-error messages\n"); rprintf(F," --no-motd suppress daemon-mode MOTD (see manpage caveat)\n"); rprintf(F," -c, --checksum skip based on checksum, not mod-time & size\n"); @@ -615,7 +572,7 @@ To use this patch, run these commands for a successful build: rprintf(F," -a, --archive archive mode; equals -rlptgoD (no -H,-A,-X)\n"); rprintf(F," --no-OPTION turn off an implied OPTION (e.g. --no-D)\n"); rprintf(F," -r, --recursive recurse into directories\n"); -@@ -542,6 +544,7 @@ static struct poptOption long_options[] +@@ -544,6 +546,7 @@ static struct poptOption long_options[] {"checksum", 'c', POPT_ARG_VAL, &always_checksum, 1, 0, 0 }, {"no-checksum", 0, POPT_ARG_VAL, &always_checksum, 0, 0, 0 }, {"no-c", 0, POPT_ARG_VAL, &always_checksum, 0, 0, 0 }, @@ -623,7 +580,7 @@ To use this patch, run these commands for a successful build: {"block-size", 'B', POPT_ARG_LONG, &block_size, 0, 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 }, -@@ -1896,7 +1899,9 @@ void server_options(char **args,int *arg +@@ -1913,7 +1916,9 @@ void server_options(char **args,int *arg args[ac++] = basis_dir[i]; } } @@ -636,15 +593,15 @@ To use this patch, run these commands for a successful build: args[ac++] = "--append"; --- old/rsync.h +++ new/rsync.h -@@ -589,6 +589,7 @@ extern int preserve_xattrs; - #define EXTRA_LEN (sizeof (union file_extras)) - #define PTR_EXTRA_LEN ((sizeof (char *) + EXTRA_LEN - 1) / EXTRA_LEN) +@@ -592,6 +592,7 @@ extern int xattrs_ndx; + #define DEV_EXTRA_CNT 2 + #define DIRNODE_EXTRA_CNT 3 #define SUM_EXTRA_CNT ((MAX_DIGEST_LEN + EXTRA_LEN - 1) / EXTRA_LEN) +#define TIME_EXTRA_CNT ((SIZEOF_TIME_T + EXTRA_LEN - 1) / EXTRA_LEN) #define REQ_EXTRA(f,ndx) ((union file_extras*)(f) - (ndx)) #define OPT_EXTRA(f,bump) ((union file_extras*)(f) - file_extra_cnt - 1 - (bump)) -@@ -1070,6 +1071,12 @@ isDigit(const char *ptr) +@@ -1077,6 +1078,12 @@ isDigit(const char *ptr) } static inline int @@ -659,7 +616,7 @@ To use this patch, run these commands for a successful build: return isprint(*(unsigned char *)ptr); --- old/rsync.yo +++ new/rsync.yo -@@ -307,6 +307,7 @@ to the detailed description below for a +@@ -322,6 +322,7 @@ to the detailed description below for a -q, --quiet suppress non-error messages --no-motd suppress daemon-mode MOTD (see caveat) -c, --checksum skip based on checksum, not mod-time & size @@ -667,7 +624,7 @@ To use this patch, run these commands for a successful build: -a, --archive archive mode; equals -rlptgoD (no -H,-A,-X) --no-OPTION turn off an implied OPTION (e.g. --no-D) -r, --recursive recurse into directories -@@ -502,9 +503,9 @@ uses a "quick check" that (by default) c +@@ -518,9 +519,9 @@ uses a "quick check" that (by default) c of last modification match between the sender and receiver. This option changes this to compare a 128-bit MD4 checksum for each file that has a matching size. Generating the checksums means that both sides will expend @@ -680,7 +637,7 @@ To use this patch, run these commands for a successful build: The sending side generates its checksums while it is doing the file-system scan that builds the list of the available files. The receiver generates -@@ -512,12 +513,42 @@ its checksums when it is scanning for ch +@@ -528,12 +529,42 @@ its checksums when it is scanning for ch 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. @@ -748,7 +705,7 @@ To use this patch, run these commands for a successful build: attempted uploads will fail. If "read only" is false then uploads will --- old/support/rsyncsums +++ new/support/rsyncsums -@@ -0,0 +1,185 @@ +@@ -0,0 +1,184 @@ +#!/usr/bin/perl -w +use strict; + @@ -803,7 +760,6 @@ To use this patch, run these commands for a successful build: + + my $sums_mtime = (stat($SUMS_FILE))[9]; + my %cache; -+ my @fp; + my @subdirs; + my $cnt = 0; + my $latest_time = 0;