Skip to content

Instantly share code, notes, and snippets.

@ignatenkobrain
Last active May 13, 2020 18:51
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ignatenkobrain/75e75f10e1e408d34d7446de85f26695 to your computer and use it in GitHub Desktop.
Save ignatenkobrain/75e75f10e1e408d34d7446de85f26695 to your computer and use it in GitHub Desktop.
#!/usr/bin/python3
import argparse
import sys
import solv
def main():
parser = argparse.ArgumentParser()
parser.add_argument("rpm")
args = parser.parse_args()
pool = solv.Pool()
pool.setarch()
repo = pool.add_repo("upstream")
f = solv.xfopen("/var/cache/dnf/koji.solv")
repo.add_solv(f)
f.close()
repo_local = pool.add_repo("local")
s = repo.add_rpm(sys.argv[1])
pool.addfileprovides()
pool.createwhatprovides()
solver = pool.Solver()
solver.set_flag(solv.Solver.SOLVER_FLAG_IGNORE_RECOMMENDED, True)
problems = solver.solve(
[pool.Job(solv.Job.SOLVER_SOLVABLE | solv.Job.SOLVER_INSTALL, s.id)]
)
if problems:
for problem in problems:
for rule in problem.findallproblemrules():
for info in rule.allinfos():
print(info.problemstr())
# TODO
sys.exit(1)
licenses = set()
for p in solver.transaction().newsolvables():
if not p.name.startswith("rust-") or not p.name.endswith("-devel"):
continue
licenses.add(p.lookup_str(solv.SOLVABLE_LICENSE))
print("\n".join(f"# * {l}" for l in sorted(licenses)))
if __name__ == "__main__":
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment