openSUSE-release-tools/osc-cycle.py
Stephan Kulow 595e84191e More porting to python3
Travis changed default python to 3.6, which has impact on the way
flake8 checks. So make sure we run fine under flake8 of python 3
2019-04-20 21:16:50 +02:00

39 lines
1.4 KiB
Python

import osc.core
from osc.core import get_dependson
from xml.etree import cElementTree as ET
from osc import cmdln
@cmdln.option('-p', '--project', metavar='PROJECT', dest='project', default='openSUSE:Factory')
@cmdln.option('-r', '--repository', metavar='REPOSITORY', dest='repository', default='standard')
@cmdln.option('-a', '--arch', metavar='ARCH', dest='arch', default='x86_64')
def do_cycle(self, subcmd, opts, *args):
"""${cmd_name}: Try to visualize build dependencies between the package list specified
Examples:
osc cycle <pkg1> <pkg2> <pkg3> # outputs a dot file showing the relation between the listed packages
"""
if len(args) == 0:
print("No packages were specified, no chain to draw")
apiurl = self.get_api_url()
print("digraph depgraph {")
args = [pkg.strip() for pkglist in args for pkg in pkglist.split(',') if pkg.strip()]
for pkgname in args:
try:
deps = ET.fromstring(get_dependson(apiurl, opts.project, opts.repository, opts.arch, [pkgname]))
pkg = deps.find('package')
print("\"%s\"" % pkgname)
for deps in pkg.findall('pkgdep'):
if deps.text in args:
print("\"%s\" -> \"%s\"" % (deps.text, pkgname))
except:
# Ignore packages that do not exist
print("[color=red]")
continue
print("}")