summaryrefslogtreecommitdiffstats
path: root/leafymiracle/populate.py
diff options
context:
space:
mode:
Diffstat (limited to 'leafymiracle/populate.py')
-rw-r--r--leafymiracle/populate.py40
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)