mirror of git://gcc.gnu.org/git/gcc.git
				
				
				
			
		
			
				
	
	
		
			113 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			113 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
| #!/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)
 |