annotate maintainer-scripts/bugzilla-close-candidate.py @ 158:494b0b89df80 default tip

...
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 25 May 2020 18:13:55 +0900
parents 1830386684a0
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
145
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
1 #!/usr/bin/env python3
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
2
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
3 # The script is used for finding PRs that have a SVN revision that
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
4 # mentiones the PR and are not closed. It's done by iterating all
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
5 # comments of a PR and finding SVN commit entries.
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
6
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
7 """
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
8 Sample output of the script:
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
9 Bugzilla URL page size: 50
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
10 HINT: bugs with following comment are ignored: Can the bug be marked as resolved?
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
11
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
12 Bug URL SVN commits known-to-fail known-to-work Bug summary
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
13 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88129 trunk Two blockage insns are emited in the function epilogue
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
14 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88122 trunk [9 Regression] g++ ICE: internal compiler error: Segmentation fault
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
15 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88084 trunk basic_string_view::copy doesn't use Traits::copy
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
16 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88083 trunk ICE in find_constant_pool_ref_1, at config/s390/s390.c:8231
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
17 ...
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
18 Bugzilla lists:
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
19 https://gcc.gnu.org/bugzilla/buglist.cgi?bug_id=88129,88122,88084,88083,88074,88073,88071,88070,88051,88018,87985,87955,87926,87917,87913,87898,87895,87874,87871,87855,87853,87826,87824,87819,87818,87799,87793,87789,87788,87787,87754,87725,87674,87665,87649,87647,87645,87625,87611,87610,87598,87593,87582,87566,87556,87547,87544,87541,87537,87528
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
20 https://gcc.gnu.org/bugzilla/buglist.cgi?bug_id=87486
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
21 """
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
22
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
23 import argparse
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
24 import json
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
25
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
26 import requests
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
27
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
28 base_url = 'https://gcc.gnu.org/bugzilla/rest.cgi/'
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
29 statuses = ['UNCONFIRMED', 'ASSIGNED', 'SUSPENDED', 'NEW', 'WAITING', 'REOPENED']
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
30 regex = '(.*\[)([0-9\./]*)( [rR]egression])(.*)'
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
31 closure_question = 'Can the bug be marked as resolved?'
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
32 start_page = 20
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
33 url_page_size = 50
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
34
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
35 def get_branches_by_comments(comments):
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
36 versions = set()
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
37 for c in comments:
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
38 text = c['text']
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
39 if 'URL: https://gcc.gnu.org/viewcvs' in text:
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
40 version = 'trunk'
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
41 for l in text.split('\n'):
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
42 if 'branches/gcc-' in l:
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
43 parts = l.strip().split('/')
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
44 parts = parts[1].split('-')
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
45 assert len(parts) == 3
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
46 versions.add(parts[1])
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
47 versions.add(version)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
48 return versions
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
49
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
50 def get_bugs(api_key, query):
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
51 u = base_url + 'bug'
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
52 r = requests.get(u, params = query)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
53 return r.json()['bugs']
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
54
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
55 def search(api_key):
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
56 chunk = 1000
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
57 ids = []
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
58 print('%-53s%-30s%-40s%-40s%-60s' % ('Bug URL', 'SVN commits', 'known-to-fail', 'known-to-work', 'Bug summary'))
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
59 for i in range(start_page, 0, -1):
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
60 # print('offset: %d' % (i * chunk), flush = True)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
61 bugs = get_bugs(api_key, {'api_key': api_key, 'bug_status': statuses, 'limit': chunk, 'offset': i * chunk})
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
62 for b in sorted(bugs, key = lambda x: x['id'], reverse = True):
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
63 id = b['id']
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
64
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
65 fail = b['cf_known_to_fail']
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
66 work = b['cf_known_to_work']
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
67
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
68 u = base_url + 'bug/' + str(id) + '/comment'
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
69 r = requests.get(u, params = {'api_key': api_key} ).json()
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
70 keys = list(r['bugs'].keys())
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
71 assert len(keys) == 1
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
72 comments = r['bugs'][keys[0]]['comments']
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
73 for c in comments:
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
74 if closure_question in c['text']:
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
75 continue
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
76
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
77 branches = get_branches_by_comments(comments)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
78 if len(branches):
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
79 branches_str = ','.join(sorted(list(branches)))
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
80 print('%-53s%-30s%-40s%-40s%-60s' % ('https://gcc.gnu.org/bugzilla/show_bug.cgi?id=%d' % id, branches_str, fail, work, b['summary']))
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
81 ids.append(id)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
82
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
83 # print all URL lists
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
84 print('\nBugzilla lists:')
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
85 while len(ids) > 0:
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
86 print('https://gcc.gnu.org/bugzilla/buglist.cgi?bug_id=%s' % ','.join([str(x) for x in ids[:url_page_size]]))
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
87 ids = ids[url_page_size:]
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
88
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
89 print('Bugzilla URL page size: %d' % url_page_size)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
90 print('HINT: bugs with following comment are ignored: %s\n' % closure_question)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
91
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
92 parser = argparse.ArgumentParser(description='')
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
93 parser.add_argument('api_key', help = 'API key')
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
94
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
95 args = parser.parse_args()
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
96 search(args.api_key)