1
0
Fork 0
mirror of https://github.com/borgbackup/borg.git synced 2024-12-27 10:18:12 +00:00

patterns: don't recurse with !/--exclude for path-prefix (pf:)

Fixes issue #2509
This commit is contained in:
Mark Edgington 2017-05-29 11:53:31 -04:00
parent 02689174ab
commit fd0215c3c2

View file

@ -150,9 +150,8 @@ def match(self, path):
if value is not non_existent: if value is not non_existent:
# we have a full path match! # we have a full path match!
# TODO: get from pattern; don't hard-code self.recurse_dir = command_recurses_dir(value)
self.recurse_dir = True return self.is_include_cmd[value]
return value
# this is the slow way, if we have many patterns in self._items: # this is the slow way, if we have many patterns in self._items:
for (pattern, cmd) in self._items: for (pattern, cmd) in self._items:
@ -325,6 +324,11 @@ class IECommand(Enum):
ExcludeNoRecurse = 5 ExcludeNoRecurse = 5
def command_recurses_dir(cmd):
# TODO?: raise error or return None if *cmd* is RootPath or PatternStyle
return cmd not in [IECommand.ExcludeNoRecurse]
def get_pattern_class(prefix): def get_pattern_class(prefix):
try: try:
return _PATTERN_CLASS_BY_PREFIX[prefix] return _PATTERN_CLASS_BY_PREFIX[prefix]
@ -386,7 +390,7 @@ def parse_inclexcl_command(cmd_line_str, fallback=ShellPattern):
raise argparse.ArgumentTypeError("Invalid pattern style: {}".format(remainder_str)) raise argparse.ArgumentTypeError("Invalid pattern style: {}".format(remainder_str))
else: else:
# determine recurse_dir based on command type # determine recurse_dir based on command type
recurse_dir = cmd not in [IECommand.ExcludeNoRecurse] recurse_dir = command_recurses_dir(cmd)
val = parse_pattern(remainder_str, fallback, recurse_dir) val = parse_pattern(remainder_str, fallback, recurse_dir)
return CmdTuple(val, cmd) return CmdTuple(val, cmd)