X-Git-Url: https://mattmccutchen.net/rsync/rsync-patches.git/blobdiff_plain/5214a41bbae94607b196b199b483710e1babf292..c1ff70aa47e11c5b37634479a0facee775a7b6d9:/fileflags.diff diff --git a/fileflags.diff b/fileflags.diff index 5668f56..4cd9c8a 100644 --- a/fileflags.diff +++ b/fileflags.diff @@ -8,7 +8,7 @@ To use this patch, run these commands for a successful build: ./configure make -based-on: 24079e988fc31af4eba56cd2701fdc5a4154980d +based-on: a01e3b490eb36ccf9e704840e1b6683dab867550 diff --git a/Makefile.in b/Makefile.in --- a/Makefile.in +++ b/Makefile.in @@ -21,7 +21,7 @@ diff --git a/Makefile.in b/Makefile.in # Programs we must have to run the test cases CHECK_PROGS = rsync$(EXEEXT) tls$(EXEEXT) getgroups$(EXEEXT) getfsdev$(EXEEXT) \ -@@ -108,7 +108,7 @@ getgroups$(EXEEXT): getgroups.o +@@ -111,7 +111,7 @@ getgroups$(EXEEXT): getgroups.o getfsdev$(EXEEXT): getfsdev.o $(CC) $(CFLAGS) $(LDFLAGS) -o $@ getfsdev.o $(LIBS) @@ -33,7 +33,7 @@ diff --git a/Makefile.in b/Makefile.in diff --git a/compat.c b/compat.c --- a/compat.c +++ b/compat.c -@@ -40,9 +40,11 @@ extern int checksum_seed; +@@ -41,9 +41,11 @@ extern int checksum_seed; extern int basis_dir_cnt; extern int prune_empty_dirs; extern int protocol_version; @@ -45,7 +45,7 @@ diff --git a/compat.c b/compat.c extern int preserve_acls; extern int preserve_xattrs; extern int need_messages_from_generator; -@@ -60,7 +62,7 @@ extern char *iconv_opt; +@@ -61,7 +63,7 @@ extern char *iconv_opt; #endif /* These index values are for the file-list's extra-attribute array. */ @@ -54,7 +54,7 @@ diff --git a/compat.c b/compat.c int receiver_symlink_times = 0; /* receiver can set the time on a symlink */ int sender_symlink_iconv = 0; /* sender should convert symlink content */ -@@ -136,6 +138,8 @@ void setup_protocol(int f_out,int f_in) +@@ -138,6 +140,8 @@ void setup_protocol(int f_out,int f_in) uid_ndx = ++file_extra_cnt; if (preserve_gid) gid_ndx = ++file_extra_cnt; @@ -66,7 +66,7 @@ diff --git a/compat.c b/compat.c diff --git a/configure.in b/configure.in --- a/configure.in +++ b/configure.in -@@ -583,7 +583,7 @@ AC_CHECK_FUNCS(waitpid wait4 getcwd strdup chown chmod lchmod mknod mkfifo \ +@@ -589,7 +589,7 @@ AC_CHECK_FUNCS(waitpid wait4 getcwd strdup chown chmod lchmod mknod mkfifo \ setlocale setmode open64 lseek64 mkstemp64 mtrace va_copy __va_copy \ seteuid strerror putenv iconv_open locale_charset nl_langinfo getxattr \ extattr_get_link sigaction sigprocmask setattrlist getgrouplist \ @@ -131,10 +131,10 @@ diff --git a/flist.c b/flist.c extern int preserve_devices; extern int preserve_specials; +extern int preserve_fileflags; + extern int delete_during; extern int missing_args; extern int uid_ndx; - extern int gid_ndx; -@@ -406,6 +407,9 @@ static void send_file_entry(int f, const char *fname, struct file_struct *file, +@@ -408,6 +409,9 @@ static void send_file_entry(int f, const char *fname, struct file_struct *file, { static time_t modtime; static mode_t mode; @@ -144,7 +144,7 @@ diff --git a/flist.c b/flist.c #ifdef SUPPORT_HARD_LINKS static int64 dev; #endif -@@ -449,6 +453,14 @@ static void send_file_entry(int f, const char *fname, struct file_struct *file, +@@ -451,6 +455,14 @@ static void send_file_entry(int f, const char *fname, struct file_struct *file, xflags |= XMIT_SAME_MODE; else mode = file->mode; @@ -159,7 +159,7 @@ diff --git a/flist.c b/flist.c if (preserve_devices && IS_DEVICE(mode)) { if (protocol_version < 28) { -@@ -590,6 +602,10 @@ static void send_file_entry(int f, const char *fname, struct file_struct *file, +@@ -592,6 +604,10 @@ static void send_file_entry(int f, const char *fname, struct file_struct *file, write_varint(f, F_MOD_NSEC(file)); if (!(xflags & XMIT_SAME_MODE)) write_int(f, to_wire_mode(mode)); @@ -170,7 +170,7 @@ diff --git a/flist.c b/flist.c if (preserve_uid && !(xflags & XMIT_SAME_UID)) { if (protocol_version < 30) write_int(f, uid); -@@ -677,6 +693,9 @@ static struct file_struct *recv_file_entry(int f, struct file_list *flist, int x +@@ -679,6 +695,9 @@ static struct file_struct *recv_file_entry(int f, struct file_list *flist, int x { static int64 modtime; static mode_t mode; @@ -180,7 +180,7 @@ diff --git a/flist.c b/flist.c #ifdef SUPPORT_HARD_LINKS static int64 dev; #endif -@@ -822,6 +841,10 @@ static struct file_struct *recv_file_entry(int f, struct file_list *flist, int x +@@ -824,6 +843,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); @@ -191,7 +191,7 @@ diff --git a/flist.c b/flist.c if (preserve_uid && !(xflags & XMIT_SAME_UID)) { if (protocol_version < 30) -@@ -973,6 +996,10 @@ static struct file_struct *recv_file_entry(int f, struct file_list *flist, int x +@@ -975,6 +998,10 @@ static struct file_struct *recv_file_entry(int f, struct file_list *flist, int x } #endif file->mode = mode; @@ -202,7 +202,7 @@ diff --git a/flist.c b/flist.c if (preserve_uid) F_OWNER(file) = uid; if (preserve_gid) { -@@ -1370,6 +1397,10 @@ struct file_struct *make_file(const char *fname, struct file_list *flist, +@@ -1372,6 +1399,10 @@ struct file_struct *make_file(const char *fname, struct file_list *flist, } #endif file->mode = st.st_mode; @@ -227,7 +227,7 @@ diff --git a/generator.c b/generator.c extern int uid_ndx; extern int gid_ndx; extern int delete_mode; -@@ -406,6 +408,11 @@ int unchanged_attrs(const char *fname, struct file_struct *file, stat_x *sxp) +@@ -405,6 +407,11 @@ int unchanged_attrs(const char *fname, struct file_struct *file, stat_x *sxp) && ((sxp->st.st_mode & 0111 ? 1 : 0) ^ (file->mode & 0111 ? 1 : 0))) return 0; @@ -239,7 +239,7 @@ diff --git a/generator.c b/generator.c if (am_root && uid_ndx && sxp->st.st_uid != (uid_t)F_OWNER(file)) return 0; -@@ -471,6 +478,11 @@ void itemize(const char *fnamecmp, struct file_struct *file, int ndx, int statre +@@ -470,6 +477,11 @@ void itemize(const char *fnamecmp, struct file_struct *file, int ndx, int statre if (gid_ndx && !(file->flags & FLAG_SKIP_GROUP) && sxp->st.st_gid != (gid_t)F_GROUP(file)) iflags |= ITEM_REPORT_GROUP; @@ -251,7 +251,7 @@ diff --git a/generator.c b/generator.c #ifdef SUPPORT_ACLS if (preserve_acls && !S_ISLNK(file->mode)) { if (!ACL_READY(*sxp)) -@@ -1265,6 +1277,10 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx, +@@ -1264,6 +1276,10 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx, file->mode = dest_mode(file->mode, sx.st.st_mode, dflt_perms, statret == 0); } @@ -262,7 +262,7 @@ diff --git a/generator.c b/generator.c if (statret != 0 && basis_dir[0] != NULL) { int j = try_dests_non(file, fname, ndx, fnamecmpbuf, &sx, itemizing, code); -@@ -1305,10 +1321,15 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx, +@@ -1304,10 +1320,15 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx, /* We need to ensure that the dirs in the transfer have writable * permissions during the time we are putting files within them. * This is then fixed after the transfer is done. */ @@ -279,7 +279,7 @@ diff --git a/generator.c b/generator.c rsyserr(FERROR_XFER, errno, "failed to modify permissions on %s", full_fname(fname)); -@@ -1343,6 +1364,10 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx, +@@ -1342,6 +1363,10 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx, file->mode = dest_mode(file->mode, sx.st.st_mode, dflt_perms, exists); } @@ -290,7 +290,7 @@ diff --git a/generator.c b/generator.c #ifdef SUPPORT_HARD_LINKS if (preserve_hard_links && F_HLINK_NOT_FIRST(file) -@@ -1920,13 +1945,17 @@ static void touch_up_dirs(struct file_list *flist, int ndx) +@@ -1919,13 +1944,17 @@ static void touch_up_dirs(struct file_list *flist, int ndx) continue; fname = f_name(file, NULL); if (fix_dir_perms) @@ -309,7 +309,7 @@ diff --git a/generator.c b/generator.c +#endif if (counter >= loopchk_limit) { if (allowed_lull) - maybe_send_keepalive(); + maybe_send_keepalive(time(NULL), True); diff --git a/log.c b/log.c --- a/log.c +++ b/log.c @@ -420,7 +420,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 }, -@@ -2420,6 +2446,9 @@ void server_options(char **args, int *argc_p) +@@ -2435,6 +2461,9 @@ void server_options(char **args, int *argc_p) if (xfer_dirs && !recurse && delete_mode && am_sender) args[ac++] = "--no-r"; @@ -430,7 +430,7 @@ diff --git a/options.c b/options.c if (do_compression && def_compress_level != Z_DEFAULT_COMPRESSION) { if (asprintf(&arg, "--compress-level=%d", def_compress_level) < 0) goto oom; -@@ -2507,6 +2536,16 @@ void server_options(char **args, int *argc_p) +@@ -2522,6 +2551,16 @@ void server_options(char **args, int *argc_p) args[ac++] = "--delete-excluded"; if (force_delete) args[ac++] = "--force"; @@ -732,7 +732,7 @@ diff --git a/rsync.yo b/rsync.yo bf(--recursive) option was also enabled. dit(bf(--max-delete=NUM)) This tells rsync not to delete more than NUM -@@ -1875,7 +1904,7 @@ with older versions of rsync, but that also turns on the output of other +@@ -1889,7 +1918,7 @@ with older versions of rsync, but that also turns on the output of other verbose messages). The "%i" escape has a cryptic output that is 11 letters long. The general @@ -741,7 +741,7 @@ diff --git a/rsync.yo b/rsync.yo type of update being done, bf(X) is replaced by the file-type, and the other letters represent attributes that may be output if they are being modified. -@@ -1931,7 +1960,7 @@ quote(itemization( +@@ -1945,7 +1974,7 @@ quote(itemization( sender's value (requires bf(--owner) and super-user privileges). it() A bf(g) means the group is different and is being updated to the sender's value (requires bf(--group) and the authority to set the group).