summaryrefslogtreecommitdiffstats
path: root/src/Backtrace/abrt-bz-downloader
blob: 4bc27c24fbd7823b35ba2050d4e09f9a19b23c6f (plain)
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()