| # Copyright 2007 Gentoo Foundation |
| # Distributed under the terms of the GNU General Public License v2 |
| |
| import logging |
| |
| from portage import os |
| from portage.util import grabfile_package, stack_lists |
| from portage._sets.base import PackageSet |
| from portage._sets import get_boolean |
| from portage.util import writemsg_level |
| |
| __all__ = ["PackagesSystemSet"] |
| |
| class PackagesSystemSet(PackageSet): |
| _operations = ["merge"] |
| |
| def __init__(self, profile_paths, debug=False): |
| super(PackagesSystemSet, self).__init__() |
| self._profile_paths = profile_paths |
| self._debug = debug |
| if profile_paths: |
| description = self._profile_paths[-1] |
| if description == "/etc/portage/profile" and \ |
| len(self._profile_paths) > 1: |
| description = self._profile_paths[-2] |
| else: |
| description = None |
| self.description = "System packages for profile %s" % description |
| |
| def load(self): |
| debug = self._debug |
| if debug: |
| writemsg_level("\nPackagesSystemSet: profile paths: %s\n" % \ |
| (self._profile_paths,), level=logging.DEBUG, noiselevel=-1) |
| |
| mylist = [grabfile_package(os.path.join(x, "packages"), verify_eapi=True) for x in self._profile_paths] |
| |
| if debug: |
| writemsg_level("\nPackagesSystemSet: raw packages: %s\n" % \ |
| (mylist,), level=logging.DEBUG, noiselevel=-1) |
| |
| mylist = stack_lists(mylist, incremental=1) |
| |
| if debug: |
| writemsg_level("\nPackagesSystemSet: stacked packages: %s\n" % \ |
| (mylist,), level=logging.DEBUG, noiselevel=-1) |
| |
| self._setAtoms([x[1:] for x in mylist if x[0] == "*"]) |
| |
| def singleBuilder(self, options, settings, trees): |
| debug = get_boolean(options, "debug", False) |
| return PackagesSystemSet(settings.profiles, debug=debug) |
| singleBuilder = classmethod(singleBuilder) |