[SCM] The rsync repository. - branch b3.0.x updated

Rsync CVS commit messages rsync-cvs at lists.samba.org
Sat Dec 18 14:06:37 MST 2010


The branch, b3.0.x has been updated
       via  58ab320 Optimize --inplace chunck search to avoid a non-aligned search.
       via  00cde65 Mention seek effect of an unmoved --inplace chunk.
       via  e6ba6e1 Improve description of --chmod example.
      from  efad2e8 Fix crash when --backup-dir is excessively long.

;a=shortlog;h=b3.0.x


- Log -----------------------------------------------------------------
commit 58ab32037daaa1012e5b87580058ca1a6df4ecda
Author: Wayne Davison <wayned at samba.org>
Date:   Sat Dec 18 08:27:03 2010 -0800

    Optimize --inplace chunck search to avoid a non-aligned search.

commit 00cde6582c82d590895ca86bf1a2dc9a292d6d38
Author: Wayne Davison <wayned at samba.org>
Date:   Sat Dec 18 08:17:03 2010 -0800

    Mention seek effect of an unmoved --inplace chunk.

commit e6ba6e1107b03ffef6ec87e555a84fae614f9266
Author: Wayne Davison <wayned at samba.org>
Date:   Sat Dec 18 08:13:52 2010 -0800

    Improve description of --chmod example.

-----------------------------------------------------------------------

Summary of changes:
 match.c    |   39 ++++++++++++++++++++-------------------
 receiver.c |    5 +++--
 rsync.yo   |    5 ++++-
 3 files changed, 27 insertions(+), 22 deletions(-)


Changeset truncated at 500 lines:

diff --git a/match.c b/match.c
index 45c512c..b211077 100644
--- a/match.c
+++ b/match.c
@@ -141,7 +141,7 @@ static void matched(int f, struct sum_struct *s, struct map_struct *buf,
 static void hash_search(int f,struct sum_struct *s,
 			struct map_struct *buf, OFF_T len)
 {
-	OFF_T offset, end;
+	OFF_T offset, aligned_offset, end;
 	int32 k, want_i, backup;
 	char sum2[SUM_LENGTH];
 	uint32 s1, s2, sum;
@@ -167,7 +167,7 @@ static void hash_search(int f,struct sum_struct *s,
 	if (verbose > 3)
 		rprintf(FINFO, "sum=%.8x k=%ld\n", sum, (long)k);
 
-	offset = 0;
+	offset = aligned_offset = 0;
 
 	end = len + 1 - s->sums[s->count-1].len;
 
@@ -232,24 +232,26 @@ static void hash_search(int f,struct sum_struct *s,
 
 			/* When updating in-place, the best possible match is
 			 * one with an identical offset, so we prefer that over
-			 * the following want_i optimization. */
+			 * the adjacent want_i optimization. */
 			if (updating_basis_file) {
-				int32 i2;
-				for (i2 = i; i2 >= 0; i2 = s->sums[i2].chain) {
-					if (s->sums[i2].offset != offset)
-						continue;
-					if (i2 != i) {
-						if (sum != s->sums[i2].sum1)
-							break;
-						if (memcmp(sum2, s->sums[i2].sum2,
-							   s->s2length) != 0)
-							break;
-						i = i2;
+				/* All the generator's chunks start at blength boundaries. */
+				while (aligned_offset < offset)
+					aligned_offset += s->blength;
+				if (offset == aligned_offset) {
+					int32 i2;
+					for (i2 = i; i2 >= 0; i2 = s->sums[i2].chain) {
+						if (s->sums[i2].offset != offset)
+							continue;
+						if (i2 != i) {
+							if (sum != s->sums[i2].sum1
+							 || memcmp(sum2, s->sums[i2].sum2, s->s2length) != 0)
+								break;
+							i = i2;
+						}
+						/* This chunk remained in the same spot in the old and new file. */
+						s->sums[i].flags |= SUMFLG_SAME_OFFSET;
+						want_i = i;
 					}
-					/* This chunk was at the same offset on
-					 * both the sender and the receiver. */
-					s->sums[i].flags |= SUMFLG_SAME_OFFSET;
-					goto set_want_i;
 				}
 			}
 
@@ -264,7 +266,6 @@ static void hash_search(int f,struct sum_struct *s,
 				 * will be happy */
 				i = want_i;
 			}
-		    set_want_i:
 			want_i = i + 1;
 
 			matched(f,s,buf,offset,i);
diff --git a/receiver.c b/receiver.c
index ea11ed5..467db5e 100644
--- a/receiver.c
+++ b/receiver.c
@@ -249,8 +249,9 @@ static int receive_data(int f_in, char *fname_r, int fd_r, OFF_T size_r,
 
 		if (verbose > 3) {
 			rprintf(FINFO,
-				"chunk[%d] of size %ld at %.0f offset=%.0f\n",
-				i, (long)len, (double)offset2, (double)offset);
+				"chunk[%d] of size %ld at %.0f offset=%.0f%s\n",
+				i, (long)len, (double)offset2, (double)offset,
+				updating_basis_or_equiv && offset == offset2 ? " (seek)" : "");
 		}
 
 		if (mapbuf) {
diff --git a/rsync.yo b/rsync.yo
index 031e982..a523f23 100644
--- a/rsync.yo
+++ b/rsync.yo
@@ -991,7 +991,10 @@ can seem to have no effect on existing files if bf(--perms) is not enabled.
 In addition to the normal parsing rules specified in the bf(chmod)(1)
 manpage, you can specify an item that should only apply to a directory by
 prefixing it with a 'D', or specify an item that should only apply to a
-file by prefixing it with a 'F'.  For example:
+file by prefixing it with a 'F'.  For example, the following will ensure
+that all directories get marked set-gid, that no files are other-writable,
+that both are user-writable and group-writable, and that both have
+consistent executability across all bits:
 
 quote(--chmod=Dg+s,ug+w,Fo-w,+X)
 


-- 
The rsync repository.


More information about the rsync-cvs mailing list