summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorFlorian Weimer <fw@deneb.enyo.de>2010-05-09 13:59:28 +0000
committerFlorian Weimer <fw@deneb.enyo.de>2010-05-09 13:59:28 +0000
commite65225b45da03ea23aa0d3d20ac72c12aba2e5d1 (patch)
tree40668c12eda8d6ab745770470e55eb07b6dc2818 /lib
parent3f2a5a1c5332d458b936f9009651ddb636600de3 (diff)
sectracker.parsers._annotationdispatcher: return annotation
No longer pass in the list to add to. git-svn-id: svn+ssh://svn.debian.org/svn/secure-testing@14653 e39458fd-73e7-0310-bf30-c45bca0a0e42
Diffstat (limited to 'lib')
-rw-r--r--lib/python/sectracker/parsers.py43
-rw-r--r--lib/python/sectracker_test/test_parsers.py9
2 files changed, 24 insertions, 28 deletions
diff --git a/lib/python/sectracker/parsers.py b/lib/python/sectracker/parsers.py
index 133cc8f9fd..7dff44f4e6 100644
--- a/lib/python/sectracker/parsers.py
+++ b/lib/python/sectracker/parsers.py
@@ -23,7 +23,7 @@ from sectracker.xcollections import namedtuple as _namedtuple
import sectracker.xpickle as _xpickle
import sectracker.diagnostics
-FORMAT = "3"
+FORMAT = "4"
def _sortedtuple(seq):
l = list(seq)
@@ -129,56 +129,55 @@ def _annotationdispatcher():
@_regexpcase.rule(r'(?:\[([a-z]+)\]\s)?-\s([A-Za-z0-9:.+-]+)\s*'
+ r'(?:\s([A-Za-z0-9:.+~-]+)\s*)?(?:\s\((.*)\))?')
- def package_version(groups, diag, anns):
+ def package_version(groups, diag):
release, package, version, inner = groups
inner = parseinner(diag, inner)
if version is None:
kind = "unfixed"
else:
kind = "fixed"
- anns.append(PackageAnnotation(
- *((diag.line(), "package", release, package, kind,
- version, None) + inner)))
+ return PackageAnnotation(
+ *((diag.line(), "package", release, package, kind,
+ version, None) + inner))
pseudo_freetext = "no-dsa not-affected end-of-life".split()
pseudo_struct = set("unfixed removed itp undetermined".split())
@_regexpcase.rule(r'(?:\[([a-z]+)\]\s)?-\s([A-Za-z0-9:.+-]+)'
+ r'\s+<([a-z-]+)>\s*(?:\s\((.*)\))?')
- def package_pseudo(groups, diag, anns):
+ def package_pseudo(groups, diag):
release, package, version, inner = groups
if version in pseudo_freetext:
- anns.append(PackageAnnotation(
- diag.line(), "package", release, package, version,
- None, inner, None, (), False))
+ return PackageAnnotation(
+ diag.line(), "package", release, package, version,
+ None, inner, None, (), False)
elif version in pseudo_struct:
inner = parseinner(diag, inner)
if version == "itp" and not inner[1]:
diag.error("<itp> needs Debian bug reference")
- anns.append(PackageAnnotation(
- *((diag.line(), "package", release, package, version,
- None, None) + inner)))
+ return PackageAnnotation(
+ *((diag.line(), "package", release, package, version,
+ None, None) + inner))
else:
diag.error("invalid pseudo-version: " + repr(version))
+ return None
@_regexpcase.rule(r'\{(.*)\}')
- def xref(groups, diag, anns):
+ def xref(groups, diag):
x = _sortedtuple(groups[0].strip().split())
if x:
- anns.append(XrefAnnotation(diag.line(), "xref", x))
+ return XrefAnnotation(diag.line(), "xref", x)
else:
diag.error("empty cross-reference")
+ return None
return _regexpcase.RegexpCase(
((r'(RESERVED|REJECTED)',
- lambda groups, diag, anns:
- anns.append(FlagAnnotation(diag.line(), groups[0]))),
+ lambda groups, diag: FlagAnnotation(diag.line(), groups[0])),
(r'(NOT-FOR-US|NOTE|TODO):\s+(\S.*)',
- lambda groups, diag, anns:
- anns.append(StringAnnotation(diag.line(), *groups))),
+ lambda groups, diag: StringAnnotation(diag.line(), *groups)),
package_version, package_pseudo, xref),
prefix=r"\s+", suffix=r"\s*",
- default=lambda text, diag, anns:
- diag.error("invalid annotation"))
+ default=lambda text, diag: diag.error("invalid annotation"))
_annotationdispatcher = _annotationdispatcher()
List = _namedtuple("List", "list messages")
@@ -201,7 +200,9 @@ def _parselist(path, f, parseheader, finish):
if header is None:
diag.error("header expected")
continue
- _annotationdispatcher(line, diag, anns)
+ ann = _annotationdispatcher(line, diag)
+ if ann is not None:
+ anns.append(ann)
else:
if header is not None:
bugs.append(finish(header, headerlineno, anns, diag))
diff --git a/lib/python/sectracker_test/test_parsers.py b/lib/python/sectracker_test/test_parsers.py
index 10bf0f1e59..20a5f29712 100644
--- a/lib/python/sectracker_test/test_parsers.py
+++ b/lib/python/sectracker_test/test_parsers.py
@@ -114,14 +114,9 @@ for (line, res, xmsgs) in [
(Message("CVE", 17, "error",
"invalid pseudo-version: 'garbled'"),)),
]:
- anns = []
diag = sectracker.diagnostics.Diagnostics()
diag.setlocation("CVE", 17)
- p._annotationdispatcher(line, diag, anns)
+ r = p._annotationdispatcher(line, diag)
msgs = diag.messages()
assert tuple(msgs) == xmsgs, repr(msgs)
- if anns:
- r = anns[0]
- else:
- r = None
- assert r == res, repr(anns)
+ assert r == res, repr(r)

© 2014-2024 Faster IT GmbH | imprint | privacy policy