123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 |
- #!/usr/bin/env python3
- #
- # Script to mark bunch of PRs as spam
- #
- # This file is part of GCC.
- #
- # GCC is free software; you can redistribute it and/or modify it under
- # the terms of the GNU General Public License as published by the Free
- # Software Foundation; either version 3, or (at your option) any later
- # version.
- #
- # GCC is distributed in the hope that it will be useful, but WITHOUT ANY
- # WARRANTY; without even the implied warranty of MERCHANTABILITY or
- # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- # for more details.
- #
- # You should have received a copy of the GNU General Public License
- # along with GCC; see the file COPYING3. If not see
- # <http://www.gnu.org/licenses/>. */
- #
- #
- #
- import requests
- import json
- import argparse
- base_url = 'https://gcc.gnu.org/bugzilla/rest.cgi/'
- def mark_as_spam(id, api_key, verbose):
- print('Marking as spam: PR%d' % id)
- # 1) get bug info to find 'cc'
- u = base_url + 'bug/' + str(id)
- r = requests.get(u)
- response = json.loads(r.text)
- if 'error' in response and response['error']:
- print(response['message'])
- return
- # 2) mark the bug as spam
- bug = response['bugs'][0]
- creator = bug['creator']
- cc_list = bug['cc']
- data = {
- 'status': 'RESOLVED',
- 'resolution': 'INVALID',
- 'summary': 'spam',
- 'ids': [id],
- 'api_key': api_key,
- 'comment': { 'comment': 'spam'},
- 'product': 'gcc',
- 'component': 'spam',
- 'version': 'unknown',
- 'cc': {'remove': cc_list},
- 'priority': 'P5',
- 'severity': 'trivial',
- 'url': '',
- 'assigned_to': 'unassigned@gcc.gnu.org' }
- r = requests.put(u, json = data)
- if verbose:
- print(r)
- print(r.text)
- # 3) mark the first comment as spam
- r = requests.get(u + '/comment')
- response = json.loads(r.text)
- for c in response['bugs'][str(id)]['comments']:
- if c['creator'] == creator:
- comment_id = c['id']
- u2 = '%sbug/comment/%d/tags' % (base_url, comment_id)
- print(u2)
- r = requests.put(u2, json = {'comment_id': comment_id, 'add': ['spam'], 'api_key': api_key})
- if verbose:
- print(r)
- print(r.text)
- # 4) mark all attachments as spam
- r = requests.get(u + '/attachment')
- response = json.loads(r.text)
- attachments = response['bugs'][str(id)]
- for a in attachments:
- attachment_id = a['id']
- url = '%sbug/attachment/%d' % (base_url, attachment_id)
- r = requests.put(url, json = {'ids': [attachment_id],
- 'summary': 'spam',
- 'file_name': 'spam',
- 'content_type': 'application/x-spam',
- 'is_obsolete': True,
- 'api_key': api_key})
- if verbose:
- print(r)
- print(r.text)
- parser = argparse.ArgumentParser(description='Mark Bugzilla issues as spam.')
- parser.add_argument('api_key', help = 'API key')
- parser.add_argument('range', help = 'Range of IDs, e.g. 10-23,24,25,27')
- parser.add_argument('--verbose', action = 'store_true', help = 'Verbose logging')
- args = parser.parse_args()
- chunks = args.range.split(',')
- for c in chunks:
- parts = list(map(lambda x: int(x), c.split('-')))
- if len(parts) == 1:
- r = [parts[0]]
- else:
- r = range(parts[0], parts[1] + 1)
- for id in r:
- mark_as_spam(id, args.api_key, args.verbose)
|