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
---
 cnf/make.globals                                 |  4 +-
 cnf/repos.conf                                   |  2 +-
 lib/portage/_compat_upgrade/__init__.py          |  0
 lib/portage/_compat_upgrade/default_locations.py | 82 ++++++++++++++++++++++++
 4 files changed, 85 insertions(+), 3 deletions(-)
 create mode 100644 lib/portage/_compat_upgrade/__init__.py
 create mode 100644 lib/portage/_compat_upgrade/default_locations.py

diff --git a/cnf/make.globals b/cnf/make.globals
index 04a708af8..bc81a6a73 100644
--- a/cnf/make.globals
+++ b/cnf/make.globals
@@ -28,8 +28,8 @@ ACCEPT_PROPERTIES="*"
 ACCEPT_RESTRICT="*"
 
 # Miscellaneous paths
-DISTDIR="/usr/portage/distfiles"
-PKGDIR="/usr/portage/packages"
+DISTDIR="/var/cache/distfiles"
+PKGDIR="/var/cache/binpkgs"
 RPMDIR="/usr/portage/rpm"
 
 # Temporary build directory
diff --git a/cnf/repos.conf b/cnf/repos.conf
index 352073cfd..e84840bf2 100644
--- a/cnf/repos.conf
+++ b/cnf/repos.conf
@@ -2,7 +2,7 @@
 main-repo = gentoo
 
 [gentoo]
-location = /usr/portage
+location = /var/db/repos/gentoo
 sync-type = rsync
 sync-uri = rsync://rsync.gentoo.org/gentoo-portage
 auto-sync = yes
diff --git a/lib/portage/_compat_upgrade/__init__.py 
b/lib/portage/_compat_upgrade/__init__.py
new file mode 100644
index 000000000..e69de29bb
diff --git a/lib/portage/_compat_upgrade/default_locations.py 
b/lib/portage/_compat_upgrade/default_locations.py
new file mode 100644
index 000000000..484a2dea4
--- /dev/null
+++ b/lib/portage/_compat_upgrade/default_locations.py
@@ -0,0 +1,82 @@
+# Copyright 2018 Gentoo Foundation
+# 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()
-- 
2.16.4


Reply via email to