openSUSE-release-tools/osclib/accept_command.py

74 lines
2.6 KiB
Python
Raw Normal View History

2014-02-28 11:45:06 +01:00
from osc.core import change_request_state
2014-05-20 12:26:29 +02:00
from osc.core import get_request
from osc.core import http_GET
2014-05-20 12:26:29 +02:00
from osclib.comments import CommentAPI
2014-02-28 11:45:06 +01:00
from xml.etree import cElementTree as ET
2014-02-19 11:48:16 +01:00
class AcceptCommand(object):
2014-02-19 11:48:16 +01:00
def __init__(self, api):
self.api = api
2014-05-20 12:26:29 +02:00
self.comment = CommentAPI(self.api.apiurl)
2014-02-19 11:48:16 +01:00
def find_new_requests(self, project):
requests = []
query = "match=state/@name='new'+and+(action/target/@project='{}'+and+action/@type='submit')".format(project)
url = self.api.makeurl(['search', 'request'], query)
f = http_GET(url)
root = ET.parse(f).getroot()
ids=[]
for rq in root.findall('request'):
ids.append(int(rq.get('id')))
return ids
def perform(self, project):
"""
Accept the staging LETTER for review and submit to factory
Then disable the build to disabled
:param project: staging project we are working with
"""
2014-02-19 11:48:16 +01:00
status = self.api.check_project_status(project)
if not status:
print('The project "{0}" is not yet acceptable.'.format(project))
2014-02-19 11:48:16 +01:00
return
meta = self.api.get_prj_pseudometa(project)
requests = []
packages = []
2014-02-19 11:48:16 +01:00
for req in meta['requests']:
self.api.rm_from_prj(project, request_id=req['id'], msg='ready to accept')
requests.append(req['id'])
packages.append(req['package'])
2014-05-20 12:26:29 +02:00
msg = 'Accepting staging review for {0}'.format(req['package'])
print(msg)
2014-02-19 11:48:16 +01:00
for req in requests:
change_request_state(self.api.apiurl, str(req), 'accepted', message='Accept to factory')
2014-02-19 11:48:16 +01:00
# A single comment should be enough to notify everybody, since they are
# already mentioned in the comments created by select/unselect
pkg_list = ", ".join(packages)
cmmt = 'Project "{0}" accepted. The following packages have been submitted to factory: {1}.'.format(project, pkg_list)
self.comment.add_comment(project_name=project, comment=cmmt)
2014-05-20 12:26:29 +02:00
# XXX CAUTION - AFAIK the 'accept' command is expected to clean the messages here.
self.comment.delete_from(project_name=project)
2014-02-19 11:48:16 +01:00
self.api.build_switch_prj(project, 'disable')
2014-05-27 18:32:51 +02:00
if self.api.project_exists(project + ":DVD"):
self.api.build_switch_prj(project + ":DVD", 'disable')
return True
def accept_other_new(self):
for req in self.find_new_requests('openSUSE:Factory'):
change_request_state(self.api.apiurl, str(req), 'accepted', message='Accept to factory')
return True