]> piware.de Git - bin.git/blobdiff - newscommit
add newscommit
[bin.git] / newscommit
diff --git a/newscommit b/newscommit
new file mode 100755 (executable)
index 0000000..b1d8b51
--- /dev/null
@@ -0,0 +1,46 @@
+#!/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]
+
+sys.exit(subprocess.call(argv))
+