mirror of https://github.com/borgbackup/borg.git
Revert "Merge pull request #2401 from ThomasWaldmann/patterns-style-default-1.0"
This reverts commit7a4e9e7a6f
, reversing changes made tob007808706
.
This commit is contained in:
parent
967a40dcdb
commit
173ecfddb4
|
@ -1025,7 +1025,7 @@ class Archiver:
|
|||
|
||||
Note that the default pattern style for `--pattern` and `--patterns-from` is
|
||||
shell style (`sh:`), so those patterns behave similar to rsync include/exclude
|
||||
patterns. The pattern style can be set via the `P` prefix.
|
||||
patterns.
|
||||
|
||||
Patterns (`--pattern`) and excludes (`--exclude`) from the command line are
|
||||
considered first (in the order of appearance). Then patterns from `--patterns-from`
|
||||
|
@ -1033,8 +1033,6 @@ class Archiver:
|
|||
|
||||
An example `--patterns-from` file could look like that::
|
||||
|
||||
# "sh:" pattern style is the default, so the following line is not needed:
|
||||
P sh
|
||||
R /
|
||||
# can be rebuild
|
||||
- /home/*/.cache
|
||||
|
|
|
@ -346,23 +346,18 @@ def parse_timestamp(timestamp):
|
|||
return datetime.strptime(timestamp, '%Y-%m-%dT%H:%M:%S').replace(tzinfo=timezone.utc)
|
||||
|
||||
|
||||
def parse_add_pattern(patternstr, roots, patterns, fallback):
|
||||
def parse_add_pattern(patternstr, roots, patterns):
|
||||
"""Parse a pattern string and add it to roots or patterns depending on the pattern type."""
|
||||
pattern = parse_inclexcl_pattern(patternstr, fallback=fallback)
|
||||
pattern = parse_inclexcl_pattern(patternstr)
|
||||
if pattern.ptype is RootPath:
|
||||
roots.append(pattern.pattern)
|
||||
elif pattern.ptype is PatternStyle:
|
||||
fallback = pattern.pattern
|
||||
else:
|
||||
patterns.append(pattern)
|
||||
return fallback
|
||||
|
||||
|
||||
def load_pattern_file(fileobj, roots, patterns, fallback=None):
|
||||
if fallback is None:
|
||||
fallback = ShellPattern # ShellPattern is defined later in this module
|
||||
def load_pattern_file(fileobj, roots, patterns):
|
||||
for patternstr in clean_lines(fileobj):
|
||||
fallback = parse_add_pattern(patternstr, roots, patterns, fallback)
|
||||
parse_add_pattern(patternstr, roots, patterns)
|
||||
|
||||
|
||||
def load_exclude_file(fileobj, patterns):
|
||||
|
@ -375,7 +370,7 @@ class ArgparsePatternAction(argparse.Action):
|
|||
super().__init__(nargs=nargs, **kw)
|
||||
|
||||
def __call__(self, parser, args, values, option_string=None):
|
||||
parse_add_pattern(values[0], args.paths, args.patterns, ShellPattern)
|
||||
parse_add_pattern(values[0], args.paths, args.patterns)
|
||||
|
||||
|
||||
class ArgparsePatternFileAction(argparse.Action):
|
||||
|
@ -571,14 +566,6 @@ _PATTERN_STYLE_BY_PREFIX = dict((i.PREFIX, i) for i in _PATTERN_STYLES)
|
|||
|
||||
InclExclPattern = namedtuple('InclExclPattern', 'pattern ptype')
|
||||
RootPath = object()
|
||||
PatternStyle = object()
|
||||
|
||||
|
||||
def get_pattern_style(prefix):
|
||||
try:
|
||||
return _PATTERN_STYLE_BY_PREFIX[prefix]
|
||||
except KeyError:
|
||||
raise ValueError("Unknown pattern style: {}".format(prefix)) from None
|
||||
|
||||
|
||||
def parse_pattern(pattern, fallback=FnmatchPattern):
|
||||
|
@ -586,9 +573,14 @@ def parse_pattern(pattern, fallback=FnmatchPattern):
|
|||
"""
|
||||
if len(pattern) > 2 and pattern[2] == ":" and pattern[:2].isalnum():
|
||||
(style, pattern) = (pattern[:2], pattern[3:])
|
||||
cls = get_pattern_style(style)
|
||||
|
||||
cls = _PATTERN_STYLE_BY_PREFIX.get(style, None)
|
||||
|
||||
if cls is None:
|
||||
raise ValueError("Unknown pattern style: {}".format(style))
|
||||
else:
|
||||
cls = fallback
|
||||
|
||||
return cls(pattern)
|
||||
|
||||
|
||||
|
@ -606,8 +598,6 @@ def parse_inclexcl_pattern(pattern, fallback=ShellPattern):
|
|||
'+': True,
|
||||
'R': RootPath,
|
||||
'r': RootPath,
|
||||
'P': PatternStyle,
|
||||
'p': PatternStyle,
|
||||
}
|
||||
try:
|
||||
ptype = type_prefix_map[pattern[0]]
|
||||
|
@ -618,11 +608,6 @@ def parse_inclexcl_pattern(pattern, fallback=ShellPattern):
|
|||
raise argparse.ArgumentTypeError("Unable to parse pattern: {}".format(pattern))
|
||||
if ptype is RootPath:
|
||||
pobj = pattern
|
||||
elif ptype is PatternStyle:
|
||||
try:
|
||||
pobj = get_pattern_style(pattern)
|
||||
except ValueError:
|
||||
raise argparse.ArgumentTypeError("Unable to parse pattern: {}".format(pattern))
|
||||
else:
|
||||
pobj = parse_pattern(pattern, fallback)
|
||||
return InclExclPattern(pobj, ptype)
|
||||
|
|
|
@ -494,32 +494,6 @@ def test_load_patterns_from_file(tmpdir, lines, expected_roots, expected_numpatt
|
|||
assert numpatterns == expected_numpatterns
|
||||
|
||||
|
||||
def test_switch_patterns_style():
|
||||
patterns = """\
|
||||
+0_initial_default_is_shell
|
||||
p fm
|
||||
+1_fnmatch
|
||||
P re
|
||||
+2_regex
|
||||
+3_more_regex
|
||||
P pp
|
||||
+4_pathprefix
|
||||
p fm
|
||||
p sh
|
||||
+5_shell
|
||||
"""
|
||||
pattern_file = StringIO(patterns)
|
||||
roots, patterns = [], []
|
||||
load_pattern_file(pattern_file, roots, patterns)
|
||||
assert len(patterns) == 6
|
||||
assert isinstance(patterns[0].pattern, ShellPattern)
|
||||
assert isinstance(patterns[1].pattern, FnmatchPattern)
|
||||
assert isinstance(patterns[2].pattern, RegexPattern)
|
||||
assert isinstance(patterns[3].pattern, RegexPattern)
|
||||
assert isinstance(patterns[4].pattern, PathPrefixPattern)
|
||||
assert isinstance(patterns[5].pattern, ShellPattern)
|
||||
|
||||
|
||||
@pytest.mark.parametrize("lines", [
|
||||
(["X /data"]), # illegal pattern type prefix
|
||||
(["/data"]), # need a pattern type prefix
|
||||
|
|
Loading…
Reference in New Issue