1
0
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:
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) run_editor(filename)
@cmdln.alias('bsdevelproject') @cmdln.alias('bsdevelproject')
@cmdln.option('-r', '--raw', action='store_true', @cmdln.alias('dp')
help='print raw xml snippet') @cmdln.option('-r', '--raw', action='store_true', help='deprecated option')
def do_develproject(self, subcmd, opts, *args): 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: Examples:
osc develproject PRJ PKG osc develproject PRJ PKG
@ -544,13 +544,40 @@ class Osc(cmdln.Cmdln):
else: else:
raise oscerr.WrongArgs('need Project and Package') raise oscerr.WrongArgs('need Project and Package')
devel = show_develproject(apiurl, project, package, opts.raw) devprj, devpkg = show_devel_project(apiurl, project, package)
if devel is None: if devprj is None:
print('\'%s/%s\' has no devel project' % (project, package)) print('%s / %s has no devel project' % (project, package))
elif opts.raw: elif devpkg and devpkg != package:
ET.dump(devel) print("%s %s" % (devprj, devpkg))
else: 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', @cmdln.option('-a', '--attribute', metavar='ATTRIBUTE',
@ -1076,7 +1103,7 @@ class Osc(cmdln.Cmdln):
if not opts.nodevelproject: if not opts.nodevelproject:
devloc = None devloc = None
try: try:
devloc = show_develproject(apiurl, dst_project, dst_package) devloc, _ = show_devel_project(apiurl, dst_project, dst_package)
except HTTPError: except HTTPError:
print("""\ print("""\
Warning: failed to fetch meta data for '%s' package '%s' (new package?) """ \ 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: if not opts.nodevelproject:
devloc = None devloc = None
try: try:
devloc = show_develproject(apiurl, dst_project, dst_package) devloc, _ = show_devel_project(apiurl, dst_project, dst_package)
except HTTPError: except HTTPError:
print("""\ print("""\
Warning: failed to fetch meta data for '%s' package '%s' (new package?) """ \ 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 raise
def show_develproject(apiurl, prj, pac, xml_node=False): def show_devel_project(apiurl, prj, pac):
m = show_package_meta(apiurl, prj, pac) m = show_package_meta(apiurl, prj, pac)
node = ET.fromstring(''.join(m)).find('devel') node = ET.fromstring(''.join(m)).find('devel')
if not node is None: if node is None:
if xml_node: return None, None
return node else:
return node.get('project') return node.get('project'), node.get('package', None)
return 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): def show_package_disabled_repos(apiurl, prj, pac):