summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnas Nashif <anas.nashif@intel.com>2013-02-06 13:11:08 -0800
committerAnas Nashif <anas.nashif@intel.com>2013-02-06 13:11:08 -0800
commitfdd756f4a19a1af7980c03923a1e967eade2f95a (patch)
treeff0208cb707c959be8f69ef8ab7f781d480a3a35
parent4029ccb8964761667435b56b57ed140d54ec6936 (diff)
downloadrpmlint-fdd756f4a19a1af7980c03923a1e967eade2f95a.tar.gz
rpmlint-fdd756f4a19a1af7980c03923a1e967eade2f95a.tar.bz2
rpmlint-fdd756f4a19a1af7980c03923a1e967eade2f95a.zip
suse-filter-exception.diff
===================================================================
-rw-r--r--Config.py63
1 files changed, 56 insertions, 7 deletions
diff --git a/Config.py b/Config.py
index a2fd4a0..ada06f8 100644
--- a/Config.py
+++ b/Config.py
@@ -103,11 +103,23 @@ def getOption(name, default = ""):
_filters = []
_filters_re = None
+_filters_non_except = []
+_filters_non_except_re = None
+
+_filters_except = []
+_filters_except_re = None
+
def addFilter(s):
global _filters_re
+ global _filters_except
+
+ if len(_filters_except):
+ _filters.append(s)
+ _filters_re = None
+ else:
+ _filters_non_except.append(s)
+ _filters_non_except_re = None
- _filters.append(s)
- _filters_re = None
def removeFilter(s):
global _filters_re
@@ -122,19 +134,38 @@ def removeFilter(s):
_scoring = {}
def setBadness(s, score):
+ global _scoring
_scoring[s] = score
+def setFilterException(s):
+ global _filters_except
+
+ _filters_except.append(s)
+
def badness(s):
return _scoring.get(s, 0)
_non_named_group_re = re.compile('[^\\](\()[^:]')
def isFiltered(s):
global _filters_re
+ global _filters_except
+ global _filters_except_re
+ global _filters_non_except
+ global _filters_non_except_re
- if _filters_re == None:
- # no filter
- if len(_filters) == 0:
- return False
+ if _filters_non_except_re == None and len(_filters_non_except):
+ _filters_non_except_re = '(?:' + _filters_non_except[0] + ')'
+
+ for idx in range(1, len(_filters_non_except)):
+ # to prevent named group overflow that happen when there is too
+ # many () in a single regexp: AssertionError: sorry, but this
+ # version only supports 100 named groups
+ if '(' in _filters_non_except[idx]:
+ _non_named_group_re.subn('(:?', _filters_non_except[idx])
+ _filters_non_except_re = _filters_non_except_re + '|(?:' + _filters_non_except[idx] +')'
+ _filters_non_except_re = re.compile(_filters_non_except_re)
+
+ if _filters_re == None and len(_filters):
_filters_re = '(?:' + _filters[0] + ')'
for idx in range(1, len(_filters)):
@@ -146,9 +177,27 @@ def isFiltered(s):
_filters_re = _filters_re + '|(?:' + _filters[idx] +')'
_filters_re = re.compile(_filters_re)
+ if _filters_except_re == None and len(_filters_except):
+ _filters_except_re = '(?:' + _filters_except[0] + ')'
+
+ for idx in range(1, len(_filters_except)):
+ # to prevent named group overflow that happen when there is too
+ # many () in a single regexp: AssertionError: sorry, but this
+ # version only supports 100 named groups
+ if '(' in _filters_except[idx]:
+ _non_named_group_re.subn('(:?', _filters_except[idx])
+ _filters_except_re = _filters_except_re + '|(?:' + _filters_except[idx] +')'
+ _filters_except_re = re.compile(_filters_except_re)
+
if not no_exception:
- if _filters_re.search(s):
+
+ if _filters_non_except_re and _filters_non_except_re.search(s):
return True
+ if _filters_except_re and _filters_except_re.search(s):
+ return False
+ if _filters_re and _filters_re.search(s):
+ return True
+
return False
# Config.py ends here