implement counters for Include/ExcludePatterns

This commit is contained in:
Thomas Waldmann 2015-09-19 17:48:41 +02:00
parent aed6cc9446
commit 08417b52ec
1 changed files with 13 additions and 2 deletions

View File

@ -242,6 +242,7 @@ def normalized(func):
# always have to enter an exact match
return func
class IncludePattern:
"""Literal files or directories listed on the command line
for some operations (e.g. extract, but not create).
@ -249,6 +250,8 @@ class IncludePattern:
path match as well. A trailing slash makes no difference.
"""
def __init__(self, pattern):
self.match_count = 0
if sys.platform in ('darwin',):
pattern = unicodedata.normalize("NFD", pattern)
@ -256,7 +259,10 @@ class IncludePattern:
@normalized
def match(self, path):
return (path+os.path.sep).startswith(self.pattern)
matches = (path+os.path.sep).startswith(self.pattern)
if matches:
self.match_count += 1
return matches
def __repr__(self):
return '%s(%s)' % (type(self), self.pattern)
@ -267,6 +273,8 @@ class ExcludePattern(IncludePattern):
exclude the contents of a directory, but not the directory itself.
"""
def __init__(self, pattern):
self.match_count = 0
if pattern.endswith(os.path.sep):
self.pattern = os.path.normpath(pattern).rstrip(os.path.sep)+os.path.sep+'*'+os.path.sep
else:
@ -281,7 +289,10 @@ class ExcludePattern(IncludePattern):
@normalized
def match(self, path):
return self.regex.match(path+os.path.sep) is not None
matches = self.regex.match(path+os.path.sep) is not None
if matches:
self.match_count += 1
return matches
def __repr__(self):
return '%s(%s)' % (type(self), self.pattern)