diff options
author | 2009-06-30 22:01:51 +0200 | |
---|---|---|
committer | 2009-07-01 14:21:09 +0200 | |
commit | 1c83ba7f55a193f1c52ae2714d28f11f0e996afc (patch) | |
tree | e2cb52af8ef1a281b8a8b0c968e10fd29e5b512c | |
parent | Added option to modify more files in BASE_CHROOT (diff) | |
download | collagen-1c83ba7f55a193f1c52ae2714d28f11f0e996afc.tar.gz collagen-1c83ba7f55a193f1c52ae2714d28f11f0e996afc.tar.bz2 collagen-1c83ba7f55a193f1c52ae2714d28f11f0e996afc.zip |
Basic dependency emerging/unmerging idea
-rw-r--r-- | src/tinderbox/__init__.py | 51 |
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) + + |