entries = []
def add_entry(entry):
if entry and 'ignore' not in entry:
- if 'bugs' not in entry and 'cves' in entry:
- for cve in entry['cves']:
- if cve not in bugs:
- bugs.append(cve)
+ combo = []
+ for bug in entry.get('bugs', []):
+ combo.append(bug)
+ for cve in entry.get('cves', []):
+ combo.append(cve)
+ combo = sorted(combo)
+
+ if len(combo) == 0:
+ if entry.get('title', "").startswith('UBUNTU'):
+ combo = '__packaging__'
+ else:
+ combo = '__mainline__'
+ else:
+ if combo not in keys:
+ keys.append(combo)
+
+ entry['key'] = combo
entries.append(entry)
+
# Suck up the git log output and extract the information we need.
-bugs = []
+keys = []
entry = None
subject_wait = False
for line in sys.stdin:
bits = bits[1].split('/')
entry.setdefault('bugs', []).append(bits[-1])
- # Accumulate bug numbers.
- if bits[-1] not in bugs:
- bugs.append(bits[-1])
-
elif line.startswith(' CVE-'):
entry.setdefault('cves', []).append(line.strip())
del entry['author']
# Lump everything without a bug at the bottom.
-bugs.append('__packaging__')
-bugs.append('__mainline__')
+keys.append('__packaging__')
+keys.append('__mainline__')
emit_nl = False
-for bug in bugs:
- if bug == '__packaging__':
- title = 'Miscellaneous Ubuntu changes'
- elif bug == '__mainline__':
- title = 'Miscellaneous upstream changes'
- elif bug.startswith('CVE-'):
- title = bug
+for key in keys:
+ if key == '__packaging__':
+ title_set = [ 'Miscellaneous Ubuntu changes' ]
+ elif key == '__mainline__':
+ title_set = [ 'Miscellaneous upstream changes' ]
else:
- bug_info = None
-
- try:
- #urllib.request.urlcleanup()
- request = urllib.request.Request('https://api.launchpad.net/devel/bugs/' + bug)
- request.add_header('Cache-Control', 'max-age=0')
- with urllib.request.urlopen(request) as response:
- data = response.read()
- bug_info = json.loads(data.decode('utf-8'))
-
- title = bug_info['title']
- if 'description' in bug_info:
- for line in bug_info['description'].split('\n'):
- if line.startswith('Kernel-Description:'):
- title = line.split(' ', 1)[1]
-
- except urllib.error.HTTPError:
- title = 'INVALID or PRIVATE BUG'
-
- title += ' (LP###' + bug + ')'
+ title_set = []
+ for bug in key:
+ if bug.startswith('CVE-'):
+ title_set.append(bug)
+ else:
+ bug_info = None
+
+ try:
+ #urllib.request.urlcleanup()
+ request = urllib.request.Request('https://api.launchpad.net/devel/bugs/' + bug)
+ request.add_header('Cache-Control', 'max-age=0')
+ with urllib.request.urlopen(request) as response:
+ data = response.read()
+ bug_info = json.loads(data.decode('utf-8'))
+
+ title = bug_info['title']
+ if 'description' in bug_info:
+ for line in bug_info['description'].split('\n'):
+ if line.startswith('Kernel-Description:'):
+ title = line.split(' ', 1)[1]
+
+ except urllib.error.HTTPError:
+ title = 'INVALID or PRIVATE BUG'
+
+ title += ' (LP###' + bug + ')'
+ title_set.append(title)
+
emit_title = True
for entry in entries:
- if (bug == '__packaging__' and 'bugs' not in entry and 'cves' not in entry and 'author' in entry) or \
- (bug == '__mainline__' and 'bugs' not in entry and 'cves' not in entry and 'author' not in entry) or \
- ('bugs' in entry and bug in entry['bugs']) or \
- ('cves' in entry and bug in entry['cves']):
- if emit_title:
- if emit_nl:
- print('')
- emit_nl = True
-
- title_lines = textwrap.wrap(title, 76)
- print(' * ' + title_lines[0].replace('LP###', 'LP: #'))
- for line in title_lines[1:]:
- line = line.replace('LP###', 'LP: #')
- print(' ' + line)
-
- emit_title = False
- title_lines = textwrap.wrap(entry['subject'], 76)
- print(' - ' + title_lines[0])
+ if entry['key'] != key:
+ continue
+
+ if emit_title:
+ if emit_nl:
+ print('')
+ emit_nl = True
+
+ title_lines = textwrap.wrap('#// '.join(title_set), 76)
+ print(' * ' + title_lines[0].replace('LP###', 'LP: #').replace('#//', ' //'))
for line in title_lines[1:]:
- line = line.replace('LP###', 'LP: #')
- print(' ' + line)
+ line = line.replace('LP###', 'LP: #').replace('#//', ' //')
+ print(' ' + line)
+
+ emit_title = False
+ title_lines = textwrap.wrap(entry['subject'], 76)
+ print(' - ' + title_lines[0])
+ for line in title_lines[1:]:
+ line = line.replace('LP###', 'LP: #')
+ print(' ' + line)