On Sun, 10 May 2020 19:29:34 -0700
Zac Medico <zmed...@gentoo.org> wrote:

> This includes a _compat_upgrade.binpkg_compression script that the
> ebuild can call in pkg_preinst in order to maintain a
> backward-compatible bzip2 default when appropriate, ensuring that
> binary package consumers are not caught off guard.
> 
> Bug: https://bugs.gentoo.org/715108
> Signed-off-by: Zac Medico <zmed...@gentoo.org>
> ---
>  .travis.yml                                   |  4 ++
>  cnf/make.globals                              |  5 ++-
>  .../_compat_upgrade/binpkg_compression.py     | 40
> +++++++++++++++++++ .../tests/resolver/ResolverPlayground.py      |
> 1 + man/make.conf.5                               |  4 +-
>  5 files changed, 50 insertions(+), 4 deletions(-)
>  create mode 100644 lib/portage/_compat_upgrade/binpkg_compression.py
> 
> diff --git a/.travis.yml b/.travis.yml
> index 9269d4034..2132c8c87 100644
> --- a/.travis.yml
> +++ b/.travis.yml
> @@ -1,3 +1,4 @@
> +dist: bionic
>  language: python
>  python:
>      - 2.7
> @@ -8,6 +9,9 @@ python:
>      - pypy3
>  
>  # command to install dependencies
> +before_install:
> +    # Use "dist: bionic" to get a zstd with --long support.
> +    - sudo apt-get -y install zstd
>  install:
>      - pip install tox
>  
> diff --git a/cnf/make.globals b/cnf/make.globals
> index 4a59dbe3c..dd3f28f70 100644
> --- a/cnf/make.globals
> +++ b/cnf/make.globals
> @@ -34,8 +34,9 @@ RPMDIR="/var/cache/rpm"
>  # Temporary build directory
>  PORTAGE_TMPDIR="/var/tmp"
>  
> -# The compression used for binary packages. Defaults to zstd when
> USE=zstd is enabled. -BINPKG_COMPRESS="bzip2"
> +# The compression used for binary packages. Defaults to zstd except
> for +# existing installs where bzip2 is used for backward
> compatibility. +BINPKG_COMPRESS="zstd"
>  
>  # Fetching command (3 tries, passive ftp for firewall compatibility)
>  FETCHCOMMAND="wget -t 3 -T 60 --passive-ftp -O
> \"\${DISTDIR}/\${FILE}\" \"\${URI}\"" diff --git
> a/lib/portage/_compat_upgrade/binpkg_compression.py
> b/lib/portage/_compat_upgrade/binpkg_compression.py new file mode
> 100644 index 000000000..0f5704733 --- /dev/null
> +++ b/lib/portage/_compat_upgrade/binpkg_compression.py
> @@ -0,0 +1,40 @@
> +# 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_COMPRESS = 'bzip2'
> +
> +
> +def main():
> +     """
> +     If the current installation is still configured to use the
> old
> +     default BINPKG_COMPRESS=bzip2 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_COMPRESS
> +
> PYTHONPATH="${D%/}$(python_get_sitedir)${PYTHONPATH:+:${PYTHONPATH}}"
> \
> +                     "${PYTHON}" -m
> portage._compat_upgrade.binpkg_compression || die
> +     }
> +     """
> +     if portage.settings.get('BINPKG_COMPRESS',
> COMPAT_BINPKG_COMPRESS) == COMPAT_BINPKG_COMPRESS:
> +             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 =
> 'BINPKG_COMPRESS="{}"'.format(COMPAT_BINPKG_COMPRESS)
> +                     portage.output.EOutput().einfo('Setting
> make.globals default {} for backward
> compatibility'.format(compat_setting))
> +                     content = re.sub('^BINPKG_COMPRESS=.*$',
> compat_setting, content, flags=re.MULTILINE)
> +             with open(config_path, 'wt') as f:
> +                     f.write(content)
> +
> +
> +if __name__ == '__main__':
> +     main()
> diff --git a/lib/portage/tests/resolver/ResolverPlayground.py
> b/lib/portage/tests/resolver/ResolverPlayground.py index
> 98831e000..de80a0cc1 100644 ---
> a/lib/portage/tests/resolver/ResolverPlayground.py +++
> b/lib/portage/tests/resolver/ResolverPlayground.py @@ -112,6 +112,7
> @@ class ResolverPlayground(object): "uname",
>                               "uniq",
>                               "xargs",
> +                             "zstd",
>                       )
>                       # Exclude internal wrappers from PATH lookup.
>                       orig_path = os.environ['PATH']
> diff --git a/man/make.conf.5 b/man/make.conf.5
> index f82fed65a..a3bd662ae 100644
> --- a/man/make.conf.5
> +++ b/man/make.conf.5
> @@ -1,4 +1,4 @@
> -.TH "MAKE.CONF" "5" "Nov 2019" "Portage VERSION" "Portage"
> +.TH "MAKE.CONF" "5" "May 2020" "Portage VERSION" "Portage"
>  .SH "NAME"
>  make.conf \- custom settings for Portage
>  .SH "SYNOPSIS"
> @@ -115,7 +115,7 @@ This variable is used to determine the
> compression used for \fIbinary packages\fR. Supported settings and
> compression algorithms are: bzip2, gzip, lz4, lzip, lzop, xz, zstd.
>  .br
> -Defaults to "bzip2".
> +Defaults to "zstd".
>  .br
>  .I Example:
>  .nf
looks good, I've not tested it, but changes are minor

Reply via email to