aboutsummaryrefslogtreecommitdiff
path: root/utils
diff options
context:
space:
mode:
authorPriit Laes <plaes@plaes.org>2010-06-10 20:40:30 +0300
committerPriit Laes <plaes@plaes.org>2010-06-10 20:40:30 +0300
commit3a05fab763ef1d80974c27f3a64814d957a70246 (patch)
treeb8a5fa67fceb5a85d63c7b2005741aaaa61a4d9f /utils
parentAdded preliminary document about schema design (diff)
downloadgsoc2010-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-xutils/db_init.py61
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: