mirror of
https://github.com/openSUSE/osc.git
synced 2025-02-02 17:56:15 +01:00
Improve devel project commands.
Let "osc develproject" (with new alias "dp") display the devel package if it doesn't match the package name. Deprecate "--raw" option which only was a crude workaround for that anyway. Add "osc setdevelproject" (alias "sdp") command to change a package's devel project / package.
This commit is contained in:
parent
42f9f2bf3e
commit
3d72e60321
@ -522,10 +522,10 @@ class Osc(cmdln.Cmdln):
|
||||
run_editor(filename)
|
||||
|
||||
@cmdln.alias('bsdevelproject')
|
||||
@cmdln.option('-r', '--raw', action='store_true',
|
||||
help='print raw xml snippet')
|
||||
@cmdln.alias('dp')
|
||||
@cmdln.option('-r', '--raw', action='store_true', help='deprecated option')
|
||||
def do_develproject(self, subcmd, opts, *args):
|
||||
"""${cmd_name}: print the bsdevelproject of a package
|
||||
"""${cmd_name}: print the devel project / package of a package
|
||||
|
||||
Examples:
|
||||
osc develproject PRJ PKG
|
||||
@ -544,13 +544,40 @@ class Osc(cmdln.Cmdln):
|
||||
else:
|
||||
raise oscerr.WrongArgs('need Project and Package')
|
||||
|
||||
devel = show_develproject(apiurl, project, package, opts.raw)
|
||||
if devel is None:
|
||||
print('\'%s/%s\' has no devel project' % (project, package))
|
||||
elif opts.raw:
|
||||
ET.dump(devel)
|
||||
devprj, devpkg = show_devel_project(apiurl, project, package)
|
||||
if devprj is None:
|
||||
print('%s / %s has no devel project' % (project, package))
|
||||
elif devpkg and devpkg != package:
|
||||
print("%s %s" % (devprj, devpkg))
|
||||
else:
|
||||
print(devel)
|
||||
print(devprj)
|
||||
|
||||
@cmdln.alias('sdp')
|
||||
def do_setdevelproject(self, subcmd, opts, *args):
|
||||
"""${cmd_name}: Set the devel project / package of a package
|
||||
|
||||
Examples:
|
||||
osc setdevelproject [PRJ PKG] DEVPRJ [DEVPKG]
|
||||
${cmd_option_list}
|
||||
"""
|
||||
args = slash_split(args)
|
||||
apiurl = self.get_api_url()
|
||||
|
||||
devprj, devpkg = None, None
|
||||
if len(args) == 3 or len(args) == 4:
|
||||
project, package = args[0], args[1]
|
||||
devprj = args[2]
|
||||
if len(args) == 4:
|
||||
devpkg = args[3]
|
||||
elif len(args) >= 1 and len(args) <= 2:
|
||||
project, package = store_read_project(os.curdir), store_read_package(os.curdir)
|
||||
devprj = args[0]
|
||||
if len(args) == 2:
|
||||
devpkg = args[1]
|
||||
else:
|
||||
raise oscerr.WrongArgs('need at least DEVPRJ (and possibly DEVPKG)')
|
||||
|
||||
set_devel_project(apiurl, project, package, devprj, devpkg)
|
||||
|
||||
|
||||
@cmdln.option('-a', '--attribute', metavar='ATTRIBUTE',
|
||||
@ -1076,7 +1103,7 @@ class Osc(cmdln.Cmdln):
|
||||
if not opts.nodevelproject:
|
||||
devloc = None
|
||||
try:
|
||||
devloc = show_develproject(apiurl, dst_project, dst_package)
|
||||
devloc, _ = show_devel_project(apiurl, dst_project, dst_package)
|
||||
except HTTPError:
|
||||
print("""\
|
||||
Warning: failed to fetch meta data for '%s' package '%s' (new package?) """ \
|
||||
@ -1287,7 +1314,7 @@ Please submit there instead, or use --nodevelproject to force direct submission.
|
||||
if not opts.nodevelproject:
|
||||
devloc = None
|
||||
try:
|
||||
devloc = show_develproject(apiurl, dst_project, dst_package)
|
||||
devloc, _ = show_devel_project(apiurl, dst_project, dst_package)
|
||||
except HTTPError:
|
||||
print("""\
|
||||
Warning: failed to fetch meta data for '%s' package '%s' (new package?) """ \
|
||||
|
28
osc/core.py
28
osc/core.py
@ -3146,14 +3146,30 @@ def show_attribute_meta(apiurl, prj, pac, subpac, attribute, with_defaults, with
|
||||
raise
|
||||
|
||||
|
||||
def show_develproject(apiurl, prj, pac, xml_node=False):
|
||||
def show_devel_project(apiurl, prj, pac):
|
||||
m = show_package_meta(apiurl, prj, pac)
|
||||
node = ET.fromstring(''.join(m)).find('devel')
|
||||
if not node is None:
|
||||
if xml_node:
|
||||
return node
|
||||
return node.get('project')
|
||||
return None
|
||||
if node is None:
|
||||
return None, None
|
||||
else:
|
||||
return node.get('project'), node.get('package', None)
|
||||
|
||||
|
||||
def set_devel_project(apiurl, prj, pac, devprj, devpac=None):
|
||||
meta = show_package_meta(apiurl, prj, pac)
|
||||
root = ET.fromstring(''.join(meta))
|
||||
node = root.find('devel')
|
||||
if node is None:
|
||||
node = ET.Element('devel')
|
||||
root.append(node)
|
||||
else:
|
||||
node.clear()
|
||||
node.set('project', devprj)
|
||||
if devpac:
|
||||
node.set('package', devpac)
|
||||
url = makeurl(apiurl, ['source', prj, pac, '_meta'])
|
||||
mf = metafile(url, ET.tostring(root, encoding=ET_ENCODING))
|
||||
mf.sync()
|
||||
|
||||
|
||||
def show_package_disabled_repos(apiurl, prj, pac):
|
||||
|
Loading…
Reference in New Issue
Block a user