AC_CONFIG_FILES([Makefile lib/dummy zlib/dummy popt/dummy shconfig])
AC_OUTPUT
---- orig/flist.c 2005-07-27 23:31:12
+--- orig/flist.c 2005-08-17 06:45:07
+++ flist.c 2005-07-29 02:49:06
@@ -974,6 +974,8 @@ static struct file_struct *send_file_nam
file = make_file(fname, flist, f == -2 ? SERVER_FILTERS : ALL_FILTERS);
}
return file;
}
-@@ -1318,6 +1324,8 @@ struct file_list *recv_file_list(int f)
+@@ -1327,6 +1333,8 @@ struct file_list *recv_file_list(int f)
flags |= read_byte(f) << 8;
file = receive_file_entry(flist, flags, f);
if (S_ISREG(file->mode))
stats.total_size += file->length;
-@@ -1340,6 +1348,8 @@ struct file_list *recv_file_list(int f)
+@@ -1349,6 +1357,8 @@ struct file_list *recv_file_list(int f)
clean_flist(flist, relative_paths, 1);
if (f >= 0) {
/* Now send the uid/gid list. This was introduced in
* protocol version 15 */
---- orig/generator.c 2005-07-28 01:46:25
+--- orig/generator.c 2005-08-17 06:45:07
+++ generator.c 2005-05-12 23:34:00
@@ -725,6 +725,10 @@ static void recv_generator(char *fname,
if (set_perms(fname, file, statret ? NULL : &st, 0)
next;
}
---- orig/options.c 2005-07-28 01:46:25
-+++ options.c 2005-05-12 23:34:38
-@@ -44,6 +44,7 @@ int keep_dirlinks = 0;
+--- orig/options.c 2005-08-27 21:11:26
++++ options.c 2005-08-27 21:15:29
+@@ -43,6 +43,7 @@ int keep_dirlinks = 0;
int copy_links = 0;
int preserve_links = 0;
int preserve_hard_links = 0;
int preserve_perms = 0;
int preserve_devices = 0;
int preserve_uid = 0;
-@@ -182,6 +183,7 @@ static void print_rsync_version(enum log
+@@ -181,6 +182,7 @@ static void print_rsync_version(enum log
char const *got_socketpair = "no ";
char const *have_inplace = "no ";
char const *hardlinks = "no ";
char const *links = "no ";
char const *ipv6 = "no ";
STRUCT_STAT *dumstat;
-@@ -198,6 +200,10 @@ static void print_rsync_version(enum log
+@@ -197,6 +199,10 @@ static void print_rsync_version(enum log
hardlinks = "";
#endif
#ifdef SUPPORT_LINKS
links = "";
#endif
-@@ -212,9 +218,9 @@ static void print_rsync_version(enum log
+@@ -211,9 +217,9 @@ static void print_rsync_version(enum log
"Copyright (C) 1996-2005 by Andrew Tridgell and others\n");
rprintf(f, "<http://rsync.samba.org/>\n");
rprintf(f, "Capabilities: %d-bit files, %ssocketpairs, "
/* Note that this field may not have type ino_t. It depends
* on the complicated interaction between largefile feature
-@@ -285,6 +291,7 @@ void usage(enum logcode F)
+@@ -284,6 +290,7 @@ void usage(enum logcode F)
rprintf(F," -H, --hard-links preserve hard links\n");
rprintf(F," -K, --keep-dirlinks treat symlinked dir on receiver as dir\n");
rprintf(F," -p, --perms preserve permissions\n");
rprintf(F," -o, --owner preserve owner (root only)\n");
rprintf(F," -g, --group preserve group\n");
rprintf(F," -D, --devices preserve devices (root only)\n");
-@@ -412,6 +419,7 @@ static struct poptOption long_options[]
- {"no-whole-file", 0, POPT_ARG_VAL, &whole_file, 0, 0, 0 },
- {"copy-unsafe-links",0, POPT_ARG_NONE, ©_unsafe_links, 0, 0, 0 },
- {"perms", 'p', POPT_ARG_NONE, &preserve_perms, 0, 0, 0 },
-+ {"acls", 'A', POPT_ARG_NONE, 0, 'A', 0, 0 },
- {"owner", 'o', POPT_ARG_NONE, &preserve_uid, 0, 0, 0 },
- {"group", 'g', POPT_ARG_NONE, &preserve_gid, 0, 0, 0 },
- {"devices", 'D', POPT_ARG_NONE, &preserve_devices, 0, 0, 0 },
-@@ -882,6 +890,24 @@ int parse_arguments(int *argc, const cha
+@@ -385,6 +392,9 @@ 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 },
++ {"acls", 'A', POPT_ARG_NONE, 0, 'A', 0, 0 },
++ {"no-acls", 0, POPT_ARG_VAL, &preserve_acls, 0, 0, 0 },
++ {"no-A", 0, POPT_ARG_VAL, &preserve_acls, 0, 0, 0 },
+ {"times", 't', POPT_ARG_VAL, &preserve_times, 1, 0, 0 },
+ {"no-times", 0, POPT_ARG_VAL, &preserve_times, 0, 0, 0 },
+ {"no-t", 0, POPT_ARG_VAL, &preserve_times, 0, 0, 0 },
+@@ -916,6 +926,24 @@ int parse_arguments(int *argc, const cha
basis_dir[basis_dir_cnt++] = (char *)arg;
break;
+#ifdef SUPPORT_ACLS
+ preserve_acls = 1;
+ preserve_perms = 1;
++ break;
+#else
+ /* FIXME: this should probably be ignored with a
+ * warning and then countermeasures taken to
+ am_server ? "server" : "client");
+ return 0;
+#endif /* SUPPORT_ACLS */
-+ break;
+
+
default:
/* A large opt value means that set_refuse_options()
* turned this option off. */
-@@ -1305,6 +1331,8 @@ void server_options(char **args,int *arg
+@@ -1329,6 +1357,8 @@ void server_options(char **args,int *arg
if (preserve_hard_links)
argstr[x++] = 'H';
if (verbose > 1 && flags & PERMS_REPORT) {
enum logcode code = daemon_log_format_has_i || dry_run
? FCLIENT : FINFO;
---- orig/rsync.h 2005-05-03 17:11:01
+--- orig/rsync.h 2005-08-17 06:45:08
+++ rsync.h 2005-07-29 02:25:55
-@@ -638,6 +638,44 @@ struct stats {
+@@ -646,6 +646,44 @@ struct stats {
#include "lib/permstring.h"
#include "lib/addrinfo.h"
#include "proto.h"
/* We have replacement versions of these if they're missing. */
---- orig/rsync.yo 2005-07-29 02:47:20
+--- orig/rsync.yo 2005-08-27 21:05:12
+++ rsync.yo 2004-07-03 20:11:58
-@@ -316,6 +316,7 @@ to the detailed description below for a
+@@ -318,6 +318,7 @@ to the detailed description below for a
-H, --hard-links preserve hard links
-K, --keep-dirlinks treat symlinked dir on receiver as dir
-p, --perms preserve permissions
-o, --owner preserve owner (root only)
-g, --group preserve group
-D, --devices preserve devices (root only)
-@@ -636,6 +637,11 @@ based on the source file's permissions,
+@@ -665,6 +666,11 @@ based on the source file's permissions,
umask setting
(which is the same behavior as other file-copy utilities, such as cp).
rprintf(FINFO, "flist->length=%.0f\n",
(double) fptr[i]->length);
rprintf(FINFO, "flist->mode=%#o\n", (int) fptr[i]->mode);
---- orig/flist.c 2005-07-27 23:31:12
+--- orig/flist.c 2005-08-17 06:45:07
+++ flist.c 2005-07-28 00:16:34
@@ -50,6 +50,7 @@ extern int preserve_perms;
extern int preserve_devices;
file->length = st.st_size;
file->mode = st.st_mode;
file->uid = st.st_uid;
---- orig/generator.c 2005-07-27 23:31:12
+--- orig/generator.c 2005-08-17 06:45:07
+++ generator.c 2005-07-28 00:14:43
@@ -44,6 +44,7 @@ extern int preserve_uid;
extern int preserve_gid;
extern int delete_before;
extern int delete_during;
extern int delete_after;
-@@ -323,9 +324,21 @@ void itemize(struct file_struct *file, i
+@@ -324,9 +325,21 @@ void itemize(struct file_struct *file, i
: S_ISDIR(file->mode) ? !omit_dir_times
: !S_ISLNK(file->mode);
iflags |= ITEM_REPORT_TIME;
if (preserve_perms
&& (file->mode & CHMOD_BITS) != (st->st_mode & CHMOD_BITS))
-@@ -377,7 +390,7 @@ static int unchanged_file(char *fn, stru
+@@ -378,7 +391,7 @@ static int unchanged_file(char *fn, stru
if (ignore_times)
return 0;
}
-@@ -530,7 +543,7 @@ static int find_fuzzy(struct file_struct
+@@ -538,7 +551,7 @@ static int find_fuzzy(struct file_struct
name = fp->basename;
if (fp->length == file->length
if (verbose > 4) {
rprintf(FINFO,
"fuzzy size/modtime match for %s\n",
-@@ -851,7 +864,7 @@ static void recv_generator(char *fname,
+@@ -881,7 +894,7 @@ static void recv_generator(char *fname,
}
if (update_only && statret == 0
if (iflags & (ITEM_IS_NEW|ITEM_MISSING_DATA)) {
char ch = iflags & ITEM_IS_NEW ? '+' : '?';
---- orig/options.c 2005-07-27 23:31:12
-+++ options.c 2005-07-28 01:00:24
+--- orig/options.c 2005-08-27 21:11:26
++++ options.c 2005-08-27 21:16:51
@@ -49,6 +49,7 @@ int preserve_uid = 0;
int preserve_gid = 0;
int preserve_times = 0;
int update_only = 0;
int cvs_exclude = 0;
int dry_run = 0;
-@@ -285,8 +286,9 @@ void usage(enum logcode F)
+@@ -287,8 +288,9 @@ void usage(enum logcode F)
rprintf(F," -o, --owner preserve owner (root only)\n");
rprintf(F," -g, --group preserve group\n");
rprintf(F," -D, --devices preserve devices (root only)\n");
rprintf(F," -S, --sparse handle sparse files efficiently\n");
rprintf(F," -n, --dry-run show what would have been transferred\n");
rprintf(F," -W, --whole-file copy files whole (without rsync algorithm)\n");
-@@ -413,6 +415,7 @@ static struct poptOption long_options[]
- {"devices", 'D', POPT_ARG_NONE, &preserve_devices, 0, 0, 0 },
- {"times", 't', POPT_ARG_NONE, &preserve_times, 0, 0, 0 },
+@@ -388,6 +390,9 @@ static struct poptOption long_options[]
+ {"times", 't', POPT_ARG_VAL, &preserve_times, 1, 0, 0 },
+ {"no-times", 0, POPT_ARG_VAL, &preserve_times, 0, 0, 0 },
+ {"no-t", 0, POPT_ARG_VAL, &preserve_times, 0, 0, 0 },
++ {"atimes", 'A', POPT_ARG_VAL, &preserve_atimes, 1, 0, 0 },
++ {"no-atimes", 0, POPT_ARG_VAL, &preserve_atimes, 0, 0, 0 },
++ {"no-A", 0, POPT_ARG_VAL, &preserve_atimes, 0, 0, 0 },
{"omit-dir-times", 'O', POPT_ARG_VAL, &omit_dir_times, 2, 0, 0 },
-+ {"atimes", 'A', POPT_ARG_NONE, &preserve_atimes, 0, 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 },
-@@ -1292,6 +1295,8 @@ void server_options(char **args,int *arg
+ {"modify-window", 0, POPT_ARG_INT, &modify_window, OPT_MODIFY_WINDOW, 0, 0 },
+ {"owner", 'o', POPT_ARG_VAL, &preserve_uid, 1, 0, 0 },
+@@ -1337,6 +1342,8 @@ void server_options(char **args,int *arg
argstr[x++] = 'D';
if (preserve_times)
argstr[x++] = 't';
}
change_uid = am_root && preserve_uid && st->st_uid != file->uid;
---- orig/rsync.h 2005-05-03 17:11:01
+--- orig/rsync.h 2005-08-17 06:45:08
+++ rsync.h 2005-07-28 00:04:51
@@ -54,6 +54,7 @@
#define XMIT_HAS_IDEV_DATA (1<<9)
#define ITEM_REPORT_CHECKSUM (1<<1)
#define ITEM_REPORT_SIZE (1<<2)
#define ITEM_REPORT_TIME (1<<3)
-@@ -509,6 +512,7 @@ struct file_struct {
+@@ -517,6 +520,7 @@ struct file_struct {
struct hlink *links;
} link_u;
time_t modtime;
uid_t uid;
gid_t gid;
mode_t mode;
---- orig/rsync.yo 2005-07-07 23:11:09
+--- orig/rsync.yo 2005-08-27 21:05:12
+++ rsync.yo 2005-07-28 01:04:09
-@@ -309,8 +309,9 @@ to the detailed description below for a
+@@ -321,8 +321,9 @@ to the detailed description below for a
-o, --owner preserve owner (root only)
-g, --group preserve group
-D, --devices preserve devices (root only)
-S, --sparse handle sparse files efficiently
-n, --dry-run show what would have been transferred
-W, --whole-file copy files whole (without rsync algorithm)
-@@ -648,6 +649,12 @@ it is preserving modification times (see
+@@ -695,6 +696,12 @@ it is preserving modification times (see
the directories on the receiving side, it is a good idea to use bf(-O).
This option is inferred if you use bf(--backup) without bf(--backup-dir).
dit(bf(-n, --dry-run)) This tells rsync to not do any file transfers,
instead it will just report the actions it would have taken.
-@@ -1055,7 +1062,7 @@ changes that are being made to each file
+@@ -1103,7 +1110,7 @@ changes that are being made to each file
This is exactly the same as specifying bf(--log-format='%i %n%L').
The "%i" escape has a cryptic output that is 9 letters long. The general
kind 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.
-@@ -1094,17 +1101,22 @@ quote(itemize(
+@@ -1142,17 +1149,22 @@ quote(itemize(
by the file transfer.
it() A bf(t) means the modification time is different and is being updated
to the sender's value (requires bf(--times)). An alternate value of bf(T)
return 0;
}
---- orig/util.c 2005-07-27 23:31:12
+--- orig/util.c 2005-08-17 06:45:08
+++ util.c 2005-07-27 23:37:27
@@ -128,7 +128,7 @@ void overflow_exit(char *str)
t[1] = modtime;
return utime(fname,t);
#else
-@@ -1167,8 +1171,8 @@ int msleep(int t)
+@@ -1166,8 +1170,8 @@ int msleep(int t)
/**
* --modify-window).
*
* @retval 0 if the times should be treated as the same
-@@ -1177,7 +1181,7 @@ int msleep(int t)
+@@ -1176,7 +1180,7 @@ int msleep(int t)
*
* @retval -1 if the 2nd is later
**/
Marc St-Onge
---- orig/backup.c 2005-02-22 01:57:58
+--- orig/backup.c 2005-06-10 21:33:27
+++ backup.c 2005-02-22 02:11:15
@@ -22,11 +22,17 @@
return 0;
/* Check to see if this is a device file, or link */
-@@ -277,3 +304,13 @@ int make_backup(char *fname)
+@@ -278,3 +305,13 @@ int make_backup(char *fname)
return keep_backup(fname);
return make_simple_backup(fname);
}
+ deleting = 0;
+ return ret;
+}
---- orig/generator.c 2005-05-22 20:53:34
+--- orig/generator.c 2005-08-17 06:45:07
+++ generator.c 2005-03-11 11:22:38
-@@ -86,16 +86,23 @@ extern dev_t filesystem_dev;
+@@ -87,16 +87,23 @@ extern dev_t filesystem_dev;
extern char *backup_dir;
extern char *backup_suffix;
extern int backup_suffix_len;
}
-@@ -112,8 +119,8 @@ static int delete_item(char *fname, int
+@@ -113,8 +120,8 @@ static int delete_item(char *fname, int
if (!S_ISDIR(mode)) {
if (max_delete && ++deletion_count > max_delete)
return 0;
else
ok = robust_unlink(fname) == 0;
if (ok) {
-@@ -136,9 +143,9 @@ static int delete_item(char *fname, int
+@@ -137,9 +144,9 @@ static int delete_item(char *fname, int
|| (dry_run && zap_dir)) {
ok = 0;
errno = ENOTEMPTY;
else
ok = do_rmdir(fname) == 0;
if (ok) {
---- orig/options.c 2005-05-19 08:52:42
-+++ options.c 2005-03-01 01:25:39
+--- orig/options.c 2005-08-27 21:11:26
++++ options.c 2005-08-27 21:17:50
@@ -128,10 +128,14 @@ int no_detach
int write_batch = 0;
int read_batch = 0;
int rsync_port = 0;
int compare_dest = 0;
int copy_dest = 0;
-@@ -272,6 +278,8 @@ void usage(enum logcode F)
+@@ -273,6 +279,8 @@ void usage(enum logcode F)
rprintf(F," -b, --backup make backups (see --suffix & --backup-dir)\n");
rprintf(F," --backup-dir=DIR make backups into hierarchy based in DIR\n");
rprintf(F," --suffix=SUFFIX set backup suffix (default %s w/o --backup-dir)\n",BACKUP_SUFFIX);
+ rprintf(F," --suffix-dels=SUFFIX set removed-files suffix (defaults to --suffix)\n");
rprintf(F," -u, --update skip files that are newer on the receiver\n");
rprintf(F," --inplace update destination files in-place (SEE MAN PAGE)\n");
- rprintf(F," -d, --dirs transfer directories without recursing\n");
-@@ -370,6 +378,7 @@ static struct poptOption long_options[]
- /* longName, shortName, argInfo, argPtr, value, descrip, argDesc */
- {"version", 0, POPT_ARG_NONE, 0, OPT_VERSION, 0, 0},
- {"suffix", 0, POPT_ARG_STRING, &backup_suffix, 0, 0, 0 },
-+ {"suffix-dels", 0, POPT_ARG_STRING, &backup_suffix_dels, 0, 0, 0 },
- {"rsync-path", 0, POPT_ARG_STRING, &rsync_path, 0, 0, 0 },
- {"password-file", 0, POPT_ARG_STRING, &password_file, 0, 0, 0 },
- {"ignore-times", 'I', POPT_ARG_NONE, &ignore_times, 0, 0, 0 },
-@@ -451,6 +460,7 @@ static struct poptOption long_options[]
- {"itemize-changes", 'i', POPT_ARG_NONE, &itemize_changes, 0, 0, 0 },
+ rprintf(F," --append append data onto shorter files\n");
+@@ -460,7 +468,9 @@ static struct poptOption long_options[]
{"bwlimit", 0, POPT_ARG_INT, &bwlimit, 0, 0, 0 },
+ {"backup", 'b', POPT_ARG_NONE, &make_backups, 0, 0, 0 },
{"backup-dir", 0, POPT_ARG_STRING, &backup_dir, 0, 0, 0 },
+ {"backup-dir-dels", 0, POPT_ARG_STRING, &backup_dir_dels, 0, 0, 0 },
- {"hard-links", 'H', POPT_ARG_NONE, &preserve_hard_links, 0, 0, 0 },
+ {"suffix", 0, POPT_ARG_STRING, &backup_suffix, 0, 0, 0 },
++ {"suffix-dels", 0, POPT_ARG_STRING, &backup_suffix_dels, 0, 0, 0 },
+ {"list-only", 0, POPT_ARG_VAL, &list_only, 2, 0, 0 },
{"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 },
-@@ -1021,6 +1031,8 @@ int parse_arguments(int *argc, const cha
+@@ -1053,6 +1063,8 @@ int parse_arguments(int *argc, const cha
partial_dir = sanitize_path(NULL, partial_dir, NULL, 0);
if (backup_dir)
backup_dir = sanitize_path(NULL, backup_dir, NULL, 0);
}
if (server_filter_list.head && !am_sender) {
struct filter_list_struct *elp = &server_filter_list;
-@@ -1055,6 +1067,14 @@ int parse_arguments(int *argc, const cha
+@@ -1087,6 +1099,14 @@ int parse_arguments(int *argc, const cha
return 0;
}
}
}
if (!backup_suffix)
-@@ -1066,6 +1086,16 @@ int parse_arguments(int *argc, const cha
+@@ -1098,6 +1118,16 @@ int parse_arguments(int *argc, const cha
backup_suffix);
return 0;
}
if (backup_dir) {
backup_dir_len = strlcpy(backup_dir_buf, backup_dir, sizeof backup_dir_buf);
backup_dir_remainder = sizeof backup_dir_buf - backup_dir_len;
-@@ -1087,6 +1117,31 @@ int parse_arguments(int *argc, const cha
+@@ -1119,6 +1149,31 @@ int parse_arguments(int *argc, const cha
"--suffix cannot be a null string without --backup-dir\n");
return 0;
}
if (make_backups && !backup_dir)
omit_dir_times = 1;
-@@ -1369,6 +1424,10 @@ void server_options(char **args,int *arg
+@@ -1416,6 +1471,10 @@ void server_options(char **args,int *arg
args[ac++] = "--backup-dir";
args[ac++] = backup_dir;
}
/* Only send --suffix if it specifies a non-default value. */
if (strcmp(backup_suffix, backup_dir ? "" : BACKUP_SUFFIX) != 0) {
-@@ -1377,7 +1436,13 @@ void server_options(char **args,int *arg
+@@ -1424,7 +1483,13 @@ void server_options(char **args,int *arg
goto oom;
args[ac++] = arg;
}
+ }
+ return 0;
+}
---- orig/flist.c 2005-07-07 20:35:47
+--- orig/flist.c 2005-08-17 06:45:07
+++ flist.c 2004-09-18 01:51:11
@@ -62,6 +62,8 @@ extern struct file_list *the_file_list;
file->uid = st.st_uid;
file->gid = st.st_gid;
---- orig/options.c 2005-05-19 08:52:42
-+++ options.c 2005-03-01 01:26:56
+--- orig/options.c 2005-08-27 21:11:26
++++ options.c 2005-08-27 21:18:52
@@ -141,6 +141,7 @@ char *log_format = NULL;
char *password_file = NULL;
char *rsync_path = RSYNC_PATH;
static int daemon_opt; /* sets am_daemon after option error-reporting */
static int F_option_cnt = 0;
static int modify_window_set;
-@@ -287,6 +290,7 @@ void usage(enum logcode F)
+@@ -289,6 +292,7 @@ void usage(enum logcode F)
rprintf(F," -D, --devices preserve devices (root only)\n");
rprintf(F," -t, --times preserve times\n");
rprintf(F," -O, --omit-dir-times omit directories when preserving times\n");
rprintf(F," -S, --sparse handle sparse files efficiently\n");
rprintf(F," -n, --dry-run show what would have been transferred\n");
rprintf(F," -W, --whole-file copy files whole (without rsync algorithm)\n");
-@@ -410,6 +414,7 @@ static struct poptOption long_options[]
- {"perms", 'p', POPT_ARG_NONE, &preserve_perms, 0, 0, 0 },
- {"owner", 'o', POPT_ARG_NONE, &preserve_uid, 0, 0, 0 },
- {"group", 'g', POPT_ARG_NONE, &preserve_gid, 0, 0, 0 },
+@@ -411,6 +415,7 @@ static struct poptOption long_options[]
+ {"no-relative", 0, POPT_ARG_VAL, &relative_paths, 0, 0, 0 },
+ {"no-R", 0, POPT_ARG_VAL, &relative_paths, 0, 0, 0 },
+ {"no-implied-dirs", 0, POPT_ARG_VAL, &implied_dirs, 0, 0, 0 },
+ {"chmod", 0, POPT_ARG_STRING, &chmod_mode, 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_VAL, &omit_dir_times, 2, 0, 0 },
-@@ -1090,6 +1095,13 @@ int parse_arguments(int *argc, const cha
+ {"ignore-times", 'I', POPT_ARG_NONE, &ignore_times, 0, 0, 0 },
+ {"size-only", 0, POPT_ARG_NONE, &size_only, 0, 0, 0 },
+ {"one-file-system", 'x', POPT_ARG_NONE, &one_file_system, 0, 0, 0 },
+@@ -1122,6 +1127,13 @@ int parse_arguments(int *argc, const cha
if (make_backups && !backup_dir)
omit_dir_times = 1;
if (log_format) {
if (log_format_has(log_format, 'i'))
log_format_has_i = 1;
-@@ -1458,6 +1470,11 @@ void server_options(char **args,int *arg
+@@ -1507,6 +1519,11 @@ void server_options(char **args,int *arg
}
}
if (files_from && (!am_sender || filesfrom_host)) {
if (filesfrom_host) {
args[ac++] = "--files-from";
---- orig/rsync.yo 2005-07-07 23:11:09
+--- orig/rsync.yo 2005-08-27 21:05:12
+++ rsync.yo 2005-01-24 01:48:43
-@@ -311,6 +311,7 @@ to the detailed description below for a
+@@ -323,6 +323,7 @@ to the detailed description below for a
-D, --devices preserve devices (root only)
-t, --times preserve times
-O, --omit-dir-times omit directories when preserving times
-S, --sparse handle sparse files efficiently
-n, --dry-run show what would have been transferred
-W, --whole-file copy files whole (without rsync algorithm)
-@@ -648,6 +649,14 @@ it is preserving modification times (see
+@@ -695,6 +696,14 @@ it is preserving modification times (see
the directories on the receiving side, it is a good idea to use bf(-O).
This option is inferred if you use bf(--backup) without bf(--backup-dir).
[Patched update to have context and apply to latest CVS source.]
---- orig/generator.c 2005-05-22 20:53:34
+--- orig/generator.c 2005-08-17 06:45:07
+++ generator.c 2004-11-11 22:15:27
-@@ -57,6 +57,7 @@ extern int inplace;
+@@ -58,6 +58,7 @@ extern int append_mode;
extern int make_backups;
extern int csum_length;
extern int ignore_times;
extern int size_only;
extern OFF_T max_size;
extern int io_error;
-@@ -357,6 +358,8 @@ void itemize(struct file_struct *file, i
+@@ -360,6 +361,8 @@ void itemize(struct file_struct *file, i
/* Perform our quick-check heuristic for determining if a file is unchanged. */
static int unchanged_file(char *fn, struct file_struct *file, STRUCT_STAT *st)
{
if (st->st_size != file->length)
return 0;
---- orig/options.c 2005-05-19 08:52:42
-+++ options.c 2005-01-28 19:14:15
+--- orig/options.c 2005-08-27 21:11:26
++++ options.c 2005-08-27 21:19:31
@@ -90,6 +90,7 @@ int keep_partial = 0;
int safe_symlinks = 0;
int copy_unsafe_links = 0;
int daemon_bwlimit = 0;
int bwlimit = 0;
int fuzzy_basis = 0;
-@@ -315,6 +316,7 @@ void usage(enum logcode F)
+@@ -316,6 +317,7 @@ void usage(enum logcode F)
rprintf(F," --timeout=TIME set I/O timeout in seconds\n");
rprintf(F," -I, --ignore-times don't skip files that match in size and mod-time\n");
rprintf(F," --size-only skip files that match in size\n");
rprintf(F," --modify-window=NUM compare mod-times with reduced accuracy\n");
rprintf(F," -T, --temp-dir=DIR create temporary files in directory DIR\n");
rprintf(F," -y, --fuzzy find similar file for basis if no dest file\n");
-@@ -374,6 +376,7 @@ static struct poptOption long_options[]
- {"password-file", 0, POPT_ARG_STRING, &password_file, 0, 0, 0 },
+@@ -413,6 +415,7 @@ static struct poptOption long_options[]
+ {"no-implied-dirs", 0, POPT_ARG_VAL, &implied_dirs, 0, 0, 0 },
{"ignore-times", 'I', POPT_ARG_NONE, &ignore_times, 0, 0, 0 },
{"size-only", 0, POPT_ARG_NONE, &size_only, 0, 0, 0 },
+ {"date-only", 0, POPT_ARG_NONE, &date_only, 0, 0, 0 },
- {"modify-window", 0, POPT_ARG_INT, &modify_window, OPT_MODIFY_WINDOW, 0, 0 },
{"one-file-system", 'x', POPT_ARG_NONE, &one_file_system, 0, 0, 0 },
+ {"update", 'u', POPT_ARG_NONE, &update_only, 0, 0, 0 },
{"existing", 0, POPT_ARG_NONE, &only_existing, 0, 0, 0 },
-@@ -1398,6 +1401,9 @@ void server_options(char **args,int *arg
+@@ -1445,6 +1448,9 @@ void server_options(char **args,int *arg
if (size_only)
args[ac++] = "--size-only";
if (modify_window_set) {
if (asprintf(&arg, "--modify-window=%d", modify_window) < 0)
goto oom;
---- orig/rsync.yo 2005-05-22 20:53:34
+--- orig/rsync.yo 2005-08-27 21:05:12
+++ rsync.yo 2005-02-11 22:49:10
@@ -350,6 +350,7 @@ to the detailed description below for a
--timeout=TIME set I/O timeout in seconds
--modify-window=NUM compare mod-times with reduced accuracy
-T, --temp-dir=DIR create temporary files in directory DIR
-y, --fuzzy find similar file for basis if no dest file
-@@ -449,6 +450,12 @@ regardless of timestamp. This is useful
+@@ -448,6 +449,12 @@ regardless of timestamp. This is useful
after using another mirroring system which may not preserve timestamps
exactly.
#define RERR_SIGNAL 20 /* status returned when sent SIGUSR1, SIGINT */
#define RERR_WAITCHILD 21 /* some error returned by waitpid() */
---- orig/flist.c 2005-07-27 23:31:12
+--- orig/flist.c 2005-08-17 06:45:07
+++ flist.c 2005-03-05 00:29:08
@@ -57,6 +57,7 @@ extern int copy_unsafe_links;
extern int protocol_version;
flist = flist_new(WITH_HLINK, "send_file_list");
io_start_buffering_out();
-@@ -1279,6 +1289,9 @@ struct file_list *send_file_list(int f,
+@@ -1288,6 +1298,9 @@ struct file_list *send_file_list(int f,
stats.flist_size = stats.total_written - start_write;
stats.num_files = flist->count;
if (verbose > 3)
output_flist(flist);
-@@ -1300,6 +1313,9 @@ struct file_list *recv_file_list(int f)
+@@ -1309,6 +1322,9 @@ struct file_list *recv_file_list(int f)
start_read = stats.total_read;
flist = flist_new(WITH_HLINK, "recv_file_list");
flist->count = 0;
-@@ -1352,6 +1368,9 @@ struct file_list *recv_file_list(int f)
+@@ -1361,6 +1377,9 @@ struct file_list *recv_file_list(int f)
io_error |= read_int(f);
}
+ if (verbose > 2)
+ rprintf(FINFO, "Converted filename: %s -> %s\n", src, dest);
+}
---- orig/generator.c 2005-07-28 01:46:25
+--- orig/generator.c 2005-08-17 06:45:07
+++ generator.c 2005-03-05 00:29:37
@@ -593,7 +593,13 @@ static int phase = 0;
* start sending checksums.
if (dir)
free(dir);
---- orig/options.c 2005-07-28 01:46:25
-+++ options.c 2005-02-14 02:50:32
-@@ -139,6 +139,7 @@ char *basis_dir[MAX_BASIS_DIRS+1];
+--- orig/options.c 2005-08-27 21:11:26
++++ options.c 2005-08-27 21:20:59
+@@ -138,6 +138,7 @@ char *basis_dir[MAX_BASIS_DIRS+1];
char *config_file = NULL;
char *shell_cmd = NULL;
char *log_format = NULL;
char *password_file = NULL;
char *rsync_path = RSYNC_PATH;
char *backup_dir = NULL;
-@@ -324,6 +325,7 @@ void usage(enum logcode F)
+@@ -322,6 +323,7 @@ void usage(enum logcode F)
rprintf(F," --compare-dest=DIR also compare destination files relative to DIR\n");
rprintf(F," --copy-dest=DIR ... and include copies of unchanged files\n");
rprintf(F," --link-dest=DIR hardlink to files in DIR when unchanged\n");
rprintf(F," -z, --compress compress file data during the transfer\n");
rprintf(F," -C, --cvs-exclude auto-ignore files the same way CVS does\n");
rprintf(F," -f, --filter=RULE add a file-filtering RULE\n");
-@@ -437,6 +439,7 @@ static struct poptOption long_options[]
+@@ -447,6 +449,7 @@ static struct poptOption long_options[]
{"copy-dest", 0, POPT_ARG_STRING, 0, OPT_COPY_DEST, 0, 0 },
{"link-dest", 0, POPT_ARG_STRING, 0, OPT_LINK_DEST, 0, 0 },
{"fuzzy", 'y', POPT_ARG_NONE, &fuzzy_basis, 0, 0, 0 },
+ {"fname-convert", 0, POPT_ARG_STRING, &fname_convert_cmd, 0, 0, 0 },
- /* TODO: Should this take an optional int giving the compression level? */
{"compress", 'z', POPT_ARG_NONE, &do_compression, 0, 0, 0 },
- {"stats", 0, POPT_ARG_NONE, &do_stats, 0, 0, 0 },
+ {0, 'P', POPT_ARG_NONE, 0, 'P', 0, 0 },
+ {"progress", 0, POPT_ARG_VAL, &do_progress, 1, 0, 0 },
--- orig/pipe.c 2005-04-09 18:00:29
+++ pipe.c 2004-07-03 20:18:02
@@ -23,7 +23,6 @@
+
+ return result;
+}
---- orig/util.c 2005-07-27 23:31:12
+--- orig/util.c 2005-08-17 06:45:08
+++ util.c 2004-07-03 20:18:02
-@@ -1349,3 +1349,55 @@ uint32 fuzzy_distance(const char *s1, in
+@@ -1348,3 +1348,55 @@ uint32 fuzzy_distance(const char *s1, in
return a[len2-1];
}
This patch from Sami Farin lets you specify --fsync if you want fsync()
to be called on every file we write.
---- orig/options.c 2005-07-28 01:46:25
-+++ options.c 2005-07-28 01:47:53
-@@ -42,6 +42,7 @@ int append_mode = 0;
- int archive_mode = 0;
+--- orig/options.c 2005-08-27 21:11:26
++++ options.c 2005-08-27 21:21:34
+@@ -41,6 +41,7 @@ int whole_file = -1;
+ int append_mode = 0;
int keep_dirlinks = 0;
int copy_links = 0;
+int do_fsync = 0;
int preserve_links = 0;
int preserve_hard_links = 0;
int preserve_perms = 0;
-@@ -314,6 +315,7 @@ void usage(enum logcode F)
+@@ -312,6 +313,7 @@ void usage(enum logcode F)
rprintf(F," --partial keep partially transferred files\n");
rprintf(F," --partial-dir=DIR put a partially transferred file into DIR\n");
rprintf(F," --delay-updates put all updated files into place at transfer's end\n");
rprintf(F," --numeric-ids don't map uid/gid values by user/group name\n");
rprintf(F," --timeout=TIME set I/O timeout in seconds\n");
rprintf(F," -I, --ignore-times don't skip files that match in size and mod-time\n");
-@@ -398,6 +400,7 @@ static struct poptOption long_options[]
- {"safe-links", 0, POPT_ARG_NONE, &safe_symlinks, 0, 0, 0 },
- {"help", 'h', POPT_ARG_NONE, 0, 'h', 0, 0 },
- {"backup", 'b', POPT_ARG_NONE, &make_backups, 0, 0, 0 },
+@@ -467,6 +469,7 @@ static struct poptOption long_options[]
+ {"only-write-batch", 0, POPT_ARG_STRING, &batch_name, OPT_ONLY_WRITE_BATCH, 0, 0 },
+ {"files-from", 0, POPT_ARG_STRING, &files_from, 0, 0, 0 },
+ {"from0", '0', POPT_ARG_NONE, &eol_nulls, 0, 0, 0},
+ {"fsync", 0, POPT_ARG_NONE, &do_fsync, 0, 0, 0 },
- {"dry-run", 'n', POPT_ARG_NONE, &dry_run, 0, 0, 0 },
- {"sparse", 'S', POPT_ARG_NONE, &sparse_files, 0, 0, 0 },
- {"cvs-exclude", 'C', POPT_ARG_NONE, &cvs_exclude, 0, 0, 0 },
-@@ -1471,6 +1474,9 @@ void server_options(char **args,int *arg
+ {"numeric-ids", 0, POPT_ARG_NONE, &numeric_ids, 0, 0, 0 },
+ {"timeout", 0, POPT_ARG_INT, &io_timeout, 0, 0, 0 },
+ {"rsh", 'e', POPT_ARG_STRING, &shell_cmd, 0, 0, 0 },
+@@ -1495,6 +1498,9 @@ void server_options(char **args,int *arg
args[ac++] = tmpdir;
}
if (basis_dir[0] && am_sender) {
/* the server only needs this option if it is not the sender,
* and it may be an older version that doesn't know this
---- orig/receiver.c 2005-07-28 01:46:25
+--- orig/receiver.c 2005-08-17 06:45:08
+++ receiver.c 2005-02-20 00:17:37
@@ -38,6 +38,7 @@ extern int keep_dirlinks;
extern int preserve_hard_links;
extern int basis_dir_cnt;
extern int make_backups;
extern int cleanup_got_literal;
-@@ -314,6 +315,12 @@ static int receive_data(int f_in, char *
+@@ -318,6 +319,12 @@ static int receive_data(int f_in, char *
exit_cleanup(RERR_FILEIO);
}
char *partial_dir;
struct filter_list_struct server_filter_list;
---- orig/util.c 2005-07-27 23:31:12
+--- orig/util.c 2005-08-17 06:45:08
+++ util.c 2004-07-03 20:18:13
@@ -33,6 +33,7 @@ extern int module_id;
extern int modify_window;
case '?':
/* Match anything but '/'. */
if (*text == '/')
---- orig/options.c 2005-05-19 08:52:42
-+++ options.c 2005-05-03 16:47:52
+--- orig/options.c 2005-08-27 21:11:26
++++ options.c 2005-08-27 21:22:04
@@ -101,6 +101,7 @@ int max_delete = 0;
OFF_T max_size = 0;
int ignore_errors = 0;
int blocking_io = -1;
int checksum_seed = 0;
int inplace = 0;
-@@ -332,6 +333,7 @@ void usage(enum logcode F)
+@@ -333,6 +334,7 @@ void usage(enum logcode F)
rprintf(F," --include-from=FILE read include patterns from FILE\n");
rprintf(F," --files-from=FILE read list of source-file names from FILE\n");
rprintf(F," -0, --from0 all *-from/filter files are delimited by 0s\n");
rprintf(F," --address=ADDRESS bind address for outgoing socket to daemon\n");
rprintf(F," --port=PORT specify double-colon alternate port number\n");
rprintf(F," --blocking-io use blocking I/O for the remote shell\n");
-@@ -392,6 +394,7 @@ static struct poptOption long_options[]
- {"include", 0, POPT_ARG_STRING, 0, OPT_INCLUDE, 0, 0 },
- {"exclude-from", 0, POPT_ARG_STRING, 0, OPT_EXCLUDE_FROM, 0, 0 },
- {"include-from", 0, POPT_ARG_STRING, 0, OPT_INCLUDE_FROM, 0, 0 },
+@@ -417,6 +419,7 @@ static struct poptOption long_options[]
+ {"update", 'u', POPT_ARG_NONE, &update_only, 0, 0, 0 },
+ {"existing", 0, POPT_ARG_NONE, &only_existing, 0, 0, 0 },
+ {"ignore-existing", 0, POPT_ARG_NONE, &opt_ignore_existing, 0, 0, 0 },
+ {"ignore-case", 0, POPT_ARG_NONE, &ignore_case, 0, 0, 0 },
- {"safe-links", 0, POPT_ARG_NONE, &safe_symlinks, 0, 0, 0 },
- {"help", 'h', POPT_ARG_NONE, 0, 'h', 0, 0 },
- {"backup", 'b', POPT_ARG_NONE, &make_backups, 0, 0, 0 },
-@@ -1410,6 +1413,9 @@ void server_options(char **args,int *arg
+ {"max-size", 0, POPT_ARG_STRING, &max_size_arg, OPT_MAX_SIZE, 0, 0 },
+ {"sparse", 'S', POPT_ARG_NONE, &sparse_files, 0, 0, 0 },
+ {"inplace", 0, POPT_ARG_NONE, &inplace, 0, 0, 0 },
+@@ -1457,6 +1460,9 @@ void server_options(char **args,int *arg
args[ac++] = arg;
}
char *partial_dir;
struct filter_list_struct server_filter_list;
---- orig/util.c 2005-05-03 16:47:33
+--- orig/util.c 2005-08-17 06:45:08
+++ util.c 2004-08-13 16:40:34
@@ -31,6 +31,7 @@ extern int verbose;
extern int dry_run;
extern char *partial_dir;
extern struct filter_list_struct server_filter_list;
-@@ -1029,11 +1030,23 @@ int u_strcmp(const char *cs1, const char
+@@ -1039,11 +1040,23 @@ int u_strcmp(const char *cs1, const char
{
const uchar *s1 = (const uchar *)cs1;
const uchar *s2 = (const uchar *)cs2;
handle relative symlinks properly, and that has not yet been fixed
in this modified version.
---- orig/flist.c 2005-05-28 08:24:57
+--- orig/flist.c 2005-08-17 06:45:07
+++ flist.c 2004-07-16 16:58:04
@@ -45,6 +45,7 @@ extern int filesfrom_fd;
extern int one_file_system;
#else
linkname_len = 0;
#endif
---- orig/options.c 2005-05-19 08:52:42
-+++ options.c 2005-01-28 19:33:24
-@@ -42,6 +42,7 @@ int archive_mode = 0;
+--- orig/options.c 2005-08-27 21:11:26
++++ options.c 2005-08-27 21:22:39
+@@ -42,6 +42,7 @@ int append_mode = 0;
int keep_dirlinks = 0;
int copy_links = 0;
int preserve_links = 0;
int preserve_hard_links = 0;
int preserve_perms = 0;
int preserve_devices = 0;
-@@ -276,6 +277,7 @@ void usage(enum logcode F)
- rprintf(F," --inplace update destination files in-place (SEE MAN PAGE)\n");
+@@ -278,6 +279,7 @@ void usage(enum logcode F)
+ rprintf(F," --append append data onto shorter files\n");
rprintf(F," -d, --dirs transfer directories without recursing\n");
rprintf(F," -l, --links copy symlinks as symlinks\n");
+ rprintf(F," --links-depth=NUM follow symlinks up to NUM depth\n");
rprintf(F," --copy-unsafe-links only \"unsafe\" symlinks are transformed\n");
rprintf(F," --safe-links ignore symlinks that point outside the source tree\n");
@@ -402,6 +404,7 @@ static struct poptOption long_options[]
- {"inplace", 0, POPT_ARG_NONE, &inplace, 0, 0, 0 },
- {"dirs", 'd', POPT_ARG_VAL, &xfer_dirs, 2, 0, 0 },
- {"links", 'l', POPT_ARG_NONE, &preserve_links, 0, 0, 0 },
+ {"links", 'l', POPT_ARG_VAL, &preserve_links, 1, 0, 0 },
+ {"no-links", 0, POPT_ARG_VAL, &preserve_links, 0, 0, 0 },
+ {"no-l", 0, POPT_ARG_VAL, &preserve_links, 0, 0, 0 },
+ {"links-depth", 0, POPT_ARG_INT, &follow_links_depth , 0, 0, 0 },
{"copy-links", 'L', POPT_ARG_NONE, ©_links, 0, 0, 0 },
- {"keep-dirlinks", 'K', POPT_ARG_NONE, &keep_dirlinks, 0, 0, 0 },
- {"whole-file", 'W', POPT_ARG_VAL, &whole_file, 1, 0, 0 },
---- orig/rsync.yo 2005-05-22 20:53:34
+ {"copy-unsafe-links",0, POPT_ARG_NONE, ©_unsafe_links, 0, 0, 0 },
+ {"safe-links", 0, POPT_ARG_NONE, &safe_symlinks, 0, 0, 0 },
+--- orig/rsync.yo 2005-08-27 21:05:12
+++ rsync.yo 2005-01-28 19:33:40
-@@ -311,6 +311,7 @@ to the detailed description below for a
- --inplace update destination files in-place
+@@ -312,6 +312,7 @@ to the detailed description below for a
+ --append append data onto shorter files
-d, --dirs transfer directories without recursing
-l, --links copy symlinks as symlinks
+ --links-depth=NUM follow symlinks up to NUM depth
+void md5_finish(md5_context *ctx, uchar digest[16]);
+
+#endif /* md5.h */
---- orig/options.c 2005-05-19 08:52:42
-+++ options.c 2005-06-14 02:21:26
+--- orig/options.c 2005-08-27 21:11:26
++++ options.c 2005-08-27 21:23:04
@@ -107,6 +107,7 @@ int inplace = 0;
int delay_updates = 0;
long block_size = 0; /* "long" because popt can't set an int32. */
#ifdef INET6
rprintf(F," -4, --ipv4 prefer IPv4\n");
rprintf(F," -6, --ipv6 prefer IPv6\n");
-@@ -460,6 +462,7 @@ static struct poptOption long_options[]
- {"no-implied-dirs", 0, POPT_ARG_VAL, &implied_dirs, 0, 0, 0 },
- {"protocol", 0, POPT_ARG_INT, &protocol_version, 0, 0, 0 },
- {"checksum-seed", 0, POPT_ARG_INT, &checksum_seed, 0, 0, 0 },
+@@ -441,6 +443,7 @@ static struct poptOption long_options[]
+ {"whole-file", 'W', POPT_ARG_VAL, &whole_file, 1, 0, 0 },
+ {"no-whole-file", 0, POPT_ARG_VAL, &whole_file, 0, 0, 0 },
+ {"no-W", 0, POPT_ARG_VAL, &whole_file, 0, 0, 0 },
+ {"md5", 0, POPT_ARG_NONE, &use_md5, 0, 0, 0 },
- #ifdef INET6
- {"ipv4", '4', POPT_ARG_VAL, &default_af_hint, AF_INET, 0, 0 },
- {"ipv6", '6', POPT_ARG_VAL, &default_af_hint, AF_INET6, 0, 0 },
-@@ -1365,6 +1368,9 @@ void server_options(char **args,int *arg
+ {"checksum", 'c', POPT_ARG_NONE, &always_checksum, 0, 0, 0 },
+ {"block-size", 'B', POPT_ARG_LONG, &block_size, 0, 0, 0 },
+ {"compare-dest", 0, POPT_ARG_STRING, 0, OPT_COMPARE_DEST, 0, 0 },
+@@ -1412,6 +1415,9 @@ void server_options(char **args,int *arg
args[ac++] = arg;
}
---- orig/generator.c 2005-07-28 01:46:25
+--- orig/generator.c 2005-08-17 06:45:07
+++ generator.c 2005-04-28 16:19:24
@@ -59,6 +59,7 @@ extern int make_backups;
extern int csum_length;
extern OFF_T max_size;
extern int io_error;
extern int allowed_lull;
-@@ -842,6 +843,15 @@ static void recv_generator(char *fname,
+@@ -864,6 +865,15 @@ static void recv_generator(char *fname,
return;
}
if (max_size && file->length > max_size) {
if (verbose > 1) {
if (the_file_list->count == 1)
-@@ -1247,7 +1257,7 @@ void generate_files(int f_out, struct fi
+@@ -1269,7 +1279,7 @@ void generate_files(int f_out, struct fi
phase++;
csum_length = SUM_LENGTH;
update_only = always_checksum = size_only = 0;
ignore_times = 1;
if (append_mode) /* resend w/o append mode */
---- orig/options.c 2005-07-28 01:46:25
-+++ options.c 2005-07-28 01:48:23
-@@ -99,6 +99,7 @@ int only_existing = 0;
+--- orig/options.c 2005-08-27 21:11:26
++++ options.c 2005-08-27 21:23:36
+@@ -98,6 +98,7 @@ 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;
int modify_window = 0;
-@@ -168,7 +169,7 @@ static int itemize_changes = 0;
+@@ -167,7 +168,7 @@ static int itemize_changes = 0;
static int refused_delete, refused_archive_part;
static int refused_partial, refused_progress, refused_delete_before;
static int refused_inplace;
static char partialdir_for_delayupdate[] = ".~tmp~";
/** Local address to bind. As a character string because it's
-@@ -310,6 +311,7 @@ void usage(enum logcode F)
+@@ -308,6 +309,7 @@ void usage(enum logcode F)
rprintf(F," --ignore-errors delete even if there are I/O errors\n");
rprintf(F," --force force deletion of directories even if not empty\n");
rprintf(F," --max-delete=NUM don't delete more than NUM files\n");
rprintf(F," --max-size=SIZE don't transfer any file larger than SIZE\n");
rprintf(F," --partial keep partially transferred files\n");
rprintf(F," --partial-dir=DIR put a partially transferred file into DIR\n");
-@@ -365,7 +367,7 @@ void usage(enum logcode F)
+@@ -362,7 +364,7 @@ void usage(enum logcode F)
enum {OPT_VERSION = 1000, OPT_DAEMON, OPT_SENDER, OPT_EXCLUDE, OPT_EXCLUDE_FROM,
OPT_FILTER, OPT_COMPARE_DEST, OPT_COPY_DEST, OPT_LINK_DEST,
OPT_READ_BATCH, OPT_WRITE_BATCH, OPT_ONLY_WRITE_BATCH, OPT_MAX_SIZE,
OPT_REFUSED_BASE = 9000};
-@@ -430,6 +432,7 @@ static struct poptOption long_options[]
- {"rsh", 'e', POPT_ARG_STRING, &shell_cmd, 0, 0, 0 },
- {"block-size", 'B', POPT_ARG_LONG, &block_size, 0, 0, 0 },
- {"max-delete", 0, POPT_ARG_INT, &max_delete, 0, 0, 0 },
+@@ -417,6 +419,7 @@ static struct poptOption long_options[]
+ {"update", 'u', POPT_ARG_NONE, &update_only, 0, 0, 0 },
+ {"existing", 0, POPT_ARG_NONE, &only_existing, 0, 0, 0 },
+ {"ignore-existing", 0, POPT_ARG_NONE, &opt_ignore_existing, 0, 0, 0 },
+ {"min-size", 0, POPT_ARG_STRING, &min_size_arg, OPT_MIN_SIZE, 0, 0 },
{"max-size", 0, POPT_ARG_STRING, &max_size_arg, OPT_MAX_SIZE, 0, 0 },
- {"timeout", 0, POPT_ARG_INT, &io_timeout, 0, 0, 0 },
- {"temp-dir", 'T', POPT_ARG_STRING, &tmpdir, 0, 0, 0 },
-@@ -840,6 +843,15 @@ int parse_arguments(int *argc, const cha
+ {"sparse", 'S', POPT_ARG_NONE, &sparse_files, 0, 0, 0 },
+ {"inplace", 0, POPT_ARG_NONE, &inplace, 0, 0, 0 },
+@@ -874,6 +877,15 @@ int parse_arguments(int *argc, const cha
read_batch = 1;
break;
case OPT_MAX_SIZE:
if ((max_size = parse_size_arg(max_size_arg)) <= 0) {
snprintf(err_buf, sizeof err_buf,
-@@ -1371,6 +1383,11 @@ void server_options(char **args,int *arg
+@@ -1395,6 +1407,11 @@ void server_options(char **args,int *arg
args[ac++] = arg;
}
if (max_size && am_sender) {
args[ac++] = "--max-size";
args[ac++] = max_size_arg;
---- orig/rsync.yo 2005-07-28 01:46:25
+--- orig/rsync.yo 2005-08-27 21:05:12
+++ rsync.yo 2005-05-06 19:12:35
-@@ -332,6 +332,7 @@ to the detailed description below for a
+@@ -342,6 +342,7 @@ to the detailed description below for a
--ignore-errors delete even if there are I/O errors
--force force deletion of dirs even if not empty
--max-delete=NUM don't delete more than NUM files
--max-size=SIZE don't transfer any file larger than SIZE
--partial keep partially transferred files
--partial-dir=DIR put a partially transferred file into DIR
-@@ -756,10 +757,16 @@ dit(bf(--max-delete=NUM)) This tells rsy
+@@ -794,10 +795,16 @@ dit(bf(--max-delete=NUM)) This tells rsy
files or directories (NUM must be non-zero).
This is useful when mirroring very large trees to prevent disasters.
can't say if I've left any cleanup/compatibility errors in the code.
---- orig/Makefile.in 2004-11-02 16:47:15
+--- orig/Makefile.in 2005-07-07 23:11:07
+++ Makefile.in 2004-10-08 20:17:06
-@@ -39,7 +39,7 @@ OBJS3=progress.o pipe.o
+@@ -38,7 +38,7 @@ OBJS3=progress.o pipe.o
DAEMON_OBJ = params.o loadparm.o clientserver.o access.o connection.o authenticate.o
popt_OBJS=popt/findme.o popt/popt.o popt/poptconfig.o \
popt/popthelp.o popt/poptparse.o
if (verbose > 3) {
rprintf(FINFO,"_exit_cleanup(code=%d, file=%s, line=%d): entered\n",
code, safe_fname(file), line);
---- orig/clientserver.c 2005-05-19 08:52:42
+--- orig/clientserver.c 2005-08-17 06:45:07
+++ clientserver.c 2005-04-09 17:39:57
@@ -44,6 +44,9 @@ extern int io_timeout;
extern int orig_umask;
return -1;
}
-@@ -541,6 +589,7 @@ static void send_listing(int fd)
+@@ -597,6 +645,7 @@ static void send_listing(int fd)
io_printf(fd,"@RSYNCD: EXIT\n");
}
/* this is called when a connection is established to a client
and we want to start talking. The setup of the system is done from
here */
-@@ -590,6 +639,9 @@ int start_daemon(int f_in, int f_out)
+@@ -646,6 +695,9 @@ int start_daemon(int f_in, int f_out)
if (protocol_version > remote_protocol)
protocol_version = remote_protocol;
line[0] = 0;
if (!read_line(f_in, line, sizeof line - 1))
return -1;
-@@ -599,6 +651,20 @@ int start_daemon(int f_in, int f_out)
+@@ -655,6 +707,20 @@ int start_daemon(int f_in, int f_out)
return -1;
}
if (*line == '#') {
/* it's some sort of command that I don't understand */
io_printf(f_out, "@ERROR: Unknown command '%s'\n", line);
---- orig/configure.in 2005-05-28 08:24:57
+--- orig/configure.in 2005-07-29 02:47:19
+++ configure.in 2004-07-03 20:22:28
-@@ -284,6 +284,21 @@ yes
+@@ -293,6 +293,21 @@ yes
AC_SEARCH_LIBS(getaddrinfo, inet6)
fi
AC_MSG_CHECKING([whether to call shutdown on all sockets])
case $host_os in
*cygwin* ) AC_MSG_RESULT(yes)
---- orig/options.c 2005-05-19 08:52:42
-+++ options.c 2005-05-19 08:58:46
+--- orig/options.c 2005-08-27 21:11:26
++++ options.c 2005-08-27 21:24:31
@@ -157,6 +157,14 @@ int log_format_has_o_or_i = 0;
int always_checksum = 0;
int list_only = 0;
#define MAX_BATCH_NAME_LEN 256 /* Must be less than MAXPATHLEN-13 */
char *batch_name = NULL;
-@@ -182,6 +190,7 @@ static void print_rsync_version(enum log
+@@ -183,6 +191,7 @@ static void print_rsync_version(enum log
char const *hardlinks = "no ";
char const *links = "no ";
char const *ipv6 = "no ";
STRUCT_STAT *dumstat;
#ifdef HAVE_SOCKETPAIR
-@@ -204,6 +213,10 @@ static void print_rsync_version(enum log
+@@ -205,6 +214,10 @@ static void print_rsync_version(enum log
ipv6 = "";
#endif
rprintf(f, "%s version %s protocol version %d\n",
RSYNC_NAME, RSYNC_VERSION, PROTOCOL_VERSION);
rprintf(f,
-@@ -217,10 +230,10 @@ static void print_rsync_version(enum log
+@@ -218,10 +231,10 @@ static void print_rsync_version(enum log
/* Note that this field may not have type ino_t. It depends
* on the complicated interaction between largefile feature
* macros. */
OPT_READ_BATCH, OPT_WRITE_BATCH, OPT_ONLY_WRITE_BATCH, OPT_MAX_SIZE,
OPT_REFUSED_BASE = 9000};
-@@ -464,6 +484,13 @@ static struct poptOption long_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
+@@ -485,6 +505,13 @@ static struct poptOption long_options[]
+ {"checksum-seed", 0, POPT_ARG_INT, &checksum_seed, 0, 0, 0 },
+ {"server", 0, POPT_ARG_NONE, &am_server, 0, 0, 0 },
+ {"sender", 0, POPT_ARG_NONE, 0, OPT_SENDER, 0, 0 },
+#if HAVE_OPENSSL
+ {"ssl", 0, POPT_ARG_NONE, 0, OPT_USE_SSL, 0, 0},
+ {"ssl-cert", 0, POPT_ARG_STRING, &ssl_cert_path, OPT_USE_SSL, 0, 0},
+ {"ssl-key-passwd", 0, POPT_ARG_STRING, &ssl_key_passwd, OPT_USE_SSL, 0, 0},
+ {"ssl-ca-certs", 0, POPT_ARG_STRING, &ssl_ca_path, OPT_USE_SSL, 0, 0},
+#endif
- /* All these options switch us into daemon-mode option-parsing. */
+ /* All the following options switch us into daemon-mode option-parsing. */
{"config", 0, POPT_ARG_STRING, 0, OPT_DAEMON, 0, 0 },
{"daemon", 0, POPT_ARG_NONE, 0, OPT_DAEMON, 0, 0 },
-@@ -876,6 +903,12 @@ int parse_arguments(int *argc, const cha
+@@ -916,6 +943,12 @@ int parse_arguments(int *argc, const cha
basis_dir[basis_dir_cnt++] = (char *)arg;
break;
default:
/* A large opt value means that set_refuse_options()
* turned this option off. */
-@@ -1129,6 +1162,17 @@ int parse_arguments(int *argc, const cha
+@@ -1174,6 +1207,17 @@ int parse_arguments(int *argc, const cha
if (delay_updates && !partial_dir)
partial_dir = partialdir_for_delayupdate;
if (inplace) {
#ifdef HAVE_FTRUNCATE
if (partial_dir) {
-@@ -1498,11 +1542,28 @@ char *check_for_hostspec(char *s, char *
+@@ -1547,11 +1591,28 @@ char *check_for_hostspec(char *s, char *
{
char *p;
int not_host;
if ((p = strchr(s, '/')) != NULL) {
hostlen = p - s;
path = p + 1;
---- orig/rsync.h 2005-05-03 17:11:01
+--- orig/rsync.h 2005-08-17 06:45:08
+++ rsync.h 2004-10-08 21:01:33
@@ -32,6 +32,7 @@
+ preserve_gid = 2;
+ }
}
---- orig/options.c 2005-05-19 08:52:42
-+++ options.c 2004-09-09 01:59:08
-@@ -408,8 +408,8 @@ static struct poptOption long_options[]
- {"no-whole-file", 0, POPT_ARG_VAL, &whole_file, 0, 0, 0 },
- {"copy-unsafe-links",0, POPT_ARG_NONE, ©_unsafe_links, 0, 0, 0 },
- {"perms", 'p', POPT_ARG_NONE, &preserve_perms, 0, 0, 0 },
-- {"owner", 'o', POPT_ARG_NONE, &preserve_uid, 0, 0, 0 },
-- {"group", 'g', POPT_ARG_NONE, &preserve_gid, 0, 0, 0 },
-+ {"owner", 'o', POPT_ARG_NONE, 0, 'o', 0, 0 },
-+ {"group", 'g', POPT_ARG_NONE, 0, 'g', 0, 0 },
- {"devices", 'D', POPT_ARG_NONE, &preserve_devices, 0, 0, 0 },
- {"times", 't', POPT_ARG_NONE, &preserve_times, 0, 0, 0 },
+--- orig/options.c 2005-08-27 21:11:26
++++ options.c 2005-08-27 21:26:04
+@@ -390,10 +390,10 @@ static struct poptOption long_options[]
+ {"no-t", 0, POPT_ARG_VAL, &preserve_times, 0, 0, 0 },
{"omit-dir-times", 'O', POPT_ARG_VAL, &omit_dir_times, 2, 0, 0 },
-@@ -781,6 +781,14 @@ int parse_arguments(int *argc, const cha
+ {"modify-window", 0, POPT_ARG_INT, &modify_window, OPT_MODIFY_WINDOW, 0, 0 },
+- {"owner", 'o', POPT_ARG_VAL, &preserve_uid, 1, 0, 0 },
++ {"owner", 'o', POPT_ARG_NONE, 0, 'o', 0, 0 },
+ {"no-owner", 0, POPT_ARG_VAL, &preserve_uid, 0, 0, 0 },
+ {"no-o", 0, POPT_ARG_VAL, &preserve_uid, 0, 0, 0 },
+- {"group", 'g', POPT_ARG_VAL, &preserve_gid, 1, 0, 0 },
++ {"group", 'g', POPT_ARG_NONE, 0, 'g', 0, 0 },
+ {"no-group", 0, POPT_ARG_VAL, &preserve_gid, 0, 0, 0 },
+ {"no-g", 0, POPT_ARG_VAL, &preserve_gid, 0, 0, 0 },
+ {"devices", 'D', POPT_ARG_VAL, &preserve_devices, 1, 0, 0 },
+@@ -812,7 +812,8 @@ int parse_arguments(int *argc, const cha
+ #endif
+ preserve_perms = 1;
+ preserve_times = 1;
+- preserve_gid = 1;
++ preserve_uid |= 1;
++ preserve_gid |= 1;
+ preserve_uid = 1;
+ preserve_devices = 1;
+ break;
+@@ -821,6 +822,14 @@ int parse_arguments(int *argc, const cha
usage(FINFO);
exit_cleanup(0);
case 'v':
verbose++;
break;
-@@ -963,8 +971,8 @@ int parse_arguments(int *argc, const cha
- #endif
- preserve_perms = 1;
- preserve_times = 1;
-- preserve_gid = 1;
-- preserve_uid = 1;
-+ preserve_uid |= 1;
-+ preserve_gid |= 1;
- preserve_devices = 1;
- }
-
-@@ -1282,10 +1290,16 @@ void server_options(char **args,int *arg
+@@ -1329,10 +1338,16 @@ void server_options(char **args,int *arg
if (preserve_hard_links)
argstr[x++] = 'H';
if (preserve_devices)
argstr[x++] = 'D';
if (preserve_times)
---- orig/rsync.c 2005-03-16 02:19:30
+--- orig/rsync.c 2005-07-27 23:31:12
+++ rsync.c 2005-02-01 10:46:04
@@ -27,7 +27,6 @@ extern int dry_run;
extern int daemon_log_format_has_i;
extern int am_server;
extern int am_sender;
extern int am_generator;
-@@ -81,7 +80,7 @@ int set_perms(char *fname,struct file_st
- updated = 1;
+@@ -82,7 +81,7 @@ int set_perms(char *fname,struct file_st
+ updated = 1;
}
- change_uid = am_root && preserve_uid && st->st_uid != file->uid;
return 0;
/* if always checksum is set then we use the checksum instead
---- orig/options.c 2005-07-28 01:46:25
-+++ options.c 2005-08-17 07:47:00
-@@ -91,6 +91,7 @@ int keep_partial = 0;
+--- orig/options.c 2005-08-27 21:11:26
++++ options.c 2005-08-27 21:27:17
+@@ -90,6 +90,7 @@ int keep_partial = 0;
int safe_symlinks = 0;
int copy_unsafe_links = 0;
int size_only = 0;
int daemon_bwlimit = 0;
int bwlimit = 0;
int fuzzy_basis = 0;
-@@ -139,6 +140,8 @@ char *basis_dir[MAX_BASIS_DIRS+1];
+@@ -138,6 +139,8 @@ char *basis_dir[MAX_BASIS_DIRS+1];
char *config_file = NULL;
char *shell_cmd = NULL;
char *log_format = NULL;
char *password_file = NULL;
char *rsync_path = RSYNC_PATH;
char *backup_dir = NULL;
-@@ -318,6 +321,7 @@ void usage(enum logcode F)
+@@ -316,6 +319,7 @@ void usage(enum logcode F)
rprintf(F," --timeout=TIME set I/O timeout in seconds\n");
rprintf(F," -I, --ignore-times don't skip files that match in size and mod-time\n");
rprintf(F," --size-only skip files that match in size\n");
rprintf(F," --modify-window=NUM compare mod-times with reduced accuracy\n");
rprintf(F," -T, --temp-dir=DIR create temporary files in directory DIR\n");
rprintf(F," -y, --fuzzy find similar file for basis if no dest file\n");
-@@ -350,6 +354,8 @@ void usage(enum logcode F)
+@@ -347,6 +351,8 @@ void usage(enum logcode F)
rprintf(F," --write-batch=FILE write a batched update to FILE\n");
rprintf(F," --only-write-batch=FILE like --write-batch but w/o updating destination\n");
rprintf(F," --read-batch=FILE read a batched update from FILE\n");
rprintf(F," --protocol=NUM force an older protocol version to be used\n");
#ifdef INET6
rprintf(F," -4, --ipv4 prefer IPv4\n");
-@@ -377,6 +383,7 @@ static struct poptOption long_options[]
- {"password-file", 0, POPT_ARG_STRING, &password_file, 0, 0, 0 },
+@@ -413,6 +419,7 @@ static struct poptOption long_options[]
+ {"no-implied-dirs", 0, POPT_ARG_VAL, &implied_dirs, 0, 0, 0 },
{"ignore-times", 'I', POPT_ARG_NONE, &ignore_times, 0, 0, 0 },
{"size-only", 0, POPT_ARG_NONE, &size_only, 0, 0, 0 },
+ {"times-only", 0, POPT_ARG_NONE, ×_only , 0, 0, 0 },
- {"modify-window", 0, POPT_ARG_INT, &modify_window, OPT_MODIFY_WINDOW, 0, 0 },
{"one-file-system", 'x', POPT_ARG_NONE, &one_file_system, 0, 0, 0 },
+ {"update", 'u', POPT_ARG_NONE, &update_only, 0, 0, 0 },
{"existing", 0, POPT_ARG_NONE, &only_existing, 0, 0, 0 },
-@@ -462,6 +469,8 @@ static struct poptOption long_options[]
- {"files-from", 0, POPT_ARG_STRING, &files_from, 0, 0, 0 },
- {"from0", '0', POPT_ARG_NONE, &eol_nulls, 0, 0, 0},
- {"no-implied-dirs", 0, POPT_ARG_VAL, &implied_dirs, 0, 0, 0 },
+@@ -481,6 +488,8 @@ static struct poptOption long_options[]
+ {"password-file", 0, POPT_ARG_STRING, &password_file, 0, 0, 0 },
+ {"blocking-io", 0, POPT_ARG_VAL, &blocking_io, 1, 0, 0 },
+ {"no-blocking-io", 0, POPT_ARG_VAL, &blocking_io, 0, 0, 0 },
+ {"source-filter", 0, POPT_ARG_STRING, &source_filter, 0, 0, 0 },
+ {"dest-filter", 0, POPT_ARG_STRING, &dest_filter, 0, 0, 0 },
{"protocol", 0, POPT_ARG_INT, &protocol_version, 0, 0, 0 },
{"checksum-seed", 0, POPT_ARG_INT, &checksum_seed, 0, 0, 0 },
- #ifdef INET6
-@@ -1195,6 +1204,16 @@ int parse_arguments(int *argc, const cha
+ {"server", 0, POPT_ARG_NONE, &am_server, 0, 0, 0 },
+@@ -1219,6 +1228,16 @@ int parse_arguments(int *argc, const cha
}
}
if (files_from) {
char *h, *p;
int q;
-@@ -1418,6 +1437,25 @@ void server_options(char **args,int *arg
+@@ -1442,6 +1461,25 @@ void server_options(char **args,int *arg
args[ac++] = "--only-write-batch=X";
}
#define MAX_BASIS_DIRS 20
#define MAX_SERVER_ARGS (MAX_BASIS_DIRS*2 + 100)
---- orig/rsync.yo 2005-08-17 06:45:08
+--- orig/rsync.yo 2005-08-27 21:05:12
+++ rsync.yo 2005-08-17 07:08:21
-@@ -351,6 +351,7 @@ to the detailed description below for a
+@@ -350,6 +350,7 @@ to the detailed description below for a
--timeout=TIME set I/O timeout in seconds
-I, --ignore-times don't skip files that match size and time
--size-only skip files that match in size
--modify-window=NUM compare mod-times with reduced accuracy
-T, --temp-dir=DIR create temporary files in directory DIR
-y, --fuzzy find similar file for basis if no dest file
-@@ -383,6 +384,8 @@ to the detailed description below for a
+@@ -381,6 +382,8 @@ to the detailed description below for a
--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
--protocol=NUM force an older protocol version to be used
--checksum-seed=NUM set block/file checksum seed (advanced)
-4, --ipv4 prefer IPv4
-@@ -1332,6 +1335,33 @@ file previously generated by bf(--write-
+@@ -1346,6 +1349,33 @@ file previously generated by bf(--write-
If em(FILE) is "-" the batch data will be read from standard input.
See the "BATCH MODE" section for details.
Do we need configure support for mktime()?
---- orig/io.c 2005-05-19 08:52:42
+--- orig/io.c 2005-08-17 06:45:07
+++ io.c 2005-05-19 09:01:27
@@ -57,6 +57,7 @@ extern int remove_sent_files;
extern int preserve_hard_links;
if (t - last_io_in >= io_timeout) {
if (!am_server && !am_daemon) {
rprintf(FERROR, "io timeout after %d seconds -- exiting\n",
---- orig/options.c 2005-05-19 08:52:42
-+++ options.c 2005-05-19 09:01:55
+--- orig/options.c 2005-08-27 21:11:26
++++ options.c 2005-08-27 21:27:57
@@ -106,6 +106,7 @@ int checksum_seed = 0;
int inplace = 0;
int delay_updates = 0;
OPT_REFUSED_BASE = 9000};
static struct poptOption long_options[] = {
-@@ -450,6 +454,8 @@ static struct poptOption long_options[]
+@@ -458,6 +462,8 @@ static struct poptOption long_options[]
{"log-format", 0, POPT_ARG_STRING, &log_format, 0, 0, 0 },
{"itemize-changes", 'i', POPT_ARG_NONE, &itemize_changes, 0, 0, 0 },
{"bwlimit", 0, POPT_ARG_INT, &bwlimit, 0, 0, 0 },
+ {"stop-at", 0, POPT_ARG_STRING, 0, OPT_STOP_AT, 0, 0 },
+ {"time-limit", 0, POPT_ARG_STRING, 0, OPT_TIME_LIMIT, 0, 0 },
+ {"backup", 'b', POPT_ARG_NONE, &make_backups, 0, 0, 0 },
{"backup-dir", 0, POPT_ARG_STRING, &backup_dir, 0, 0, 0 },
- {"hard-links", 'H', POPT_ARG_NONE, &preserve_hard_links, 0, 0, 0 },
- {"read-batch", 0, POPT_ARG_STRING, &batch_name, OPT_READ_BATCH, 0, 0 },
-@@ -876,6 +882,36 @@ int parse_arguments(int *argc, const cha
+ {"suffix", 0, POPT_ARG_STRING, &backup_suffix, 0, 0, 0 },
+@@ -916,6 +922,36 @@ int parse_arguments(int *argc, const cha
basis_dir[basis_dir_cnt++] = (char *)arg;
break;
default:
/* A large opt value means that set_refuse_options()
* turned this option off. */
-@@ -1365,6 +1401,15 @@ void server_options(char **args,int *arg
+@@ -1412,6 +1448,15 @@ void server_options(char **args,int *arg
args[ac++] = arg;
}
if (backup_dir) {
args[ac++] = "--backup-dir";
args[ac++] = backup_dir;
---- orig/rsync.yo 2005-05-22 20:53:34
+--- orig/rsync.yo 2005-08-27 21:05:12
+++ rsync.yo 2005-02-01 10:46:35
-@@ -379,6 +379,8 @@ to the detailed description below for a
+@@ -378,6 +378,8 @@ to the detailed description below for a
--password-file=FILE read password from FILE
--list-only list the files instead of copying them
--bwlimit=KBPS limit I/O bandwidth; KBytes per second
--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
-@@ -1283,6 +1285,19 @@ transfer was too fast, it will wait befo
+@@ -1320,6 +1322,19 @@ transfer was too fast, it will wait befo
result is an average transfer rate equaling the specified limit. A value
of zero specifies no limit.
dit(bf(--write-batch=FILE)) Record a file that can later be applied to
another identical destination with bf(--read-batch). See the "BATCH MODE"
section for details, and also the bf(--only-write-batch) option.
---- orig/util.c 2005-05-03 16:47:33
+--- orig/util.c 2005-08-17 06:45:08
+++ util.c 2004-07-03 20:23:22
-@@ -126,6 +126,132 @@ void overflow(char *str)
+@@ -126,6 +126,132 @@ void overflow_exit(char *str)
exit_cleanup(RERR_MALLOC);
}
+}
- int set_modtime(char *fname, time_t modtime)
+ int set_modtime(char *fname, time_t modtime, mode_t mode)
if (verbose > 1) {
--- orig/configure.in 2004-08-19 19:53:27
+++ configure.in 2005-05-12 22:57:53
-@@ -821,6 +821,30 @@ samba_cv_HAVE_ACL_GET_PERM_NP=yes,samba_
+@@ -822,6 +822,30 @@ samba_cv_HAVE_ACL_GET_PERM_NP=yes,samba_
AC_MSG_RESULT(no)
)
AC_CONFIG_FILES([Makefile lib/dummy zlib/dummy popt/dummy shconfig])
AC_OUTPUT
---- orig/flist.c 2005-03-16 02:24:11
+--- orig/flist.c 2005-07-29 02:49:06
+++ flist.c 2005-05-12 22:55:41
@@ -976,6 +976,8 @@ static struct file_struct *send_file_nam
return NULL;
- if (!MAKE_ACL(file, fname))
+ if (MAKE_ACL(file, fname) < 0)
return NULL;
+ if (!MAKE_XATTR(file, fname))
+ return NULL;
}
return file;
}
-@@ -1325,6 +1329,7 @@ struct file_list *recv_file_list(int f)
+@@ -1334,6 +1338,7 @@ struct file_list *recv_file_list(int f)
file = receive_file_entry(flist, flags, f);
RECEIVE_ACL(file, f);
if (S_ISREG(file->mode))
stats.total_size += file->length;
-@@ -1349,6 +1354,7 @@ struct file_list *recv_file_list(int f)
+@@ -1358,6 +1363,7 @@ struct file_list *recv_file_list(int f)
clean_flist(flist, relative_paths, 1);
SORT_FILE_ACL_INDEX_LISTS();
/* Now send the uid/gid list. This was introduced in
--- orig/generator.c 2005-05-12 23:34:00
+++ generator.c 2005-05-12 23:21:08
-@@ -720,6 +720,10 @@ static void recv_generator(char *fname,
+@@ -729,6 +729,10 @@ static void recv_generator(char *fname,
if (f_out == -1)
SET_ACL(fname, file);
#endif
+#else
+
+#endif /* No xattrs */
---- orig/options.c 2005-05-12 23:34:38
-+++ options.c 2005-05-12 23:21:25
+--- orig/options.c 2005-08-27 21:15:29
++++ options.c 2005-08-27 21:29:40
@@ -44,6 +44,7 @@ int copy_links = 0;
int preserve_links = 0;
int preserve_hard_links = 0;
int preserve_perms = 0;
int preserve_devices = 0;
int preserve_uid = 0;
-@@ -182,6 +183,7 @@ static void print_rsync_version(enum log
+@@ -183,6 +184,7 @@ static void print_rsync_version(enum log
char const *have_inplace = "no ";
char const *hardlinks = "no ";
char const *acls = "no ";
char const *links = "no ";
char const *ipv6 = "no ";
STRUCT_STAT *dumstat;
-@@ -201,7 +203,9 @@ static void print_rsync_version(enum log
+@@ -202,7 +204,9 @@ static void print_rsync_version(enum log
#ifdef SUPPORT_ACLS
acls = "";
#endif
#ifdef SUPPORT_LINKS
links = "";
#endif
-@@ -216,9 +220,9 @@ static void print_rsync_version(enum log
+@@ -217,9 +221,9 @@ static void print_rsync_version(enum log
"Copyright (C) 1996-2005 by Andrew Tridgell and others\n");
rprintf(f, "<http://rsync.samba.org/>\n");
rprintf(f, "Capabilities: %d-bit files, %ssocketpairs, "
/* Note that this field may not have type ino_t. It depends
* on the complicated interaction between largefile feature
-@@ -289,6 +293,7 @@ void usage(enum logcode F)
+@@ -291,6 +295,7 @@ void usage(enum logcode F)
rprintf(F," -K, --keep-dirlinks treat symlinked dir on receiver as dir\n");
rprintf(F," -p, --perms preserve permissions\n");
rprintf(F," -A, --acls preserve ACLs (implies --perms)\n");
rprintf(F," -o, --owner preserve owner (root only)\n");
rprintf(F," -g, --group preserve group\n");
rprintf(F," -D, --devices preserve devices (root only)\n");
-@@ -416,6 +421,7 @@ static struct poptOption long_options[]
- {"copy-unsafe-links",0, POPT_ARG_NONE, ©_unsafe_links, 0, 0, 0 },
- {"perms", 'p', POPT_ARG_NONE, &preserve_perms, 0, 0, 0 },
- {"acls", 'A', POPT_ARG_NONE, 0, 'A', 0, 0 },
-+ {"xattrs", 'X', POPT_ARG_NONE, 0, 'X', 0, 0 },
- {"owner", 'o', POPT_ARG_NONE, &preserve_uid, 0, 0, 0 },
- {"group", 'g', POPT_ARG_NONE, &preserve_gid, 0, 0, 0 },
- {"devices", 'D', POPT_ARG_NONE, &preserve_devices, 0, 0, 0 },
-@@ -901,6 +907,17 @@ int parse_arguments(int *argc, const cha
+@@ -395,6 +400,9 @@ static struct poptOption long_options[]
+ {"acls", 'A', POPT_ARG_NONE, 0, 'A', 0, 0 },
+ {"no-acls", 0, POPT_ARG_VAL, &preserve_acls, 0, 0, 0 },
+ {"no-A", 0, POPT_ARG_VAL, &preserve_acls, 0, 0, 0 },
++ {"xattrs", 'X', POPT_ARG_NONE, 0, 'X', 0, 0 },
++ {"no-xattrs", 0, POPT_ARG_VAL, &preserve_xattrs, 0, 0, 0 },
++ {"no-X", 0, POPT_ARG_VAL, &preserve_xattrs, 0, 0, 0 },
+ {"times", 't', POPT_ARG_VAL, &preserve_times, 1, 0, 0 },
+ {"no-times", 0, POPT_ARG_VAL, &preserve_times, 0, 0, 0 },
+ {"no-t", 0, POPT_ARG_VAL, &preserve_times, 0, 0, 0 },
+@@ -943,6 +951,17 @@ int parse_arguments(int *argc, const cha
+ return 0;
#endif /* SUPPORT_ACLS */
- break;
+ case 'X':
+#ifdef SUPPORT_XATTRS
+ preserve_xattrs = 1;
+ preserve_perms = 1;
++ break;
+#else
+ snprintf(err_buf,sizeof(err_buf),
+ "extended attributes are not supported on this %s\n",
+ am_server ? "server" : "client");
+ return 0;
+#endif /* SUPPORT_XATTRS */
-+ break;
default:
/* A large opt value means that set_refuse_options()
-@@ -1310,6 +1327,8 @@ void server_options(char **args,int *arg
+@@ -1359,6 +1378,8 @@ void server_options(char **args,int *arg
argstr[x++] = 'H';
if (preserve_acls)
argstr[x++] = 'A';
if (preserve_gid)
--- orig/rsync.c 2004-07-03 20:11:58
+++ rsync.c 2005-03-03 01:31:22
-@@ -144,6 +144,14 @@ int set_perms(char *fname,struct file_st
+@@ -146,6 +146,14 @@ int set_perms(char *fname,struct file_st
if (SET_ACL(fname, file) == 0)
updated = 1;
}
if (verbose > 1 && flags & PERMS_REPORT) {
enum logcode code = daemon_log_format_has_i || dry_run
---- orig/rsync.h 2005-05-12 23:32:56
+--- orig/rsync.h 2005-07-29 02:25:55
+++ rsync.h 2005-05-12 23:19:46
-@@ -676,6 +676,38 @@ struct stats {
+@@ -684,6 +684,38 @@ struct stats {
#endif /* SUPPORT_ACLS */
#include "smb_acls.h"
/* We have replacement versions of these if they're missing. */
--- orig/rsync.yo 2004-07-03 20:11:58
+++ rsync.yo 2005-03-03 01:33:53
-@@ -307,6 +307,7 @@ to the detailed description below for a
+@@ -319,6 +319,7 @@ to the detailed description below for a
-K, --keep-dirlinks treat symlinked dir on receiver as dir
-p, --perms preserve permissions
-A, --acls preserve ACLs (implies -p) [local option]
-o, --owner preserve owner (root only)
-g, --group preserve group
-D, --devices preserve devices (root only)
-@@ -624,6 +625,11 @@ ACLs to be the same as the local ACLs.
+@@ -671,6 +672,11 @@ ACLs to be the same as the local ACLs.
remote machine's rsync supports this option also. This is a non-standard
option.