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 <way...@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 <way...@samba.org>
Date:   Sat Dec 18 08:17:03 2010 -0800

    Mention seek effect of an unmoved --inplace chunk.

commit e6ba6e1107b03ffef6ec87e555a84fae614f9266
Author: Wayne Davison <way...@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.
_______________________________________________
rsync-cvs mailing list
rsync-cvs@lists.samba.org
https://lists.samba.org/mailman/listinfo/rsync-cvs

Reply via email to