Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:Thaodan:tools
osc
0002-Support-osc-copyprj-in-api-by-Islam-Amer-u...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 0002-Support-osc-copyprj-in-api-by-Islam-Amer-usage-osc-c.patch of Package osc
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Marko Lemmetty <marko.lemmetty@jollamobile.com> Date: Fri, 15 May 2020 14:20:54 +0300 Subject: [PATCH] Support 'osc copyprj' in api by Islam Amer usage: osc copyprj SOURCEPRJ DESTPRJ A way to copy a project and all packages in it It can not yet be done across buildservice instances The user must be able to create DESTPRJ --- osc/commandline.py | 52 ++++++++++++++++++++++++++++++++++++++++++++++ osc/core.py | 28 +++++++++++++++++++++++++ 2 files changed, 80 insertions(+) diff --git a/osc/commandline.py b/osc/commandline.py index 50955aedc5bf81fc240b78a920dab62a2f19867e..6efe9bf32d4278d1a56a1c6af0bf87d5e8427c1f 100644 --- a/osc/commandline.py +++ b/osc/commandline.py @@ -1864,6 +1864,58 @@ class Osc(cmdln.Cmdln): else: raise oscerr.WrongOptions('The --delete switch is only for pattern metadata or attributes.') + @cmdln.option('-b', '--with-binaries', action='store_true', + help='copy the built binaries over to avoid a rebuild') + @cmdln.option('-H', '--with-history', action='store_true', + help='replicate the history of each package.') + @cmdln.option('-o', '--make-older', action='store_true', + help='No idea') + @cmdln.option('-r', '--re-sign', action='store_true', + help='re-sign the binaries') + @cmdln.option('-m', '--message', metavar='TEXT', + help='specify message TEXT') + def do_copyprj(self, subcmd, opts, *args): + """ + Copy a project + + A way to copy a project and all packages in it + + It can not yet be done across buildservice instances + + The user must be able to create DESTPRJ + + usage: + osc copyprj SOURCEPRJ DESTPRJ + """ + + args = slash_split(args) + + if not args or len(args) != 2: + raise oscerr.WrongArgs('Incorrect number of arguments.') + + src_project = args[0] + dst_project = args[1] + + src_apiurl = conf.config['apiurl'] + + if opts.message: + comment = opts.message + else: + comment = 'osc copyprj from project:%s' % ( src_project ) + + if src_project == dst_project: + raise oscerr.WrongArgs('Source and destination are the same.') + + print("calling cp") + r = copy_prj(src_apiurl, src_project, dst_project, + withbinaries = opts.with_binaries, + withhistory = opts.with_history, + makeolder = opts.make_older, + resign = opts.re_sign, + comment = comment) + print("done cp") + print(r) + # TODO: rewrite and consolidate the current submitrequest/createrequest "mess" @cmdln.option('-m', '--message', metavar='TEXT', diff --git a/osc/core.py b/osc/core.py index 265f883608f8c72731e4ad03c9628428f248500a..f4ea0181ed4c36f792d444d28a47d3e9753389c7 100644 --- a/osc/core.py +++ b/osc/core.py @@ -3814,6 +3814,34 @@ def copy_pac( raise oscerr.APIError(f"failed to copy: {', '.join(todo)}") return 'Done.' +def copy_prj(src_apiurl, src_project, dst_project, + withbinaries = False, + withhistory = False, + makeolder = False, + resign = False, + comment = None): + """ + Create a copy of a project. + + Copying can only be done on the server, in a single api call. + """ + + print('Copying project...') + query = {'cmd': 'copy', 'oproject': src_project } + if withbinaries: + query['withbinaries'] = '1' + if withhistory: + query['withhistory'] = '1' + if makeolder: + query['makeolder'] = '1' + if resign: + query['resign'] = '1' + if comment: + query['comment'] = comment + u = makeurl(src_apiurl, ['source', dst_project], query=query) + print("copyprj ", u, file=sys.stderr) + f = http_POST(u) + return f.read() def lock(apiurl: str, project: str, package: str, msg: str = None): url_path = ["source", project]
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor