From b0037e6d973f57de0745dc59aa6d265f410649c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20K=2E=20H=C3=BCttel?= Date: Wed, 27 Sep 2023 00:57:41 +0200 Subject: [PATCH] Add BINPKG_FORMAT to the compat_upgrade mechanism MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Andreas K. Hüttel Closes: https://github.com/gentoo/portage/pull/1102 Signed-off-by: Sam James --- lib/portage/_compat_upgrade/binpkg_format.py | 51 ++++++++++++++++++++ lib/portage/_compat_upgrade/meson.build | 1 + 2 files changed, 52 insertions(+) create mode 100644 lib/portage/_compat_upgrade/binpkg_format.py diff --git a/lib/portage/_compat_upgrade/binpkg_format.py b/lib/portage/_compat_upgrade/binpkg_format.py new file mode 100644 index 0000000000..6ad24799c5 --- /dev/null +++ b/lib/portage/_compat_upgrade/binpkg_format.py @@ -0,0 +1,51 @@ +# Copyright 2020 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_BINPKG_FORMAT = "xpak" + + +def main(): + """ + If the current installation is still configured to use the old + default BINPKG_FORMAT=xpak setting, then patch make.globals + inside ${ED} to maintain backward compatibility, ensuring that + binary package consumers are not caught off guard. This is + intended to be called from the ebuild as follows: + + pkg_preinst() { + python_setup + env -u BINPKG_FORMAT + PYTHONPATH="${D%/}$(python_get_sitedir)${PYTHONPATH:+:${PYTHONPATH}}" \ + "${PYTHON}" -m portage._compat_upgrade.binpkg_format || die + } + """ + if ( + portage.settings.get("BINPKG_FORMAT", COMPAT_BINPKG_FORMAT) + == COMPAT_BINPKG_FORMAT + ): + 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() + compat_setting = f'BINPKG_FORMAT="{COMPAT_BINPKG_FORMAT}"' + portage.output.EOutput().einfo( + "Setting make.globals default {} for backward compatibility".format( + compat_setting + ) + ) + content = re.sub( + "^BINPKG_FORMAT=.*$", compat_setting, content, flags=re.MULTILINE + ) + with open(config_path, "w") as f: + f.write(content) + + +if __name__ == "__main__": + main() diff --git a/lib/portage/_compat_upgrade/meson.build b/lib/portage/_compat_upgrade/meson.build index 365bd49ff4..e99b33c152 100644 --- a/lib/portage/_compat_upgrade/meson.build +++ b/lib/portage/_compat_upgrade/meson.build @@ -1,6 +1,7 @@ py.install_sources( [ 'binpkg_compression.py', + 'binpkg_format.py', 'binpkg_multi_instance.py', 'default_locations.py', '__init__.py',