mirror of
https://github.com/openSUSE/osc.git
synced 2024-11-12 23:56:13 +01:00
Add revision control options to meta project commands
This commit is contained in:
parent
2364a08236
commit
fca93a8b60
@ -740,6 +740,10 @@ class Osc(cmdln.Cmdln):
|
||||
@cmdln.option('-F', '--file', metavar='FILE',
|
||||
help='read metadata from FILE, instead of opening an editor. '
|
||||
'\'-\' denotes standard input. ')
|
||||
@cmdln.option('-r', '--revision', metavar='REV',
|
||||
help='checkout given revision instead of head revision. For prj and prjconf meta only')
|
||||
@cmdln.option('-m', '--message', metavar='TEXT',
|
||||
help='specify log message TEXT. For prj and prjconf meta only')
|
||||
@cmdln.option('-e', '--edit', action='store_true',
|
||||
help='edit metadata')
|
||||
@cmdln.option('-c', '--create', action='store_true',
|
||||
@ -774,6 +778,8 @@ class Osc(cmdln.Cmdln):
|
||||
the --file switch. If the argument is '-', input is taken from stdin:
|
||||
osc meta prjconf home:user | sed ... | osc meta prjconf home:user -F -
|
||||
|
||||
For meta prj and prjconf updates optional commit messages can be applied with --message.
|
||||
|
||||
When trying to edit a non-existing resource, it is created implicitly.
|
||||
|
||||
|
||||
@ -783,9 +789,10 @@ class Osc(cmdln.Cmdln):
|
||||
osc meta pkg PRJ PKG -e
|
||||
|
||||
Usage:
|
||||
osc meta <prj|prjconf> [-r|--revision REV] ARGS...
|
||||
osc meta <prj|pkg|prjconf|user|pattern> ARGS...
|
||||
osc meta <prj|pkg|prjconf|user|pattern> -e|--edit ARGS...
|
||||
osc meta <prj|pkg|prjconf|user|pattern> -F|--file ARGS...
|
||||
osc meta <prj|pkg|prjconf|user|pattern> [-m|--message TEXT] -e|--edit ARGS...
|
||||
osc meta <prj|pkg|prjconf|user|pattern> [-m|--message TEXT] -F|--file ARGS...
|
||||
osc meta pattern --delete PRJ PATTERN
|
||||
osc meta attribute PRJ [PKG [SUBPACKAGE]] [--attribute ATTRIBUTE] [--create|--delete|--set [value_list]]
|
||||
${cmd_option_list}
|
||||
@ -873,17 +880,20 @@ class Osc(cmdln.Cmdln):
|
||||
if opts.edit or opts.file:
|
||||
raise oscerr.WrongArgs('A pattern file argument is required.')
|
||||
|
||||
if cmd not in ['prj', 'prjconf'] and (opts.message or opts.revision):
|
||||
raise oscerr.WrongOptions('options --revision and --message are only supported for the prj or prjconf subcommand')
|
||||
|
||||
# show
|
||||
if not opts.edit and not opts.file and not opts.delete and not opts.create and not opts.set:
|
||||
if cmd == 'prj':
|
||||
sys.stdout.write(''.join(show_project_meta(apiurl, project)))
|
||||
sys.stdout.write(''.join(show_project_meta(apiurl, project, opts.revision)))
|
||||
elif cmd == 'pkg':
|
||||
sys.stdout.write(''.join(show_package_meta(apiurl, project, package)))
|
||||
elif cmd == 'attribute':
|
||||
sys.stdout.write(''.join(show_attribute_meta(apiurl, project, package, subpackage,
|
||||
opts.attribute, opts.attribute_defaults, opts.attribute_project)))
|
||||
elif cmd == 'prjconf':
|
||||
sys.stdout.write(''.join(show_project_conf(apiurl, project)))
|
||||
sys.stdout.write(''.join(show_project_conf(apiurl, project, opts.revision)))
|
||||
elif cmd == 'user':
|
||||
r = get_user_meta(apiurl, user)
|
||||
if r:
|
||||
@ -907,6 +917,7 @@ class Osc(cmdln.Cmdln):
|
||||
remove_linking_repositories=opts.remove_linking_repositories,
|
||||
path_args=quote_plus(project),
|
||||
apiurl=apiurl,
|
||||
msg = opts.message,
|
||||
template_args=({
|
||||
'name': project,
|
||||
'user': conf.get_apiurl_usr(apiurl)}))
|
||||
@ -923,6 +934,7 @@ class Osc(cmdln.Cmdln):
|
||||
edit=True,
|
||||
path_args=quote_plus(project),
|
||||
apiurl=apiurl,
|
||||
msg = opts.message,
|
||||
template_args=None)
|
||||
elif cmd == 'user':
|
||||
edit_meta(metatype='user',
|
||||
@ -972,6 +984,7 @@ class Osc(cmdln.Cmdln):
|
||||
force=opts.force,
|
||||
remove_linking_repositories=opts.remove_linking_repositories,
|
||||
apiurl=apiurl,
|
||||
msg = opts.message,
|
||||
path_args=quote_plus(project))
|
||||
elif cmd == 'pkg':
|
||||
edit_meta(metatype='pkg',
|
||||
@ -984,6 +997,7 @@ class Osc(cmdln.Cmdln):
|
||||
data=f,
|
||||
edit=opts.edit,
|
||||
apiurl=apiurl,
|
||||
msg = opts.message,
|
||||
path_args=quote_plus(project))
|
||||
elif cmd == 'user':
|
||||
edit_meta(metatype='user',
|
||||
|
38
osc/core.py
38
osc/core.py
@ -3334,14 +3334,33 @@ def meta_get_project_list(apiurl, deleted=None):
|
||||
return sorted([ node.get('name') for node in root if node.get('name')])
|
||||
|
||||
|
||||
def show_project_meta(apiurl, prj):
|
||||
url = makeurl(apiurl, ['source', prj, '_meta'])
|
||||
f = http_GET(url)
|
||||
def show_project_meta(apiurl, prj, rev=None):
|
||||
if rev:
|
||||
query = {}
|
||||
query['rev'] = rev
|
||||
url = makeurl(apiurl, ['source', prj, '_project', '_meta'], query)
|
||||
try:
|
||||
f = http_GET(url)
|
||||
except HTTPError as e:
|
||||
error_help = "%d" % e.code
|
||||
os_err = e.hdrs.get('X-Opensuse-Errorcode')
|
||||
if os_err:
|
||||
error_help = "%s (%d) project: %s" % (os_err, e.code, prj)
|
||||
if e.code == 404 and os_err == 'unknown_package':
|
||||
error_help = 'option -r|--revision is not supported by this OBS version'
|
||||
e.osc_msg = 'BuildService API error: %s' % error_help
|
||||
raise
|
||||
else:
|
||||
url = makeurl(apiurl, ['source', prj, '_meta'])
|
||||
f = http_GET(url)
|
||||
return f.readlines()
|
||||
|
||||
def show_project_conf(apiurl, prj, rev=None):
|
||||
query = {}
|
||||
if rev:
|
||||
query['rev'] = rev
|
||||
|
||||
def show_project_conf(apiurl, prj):
|
||||
url = makeurl(apiurl, ['source', prj, '_config'])
|
||||
url = makeurl(apiurl, ['source', prj, '_config'], query)
|
||||
f = http_GET(url)
|
||||
return f.readlines()
|
||||
|
||||
@ -3575,7 +3594,7 @@ def meta_exists(metatype,
|
||||
|
||||
return data
|
||||
|
||||
def make_meta_url(metatype, path_args=None, apiurl=None, force=False, remove_linking_repositories=False):
|
||||
def make_meta_url(metatype, path_args=None, apiurl=None, force=False, remove_linking_repositories=False, msg=None):
|
||||
global metatypes
|
||||
|
||||
if not apiurl:
|
||||
@ -3592,6 +3611,8 @@ def make_meta_url(metatype, path_args=None, apiurl=None, force=False, remove_lin
|
||||
query = { 'force': '1' }
|
||||
if remove_linking_repositories:
|
||||
query['remove_linking_repositories'] = '1'
|
||||
if msg:
|
||||
query['comment'] = msg
|
||||
|
||||
return makeurl(apiurl, [path], query)
|
||||
|
||||
@ -3604,7 +3625,8 @@ def edit_meta(metatype,
|
||||
force=False,
|
||||
remove_linking_repositories=False,
|
||||
change_is_required=False,
|
||||
apiurl=None):
|
||||
apiurl=None,
|
||||
msg=None):
|
||||
|
||||
global metatypes
|
||||
|
||||
@ -3631,7 +3653,7 @@ def edit_meta(metatype,
|
||||
print(' osc meta pkg %s %s -e' % (unquote(project), package))
|
||||
return
|
||||
|
||||
url = make_meta_url(metatype, path_args, apiurl, force, remove_linking_repositories)
|
||||
url = make_meta_url(metatype, path_args, apiurl, force, remove_linking_repositories, msg)
|
||||
f = metafile(url, data, change_is_required, metatypes[metatype]['file_ext'])
|
||||
|
||||
if edit:
|
||||
|
Loading…
Reference in New Issue
Block a user