diff options
author | 2010-06-10 20:40:30 +0300 | |
---|---|---|
committer | 2010-06-10 20:40:30 +0300 | |
commit | 3a05fab763ef1d80974c27f3a64814d957a70246 (patch) | |
tree | b8a5fa67fceb5a85d63c7b2005741aaaa61a4d9f /utils | |
parent | Added preliminary document about schema design (diff) | |
download | gsoc2010-grumpy-3a05fab763ef1d80974c27f3a64814d957a70246.tar.gz gsoc2010-grumpy-3a05fab763ef1d80974c27f3a64814d957a70246.tar.bz2 gsoc2010-grumpy-3a05fab763ef1d80974c27f3a64814d957a70246.zip |
Use two separate collections: one for packages and one for ebuilds
Diffstat (limited to 'utils')
-rwxr-xr-x | utils/db_init.py | 61 |
1 files changed, 43 insertions, 18 deletions
diff --git a/utils/db_init.py b/utils/db_init.py index d763926..98bbe0d 100755 --- a/utils/db_init.py +++ b/utils/db_init.py @@ -1,6 +1,8 @@ #!/usr/bin/env python import sys +from datetime import datetime + from pkgcore.config import load_config from pkgcore.cache import metadata from pkgcore.ebuild import repository @@ -19,15 +21,16 @@ def main(path): eclass_cache=eclass_cache) for pkg in overlay_repo: - _id = "%s/%s" % (pkg.package, pkg.category) - # Load package info from database... - ebuild = db.ebuilds.find_one(dict(_id=_id)) - if not ebuild: + ver_id = "%s/%s-%s" % (pkg.category, pkg.package, pkg.version) + pkg_id = "%s/%s" % (pkg.category, pkg.package) + + # Load package info from packages collection + package = db.ebuilds.find_one(dict(_id=pkg_id)) + if not package: # ...or create data if pkg not in db - ebuild = dict( - # Internal schema version - schema_ver = 0, - _id = "%s/%s" % (pkg.package, pkg.category), + package = dict( + _id = pkg_id, + _ver = 0, # Internal schema version cat = pkg.category, pkg = pkg.package, desc = pkg.description, @@ -36,22 +39,44 @@ def main(path): herds = list(pkg.herds) if pkg.herds else [], maintainers = [m.email for m in pkg.maintainers] \ if pkg.maintainers else [], - ebuilds = list() ) - # Load version information - version_data = dict( - version = pkg.version, - slot = pkg.slot, - eapi = pkg.eapi, - keywords = list(pkg.keywords) if pkg.keywords else [], - iuse = list(pkg.iuse) if pkg.iuse else [], + else: + # TODO: Should we update it here? + pass + # Housekeeping + package['synced_on'] = datetime.now() + + # Parse IUSE (iuse contains all flags, fiuse contains only '+use') + iuse = list() + fiuse = list() + for u in pkg.iuse: + if u[0] == '+': + iuse.append(u[1:]) + fiuse.append(u[1:]) + else: + iuse.append(u) + + # We don't care about existing ebuilds and just overwrite them + ebuild = dict( + _id = ver_id, + _ver = 0, + eapi = pkg.eapi, + cat = pkg.category, + pkg = pkg.package, + iuse = iuse, + fiuse = fiuse, + keywords = list(pkg.keywords) if pkg.keywords else [], + slot = pkg.slot, + version = pkg.version, # TODO, need to figure out a proper queryable structure for these # license = pkg.license, # depends = pkg.depends, # rdepends = pkg.rdepends + + # Housekeeping + synced_on = datetime.now() ) - ebuild['ebuilds'].append(version_data) - print "Adding: ", db.ebuilds.save(ebuild) + print "Adding: ", db.packages.save(package), db.ebuilds.save(ebuild) if __name__ == '__main__': if len(sys.argv) != 2: |