]> git.ipfire.org Git - thirdparty/gcc.git/blame - contrib/mark_spam.py
PR c++/87554 - ICE with extern template and reference member.
[thirdparty/gcc.git] / contrib / mark_spam.py
CommitLineData
ecaa3db2 1#!/usr/bin/env python3
2#
3# Script to mark bunch of PRs as spam
4#
5# This file is part of GCC.
6#
7# GCC is free software; you can redistribute it and/or modify it under
8# the terms of the GNU General Public License as published by the Free
9# Software Foundation; either version 3, or (at your option) any later
10# version.
11#
12# GCC is distributed in the hope that it will be useful, but WITHOUT ANY
13# WARRANTY; without even the implied warranty of MERCHANTABILITY or
14# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
15# for more details.
16#
17# You should have received a copy of the GNU General Public License
18# along with GCC; see the file COPYING3. If not see
19# <http://www.gnu.org/licenses/>. */
20#
21#
22#
23
24import requests
25import json
26import argparse
27
28base_url = 'https://gcc.gnu.org/bugzilla/rest.cgi/'
29
30def mark_as_spam(id, api_key, verbose):
31 print('Marking as spam: PR%d' % id)
32 # 1) get bug info to find 'cc'
33 u = base_url + 'bug/' + str(id)
34 r = requests.get(u)
35 response = json.loads(r.text)
36
57907655 37 if 'error' in response and response['error']:
38 print(response['message'])
39 return
40
ecaa3db2 41 # 2) mark the bug as spam
f0508ea5 42 bug = response['bugs'][0]
43 creator = bug['creator']
44 cc_list = bug['cc']
ecaa3db2 45 data = {
46 'status': 'RESOLVED',
47 'resolution': 'INVALID',
48 'summary': 'spam',
49 'ids': [id],
50 'api_key': api_key,
51 'comment': { 'comment': 'spam'},
52 'product': 'gcc',
53 'component': 'spam',
54 'version': 'unknown',
55 'cc': {'remove': cc_list},
56 'priority': 'P5',
57 'severity': 'trivial',
57907655 58 'url': '',
ecaa3db2 59 'assigned_to': 'unassigned@gcc.gnu.org' }
60
61 r = requests.put(u, json = data)
62 if verbose:
63 print(r)
64 print(r.text)
65
66 # 3) mark the first comment as spam
67 r = requests.get(u + '/comment')
68 response = json.loads(r.text)
f0508ea5 69 for c in response['bugs'][str(id)]['comments']:
70 if c['creator'] == creator:
71 comment_id = c['id']
72 u2 = '%sbug/comment/%d/tags' % (base_url, comment_id)
73 print(u2)
74 r = requests.put(u2, json = {'comment_id': comment_id, 'add': ['spam'], 'api_key': api_key})
75 if verbose:
76 print(r)
77 print(r.text)
ecaa3db2 78
f0f80cfa 79 # 4) mark all attachments as spam
80 r = requests.get(u + '/attachment')
81 response = json.loads(r.text)
82 attachments = response['bugs'][str(id)]
83 for a in attachments:
84 attachment_id = a['id']
85 url = '%sbug/attachment/%d' % (base_url, attachment_id)
57907655 86 r = requests.put(url, json = {'ids': [attachment_id],
87 'summary': 'spam',
88 'file_name': 'spam',
89 'content_type': 'application/x-spam',
90 'is_obsolete': True,
91 'api_key': api_key})
f0f80cfa 92 if verbose:
93 print(r)
94 print(r.text)
95
ecaa3db2 96parser = argparse.ArgumentParser(description='Mark Bugzilla issues as spam.')
97parser.add_argument('api_key', help = 'API key')
98parser.add_argument('range', help = 'Range of IDs, e.g. 10-23,24,25,27')
99parser.add_argument('--verbose', action = 'store_true', help = 'Verbose logging')
100
101args = parser.parse_args()
102
103chunks = args.range.split(',')
104for c in chunks:
105 parts = list(map(lambda x: int(x), c.split('-')))
106 if len(parts) == 1:
107 r = [parts[0]]
108 else:
109 r = range(parts[0], parts[1] + 1)
110
111 for id in r:
112 mark_as_spam(id, args.api_key, args.verbose)