1
0
mirror of https://github.com/openSUSE/osc.git synced 2025-02-02 17:56:15 +01:00

- maintenance requests accept package lists as source and target incidents to be merged in

This commit is contained in:
Adrian Schröter 2012-01-19 11:36:57 +01:00
parent 0bdd0a676e
commit 11be969b77
3 changed files with 21 additions and 11 deletions

1
NEWS
View File

@ -5,6 +5,7 @@
# Features which requires OBS 2.3 # Features which requires OBS 2.3
# #
- support dryrun of branching to preview the expected result. "osc sm" is doing this now by default. - support dryrun of branching to preview the expected result. "osc sm" is doing this now by default.
- maintenance requests accept package lists as source and target incidents to be merged in
0.133 0.133
- add --meta option also to "list", "cat" and "less" commands - add --meta option also to "list", "cat" and "less" commands

View File

@ -2617,6 +2617,10 @@ Please submit there instead, or use --nodevelproject to force direct submission.
help='specify message TEXT') help='specify message TEXT')
@cmdln.option('--no-cleanup', action='store_true', @cmdln.option('--no-cleanup', action='store_true',
help='do not remove source project on accept') help='do not remove source project on accept')
@cmdln.option('--incident', metavar='INCIDENT',
help='specify incident number to merge in')
@cmdln.option('--incident-project', metavar='INCIDENT_PROJECT',
help='specify incident project to merge in')
def do_maintenancerequest(self, subcmd, opts, *args): def do_maintenancerequest(self, subcmd, opts, *args):
"""${cmd_name}: Create a request for starting a maintenance incident. """${cmd_name}: Create a request for starting a maintenance incident.
@ -2628,7 +2632,7 @@ Please submit there instead, or use --nodevelproject to force direct submission.
the "patchinfo" command how add the required maintenance update information. the "patchinfo" command how add the required maintenance update information.
usage: usage:
osc maintenancerequest [ SOURCEPROJECT [ TARGETPROJECT ] ] osc maintenancerequest [ SOURCEPROJECT [ SOURCEPACKAGES ] ]
${cmd_option_list} ${cmd_option_list}
""" """
@ -2638,22 +2642,21 @@ Please submit there instead, or use --nodevelproject to force direct submission.
if opts.attribute: if opts.attribute:
maintenance_attribute = opts.attribute maintenance_attribute = opts.attribute
source_project = target_project = opt_sourceupdate = None source_project = source_packages = target_project = opt_sourceupdate = None
if not opts.no_cleanup: if not opts.no_cleanup:
opt_sourceupdate = 'cleanup' opt_sourceupdate = 'cleanup'
if len(args) > 2:
raise oscerr.WrongArgs('Too many arguments.')
if len(args) == 0 and is_project_dir(os.curdir): if len(args) == 0 and is_project_dir(os.curdir):
source_project = store_read_project(os.curdir) source_project = store_read_project(os.curdir)
elif len(args) == 0: elif len(args) == 0:
raise oscerr.WrongArgs('Too few arguments.') raise oscerr.WrongArgs('Too few arguments.')
if len(args) > 0: if len(args) > 0:
source_project = args[0] source_project = args[0]
if len(args) > 1: if len(args) > 1:
target_project = args[1] source_packages = args[1:]
if opts.incident_project:
target_project = opts.incident_project
else: else:
xpath = 'attribute/@name = \'%s\'' % maintenance_attribute xpath = 'attribute/@name = \'%s\'' % maintenance_attribute
res = search(apiurl, project_id=xpath) res = search(apiurl, project_id=xpath)
@ -2662,12 +2665,14 @@ Please submit there instead, or use --nodevelproject to force direct submission.
if project is None: if project is None:
sys.exit('Unable to find defined OBS:MaintenanceProject project on server.') sys.exit('Unable to find defined OBS:MaintenanceProject project on server.')
target_project = project.get('name') target_project = project.get('name')
if opts.incident:
target_project += ":" + opts.incident
print 'Using target project \'%s\'' % target_project print 'Using target project \'%s\'' % target_project
if not opts.message: if not opts.message:
opts.message = edit_message() opts.message = edit_message()
r = create_maintenance_request(apiurl, source_project, target_project, opt_sourceupdate, opts.message) r = create_maintenance_request(apiurl, source_project, source_packages, target_project, opt_sourceupdate, opts.message)
print r.reqid print r.reqid

View File

@ -2196,7 +2196,7 @@ class Action:
'add_role': ('tgt_project', 'tgt_package', 'person_name', 'person_role', 'group_name', 'group_role'), 'add_role': ('tgt_project', 'tgt_package', 'person_name', 'person_role', 'group_name', 'group_role'),
'set_bugowner': ('tgt_project', 'tgt_package', 'person_name'), # obsoleted by add_role 'set_bugowner': ('tgt_project', 'tgt_package', 'person_name'), # obsoleted by add_role
'maintenance_release': ('src_project', 'src_package', 'src_rev', 'tgt_project', 'tgt_package', 'person_name'), 'maintenance_release': ('src_project', 'src_package', 'src_rev', 'tgt_project', 'tgt_package', 'person_name'),
'maintenance_incident': ('src_project', 'tgt_project', 'person_name', 'opt_sourceupdate'), 'maintenance_incident': ('src_project', 'src_package', 'src_rev', 'tgt_project', 'person_name', 'opt_sourceupdate'),
'delete': ('tgt_project', 'tgt_package'), 'delete': ('tgt_project', 'tgt_package'),
'change_devel': ('src_project', 'src_package', 'tgt_project', 'tgt_package')} 'change_devel': ('src_project', 'src_package', 'tgt_project', 'tgt_package')}
# attribute prefix to element name map (only needed for abbreviated attributes) # attribute prefix to element name map (only needed for abbreviated attributes)
@ -3418,9 +3418,13 @@ def create_release_request(apiurl, src_project, message=''):
return r return r
# create a maintenance incident per request # create a maintenance incident per request
def create_maintenance_request(apiurl, src_project, tgt_project, opt_sourceupdate, message=''): def create_maintenance_request(apiurl, src_project, src_packages, tgt_project, opt_sourceupdate, message=''):
import cgi import cgi
r = Request() r = Request()
if src_packages:
for p in src_packages:
r.add_action('maintenance_incident', src_project=src_project, src_package=p, tgt_project=tgt_project, opt_sourceupdate = opt_sourceupdate)
else:
r.add_action('maintenance_incident', src_project=src_project, tgt_project=tgt_project, opt_sourceupdate = opt_sourceupdate) r.add_action('maintenance_incident', src_project=src_project, tgt_project=tgt_project, opt_sourceupdate = opt_sourceupdate)
# XXX: clarify why we need the unicode(...) stuff # XXX: clarify why we need the unicode(...) stuff
r.description = cgi.escape(unicode(message, 'utf8')) r.description = cgi.escape(unicode(message, 'utf8'))