mirror of https://github.com/borgbackup/borg.git
Use constants for pattern style prefixes
The prefix used for pattern styles should be kept together with the respective style implementation.
This commit is contained in:
parent
190107ada7
commit
1fa4d2e516
|
@ -316,6 +316,8 @@ def normalized(func):
|
|||
class PatternBase:
|
||||
"""Shared logic for inclusion/exclusion patterns.
|
||||
"""
|
||||
PREFIX = NotImplemented
|
||||
|
||||
def __init__(self, pattern):
|
||||
self.pattern_orig = pattern
|
||||
self.match_count = 0
|
||||
|
@ -360,6 +362,8 @@ class PathPrefixPattern(PatternBase):
|
|||
If a directory is specified, all paths that start with that
|
||||
path match as well. A trailing slash makes no difference.
|
||||
"""
|
||||
PREFIX = "pp"
|
||||
|
||||
def _prepare(self, pattern):
|
||||
self.pattern = os.path.normpath(pattern).rstrip(os.path.sep) + os.path.sep
|
||||
|
||||
|
@ -371,6 +375,8 @@ class FnmatchPattern(PatternBase):
|
|||
"""Shell glob patterns to exclude. A trailing slash means to
|
||||
exclude the contents of a directory, but not the directory itself.
|
||||
"""
|
||||
PREFIX = "fm"
|
||||
|
||||
def _prepare(self, pattern):
|
||||
if pattern.endswith(os.path.sep):
|
||||
pattern = os.path.normpath(pattern).rstrip(os.path.sep) + os.path.sep + '*' + os.path.sep
|
||||
|
@ -390,6 +396,8 @@ class FnmatchPattern(PatternBase):
|
|||
class RegexPattern(PatternBase):
|
||||
"""Regular expression to exclude.
|
||||
"""
|
||||
PREFIX = "re"
|
||||
|
||||
def _prepare(self, pattern):
|
||||
self.pattern = pattern
|
||||
self.regex = re.compile(pattern)
|
||||
|
@ -402,11 +410,12 @@ class RegexPattern(PatternBase):
|
|||
return (self.regex.search(path) is not None)
|
||||
|
||||
|
||||
_DEFAULT_PATTERN_STYLE = "fm"
|
||||
_PATTERN_STYLES = {
|
||||
"fm": FnmatchPattern,
|
||||
"re": RegexPattern,
|
||||
}
|
||||
_PATTERN_STYLES = set([
|
||||
FnmatchPattern,
|
||||
RegexPattern,
|
||||
])
|
||||
|
||||
_PATTERN_STYLE_BY_PREFIX = dict((i.PREFIX, i) for i in _PATTERN_STYLES)
|
||||
|
||||
|
||||
def parse_pattern(pattern):
|
||||
|
@ -415,9 +424,9 @@ def parse_pattern(pattern):
|
|||
if len(pattern) > 2 and pattern[2] == ":" and pattern[:2].isalnum():
|
||||
(style, pattern) = (pattern[:2], pattern[3:])
|
||||
else:
|
||||
style = _DEFAULT_PATTERN_STYLE
|
||||
style = FnmatchPattern.PREFIX
|
||||
|
||||
cls = _PATTERN_STYLES.get(style, None)
|
||||
cls = _PATTERN_STYLE_BY_PREFIX.get(style, None)
|
||||
|
||||
if cls is None:
|
||||
raise ValueError("Unknown pattern style: {}".format(style))
|
||||
|
|
Loading…
Reference in New Issue