diff --git a/osclib/accept_command.py b/osclib/accept_command.py index c864688b..d06eb370 100644 --- a/osclib/accept_command.py +++ b/osclib/accept_command.py @@ -1,9 +1,13 @@ from osc.core import change_request_state +from osc.core import get_request + +from osclib.comments import CommentAPI class AcceptCommand(object): def __init__(self, api): self.api = api + self.comment = CommentAPI(self.api.apiurl) def perform(self, project): """ @@ -11,6 +15,7 @@ class AcceptCommand(object): Then disable the build to disabled :param project: staging project we are working with """ + status = self.api.check_project_status(project) if not status: @@ -21,10 +26,19 @@ class AcceptCommand(object): requests = [] for req in meta['requests']: self.api.rm_from_prj(project, request_id=req['id'], msg='ready to accept') - print('Accepting staging review for {0}'.format(req['package'])) + msg = 'Accepting staging review for {0}'.format(req['package']) + print(msg) + + # Write a comment in the project. + user = get_request(self.api.apiurl, str(req['id'])).get_creator() + self.comment.add_comment(project_name=project, comment='@%s: %s' % (user, msg)) + requests.append(req['id']) for req in requests: change_request_state(self.api.apiurl, str(req), 'accepted', message='Accept to factory') + # XXX CAUTION - AFAIK the 'accept' command is expected to clean the messages here. + self.comment.delete_from(project_name=project) + self.api.build_switch_prj(project, 'disable') diff --git a/osclib/select_command.py b/osclib/select_command.py index f8e4dfd7..73fb6d9e 100644 --- a/osclib/select_command.py +++ b/osclib/select_command.py @@ -1,8 +1,10 @@ from xml.etree import cElementTree as ET from osc import oscerr +from osc.core import get_request from osc.core import http_GET +from osclib.comments import CommentAPI from osclib.request_finder import RequestFinder # from osclib.freeze_command import FreezeCommand @@ -11,6 +13,7 @@ class SelectCommand(object): def __init__(self, api): self.api = api + self.comment = CommentAPI(self.api.apiurl) def _package(self, request): """ @@ -55,7 +58,14 @@ class SelectCommand(object): if 'staging' not in request_project and not supersede: # Normal 'select' command - print('Adding request "{}" to project "{}"'.format(request, self.target_project)) + msg = 'Adding request "{}" to project "{}"'.format(request, self.target_project) + print(msg) + + # Write a comment in the project. + user = get_request(self.api.apiurl, str(request)).get_creator() + self.comment.add_comment(project_name=request_project, + comment='@%s: %s' % (user, msg)) + return self.api.rq_to_prj(request, self.target_project) elif 'staging' in request_project and (move or supersede): # 'select' command becomes a 'move' @@ -66,14 +76,25 @@ class SelectCommand(object): # supersede = (new_rq, package, project) fprj = request_project['staging'] if not supersede else supersede[2] + msgs = [] if supersede: - print('"{} ({}) is superseded by {}'.format(request, supersede[1], supersede[0])) + msg = '"{} ({}) is superseded by {}'.format(request, supersede[1], supersede[0]) + msgs.append(msg) + print(msg) if fprj == self.target_project: print('"{}" is currently in "{}"'.format(request, self.target_project)) return False - print('Moving "{}" from "{}" to "{}"'.format(request, fprj, self.target_project)) + msg = 'Moving "{}" from "{}" to "{}"'.format(request, fprj, self.target_project) + msgs.append(msg) + print(msg) + + # Write a comment in the project. + user = get_request(self.api.apiurl, str(request)).get_creator() + self.comment.add_comment(project_name=self.target_project, + comment='@%s: %s' % (user, '\n'.join(msgs))) + return self.api.move_between_project(fprj, request, self.target_project) elif 'staging' in request_project and not move: # Previously selected, but not explicit move diff --git a/osclib/unselect_command.py b/osclib/unselect_command.py index 8a98a612..a88d0263 100644 --- a/osclib/unselect_command.py +++ b/osclib/unselect_command.py @@ -1,6 +1,8 @@ from osc import oscerr +from osc.core import get_request from osc.core import http_GET +from osclib.comments import CommentAPI from osclib.request_finder import RequestFinder @@ -8,14 +10,23 @@ class UnselectCommand(object): def __init__(self, api): self.api = api + self.comment = CommentAPI(self.api.apiurl) def perform(self, packages): """ Remove request from staging project :param packages: packages/requests to delete from staging projects """ - for request, request_project in RequestFinder.find_staged_sr(packages, self.api).items(): + + for request, request_project in RequestFinder.find_staged_sr(packages, + self.api).items(): staging_project = request_project['staging'] - print('Unselecting "{}" from "{}"'.format(request, staging_project)) + msg = 'Unselecting "{}" from "{}"'.format(request, staging_project) + print(msg) self.api.rm_from_prj(staging_project, request_id=request) self.api.add_review(request, by_group='factory-staging', msg='Please recheck') + + # Write a comment in the project. + user = get_request(self.api.apiurl, str(request)).get_creator() + self.comment.add_comment(project_name=staging_project, + comment='@%s: %s' % (user, msg))