blob: 19bea1903f54a7ab52abb2464ffee6903399feef [file] [log] [blame]
# 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