Skip to content

Instantly share code, notes, and snippets.

@mizdebsk
Created January 26, 2016 00:58
Show Gist options
  • Save mizdebsk/21e5fd776aa4ba577582 to your computer and use it in GitHub Desktop.
Save mizdebsk/21e5fd776aa4ba577582 to your computer and use it in GitHub Desktop.
#!/usr/bin/python
# Print dependency tree for buildroot
# Author: Mikolaj Izdebski <mizdebsk@redhat.com>
import dnf.sack
import dnf.subject
import hawkey
import koji
import librepo
import os
import sys
import tempfile
task = int(sys.argv[1])
print "Getting buildroot listing for Koji task {}...".format(task)
ks = koji.ClientSession('http://koji.fedoraproject.org/kojihub')
[br] = ks.listBuildroots(taskID=task)
listing = ks.getBuildrootListing(br['id'])
print "Downloading repo from Koji..."
h = librepo.Handle()
h.destdir = tempfile.mkdtemp()
h.repotype = librepo.LR_YUMREPO
h.urls = ['https://kojipkgs.fedoraproject.org/repos/{tag_name}/{repo_id}/{arch}/'.format(**br)]
h.yumdlist = ['primary', 'filelists', 'group']
repodata = h.perform(librepo.Result()).yum_repo
repo = hawkey.Repo('tmp')
repo.repomd_fn = repodata['repomd']
repo.primary_fn = repodata['primary']
repo.filelists_fn = repodata['filelists']
print "Loading repo into memory..."
sack = dnf.sack.Sack(arch=br['arch'])
sack.load_yum_repo(repo)
print "Resolving deps..."
goal = hawkey.Goal(sack)
for rpm in listing:
sltr = hawkey.Selector(sack)
sltr.set(name=rpm['name'])
if rpm['epoch']:
evr = "{epoch}:{version}-{release}".format(**rpm)
else:
evr = "{version}-{release}".format(**rpm)
sltr.set(evr=evr)
sltr.set(arch=rpm['arch'])
goal.install(select=sltr)
goal.run()
print "Printing dependency graph..."
for pkg in goal.list_installs():
deps = sorted(dep.name for dep in hawkey.Query(sack).filter(provides=pkg.requires))
print "{}: {}".format(pkg.name, ", ".join(deps))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment