aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2018-08-05 14:30:57 -0700
committerZac Medico <zmedico@gentoo.org>2019-04-18 10:52:54 -0700
commitef8469befbd7b61f1bae8f21ffd95e0c0306a4f8 (patch)
tree5b92b77c02c53fe3280c5f37d20151ef82fc37b6 /lib/portage/_compat_upgrade
parentUpdates for portage-2.3.63 release (diff)
downloadportage-ef8469befbd7b61f1bae8f21ffd95e0c0306a4f8.tar.gz
portage-ef8469befbd7b61f1bae8f21ffd95e0c0306a4f8.tar.bz2
portage-ef8469befbd7b61f1bae8f21ffd95e0c0306a4f8.zip
Change /usr/portage council approved locations (bug 378603)
This includes a _compat_upgrade.default_locations script that the ebuild can call in pkg_preinst in order to maintain backward-compatible defaults when appropriate. The new defaults are specified in the summary of the 20180729 council meeting: Vote: Default locations for the Gentoo repository, distfiles, and binary packages will be, respectively: /var/db/repos/gentoo /var/cache/distfiles /var/cache/binpkgs Accepted with 6 yes votes and 1 no vote. See: https://projects.gentoo.org/council/meeting-logs/20180729-summary.txt Bug: https://bugs.gentoo.org/378603 Signed-off-by: Zac Medico <zmedico@gentoo.org>
Diffstat (limited to 'lib/portage/_compat_upgrade')
-rw-r--r--lib/portage/_compat_upgrade/__init__.py0
-rw-r--r--lib/portage/_compat_upgrade/default_locations.py82
2 files changed, 82 insertions, 0 deletions
diff --git a/lib/portage/_compat_upgrade/__init__.py b/lib/portage/_compat_upgrade/__init__.py
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/lib/portage/_compat_upgrade/__init__.py
diff --git a/lib/portage/_compat_upgrade/default_locations.py b/lib/portage/_compat_upgrade/default_locations.py
new file mode 100644
index 000000000..91f300637
--- /dev/null
+++ b/lib/portage/_compat_upgrade/default_locations.py
@@ -0,0 +1,82 @@
+# Copyright 2018-2019 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+import re
+
+import portage
+from portage import os
+from portage.const import GLOBAL_CONFIG_PATH
+
+COMPAT_DISTDIR = 'usr/portage/distfiles'
+COMPAT_PKGDIR = 'usr/portage/packages'
+COMPAT_MAIN_REPO = 'usr/portage'
+
+
+def main():
+ """
+ If the current installation is still configured to use any of the
+ legacy default /usr/portage locations, then patch make.globals and
+ repos.conf inside ${ED} to maintain compatible defaults. This is
+ intended to be called from the ebuild as follows:
+
+ pkg_preinst() {
+ python_setup
+ python_export PYTHON_SITEDIR
+ env -u DISTDIR \
+ -u PORTAGE_OVERRIDE_EPREFIX \
+ -u PORTAGE_REPOSITORIES \
+ -u PORTDIR \
+ -u PORTDIR_OVERLAY \
+ PYTHONPATH="${ED%/}${PYTHON_SITEDIR}${PYTHONPATH:+:${PYTHONPATH}}" \
+ "${PYTHON}" -m portage._compat_upgrade.default_locations || die
+ }
+ """
+ out = portage.output.EOutput()
+ config = portage.settings
+
+ compat_distdir = os.path.join(portage.const.EPREFIX or '/', COMPAT_DISTDIR)
+ try:
+ do_distdir = os.path.samefile(config['DISTDIR'], compat_distdir)
+ except OSError:
+ do_distdir = False
+
+ compat_pkgdir = os.path.join(portage.const.EPREFIX or '/', COMPAT_PKGDIR)
+ try:
+ do_pkgdir = os.path.samefile(config['PKGDIR'], compat_pkgdir)
+ except OSError:
+ do_pkgdir = False
+
+ compat_main_repo = os.path.join(portage.const.EPREFIX or '/', COMPAT_MAIN_REPO)
+ try:
+ do_main_repo = os.path.samefile(config.repositories.mainRepoLocation(), compat_main_repo)
+ except OSError:
+ do_main_repo = False
+
+ if do_distdir or do_pkgdir:
+ config_path = os.path.join(os.environ['ED'], GLOBAL_CONFIG_PATH.lstrip(os.sep), 'make.globals')
+ with open(config_path) as f:
+ content = f.read()
+ if do_distdir:
+ compat_setting = 'DISTDIR="{}"'.format(compat_distdir)
+ out.einfo('Setting make.globals default {} for backward compatibility'.format(compat_setting))
+ content = re.sub('^DISTDIR=.*$', compat_setting, content, flags=re.MULTILINE)
+ if do_pkgdir:
+ compat_setting = 'PKGDIR="{}"'.format(compat_pkgdir)
+ out.einfo('Setting make.globals default {} for backward compatibility'.format(compat_setting))
+ content = re.sub('^PKGDIR=.*$', compat_setting, content, flags=re.MULTILINE)
+ with open(config_path, 'wt') as f:
+ f.write(content)
+
+ if do_main_repo:
+ config_path = os.path.join(os.environ['ED'], GLOBAL_CONFIG_PATH.lstrip(os.sep), 'repos.conf')
+ with open(config_path) as f:
+ content = f.read()
+ compat_setting = 'location = {}'.format(compat_main_repo)
+ out.einfo('Setting repos.conf default {} for backward compatibility'.format(compat_setting))
+ content = re.sub('^location =.*$', compat_setting, content, flags=re.MULTILINE)
+ with open(config_path, 'wt') as f:
+ f.write(content)
+
+
+if __name__ == '__main__':
+ main()