aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStanislav Ochotnicky <sochotnicky@gmail.com>2009-06-30 22:01:51 +0200
committerStanislav Ochotnicky <sochotnicky@gmail.com>2009-07-01 14:21:09 +0200
commit1c83ba7f55a193f1c52ae2714d28f11f0e996afc (patch)
treee2cb52af8ef1a281b8a8b0c968e10fd29e5b512c
parentAdded option to modify more files in BASE_CHROOT (diff)
downloadcollagen-1c83ba7f55a193f1c52ae2714d28f11f0e996afc.tar.gz
collagen-1c83ba7f55a193f1c52ae2714d28f11f0e996afc.tar.bz2
collagen-1c83ba7f55a193f1c52ae2714d28f11f0e996afc.zip
Basic dependency emerging/unmerging idea
-rw-r--r--src/tinderbox/__init__.py51
1 files changed, 46 insertions, 5 deletions
diff --git a/src/tinderbox/__init__.py b/src/tinderbox/__init__.py
index 9757596..c53dcae 100644
--- a/src/tinderbox/__init__.py
+++ b/src/tinderbox/__init__.py
@@ -134,13 +134,41 @@ class Tinderbox(object):
#TODO get contents && make binpkg && report back to matchbox && uninstall deps && uninstall pkg
- def _emerge_package_subprocess(self, ebuild, dep_groups, package):
+ def _emerge_package_subprocess(self, pkg, ebuild, dep_groups, package):
# We are chrooted inside WORK_CHROOT remember!
+ porttree = self.trees[portage.root]['porttree']
+ portdb = porttree.dbapi
+ vartree = self.trees[portage.root]["vartree"]
+
+ package_infos = []
settings = self.settings
for group in dep_groups:
- # TODO install deps group by group
-
+ dep_failed = False
+ deps_processed = []
+ for dep in group:
+
+ dep_ebuild = portdb.findname(dep)
+ ret = portage.doebuild(dep_ebuild, "merge", portage.root, settings, debug = False, tree="porttree")
+ if ret != 0:
+ log.error("Unable to merge dependency %s for package %s (ebuild %s)" % (dep, pkg, dep_ebuild))
+ dep_failed = True
+ break
+ deps_processed.append(dep)
+
+ settings.setcpv(dep, mydb=portdb)
+ dep_use_enabled = set(settings["PORTAGE_USE"].split())
+ dep_iuse = set(settings["IUSE"].split())
+ dep_name, dep_ver, dep_rev = portage.pkgsplit(dep)
+
+ dep_pkg = Package(dep_name,"%s-%s" % (dep_ver, dep_rev), list(dep_use_enabled & dep_iuse))
+ package_infos.append(dep_pkg.get_info())
+
+
+ if dep_failed:
+ log.error("Unable to emerge package %s with deps %s" % (pkg, group))
+ # TODO unmerge succeeded deps
+ continue
ret = portage.doebuild(ebuild, "merge", portage.root, settings, debug = False, tree="porttree")
if ret != 0:
@@ -164,8 +192,21 @@ class Tinderbox(object):
envfile.close()
del envfile
- # save package/logs in config.CHROOT_LOGS, parent can get them crom config.WORK_CHROOT/config.CHROOT_LOGS
-
+ package_infos.append(package.get_info())
+
+ for dep in group:
+ dep_cat, dep_pv = portage.catsplit(dep)
+
+ ret = portage.unmerge(dep_cat, dep_pv, portage.root, settings, True, vartree=vartree)
+ if ret != 0:
+ log.error("Unable to unmerge dep %s" % dep)
+
+ pkg_cat, pkg_pv = portage.catsplit(pkg)
+ ret = portage.unmerge(pkg_cat, pkg_pv, portage.root, settings, True, vartree=vartree)
+ if ret != 0:
+ log.error("Unable to unmerge dep %s" % dep)
+
+