#!/usr/bin/python import subprocess, re, sys lpbugs_re = re.compile(r'lp: #([0-9, ]+)', re.I) bzr = subprocess.Popen(['bzr', 'diff', 'NEWS'], stdout=subprocess.PIPE) raw_msg = bzr.communicate()[0].strip() if bzr.returncode != 1: print >> sys.stderr, 'bzr diff NEWS failed' sys.exit(1) # parse/format message msg = '' for l in raw_msg.splitlines(): if not l.startswith('+ '): continue if msg: msg += ' ' msg += l[2:].strip() if msg.startswith('-'): msg = msg[1:].strip() print '-- commit message: --' print msg print '---' if not msg: print >> sys.stderr, 'No message in NEWS, aborting' sys.exit(1) # parse Launchpad bugs lpbugs = [] for b_grp in lpbugs_re.finditer(msg): for b in b_grp.group(1).split(','): lpbugs.append(b.strip()) print 'Fixed LP bugs:', ' '.join(lpbugs) # commit argv = ['bzr', 'commit', '-m', msg] for b in lpbugs: argv += ['--fixes', 'lp:' + b] argv += sys.argv[1:] sys.exit(subprocess.call(argv))