implement unselect option

removes the request from review and tracking
This commit is contained in:
Stephan Kulow 2014-02-18 13:30:39 +01:00
parent 7bfa3722f3
commit 3bf7a84ee7
3 changed files with 50 additions and 10 deletions

View File

@ -185,6 +185,7 @@ def do_staging(self, subcmd, opts, *args):
"list" will pick the requests not in rings
"select" will add requests to the project
"unselect" will remove them project - pushing them back to the backlog
Usage:
osc staging check [--everything] REPO
@ -193,6 +194,7 @@ def do_staging(self, subcmd, opts, *args):
osc staging freeze PROJECT
osc staging list
osc staging select LETTER REQUEST...
osc staging unselect LETTER REQUEST...
osc staging accept LETTER
osc staging cleanup_rings
"""
@ -207,7 +209,7 @@ def do_staging(self, subcmd, opts, *args):
min_args, max_args = 1, 1
elif cmd in ['check']:
min_args, max_args = 0, 2
elif cmd in ['select']:
elif cmd in ['select', 'unselect']:
min_args, max_args = 2, None
elif cmd in ['move']:
min_args, max_args = 3, None
@ -245,10 +247,13 @@ def do_staging(self, subcmd, opts, *args):
elif cmd in ['freeze']:
import osclib.freeze_command
osclib.freeze_command.FreezeCommand(opts.apiurl).perform(api.prj_from_letter(args[1]))
elif cmd in ['select']:
elif cmd in ['select', 'unselect']:
stprj = api.prj_from_letter(args[1])
for rq in RequestFinder.find_sr(args[2:], opts.apiurl):
api.rq_to_prj(rq, stprj)
if cmd == 'select':
api.rq_to_prj(rq, stprj)
else:
api.rm_from_prj(stprj, request_id=rq)
elif cmd in ['move']:
sprj = api.prj_from_letter(args[1])
tprj = api.prj_from_letter(args[2])

View File

@ -4,6 +4,8 @@ import osc
from osc import cmdln
from osc.core import *
import urllib2
class RequestFinder:
@classmethod

View File

@ -100,7 +100,7 @@ class StagingAPI(object):
# Copy the package
self.rq_to_prj(req_id, destination_project)
# Delete the old one
self.rm_from_prj(package, source_project, 'Moved to {0}'.format(destination_project))
self.rm_from_prj(source_project, request_id=req_id, msg='Moved to {}'.format(destination_project))
def get_staging_projects(self):
"""
@ -283,7 +283,31 @@ class StagingAPI(object):
self.set_prj_pseudometa(project, data)
# FIXME Add sr to group request as well
def _remove_rq_from_prj_pseudometa(self, project, package):
def get_request_id_for_package(self, project, package):
"""
Query the request id from meta
:param project: project to remove from
:param package: package we want to query for
"""
data = self.get_prj_pseudometa(project)
for x in data['requests']:
if x['package'] == package:
return int(x['id'])
return None
def get_package_for_request_id(self, project, request_id):
"""
Query the request id from meta
:param project: project to remove from
:param package: package we want to query for
"""
data = self.get_prj_pseudometa(project)
for x in data['requests']:
if x['id'] == request_id:
return x['package']
return None
def _remove_package_from_prj_pseudometa(self, project, package):
"""
Delete request from the project pseudometa
:param project: project to remove from
@ -295,17 +319,26 @@ class StagingAPI(object):
self.set_prj_pseudometa(project, data)
# FIXME Add sr to group request as well
def rm_from_prj(self, package, project, msg = None, review='accepted'):
def rm_from_prj(self, project, package=None, request_id=None, msg = None, review='accepted'):
"""
Delete request from the project
:param project: project to remove from
:param package: package we want to remove
:param request_id: request we want to remove
:param msg: message for the log
"""
if package:
request_id = self.get_request_id_for_package(project, package)
if not request_id: # already gone?
return
else:
package = self.get_package_for_request_id(project, request_id)
if not package: # already gone?
return
self._remove_rq_from_prj_pseudometa(project, package)
self._remove_package_from_prj_pseudometa(project, package)
delete_package(self.apiurl, project, package, force=True, msg=msg)
self.set_review(self, request_id, project, state=review)
self.set_review(request_id, project, state=review)
def create_package_container(self, project, package, disable_build = False):
"""
@ -621,4 +654,4 @@ class StagingAPI(object):
if i.by_project == project and i.state == 'new':
cont = True
if cont:
change_review_state(self.apiurl, request_id, state, by_project=project, message='Reviewed by staging project "{}" with result: "{}"'.format(project, state) )
change_review_state(self.apiurl, str(request_id), state, by_project=project, message='Reviewed by staging project "{}" with result: "{}"'.format(project, state) )