1
0
mirror of https://github.com/openSUSE/osc.git synced 2025-02-02 09:46:16 +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
#
- 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
- 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')
@cmdln.option('--no-cleanup', action='store_true',
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):
"""${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.
usage:
osc maintenancerequest [ SOURCEPROJECT [ TARGETPROJECT ] ]
osc maintenancerequest [ SOURCEPROJECT [ SOURCEPACKAGES ] ]
${cmd_option_list}
"""
@ -2638,22 +2642,21 @@ Please submit there instead, or use --nodevelproject to force direct submission.
if 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:
opt_sourceupdate = 'cleanup'
if len(args) > 2:
raise oscerr.WrongArgs('Too many arguments.')
if len(args) == 0 and is_project_dir(os.curdir):
source_project = store_read_project(os.curdir)
elif len(args) == 0:
raise oscerr.WrongArgs('Too few arguments.')
if len(args) > 0:
source_project = args[0]
if len(args) > 1:
target_project = args[1]
source_packages = args[1:]
if opts.incident_project:
target_project = opts.incident_project
else:
xpath = 'attribute/@name = \'%s\'' % maintenance_attribute
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:
sys.exit('Unable to find defined OBS:MaintenanceProject project on server.')
target_project = project.get('name')
if opts.incident:
target_project += ":" + opts.incident
print 'Using target project \'%s\'' % target_project
if not opts.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

View File

@ -2196,7 +2196,7 @@ class Action:
'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
'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'),
'change_devel': ('src_project', 'src_package', 'tgt_project', 'tgt_package')}
# attribute prefix to element name map (only needed for abbreviated attributes)
@ -3418,10 +3418,14 @@ def create_release_request(apiurl, src_project, message=''):
return r
# 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
r = Request()
r.add_action('maintenance_incident', src_project=src_project, tgt_project=tgt_project, opt_sourceupdate = opt_sourceupdate)
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)
# XXX: clarify why we need the unicode(...) stuff
r.description = cgi.escape(unicode(message, 'utf8'))
r.create(apiurl)