X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/74a7f81d5749c9ce8d9b7c284f9378857d0d5d60..1960e2280cbc8ccc289078385adcab26ccb8f4dc:/generator.c diff --git a/generator.c b/generator.c index f0d23ea6..39ed26bc 100644 --- a/generator.c +++ b/generator.c @@ -35,6 +35,8 @@ extern int size_only; extern int io_timeout; extern int remote_version; extern int always_checksum; +extern int modify_window; +extern char *compare_dest; /* choose whether to skip a particular file */ @@ -49,6 +51,15 @@ static int skip_file(char *fname, of the file time to determine whether to sync */ if (always_checksum && S_ISREG(st->st_mode)) { char sum[MD4_SUM_LENGTH]; + char fnamecmpdest[MAXPATHLEN]; + + if (compare_dest != NULL) { + if (access(fname, 0) != 0) { + slprintf(fnamecmpdest,MAXPATHLEN,"%s/%s", + compare_dest,fname); + fname = fnamecmpdest; + } + } file_checksum(fname,sum,st->st_size); if (remote_version < 21) { return (memcmp(sum,file->sum,2) == 0); @@ -65,7 +76,7 @@ static int skip_file(char *fname, return 0; } - return (st->st_mtime == file->modtime); + return (cmp_modtime(st->st_mtime,file->modtime) == 0); } @@ -206,7 +217,7 @@ void recv_generator(char *fname,struct file_list *flist,int i,int f_out) if (dry_run) return; if (statret == 0 && !S_ISDIR(st.st_mode)) { if (robust_unlink(fname) != 0) { - rprintf(FERROR,"unlink %s : %s\n",fname,strerror(errno)); + rprintf(FERROR,"recv_generator: unlink %s: %s\n",fname,strerror(errno)); return; } statret = -1; @@ -215,7 +226,7 @@ void recv_generator(char *fname,struct file_list *flist,int i,int f_out) if (!(relative_paths && errno==ENOENT && create_directory_path(fname)==0 && do_mkdir(fname,file->mode)==0)) { - rprintf(FERROR,"mkdir %s : %s (2)\n", + rprintf(FERROR,"recv_generator: mkdir %s: %s (2)\n", fname,strerror(errno)); } } @@ -246,8 +257,8 @@ void recv_generator(char *fname,struct file_list *flist,int i,int f_out) return; } } + delete_file(fname); } - delete_file(fname); if (do_symlink(file->link,fname) != 0) { rprintf(FERROR,"symlink %s -> %s : %s\n", fname,file->link,strerror(errno)); @@ -333,7 +344,7 @@ void recv_generator(char *fname,struct file_list *flist,int i,int f_out) return; } - if (update_only && st.st_mtime > file->modtime && fnamecmp == fname) { + if (update_only && cmp_modtime(st.st_mtime,file->modtime)>0 && fnamecmp == fname) { if (verbose > 1) rprintf(FINFO,"%s is newer\n",fname); return;