1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
#!/usr/bin/python
# Author: Brian Murray <brian@canonical.com>
# Copyright (C) 2011 Canonical, Ltd.
# License: GPLv3
#
# this is a bzr plugin that belongs in ~/.bazaar/plugins and will
# modify the bug, modify tags and unsubsribe bugcontrol,
# for which a bugpattern was written
#
# it requires the package python-launchpadlib-toolkit be installed
import os
import re
from bzrlib import branch
from lpltk import LaunchpadService
from subprocess import Popen, PIPE
def post_push_hook(push_result):
lp = LaunchpadService(config={})
bugcontrol = lp.launchpad.people['ubuntu-bugcontrol']
bug_numbers = []
# assumes you are in the branch directory
wb = branch.Branch.open(os.getcwd())
if wb.get_parent() != 'bzr+ssh://bazaar.launchpad.net/~ubuntu-bugcontrol/apport/ubuntu-bugpatterns/':
return
delta = wb.get_revision_delta(wb.revno())
if 'bugpatterns.xml' not in delta.get_changes_as_text():
return
# can't figure out how to get the contents of the diff
diff = Popen(["bzr", "log", "-r-1", "-p"], stdout=PIPE).communicate()[0]
for line in diff.split('\n'):
if not line.startswith('+'):
continue
if 'pattern url' in line and 'launchpad.net/bugs' in line:
bug_number = re.search('(\d+)', line).group(1)
bug_numbers.append(bug_number)
for bug_number in bug_numbers:
bug = lp.get_bug(bug_number)
if bug.private:
print 'LP: #%s is private and should be made public' % bug_number
if not 'bugpattern-needed' in bug.tags:
print 'Not modifying LP: #%s as it needs no pattern' % bug_number
continue
bug.tags.remove('bugpattern-needed')
bug.tags.append('bugpattern-written')
bug.lpbug.unsubscribe(person=bugcontrol)
print 'LP: #%s modified by bug pattern written bzr hook' % bug_number
branch.Branch.hooks.install_named_hook('post_push', post_push_hook,
'Bug pattern written hook')
|