diff options
Diffstat (limited to 'leafymiracle/populate.py')
-rw-r--r-- | leafymiracle/populate.py | 40 |
1 files changed, 39 insertions, 1 deletions
diff --git a/leafymiracle/populate.py b/leafymiracle/populate.py index 9f78fc5..87d578a 100644 --- a/leafymiracle/populate.py +++ b/leafymiracle/populate.py @@ -19,7 +19,11 @@ from kitchen.text.converters import to_unicode from models import Root, Category, Group, Package, DBSession, initialize_sql -def populate(comps='comps-f16'): +from yum import YumBase +yumobj = YumBase() +yumobj.setCacheDir() + +def populate(comps='comps-f16', do_dependencies=True): from yum.comps import Comps session = DBSession() @@ -58,8 +62,42 @@ def populate(comps='comps-f16'): session.flush() + if do_dependencies: + for package in session.query(Package).all(): + add_dependencies(package, session) + session.commit() +def add_dependencies(package, session): + deps = set() + pkg = yumobj.pkgSack.searchNevra(name=package.name) + if not pkg: + print "Cannot find package: %s" % package + return + + deps_d = yumobj.findDeps([pkg[0]]) + for dep in deps_d.itervalues(): + for req in dep.itervalues(): + deps.add(req[0].name) + + for dep in deps: + base_query = session.query(Package).filter_by(name=dep) + if base_query.count() == 0: + _new_package = Package(name=dep) + session.add(_new_package) + session.flush() + add_dependencies(_new_package, session) + + dep_as_package = base_query.one() + + if dep_as_package not in package.dependencies: + package.dependencies.append(dep_as_package) + + print "package: %s has (%i/%i) deps" % ( + package.name, len(package.dependencies), len(deps)) + + session.flush() + def build_comps(): import subprocess subprocess.call('git clone git://git.fedorahosted.org/comps.git', shell=True) |