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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
|
#!/usr/bin/python
# -*- mode:python -*-
from bugzilla import RHBugzilla
from optparse import OptionParser
import sys
import os.path
parser = OptionParser(version="%prog 1.0")
parser.add_option("-u", "--user", dest="user",
help="Bugzilla user name (REQUIRED)", metavar="USERNAME")
parser.add_option("-p", "--password", dest="password",
help="Bugzilla password (REQUIRED)", metavar="PASSWORD")
parser.add_option("-b", "--bugzilla", dest="bugzilla",
help="Bugzilla URL (defaults to Red Hat Bugzilla)", metavar="URL")
parser.add_option("-f", "--fields",
action="store_true", dest="fields", default=False,
help="Print possible bug fields and exit.")
(options, args) = parser.parse_args()
if not options.user or len(options.user) == 0:
parser.error("User name is required.\nTry {0} --help".format(sys.argv[0]))
if not options.password or len(options.password) == 0:
parser.error("Password is required.\nTry {0} --help".format(sys.argv[0]))
if not options.bugzilla or len(options.bugzilla) == 0:
options.bugzilla = "https://bugzilla.redhat.com/xmlrpc.cgi"
bz = RHBugzilla()
bz.connect(options.bugzilla)
bz.login(options.user, options.password)
if options.fields:
print bz.bugfields
exit(0)
buginfos = bz.query({'status_whiteboard_type':'allwordssubstr','status_whiteboard':'abrt_hash'})
print "{0} bugs found.".format(len(buginfos))
for buginfo in buginfos:
# Skip bugs with already downloaded backtraces.
filename = "{0}.bt".format(buginfo.bug_id)
if os.path.isfile(filename):
print "Skipping {0} (already exists).".format(filename)
continue
# Skip bugs with broken or Python backtraces
broken_backtrace_bugs = [ 517116, 518511, 518516, 518708, 518923,
518923, 518981, 519134, 519367, 520287,
521582, 521923, 521953, 522047, 522048,
522973, 523194, 523198, 523226, 523230,
523272, 523274, 523295, 523301, 523328,
523676, 523685, 523686, 523687, 523688,
523866, 523994, 524128, 524294, 524322,
524341, 524700, 524715, 525094, 525674 ]
if buginfo.bug_id in broken_backtrace_bugs:
continue
# Get backtrace from bug and store it as a file.
bug = bz.getbug(buginfo.bug_id)
for attachment in bug.attachments:
if attachment['filename'] == 'backtrace':
data = bz.openattachment(attachment['id'])
f = open(filename, 'w')
f.write(data.read())
f.close()
print "Attachment {0} downloaded.".format(filename)
bz.logout()
|