--
Anyone who quotes me in their sig is an idiot. -- Rusty Russell.
---- Makefile.in 10 Feb 2004 17:06:11 -0000 1.98
-+++ Makefile.in 27 Feb 2004 08:57:09 -0000
-@@ -32,7 +32,7 @@
+--- Makefile.in 15 May 2004 00:48:11 -0000 1.101
++++ Makefile.in 15 May 2004 20:47:12 -0000
+@@ -32,7 +32,7 @@ ZLIBOBJ=zlib/deflate.o zlib/infblock.o z
zlib/inflate.o zlib/inftrees.o zlib/infutil.o zlib/trees.o \
zlib/zutil.o zlib/adler32.o
OBJS1=rsync.o generator.o receiver.o cleanup.o sender.o exclude.o util.o \
OBJS2=options.o flist.o io.o compat.o hlink.o token.o uidlist.o socket.o \
fileio.o batch.o clientname.o
OBJS3=progress.o pipe.o
---- generator.c 27 Feb 2004 08:03:49 -0000 1.76
-+++ generator.c 27 Feb 2004 08:57:09 -0000
-@@ -43,10 +43,12 @@
- extern int always_checksum;
- extern char *compare_dest;
- extern int link_dest;
+--- generator.c 15 May 2004 19:31:10 -0000 1.83
++++ generator.c 15 May 2004 20:47:12 -0000
+@@ -51,6 +51,7 @@ extern int list_only;
+ extern int only_existing;
+ extern int orig_umask;
+ extern int safe_symlinks;
+extern int fuzzy;
/* choose whether to skip a particular file */
--static int skip_file(char *fname, struct file_struct *file, STRUCT_STAT *st)
-+static int skip_file(char *fname, struct file_struct *file,
-+ const STRUCT_STAT *st)
- {
- if (st->st_size != file->length) {
- return 0;
-@@ -252,7 +254,62 @@
+@@ -256,7 +257,61 @@ static void generate_and_send_sums(struc
}
}
+ STRUCT_STAT *st)
+{
+ int fd = -1;
-
++
+ if (statret == 0) {
+ if (S_ISREG(st->st_mode)) {
+ if (update_only
+ return -2;
+ }
+ if (skip_file(fname, file, st)) {
-+ set_perms(fname, file, st, 1);
++ set_perms(fname, file, st, PERMS_REPORT);
+ return -2;
+ }
+ fd = do_open(fname, O_RDONLY, 0);
+ if (fd == -1) {
-+ rprintf(FERROR, "failed to open %s, continuing : %s\n",
-+ full_fname(fname), strerror(errno));
++ rsyserr(FERROR, errno, "failed to open %s, continuing",
++ full_fname(fname));
+ return -1;
+ }
+ return fd;
+
+ if (fd == -1 && compare_dest != NULL)
+ fd = open_alternate_base_comparedir(fname);
-+
+
+ if (fd == -1 && fuzzy)
+ fd = open_alternate_base_fuzzy(fname);
+
+ /* Update stat to understand size */
+ if (fd != -1) {
+ if (do_fstat(fd, st) != 0) {
-+ rprintf(FERROR, "fstat %s : %s\n",
-+ full_fname(fname), strerror(errno));
++ rsyserr(FERROR, errno, "fstat %s", full_fname(fname));
+ }
+ }
+
/**
* Acts on file number @p i from @p flist, whose name is @p fname.
-@@ -268,9 +325,6 @@ void recv_generator(char *fname, struct
+@@ -272,8 +327,6 @@ void recv_generator(char *fname, struct
STRUCT_STAT st;
struct map_struct *mapbuf;
int statret;
- char *fnamecmp;
- char fnamecmpbuf[MAXPATHLEN];
-- extern char *compare_dest;
- extern int list_only;
- extern int only_existing;
- extern int orig_umask;
-@@ -397,108 +451,38 @@ void recv_generator(char *fname, struct
+
+ if (list_only)
+ return;
+@@ -400,107 +453,39 @@ void recv_generator(char *fname, struct
}
#endif
- else if (link_dest && !dry_run) {
- if (do_link(fnamecmpbuf, fname) != 0) {
- if (verbose > 0) {
-- rprintf(FINFO,"link %s => %s : %s\n",
-- fnamecmpbuf, fname,
-- strerror(errno));
+- rsyserr(FINFO, errno, "link %s => %s",
+- fnamecmpbuf, fname);
- }
- }
- fnamecmp = fnamecmpbuf;
- } else if (verbose > 1) {
+ /* Failed to stat for some reason besides "not found". */
+ if (statret == -1 && errno != ENOENT) {
-+ if (verbose > 1)
- rprintf(FERROR,
-- "recv_generator: failed to open %s: %s\n",
-+ "recv_generator failed to stat %s: %s\n",
- full_fname(fname), strerror(errno));
-- }
++ if (verbose > 1) {
+ rsyserr(FERROR, errno,
+- "recv_generator: failed to open %s",
++ "recv_generator failed to stat %s",
+ full_fname(fname));
+ }
return;
}
- return;
- write_int(f_out,i);
- if (!dry_run) write_sum_head(f_out, NULL);
-+ if ((fd = open_base_file(file, fname, statret, &st)) == -2)
- return;
+- return;
- }
-
- if (opt_ignore_existing && fnamecmp == fname) {
- if (verbose > 1)
- rprintf(FINFO,"%s exists\n",fname);
-- return;
++ if ((fd = open_base_file(file, fname, statret, &st)) == -2)
+ return;
- }
- if (update_only && cmp_modtime(st.st_mtime,file->modtime)>0 && fnamecmp == fname) {
- if (skip_file(fname, file, &st)) {
- if (fnamecmp == fname)
-- set_perms(fname,file,&st,1);
+- set_perms(fname, file, &st, PERMS_REPORT);
- return;
- }
-
- fd = do_open(fnamecmp, O_RDONLY, 0);
-
if (fd == -1) {
-- rprintf(FERROR, "failed to open %s, continuing: %s\n",
-- full_fname(fnamecmp), strerror(errno));
+- rsyserr(FERROR, errno, "failed to open %s, continuing",
+- full_fname(fnamecmp));
- /* pretend the file didn't exist */
+ /* the file didn't exist, or we can pretend it doesn't */
if (preserve_hard_links && hard_link_check(file, HL_SKIP))
return;
}
-@@ -508,7 +492,7 @@ void recv_generator(char *fname, struct
+@@ -510,7 +495,7 @@ void recv_generator(char *fname, struct
mapbuf = NULL;
if (verbose > 3) {
(double)st.st_size);
}
---- options.c 22 Feb 2004 08:56:43 -0000 1.139
-+++ options.c 27 Feb 2004 08:57:10 -0000
-@@ -89,6 +89,7 @@
+--- options.c 6 May 2004 21:08:01 -0000 1.148
++++ options.c 15 May 2004 20:47:13 -0000
+@@ -91,6 +91,7 @@ int ignore_errors = 0;
int modify_window = 0;
int blocking_io = -1;
int checksum_seed = 0;
unsigned int block_size = 0;
-@@ -288,6 +289,7 @@ void usage(enum logcode F)
+@@ -290,6 +291,7 @@ void usage(enum logcode F)
rprintf(F," --bwlimit=KBPS limit I/O bandwidth, KBytes per second\n");
rprintf(F," --write-batch=PREFIX write batch fileset starting with PREFIX\n");
rprintf(F," --read-batch=PREFIX read batch fileset starting with PREFIX\n");
+ rprintf(F," --fuzzy use similar file as basis if it does't exist\n");
- rprintf(F," -h, --help show this help screen\n");
#ifdef INET6
- rprintf(F," -4 prefer IPv4\n");
-@@ -383,6 +385,7 @@ static struct poptOption long_options[]
+ rprintf(F," -4 --ipv4 prefer IPv4\n");
+ rprintf(F," -6 --ipv6 prefer IPv6\n");
+@@ -385,6 +387,7 @@ 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 },
+ {"fuzzy", 0, POPT_ARG_NONE, &fuzzy, 0, 0, 0 },
{"protocol", 0, POPT_ARG_INT, &protocol_version, 0, 0, 0 },
#ifdef INET6
- {0, '4', POPT_ARG_VAL, &default_af_hint, AF_INET, 0, 0 },
-@@ -945,6 +948,9 @@ void server_options(char **args,int *arg
+ {"ipv4", '4', POPT_ARG_VAL, &default_af_hint, AF_INET, 0, 0 },
+@@ -964,6 +967,9 @@ void server_options(char **args,int *arg
args[ac++] = "--from0";
}
}
*argc = ac;
return;
---- proto.h 17 Feb 2004 23:13:06 -0000 1.184
-+++ proto.h 27 Feb 2004 08:57:10 -0000
-@@ -1,6 +1,9 @@
- /* This file is automatically generated with "make proto". DO NOT EDIT */
-
- int allow_access(char *addr, char *host, char *allow_list, char *deny_list);
-+int do_open_regular(char *fname);
-+int open_alternate_base_fuzzy(const char *fname);
-+int open_alternate_base_comparedir(const char *fname);
- void base64_encode(char *buf, int len, char *out);
- char *auth_server(int f_in, int f_out, int module, char *addr, char *leader);
- void auth_client(int fd, char *user, char *challenge);
---- receiver.c 27 Feb 2004 08:03:49 -0000 1.73
-+++ receiver.c 27 Feb 2004 08:57:10 -0000
-@@ -39,6 +39,7 @@
- extern char *backup_suffix;
- extern int backup_suffix_len;
- extern int cleanup_got_literal;
+--- receiver.c 15 May 2004 19:31:10 -0000 1.78
++++ receiver.c 15 May 2004 20:47:13 -0000
+@@ -46,6 +46,7 @@ extern int module_id;
+ extern int ignore_errors;
+ extern int orig_umask;
+ extern int keep_partial;
+extern int fuzzy;
static void delete_one(char *fn, int is_dir)
{
-@@ -288,8 +289,6 @@ int recv_files(int f_in,struct file_list
+@@ -294,8 +295,6 @@ int recv_files(int f_in,struct file_list
char *fname, fbuf[MAXPATHLEN];
char template[MAXPATHLEN];
char fnametmp[MAXPATHLEN];
struct map_struct *mapbuf;
int i;
struct file_struct *file;
-@@ -356,35 +355,31 @@ int recv_files(int f_in,struct file_list
+@@ -358,35 +357,31 @@ int recv_files(int f_in,struct file_list
if (verbose > 2)
rprintf(FINFO,"recv_files(%s)\n",fname);
+ fd1 = open_alternate_base_fuzzy(fname);
if (fd1 != -1 && do_fstat(fd1,&st) != 0) {
- rprintf(FERROR, "fstat %s failed: %s\n",
-- full_fname(fnamecmp), strerror(errno));
-+ full_fname(fname), strerror(errno));
+ rsyserr(FERROR, errno, "fstat %s failed",
+- full_fname(fnamecmp));
++ full_fname(fname));
receive_data(f_in,NULL,-1,NULL,file->length);
close(fd1);
continue;
receive_data(f_in, NULL, -1, NULL, file->length);
close(fd1);
continue;
-@@ -405,8 +400,10 @@ int recv_files(int f_in,struct file_list
+@@ -407,8 +402,10 @@ int recv_files(int f_in,struct file_list
if (fd1 != -1 && st.st_size > 0) {
mapbuf = map_file(fd1,st.st_size);