implement unselect option
removes the request from review and tracking
This commit is contained in:
parent
7bfa3722f3
commit
3bf7a84ee7
@ -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])
|
||||
|
@ -4,6 +4,8 @@ import osc
|
||||
from osc import cmdln
|
||||
from osc.core import *
|
||||
|
||||
import urllib2
|
||||
|
||||
class RequestFinder:
|
||||
|
||||
@classmethod
|
||||
|
@ -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) )
|
||||
|
Loading…
x
Reference in New Issue
Block a user