[matter.builder] correctly handle Portage package uninstalls

Package uninstalls were accounted as built packages, fooling the
entropysrv plugin.
This commit is contained in:
Fabio Erculiani
2013-01-06 17:17:41 +00:00
parent 5cc95a03a6
commit 1cc776e25e

View File

@@ -79,6 +79,7 @@ class PackageBuilder(object):
self._pkg_number = pkg_number
self._tot_pkgs = tot_pkgs
self._built_packages = []
self._uninstalled_packages = []
self._not_found_packages = []
self._not_installed_packages = []
self._not_merged_packages = []
@@ -135,6 +136,12 @@ class PackageBuilder(object):
"""
return self._built_packages
def get_uninstalled_packages(self):
"""
Return the list of successfully uninstalled packages.
"""
return self._uninstalled_packages
def get_not_found_packages(self):
"""
Return the list of packages that haven't been found in Portage.
@@ -335,7 +342,7 @@ class PackageBuilder(object):
for pobj in package_queue:
if isinstance(pobj, Blocker):
# blocker, list full atom
dep_list.append("!" + pobj.atom)
dep_list.append(pobj.atom)
continue
cpv = pobj.cpv
repo = pobj.repo
@@ -482,7 +489,7 @@ class PackageBuilder(object):
print_info("USE flags constraints are met for all "
"the queued packages")
return dep_list, real_queue
return real_queue
def _setup_keywords(self, settings):
"""
@@ -634,15 +641,21 @@ class PackageBuilder(object):
return 0
print_info("dependency graph generated successfully")
f_data = self._post_graph_filters(graph, vardb, portdb)
if f_data is None:
real_queue = self._post_graph_filters(graph, vardb, portdb)
if real_queue is None:
# post-graph filters not passed, giving up
return 0
dep_list, real_queue = f_data
print_info("about to build the following packages:")
for dep in dep_list:
print_info(" %s" % (dep,))
merge_queue = [x for x in real_queue if x.operation == "merge"]
unmerge_queue = [x for x in real_queue if x.operation == "uninstall"]
if merge_queue:
print_info("about to build the following packages:")
for pkg in merge_queue:
print_info(" %s" % (pkg.cpv,))
if unmerge_queue:
print_info("about to uninstall the following packages:")
for pkg in unmerge_queue:
print_info(" %s" % (pkg.cpv,))
# re-calling action_build(), deps are re-calculated though
validate_ebuild_environment(emerge_trees)
@@ -675,9 +688,14 @@ class PackageBuilder(object):
print_warning("package: %s, has broken cpv: '%s', ignoring" % (
pkg, cpv,))
elif cpv not in not_merged:
# add to build queue
print_info("package: %s, successfully built" % (cpv,))
self._built_packages.append(cpv)
if pkg.operation == "merge":
# add to build queue
print_info("package: %s, successfully built" % (cpv,))
self._built_packages.append(cpv)
else:
# add to uninstall queue
print_info("package: %s, successfully uninstalled" % (cpv,))
self._uninstalled_packages.append(cpv)
post_emerge(myaction, myopts, myfiles, settings["ROOT"],
emerge_trees, mtimedb, retval)