diff options
author | Ben Hutchings <ben@decadent.org.uk> | 2019-03-28 00:24:35 +0000 |
---|---|---|
committer | Ben Hutchings <ben@decadent.org.uk> | 2019-03-28 01:49:25 +0000 |
commit | 1615dab8112a0843cade958c6165e5530634ad81 (patch) | |
tree | f09b9043a3eda541c4916f872293b0e1df6160b9 /scripts/filter-active.py | |
parent | 3199b6545c57d2f98539343780fbabaf4b9ac233 (diff) |
Move issue parsing into a module
Diffstat (limited to 'scripts/filter-active.py')
-rwxr-xr-x | scripts/filter-active.py | 76 |
1 files changed, 3 insertions, 73 deletions
diff --git a/scripts/filter-active.py b/scripts/filter-active.py index afe583af..0de1dbbc 100755 --- a/scripts/filter-active.py +++ b/scripts/filter-active.py @@ -2,79 +2,9 @@ import os, re, sys, curses from optparse import OptionParser -from debian import deb822 - -class issue(deb822.Deb822): - nonReleaseFields = ['Candidate', - 'References', - 'Description', - 'Notes', - 'Bugs'] - reservedPrefixes = ['Ubuntu-'] - - def __init__(self, path): - self.file = open(path, 'r') - self.d = deb822.Deb822(self.file) - self.name = os.path.basename(path) - - def status(self, release): - if release in self.d: - return self.d[release] - else: - return "" - - def fieldIsRelease(self, field): - if field in self.nonReleaseFields: - return False - for p in self.reservedPrefixes: - if field[:len(p)] == p: - return False - return True - - def get_releases(self): - releases = set() - for field in self.d.keys(): - if self.fieldIsRelease(field): - releases.add(field) - return releases - -ignorePatterns = [re.compile('.*~$'), - re.compile('^#.*'), - re.compile('^00.*')] - -def ignore_issue_name(issue): - for p in ignorePatterns: - if p.match(issue): - return True - return False - -# Pad last part of CVE ID to 8 digits so string comparison keeps working -def pad_cve_id(cve_id): - return re.sub(r'-(\d+)$', lambda m: '-%08d' % int(m.group(1)), cve_id) - -def get_issues(dir): - issues = [] - L = [f for f in os.listdir(dir) - if not os.path.isdir(os.path.join(dir, f)) - and not ignore_issue_name(f)] - L.sort(key=pad_cve_id) - - return [ issue(os.path.join(dir, f)) for f in L ] - -def parse_status(s): - ws = '\s*' - versions = '(?P<versions>\((\S*,\s*)*\S*\s*\))' - changerefs = '(?P<changerefs>\[(\S*,\s*)*\S*\s*\])' - state = '(?P<state>\S*)' - - statusre = re.compile(ws + state + ws + - '(' + versions + '?)' + - '(' + changerefs + '?)') - m = statusre.match(s) - if not m: - raise SyntaxError - else: - return m + +from issue import get_issues, parse_status + def filter_out_states(issues, inc_releases, exc_releases, states, notstates): filteredissues = [] |