summaryrefslogtreecommitdiffstats
path: root/scripts
diff options
context:
space:
mode:
authorBen Hutchings <ben@decadent.org.uk>2019-03-28 00:24:35 +0000
committerBen Hutchings <ben@decadent.org.uk>2019-03-28 01:49:25 +0000
commit1615dab8112a0843cade958c6165e5530634ad81 (patch)
treef09b9043a3eda541c4916f872293b0e1df6160b9 /scripts
parent3199b6545c57d2f98539343780fbabaf4b9ac233 (diff)
Move issue parsing into a module
Diffstat (limited to 'scripts')
-rw-r--r--scripts/.gitignore2
-rwxr-xr-xscripts/filter-active.py76
-rw-r--r--scripts/issue.py81
3 files changed, 86 insertions, 73 deletions
diff --git a/scripts/.gitignore b/scripts/.gitignore
new file mode 100644
index 00000000..a295864e
--- /dev/null
+++ b/scripts/.gitignore
@@ -0,0 +1,2 @@
+*.pyc
+__pycache__
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 = []
diff --git a/scripts/issue.py b/scripts/issue.py
new file mode 100644
index 00000000..6aee8912
--- /dev/null
+++ b/scripts/issue.py
@@ -0,0 +1,81 @@
+from debian import deb822
+import os.path
+import re
+
+
+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
+
+
+_ignore_patterns = [re.compile('.*~$'),
+ re.compile('^#.*'),
+ re.compile('^00.*')]
+
+
+def _ignore_issue_name(issue):
+ for p in _ignore_patterns:
+ 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

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