| # Copyright 2010-2020 Gentoo Authors |
| # Distributed under the terms of the GNU General Public License v2 |
| |
| __all__ = ["deprecated_profile_check"] |
| |
| import io |
| |
| import portage |
| from portage import os, _encodings, _unicode_encode |
| from portage.const import DEPRECATED_PROFILE_FILE |
| from portage.localization import _ |
| from portage.output import colorize |
| from portage.util import writemsg |
| |
| |
| def deprecated_profile_check(settings=None): |
| config_root = None |
| eprefix = None |
| deprecated_profile_file = None |
| if settings is not None: |
| config_root = settings["PORTAGE_CONFIGROOT"] |
| eprefix = settings["EPREFIX"] |
| for x in reversed(settings._locations_manager.profiles_complex): |
| if x.show_deprecated_warning: |
| deprecated_profile_file = os.path.join(x.location, "deprecated") |
| if os.access(deprecated_profile_file, os.R_OK): |
| break |
| else: |
| deprecated_profile_file = None |
| |
| if deprecated_profile_file is None: |
| deprecated_profile_file = os.path.join( |
| config_root or "/", DEPRECATED_PROFILE_FILE |
| ) |
| if not os.access(deprecated_profile_file, os.R_OK): |
| deprecated_profile_file = os.path.join( |
| config_root or "/", "etc", "make.profile", "deprecated" |
| ) |
| if not os.access(deprecated_profile_file, os.R_OK): |
| return |
| |
| with io.open( |
| _unicode_encode( |
| deprecated_profile_file, encoding=_encodings["fs"], errors="strict" |
| ), |
| mode="r", |
| encoding=_encodings["content"], |
| errors="replace", |
| ) as f: |
| dcontent = f.readlines() |
| writemsg( |
| colorize( |
| "BAD", |
| _("\n!!! Your current profile is " "deprecated and not supported anymore."), |
| ) |
| + "\n", |
| noiselevel=-1, |
| ) |
| writemsg( |
| colorize("BAD", _("!!! Use eselect profile to update your " "profile.")) + "\n", |
| noiselevel=-1, |
| ) |
| if not dcontent: |
| writemsg( |
| colorize("BAD", _("!!! Please refer to the " "Gentoo Upgrading Guide.")) |
| + "\n", |
| noiselevel=-1, |
| ) |
| return True |
| newprofile = dcontent[0].rstrip("\n") |
| writemsg( |
| colorize( |
| "BAD", _("!!! Please upgrade to the " "following profile if possible:") |
| ) |
| + "\n\n", |
| noiselevel=-1, |
| ) |
| writemsg(8 * " " + colorize("GOOD", newprofile) + "\n\n", noiselevel=-1) |
| if len(dcontent) > 1: |
| writemsg(_("To upgrade do the following steps:\n"), noiselevel=-1) |
| for myline in dcontent[1:]: |
| writemsg(myline, noiselevel=-1) |
| writemsg("\n\n", noiselevel=-1) |
| else: |
| writemsg(_("You may use the following command to upgrade:\n\n"), noiselevel=-1) |
| writemsg( |
| 8 * " " + colorize("INFORM", "eselect profile set " + newprofile) + "\n\n", |
| noiselevel=-1, |
| ) |
| |
| if settings is not None: |
| main_repo_loc = settings.repositories.mainRepoLocation() |
| new_profile_path = os.path.join( |
| main_repo_loc, "profiles", newprofile.rstrip("\n") |
| ) |
| |
| if os.path.isdir(new_profile_path): |
| new_config = portage.config( |
| config_root=config_root, |
| config_profile_path=new_profile_path, |
| eprefix=eprefix, |
| ) |
| |
| if not new_config.profiles: |
| writemsg( |
| "\n %s %s\n" |
| % ( |
| colorize("WARN", "*"), |
| _( |
| "You must update portage before you " |
| "can migrate to the above profile." |
| ), |
| ), |
| noiselevel=-1, |
| ) |
| writemsg( |
| " %s %s\n\n" |
| % ( |
| colorize("WARN", "*"), |
| _( |
| "In order to update portage, " |
| "run 'emerge --oneshot sys-apps/portage'." |
| ), |
| ), |
| noiselevel=-1, |
| ) |
| |
| return True |