fix(filter): accept e/n/w/- merge modifiers on merge/dir-merge rules
The earlier modifier-rejection change rejected e/n/w on all rules, but rsync 3.4.1 accepts them (plus the '-' merge-only modifier) on merge and dir-merge rules. Restrict the rejection to non-merge rules and consume the merge-file modifiers (e/n/w/-) so they no longer leak into the merge filename. - is_merge_rule()/is_merge_modifier_char() gate the merge-only modifiers. - scan vs consume sets: e/n/w still count as modifier-run chars on every rule (pure tokens like -new/-press stay rejected), but are only consumed on merge rules, preserving mixed-token parsing such as H,!secret -> ecret. - '-' is accepted/consumed only on merge/dir-merge (e.g. dir-merge,- .rules). - x remains rejected everywhere with its dedicated message. - e/n/w/- semantics remain unimplemented and are documented as accepted-but- ignored in filter.h. Tests: split the merge forms out of the rejection test into a new acceptance test asserting the merge file is read and dir_merge_names keeps the modifier- free basename; non-merge pure-modifier forms still rejected.
This commit is contained in:
+6
-2
@@ -24,8 +24,12 @@
|
||||
* clear/! clear the current rule list (takes no argument)
|
||||
* Modifiers: '/' absolute anchor, '!' negate match, 'C' inject CVS defaults,
|
||||
* 's' sender side, 'r' receiver side, 'p' perishable. The rsync 'x'
|
||||
* (xattr-name) modifier and the merge-only 'e'/'n'/'w' modifiers are not
|
||||
* implemented and are rejected explicitly.
|
||||
* (xattr-name) modifier is not implemented and is rejected explicitly
|
||||
* everywhere. The merge-file modifiers 'e' (exclude the merge file itself),
|
||||
* 'n' (do not inherit the merge file), 'w' (word-split the merge file) and '-'
|
||||
* (do not transfer the merge file) are accepted and consumed only on merge/
|
||||
* dir-merge rules (rejected on every other rule, matching rsync); their
|
||||
* semantics are not implemented and they are otherwise ignored.
|
||||
* A trailing '/' makes a pattern match directories only. A leading '/' anchors
|
||||
* the pattern to its owner directory.
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user