1
0
mirror of https://github.com/openSUSE/osc.git synced 2024-09-20 01:06:17 +02: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:
Sascha Peilicke 2013-10-07 13:12:58 +02:00
parent 42f9f2bf3e
commit 3d72e60321
2 changed files with 60 additions and 17 deletions

View File

@ -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?) """ \

View File

@ -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):