The branch, master has been updated
       via  7a2dbf71 Make the implied-arg adding for --relative more efficient.
       via  8449539a More NEWS updates.
      from  71c2b5d0 Fix exclusion of /. with --relative.

https://git.samba.org/?p=rsync.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit 7a2dbf717794655a3fd82439fdb1e3d8b4730c74
Author: Wayne Davison <wa...@opencoder.net>
Date:   Wed Sep 14 08:20:41 2022 -0700

    Make the implied-arg adding for --relative more efficient.

commit 8449539a0f4501ffc7a1792e361925ee98b86783
Author: Wayne Davison <wa...@opencoder.net>
Date:   Wed Sep 14 07:53:23 2022 -0700

    More NEWS updates.

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

Summary of changes:
 NEWS.md   | 25 ++++++++++++++-----------
 exclude.c | 45 +++++++++++++++++++++++++--------------------
 2 files changed, 39 insertions(+), 31 deletions(-)


Changeset truncated at 500 lines:

diff --git a/NEWS.md b/NEWS.md
index 49dbc544..d40b7fa2 100644
--- a/NEWS.md
+++ b/NEWS.md
@@ -4,9 +4,9 @@
 
 ### BUG FIXES:
 
-- Fix a bug with validating remote filter rules.
+- Fixed the validating of remote filter rules.
 
-- When rsync gets and unpack error on an ACL, mention the filename.
+- When rsync gets an unpack error on an ACL, mention the filename.
 
 ### ENHANCEMENTS:
 
@@ -17,7 +17,10 @@
 - Added support for SHA1, SHA256, and SHA512 digests in file checksums.  While
   this tends to be overkill, it is available if someone really needs it.  These
   overly-long checksums are at the lowest priority in the normal checksum
-  negotation list.
+  negotiation list.
+
+- Improved the xattr hash table to use a 64-bit key (which should ensure fewer
+  collisions).
 
 - If the `--version` option is repeated (e.g. `-VV`) then the information is
   output in a (still human-readable) JSON format (client side only).
@@ -26,8 +29,8 @@
   version output from any rsync.  The script accepts either text on stdin
   **or** an arg that specifies an rsync executable to run with a doubled
   `--version` option.  If the text we get isn't already in JSON format, it is
-  converted into equivalent JSON as rsync 3.2.7 would output it (though some
-  info may be missing from older versions).
+  converted. Newer rsync versions will provide more complete info than older
+  versions.
 
 ### PACKAGING RELATED:
 
@@ -39,12 +42,12 @@
   talking to an rsync prior to 3.0.0) or you can configure rsync to tell
   openssl to enable legacy algorithms (see below).
 
-- A simple openssl config file is supplied that can be optionally installed for
-  rsync to use.  If you install packaging/openssl-rsync.cnf to a public spot
-  (such as ` /etc/ssl/openssl-rsync.cnf` or similar) and then configure rsync
-  using `--with-openssl-conf=/path/name.cnf`, this will cause rsync to export
-  the configured path in the OPENSSL_CONF environment variable (when it is not
-  already set).  This will enable openssl's MD4 code for rsync to use.
+- A simple openssl config file is supplied that can be installed for rsync to
+  use.  If you install packaging/openssl-rsync.cnf to a public spot (such as
+  `/etc/ssl/openssl-rsync.cnf`) and then run configure with the option
+  `--with-openssl-conf=/path/name.cnf`, this will cause rsync to export the
+  configured path in the OPENSSL_CONF environment variable (when the variable
+  is not already set).  This will enable openssl's MD4 code for rsync to use.
 
 ------------------------------------------------------------------------------
 
diff --git a/exclude.c b/exclude.c
index b21207ba..5c0b0a69 100644
--- a/exclude.c
+++ b/exclude.c
@@ -493,9 +493,10 @@ void add_implied_include(const char *arg, int 
skip_daemon_module)
                        if (saw_live_open_brkt)
                                maybe_add_literal_brackets_rule(rule, arg_len);
                        if (relative_paths && slash_cnt) {
-                               filter_rule const *ent;
-                               slash_cnt = 1;
-                               for (p = new_pat + 1; (p = strchr(p, '/')) != 
NULL; p++) {
+                               int sub_slash_cnt = slash_cnt;
+                               while ((p = strrchr(new_pat, '/')) != NULL && p 
!= new_pat) {
+                                       filter_rule const *ent;
+                                       filter_rule *R_rule;
                                        int found = 0;
                                        *p = '\0';
                                        for (ent = implied_filter_list.head; 
ent; ent = ent->next) {
@@ -504,25 +505,29 @@ void add_implied_include(const char *arg, int 
skip_daemon_module)
                                                        break;
                                                }
                                        }
-                                       if (!found) {
-                                               filter_rule *R_rule = 
new0(filter_rule);
-                                               R_rule->rflags = 
FILTRULE_INCLUDE | FILTRULE_DIRECTORY;
-                                               /* Check if our sub-path has 
wildcards or escaped backslashes */
-                                               if (saw_wild && 
strpbrk(new_pat, "*[?\\"))
-                                                       R_rule->rflags |= 
FILTRULE_WILD;
-                                               R_rule->pattern = 
strdup(new_pat);
-                                               R_rule->u.slash_cnt = slash_cnt;
-                                               R_rule->next = 
implied_filter_list.head;
-                                               implied_filter_list.head = 
R_rule;
-                                               if (DEBUG_GTE(FILTER, 3)) {
-                                                       rprintf(FINFO, "[%s] 
add_implied_include(%s/)\n",
-                                                               who_am_i(), 
R_rule->pattern);
-                                               }
-                                               if (saw_live_open_brkt)
-                                                       
maybe_add_literal_brackets_rule(R_rule, -1);
+                                       if (found) {
+                                               *p = '/';
+                                               break; /* We added all parent 
dirs already */
+                                       }
+                                       R_rule = new0(filter_rule);
+                                       R_rule->rflags = FILTRULE_INCLUDE | 
FILTRULE_DIRECTORY;
+                                       /* Check if our sub-path has wildcards 
or escaped backslashes */
+                                       if (saw_wild && strpbrk(new_pat, 
"*[?\\"))
+                                               R_rule->rflags |= FILTRULE_WILD;
+                                       R_rule->pattern = strdup(new_pat);
+                                       R_rule->u.slash_cnt = --sub_slash_cnt;
+                                       R_rule->next = implied_filter_list.head;
+                                       implied_filter_list.head = R_rule;
+                                       if (DEBUG_GTE(FILTER, 3)) {
+                                               rprintf(FINFO, "[%s] 
add_implied_include(%s/)\n",
+                                                       who_am_i(), 
R_rule->pattern);
                                        }
+                                       if (saw_live_open_brkt)
+                                               
maybe_add_literal_brackets_rule(R_rule, -1);
+                               }
+                               for (p = new_pat; sub_slash_cnt < slash_cnt; 
sub_slash_cnt++) {
+                                       p += strlen(p);
                                        *p = '/';
-                                       slash_cnt++;
                                }
                        }
                }


-- 
The rsync repository.

_______________________________________________
rsync-cvs mailing list
rsync-cvs@lists.samba.org
https://lists.samba.org/mailman/listinfo/rsync-cvs

Reply via email to