X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/184dd27a183ab3403eadbd699bc47a1f96cdd331..b2e7c913131b91c925a5d13867def8e4418d1ee5:/generator.c diff --git a/generator.c b/generator.c index 965e2834..dddeb8ea 100644 --- a/generator.c +++ b/generator.c @@ -69,6 +69,7 @@ extern int ignore_timeout; extern int protocol_version; extern int fuzzy_basis; extern int always_checksum; +extern int checksum_len; extern char *partial_dir; extern char *basis_dir[]; extern int compare_dest; @@ -384,8 +385,7 @@ static int unchanged_file(char *fn, struct file_struct *file, STRUCT_STAT *st) if (always_checksum && S_ISREG(st->st_mode)) { char sum[MD4_SUM_LENGTH]; file_checksum(fn, sum, st->st_size); - return memcmp(sum, file->u.sum, protocol_version < 21 ? 2 - : MD4_SUM_LENGTH) == 0; + return memcmp(sum, file->u.sum, checksum_len) == 0; } if (size_only) @@ -659,7 +659,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx, S_ISDIR(file->mode)) < 0) { if (S_ISDIR(file->mode)) excluded_below = file->dir.depth; - skipping: + skipping: if (verbose) { rprintf(FINFO, "skipping server-excluded file \"%s\"\n", @@ -1069,6 +1069,10 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx, else if (fnamecmp_type == FNAMECMP_FUZZY) ; else if (unchanged_file(fnamecmp, file, &st)) { + if (partialptr) { + do_unlink(partialptr); + handle_partial_dir(partialptr, PDIR_DELETE); + } if (fnamecmp_type == FNAMECMP_FNAME) { if (itemizing) { itemize(file, ndx, real_ret, &real_st, @@ -1085,7 +1089,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx, return; } -prepare_to_open: + prepare_to_open: if (partialptr) { st = partial_st; fnamecmp = partialptr; @@ -1108,7 +1112,7 @@ prepare_to_open: if (fd == -1) { rsyserr(FERROR, errno, "failed to open %s, continuing", full_fname(fnamecmp)); - pretend_missing: + pretend_missing: /* pretend the file didn't exist */ if (preserve_hard_links && file->link_u.links && hard_link_check(file, ndx, fname, statret, &st, @@ -1153,7 +1157,7 @@ prepare_to_open: if (verbose > 2) rprintf(FINFO, "generating and sending sums for %d\n", ndx); -notify_others: + notify_others: write_int(f_out, ndx); if (itemizing) { int iflags = ITEM_TRANSFER;