diff --git a/0001-Fix-toolz-imports.patch b/0001-Fix-toolz-imports.patch deleted file mode 100644 index c4b288f..0000000 --- a/0001-Fix-toolz-imports.patch +++ /dev/null @@ -1,98 +0,0 @@ -From 5115316f1cb11b2e5fcc687361b0c9a04dfe62fb Mon Sep 17 00:00:00 2001 -From: rpm-build -Date: Sun, 18 Oct 2020 15:43:33 -0600 -Subject: [PATCH] Fix toolz imports - ---- - conda/plan.py | 2 +- - conda_env/env.py | 5 +---- - tests/base/test_context.py | 2 +- - tests/core/test_path_actions.py | 2 +- - tests/test_activate.py | 2 +- - tests/test_create.py | 2 +- - 6 files changed, 6 insertions(+), 9 deletions(-) - -diff --git a/conda/plan.py b/conda/plan.py -index e0c2ec6..b87c9dc 100644 ---- a/conda/plan.py -+++ b/conda/plan.py -@@ -371,7 +371,7 @@ def _plan_from_actions(actions, index): # pragma: no cover - def _inject_UNLINKLINKTRANSACTION(plan, index, prefix, axn, specs): # pragma: no cover - from os.path import isdir - from .models.dist import Dist -- from ._vendor.toolz.itertoolz import groupby -+ from ._vendor.toolz import groupby - from .instructions import LINK, PROGRESSIVEFETCHEXTRACT, UNLINK, UNLINKLINKTRANSACTION - from .core.package_cache_data import ProgressiveFetchExtract - from .core.link import PrefixSetup, UnlinkLinkTransaction -diff --git a/conda_env/env.py b/conda_env/env.py -index 4e83f88..09eb1a1 100644 ---- a/conda_env/env.py -+++ b/conda_env/env.py -@@ -22,10 +22,7 @@ from conda.models.prefix_graph import PrefixGraph - from . import compat, exceptions - from conda.history import History - --try: -- from cytoolz.itertoolz import concatv, groupby --except ImportError: # pragma: no cover -- from conda._vendor.toolz.itertoolz import concatv, groupby # NOQA -+from conda._vendor.toolz import concatv, groupby # NOQA - - - VALID_KEYS = ('name', 'dependencies', 'prefix', 'channels', 'variables') -diff --git a/tests/base/test_context.py b/tests/base/test_context.py -index 264e2dc..ae0e256 100644 ---- a/tests/base/test_context.py -+++ b/tests/base/test_context.py -@@ -11,7 +11,7 @@ import pytest - - from conda._vendor.auxlib.collection import AttrDict - from conda._vendor.auxlib.ish import dals --from conda._vendor.toolz.itertoolz import concat -+from conda._vendor.toolz import concat - from conda.base.constants import PathConflict, ChannelPriority - from conda.base.context import context, reset_context, conda_tests_ctxt_mgmt_def_pol - from conda.common.compat import odict, iteritems -diff --git a/tests/core/test_path_actions.py b/tests/core/test_path_actions.py -index 02b5c5f..c9e55ba 100644 ---- a/tests/core/test_path_actions.py -+++ b/tests/core/test_path_actions.py -@@ -11,7 +11,7 @@ from uuid import uuid4 - import pytest - - from conda._vendor.auxlib.collection import AttrDict --from conda._vendor.toolz.itertoolz import groupby -+from conda._vendor.toolz import groupby - from conda.base.context import context - from conda.common.compat import PY2, on_win - from conda.common.path import get_bin_directory_short_path, get_python_noarch_target_path, \ -diff --git a/tests/test_activate.py b/tests/test_activate.py -index d319cd0..99658d4 100644 ---- a/tests/test_activate.py -+++ b/tests/test_activate.py -@@ -16,7 +16,7 @@ import json - from conda import __version__ as conda_version - from conda import CONDA_PACKAGE_ROOT - from conda._vendor.auxlib.ish import dals --from conda._vendor.toolz.itertoolz import concatv -+from conda._vendor.toolz import concatv - from conda.activate import CmdExeActivator, CshActivator, FishActivator, PosixActivator, \ - PowerShellActivator, XonshActivator, activator_map, _build_activator_cls, \ - main as activate_main, native_path_to_unix -diff --git a/tests/test_create.py b/tests/test_create.py -index 2d230dc..3265623 100644 ---- a/tests/test_create.py -+++ b/tests/test_create.py -@@ -6,7 +6,7 @@ from datetime import datetime - from glob import glob - - from conda._vendor.auxlib.compat import Utf8NamedTemporaryFile --from conda._vendor.toolz.itertoolz import groupby -+from conda._vendor.toolz import groupby - from conda.gateways.disk.permissions import make_read_only - from conda.models.channel import Channel - from conda.resolve import Resolve --- -2.29.0.rc2 - diff --git a/0001-conda_sys_prefix.patch.patch b/0001-conda_sys_prefix.patch.patch new file mode 100644 index 0000000..6e2c646 --- /dev/null +++ b/0001-conda_sys_prefix.patch.patch @@ -0,0 +1,25 @@ +From 7eeb6a32d2004bc20a156dd8920964c107e99321 Mon Sep 17 00:00:00 2001 +From: rpm-build +Date: Tue, 30 Jul 2024 18:00:00 -0600 +Subject: [PATCH 1/2] conda_sys_prefix.patch + +--- + conda/__init__.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/conda/__init__.py b/conda/__init__.py +index 4245cae..a436b1d 100644 +--- a/conda/__init__.py ++++ b/conda/__init__.py +@@ -54,7 +54,7 @@ __summary__ = __doc__ + __url__ = "https://github.com/conda/conda" + + if os.getenv("CONDA_ROOT") is None: +- os.environ["CONDA_ROOT"] = sys.prefix ++ os.environ["CONDA_ROOT"] = '/usr/share/conda' + + #: The conda package directory. + CONDA_PACKAGE_ROOT = abspath(dirname(__file__)) +-- +2.45.2 + diff --git a/0002-Use-main-entry-point-for-conda-and-re-add-conda-env-.patch b/0002-Use-main-entry-point-for-conda-and-re-add-conda-env-.patch new file mode 100644 index 0000000..3d3d298 --- /dev/null +++ b/0002-Use-main-entry-point-for-conda-and-re-add-conda-env-.patch @@ -0,0 +1,26 @@ +From f8f9a23a2a7540ec39cab9606f8b95aa8b346b65 Mon Sep 17 00:00:00 2001 +From: rpm-build +Date: Mon, 24 Nov 2025 17:30:20 -0700 +Subject: [PATCH 2/2] Use main entry point for conda and re-add conda-env entry + +--- + pyproject.toml | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/pyproject.toml b/pyproject.toml +index 7c8f24f..049859b 100644 +--- a/pyproject.toml ++++ b/pyproject.toml +@@ -51,7 +51,8 @@ readme = "README.md" + requires-python = ">=3.10" + + [project.scripts] +-conda = "conda.cli.main_pip:main" ++conda = "conda.cli.main:main" ++conda-env = "conda_env.cli.main:main" + + [project.urls] + changelog = "https://github.com/conda/conda/blob/main/CHANGELOG.md" +-- +2.51.1 + diff --git a/0003-Drop-fs-path-encoding-manipulation-under-python2.patch b/0003-Drop-fs-path-encoding-manipulation-under-python2.patch deleted file mode 100644 index b588744..0000000 --- a/0003-Drop-fs-path-encoding-manipulation-under-python2.patch +++ /dev/null @@ -1,23 +0,0 @@ -commit 1f21cf4dd33e4d62f3dca93294bfa5508a2591ab -Author: rpm-build -Date: Sat Mar 30 20:59:05 2019 -0600 - - [PATCH] Drop fs path encoding manipulation under python2 - -diff --git a/conda/activate.py b/conda/activate.py -index e515c0e..3632a61 100644 ---- a/conda/activate.py -+++ b/conda/activate.py -@@ -63,11 +63,7 @@ class _Activator(object): - def __init__(self, arguments=None): - self._raw_arguments = arguments - -- if PY2: -- self.environ = {ensure_fs_path_encoding(k): ensure_fs_path_encoding(v) -- for k, v in iteritems(os.environ)} -- else: -- self.environ = os.environ.copy() -+ self.environ = os.environ.copy() - - # Once Python2 dies odargs can become kwargs again since dicts are ordered since 3.6. - def get_export_unset_vars(self, odargs): diff --git a/0004-Do-not-try-to-run-usr-bin-python.patch b/0004-Do-not-try-to-run-usr-bin-python.patch index 4afd0f1..f747eb0 100644 --- a/0004-Do-not-try-to-run-usr-bin-python.patch +++ b/0004-Do-not-try-to-run-usr-bin-python.patch @@ -1,42 +1,25 @@ -From cccc709c085890633be767a44465229d049d5941 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= -Date: Wed, 13 Feb 2019 13:06:36 +0100 -Subject: [PATCH] Do not try to run /usr/bin/python - -On modern linux distros, /usr/bin/python will usually either -refer to python2 or not exists at all. Use sys.executable to -run subprocess calls with the same python executable as the -parent process. ---- - conda/common/path.py | 7 +++++-- - 1 file changed, 5 insertions(+), 2 deletions(-) - -diff --git a/conda/common/path.py b/conda/common/path.py -index b51f7f272d..06e0b4bc9a 100644 ---- a/conda/common/path.py -+++ b/conda/common/path.py -@@ -6,6 +6,7 @@ from __future__ import absolute_import, division, print_function, unicode_litera - from functools import reduce - from logging import getLogger - import os -+import sys - from os.path import abspath, basename, expanduser, expandvars, join, normcase, split, splitext +diff -up conda-24.9.1/conda/common/path/python.py.python conda-24.9.1/conda/common/path/python.py +--- conda-24.9.1/conda/common/path/python.py.python 2024-10-01 15:11:32.000000000 -0600 ++++ conda-24.9.1/conda/common/path/python.py 2024-10-07 21:43:44.951895698 -0600 +@@ -5,6 +5,7 @@ + from __future__ import annotations + import re - import subprocess -@@ -155,9 +156,11 @@ def parse_entry_point_def(ep_definition): ++import sys + from logging import getLogger + from os.path import join, split, splitext + +@@ -52,9 +53,11 @@ def parse_entry_point_def(ep_definition) def get_python_short_path(python_version=None): if on_win: return "python.exe" -- if python_version and '.' not in python_version: +- if python_version and "." not in python_version: + if not python_version: + return sys.executable + if '.' not in python_version: - python_version = '.'.join(python_version) -- return join("bin", "python%s" % (python_version or '')) + python_version = ".".join(python_version) +- return join("bin", "python%s" % (python_version or "")) + return join("bin", "python" + python_version) def get_python_site_packages_short_path(python_version): --- -2.19.2 - diff --git a/0005-Fix-failing-tests-in-test_api.py.patch b/0005-Fix-failing-tests-in-test_api.py.patch index 7434f7b..b5e2f95 100644 --- a/0005-Fix-failing-tests-in-test_api.py.patch +++ b/0005-Fix-failing-tests-in-test_api.py.patch @@ -1,21 +1,5 @@ -From 4bc8b4ec9579e7c015a6ad5b41031c850596e0fb Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= -Date: Fri, 21 Sep 2018 10:23:39 +0200 -Subject: [PATCH] Fix failing tests in test_api.py -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Based on commit 0722e2edc93ae818bddd18f23be5b18c3a2a1d55 by -Kale Franz . - -Signed-off-by: Zbigniew Jędrzejewski-Szmek ---- - tests/test_api.py | 17 +++++++++-------- - 1 file changed, 9 insertions(+), 8 deletions(-) - diff --git a/tests/test_api.py b/tests/test_api.py -index 3ca97be734..e866e82fd3 100644 +index dd6a7b9..c60d1a1 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -224,7 +224,7 @@ def test_PackageCacheData_return_value_contract(): @@ -27,7 +11,7 @@ index 3ca97be734..e866e82fd3 100644 first_writable_result = PackageCacheData.first_writable() assert isinstance(first_writable_result, PackageCacheData) -@@ -269,20 +269,21 @@ def test_PrefixData_contract(): +@@ -265,13 +265,14 @@ def test_PrefixData_contract(): def test_PrefixData_return_value_contract(): pd = PrefixData(context.conda_prefix) @@ -39,16 +23,17 @@ index 3ca97be734..e866e82fd3 100644 + get_result = pd.get(PackageRecord.from_objects(single_prefix_rec)) + assert isinstance(get_result, PrefixRecord) -- query_result = pd.query('openssl') +- query_result = pd.query("openssl") - assert isinstance(query_result, tuple) - assert all(isinstance(prefix_rec, PrefixRecord) for prefix_rec in query_result) -+ query_result = pd.query('openssl') ++ query_result = pd.query("openssl") + assert isinstance(query_result, tuple) + assert all(isinstance(prefix_rec, PrefixRecord) for prefix_rec in query_result) iter_records_result = pd.iter_records() assert isiterable(iter_records_result) - assert all(isinstance(prefix_rec, PrefixRecord) for prefix_rec in iter_records_result) +@@ -280,7 +281,7 @@ def test_PrefixData_return_value_contract(): + ) is_writable_result = pd.is_writable - assert is_writable_result is True or is_writable_result is False @@ -56,6 +41,3 @@ index 3ca97be734..e866e82fd3 100644 reload_result = pd.reload() assert isinstance(reload_result, PrefixData) --- -2.19.2 - diff --git a/0006-shell-assume-shell-plugins-are-in-etc.patch b/0006-shell-assume-shell-plugins-are-in-etc.patch index 790aeb6..68c60df 100644 --- a/0006-shell-assume-shell-plugins-are-in-etc.patch +++ b/0006-shell-assume-shell-plugins-are-in-etc.patch @@ -1,32 +1,72 @@ diff --git a/conda/activate.py b/conda/activate.py -index e1b1812..567140f 100644 +index f79a03f..951bed4 100644 --- a/conda/activate.py +++ b/conda/activate.py -@@ -825,7 +825,7 @@ class PosixActivator(_Activator): - self.set_var_tmpl = "%s='%s'" - self.run_script_tmpl = '. "%s"' +@@ -914,13 +914,7 @@ class PosixActivator(_Activator): + set_var_tmpl = "%s='%s'" + run_script_tmpl = ". \"`cygpath '%s'`\"" if on_win else '. "%s"' -- self.hook_source_path = join(CONDA_PACKAGE_ROOT, 'shell', 'etc', 'profile.d', 'conda.sh') -+ self.hook_source_path = '/etc/profile.d/conda.sh' +- hook_source_path = Path( +- CONDA_PACKAGE_ROOT, +- "shell", +- "etc", +- "profile.d", +- "conda.sh", +- ) ++ hook_source_path = Path("/etc/profile.d/conda.sh") + inline_hook_source = True - super(PosixActivator, self).__init__(arguments) + def _update_prompt(self, set_vars, conda_prompt_modifier): +@@ -956,13 +950,7 @@ class CshActivator(_Activator): + set_var_tmpl = "set %s='%s'" + run_script_tmpl = "source \"`cygpath '%s'`\"" if on_win else 'source "%s"' -@@ -882,7 +882,7 @@ class CshActivator(_Activator): - self.set_var_tmpl = "set %s='%s'" - self.run_script_tmpl = 'source "%s"' +- hook_source_path = Path( +- CONDA_PACKAGE_ROOT, +- "shell", +- "etc", +- "profile.d", +- "conda.csh", +- ) ++ hook_source_path = Path("/etc/profile.d/conda.csh") + # TCSH/CSH removes newlines when doing command substitution (see `man tcsh`), + # source conda.csh directly and use line terminators to separate commands + inline_hook_source = False +@@ -1001,7 +989,7 @@ class XonshActivator(_Activator): + else 'source-bash --suppress-skip-message -n "%s"' + ) -- self.hook_source_path = join(CONDA_PACKAGE_ROOT, 'shell', 'etc', 'profile.d', 'conda.csh') -+ self.hook_source_path = '/etc/profile.d/conda.csh' +- hook_source_path = Path(CONDA_PACKAGE_ROOT, "shell", "conda.xsh") ++ hook_source_path = Path("/etc/profile.d/conda.xsh") + inline_hook_source = True - super(CshActivator, self).__init__(arguments) + def template_path_var(self, key: str, value: str) -> str: +@@ -1055,14 +1043,7 @@ class FishActivator(_Activator): + set_var_tmpl = 'set -g %s "%s"' + run_script_tmpl = 'source "%s"' -@@ -993,8 +993,7 @@ class FishActivator(_Activator): - self.set_var_tmpl = 'set -g %s "%s"' - self.run_script_tmpl = 'source "%s"' +- hook_source_path = Path( +- CONDA_PACKAGE_ROOT, +- "shell", +- "etc", +- "fish", +- "conf.d", +- "conda.fish", +- ) ++ hook_source_path = Path("/etc/fish/conf.d/conda.fish") + inline_hook_source = True -- self.hook_source_path = join(CONDA_PACKAGE_ROOT, 'shell', 'etc', 'fish', 'conf.d', -- 'conda.fish') -+ self.hook_source_path = '/etc/fish/conf.d/conda.fish' - super(FishActivator, self).__init__(arguments) +diff --git a/conda/base/context.py b/conda/base/context.py +index adf6d6e..612ea4a 100644 +--- a/conda/base/context.py ++++ b/conda/base/context.py +@@ -848,7 +848,7 @@ class Context(Configuration): + def av_data_dir(self) -> PathType: + """Where critical artifact verification data (e.g., various public keys) can be found.""" + # TODO (AV): Find ways to make this user configurable? +- return join(self.conda_prefix, "etc", "conda") ++ return '/etc/conda' + @property + def signing_metadata_url_base(self) -> str | None: diff --git a/0007-Fix-import-of-collections.abc.Iterable.patch b/0007-Fix-import-of-collections.abc.Iterable.patch deleted file mode 100644 index debbcae..0000000 --- a/0007-Fix-import-of-collections.abc.Iterable.patch +++ /dev/null @@ -1,43 +0,0 @@ -From d0d6e937582d673d7b319ff9f26d55a39c3b6b7f Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= -Date: Tue, 4 Feb 2020 14:15:35 +0100 -Subject: [PATCH] Fix import of collections.abc.Iterable - -Required for python3.9 compatibility. ---- - conda/_vendor/auxlib/compat.py | 8 ++++++-- - 1 file changed, 6 insertions(+), 2 deletions(-) - -diff --git a/conda/_vendor/auxlib/compat.py b/conda/_vendor/auxlib/compat.py -index 2cd720e0e5..efb4c111bf 100644 ---- a/conda/_vendor/auxlib/compat.py -+++ b/conda/_vendor/auxlib/compat.py -@@ -2,7 +2,6 @@ - from __future__ import absolute_import, division, print_function - - import codecs --import collections - from itertools import chain - import os - import sys -@@ -17,6 +16,11 @@ from shlex import split - from functools import partial - from tempfile import NamedTemporaryFile, template - -+try: -+ from collections.abc import Iterable # NOQA -+except ImportError: -+ from collections import Iterable # NOQA -+ - try: - from collections import OrderedDict as odict # NOQA - except ImportError: -@@ -34,7 +38,7 @@ def isiterable(obj): - and not isinstance(obj, string_types) - and type(obj) is not type) - else: -- return not isinstance(obj, string_types) and isinstance(obj, collections.Iterable) -+ return not isinstance(obj, string_types) and isinstance(obj, Iterable) - - - # shlex.split() is a poor function to use for anything general purpose (like calling subprocess). diff --git a/changelog b/changelog index e1f8897..bbd1d34 100644 --- a/changelog +++ b/changelog @@ -1,3 +1,24 @@ +* Wed Jul 21 2021 Fedora Release Engineering - 4.10.1-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild + +* Fri Jun 04 2021 Python Maint - 4.10.1-2 +- Rebuilt for Python 3.10 + +* Thu Apr 15 2021 Orion Poplawski - 4.10.1-1 +- Update to 4.10.1 + +* Fri Apr 02 2021 Orion Poplawski - 4.10.0-1 +- Update to 4.10.0 + +* Tue Jan 26 2021 Orion Poplawski - 4.9.2-3 +- Add patch to support python 3.10 + +* Tue Jan 26 2021 Fedora Release Engineering - 4.9.2-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild + +* Wed Nov 11 2020 Orion Poplawski - 4.9.2-1 +- Update to 4.9.2 + * Tue Oct 27 2020 Orion Poplawski - 4.9.1-1 - Update to 4.9.1 diff --git a/conda b/conda index 0309bad..37bab57 100644 --- a/conda +++ b/conda @@ -37,8 +37,9 @@ function __comp_conda_ensure_root() { : import conda : print(os.path.dirname(conda.__file__)) " + script="${script// : /}" # don't assume an active base environment - CONDA_SOURCE=$(conda activate base; python -c "${script// : /}") + CONDA_SOURCE=$(conda activate base; python -c "$script") fi } @@ -51,40 +52,49 @@ function __comp_conda_commands () { echo activate deactivate # check commands from full anaconda install - for f in $CONDA_SOURCE/cli/main_*.py + for f in "$CONDA_SOURCE"/cli/main_*.py do # skip pip -- not a sub-command - [[ $f == */main_pip.py ]] && continue - \expr match "$f" '.*_\([a-z]\+\)\.py$' + [[ "$f" == */main_pip.py ]] && continue + if [[ "$f" =~ .*_([a-z]+)\.py$ ]]; then + echo "${BASH_REMATCH[1]}" + fi done # check extra pluggins - for f in $CONDA_ROOT/bin/conda-* + for f in "$CONDA_ROOT"/bin/conda-* do if [[ -x "$f" && ! -d "$f" ]] then - \expr match "$f" '^.*/conda-\(.*\)' + if [[ "$f" =~ .*/conda-(.*) ]]; then + echo "${BASH_REMATCH[1]}" + fi fi done } function __comp_conda_env_commands() { - for f in $CONDA_SOURCE/../conda_env/cli/main_*.py + for f in "$CONDA_SOURCE"/../conda_env/cli/main_*.py do - \expr match "$f" '.*_\([a-z]\+\)\.py$' + [[ "$f" == */main_vars.py ]] && continue + if [[ "$f" =~ .*_([a-z]+)\.py$ ]]; then + echo "${BASH_REMATCH[1]}" + fi done } function __comp_conda_envs() { \local script=" - : from __future__ import print_function; - : import json, os, sys; - : from os.path import isdir, join; + : from __future__ import print_function + : import json, os, sys + : from os.path import isdir, join : print('\n'.join( : d for ed in json.load(sys.stdin)['envs_dirs'] if isdir(ed) - : for d in os.listdir(ed) if isdir(join(ed, d)))); + : for d in os.listdir(ed) if isdir(join(ed, d))) + : ) " - conda config --json --show envs_dirs | python -c "${script// : /}" + script="${script// : /}" + conda config --json --show envs_dirs | $CONDA_PYTHON_EXE -c "$script" } function __comp_conda_packages() { @@ -95,13 +105,13 @@ function __comp_conda_cmds_str() { # get a list of commands, skipping options \local cmd \local -a cmds - for cmd in $*; do + for cmd in "$@"; do case "$cmd" in -*) continue ;; - *) cmds+=($cmd) ;; + *) cmds+=("$cmd") ;; esac done - echo "${cmds[*]}" + echo "${cmds[@]}" } # helper for debugging issues with the cache @@ -135,7 +145,7 @@ function __comp_conda_option_lookup() { else word_list=${__comp_conda_cache[$cmd_key]} fi - echo $word_list + echo "$word_list" } # cache conda subcommand help lookups for the duration of the shell @@ -149,6 +159,7 @@ __comp_conda_ensure_root 2>/dev/null || : _comp_conda() { + # shellcheck disable=SC2034 \local cur prev words cword _init_completion || return @@ -157,7 +168,7 @@ _comp_conda() \local word_list cmd_str if [[ $cur == -* ]]; then # get the current list of commands as a string sans options - cmd_str="$(__comp_conda_cmds_str ${words[@]})" + cmd_str=$(__comp_conda_cmds_str "${words[@]}") word_list=$(__comp_conda_option_lookup "$cmd_str") else case "$prev" in @@ -168,8 +179,12 @@ _comp_conda() word_list=$(__comp_conda_env_commands 2>/dev/null) ;; activate) - _filedir -d # environment directories - word_list=$(__comp_conda_envs 2>/dev/null) + if [[ $cur == */* ]] + then + _filedir -d # environment directories + else + word_list=$(__comp_conda_envs 2>/dev/null) + fi ;; remove|uninstall|upgrade|update) word_list=$(__comp_conda_packages 2>/dev/null) @@ -193,7 +208,9 @@ _comp_conda() esac fi if [[ -n $word_list ]]; then - COMPREPLY+=( $(compgen -W "$word_list" -- "$cur") ) + # append completion suggestions to COMPREPLY + mapfile -t -O "${#COMPREPLY[@]}" COMPREPLY < \ + <(compgen -W "$word_list" -- "$cur") fi } && complete -F _comp_conda conda diff --git a/conda-32bit.patch b/conda-32bit.patch deleted file mode 100644 index b40d819..0000000 --- a/conda-32bit.patch +++ /dev/null @@ -1,20 +0,0 @@ -diff -up conda-4.8.4/tests/core/test_solve.py.32bit conda-4.8.4/tests/core/test_solve.py ---- conda-4.8.4/tests/core/test_solve.py.32bit 2020-08-06 15:02:52.000000000 -0600 -+++ conda-4.8.4/tests/core/test_solve.py 2020-08-07 19:12:28.240154100 -0600 -@@ -284,14 +284,14 @@ def test_cuda_fail_1(tmpdir): - if sys.platform == "darwin": - plat = "osx-64" - elif sys.platform == "linux": -- plat = "linux-64" -+ plat = "linux-%s" % platform.architecture()[0][0:2] - elif sys.platform == "win32": - if platform.architecture()[0] == "32bit": - plat = "win-32" - else: - plat = "win-64" - else: -- plat = "linux-64" -+ plat = "linux-%s" % platform.architecture()[0][0:2] - - assert str(exc.value).strip() == dals("""The following specifications were found to be incompatible with your system: - diff --git a/conda-cpuinfo.patch b/conda-cpuinfo.patch deleted file mode 100644 index 506333b..0000000 --- a/conda-cpuinfo.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff -up conda-4.7.11/conda/base/context.py.cpuinfo conda-4.7.11/conda/base/context.py ---- conda-4.7.11/conda/base/context.py.cpuinfo 2019-08-06 13:23:55.000000000 -0600 -+++ conda-4.7.11/conda/base/context.py 2019-08-16 21:31:01.947610667 -0600 -@@ -1328,7 +1328,7 @@ conda_tests_ctxt_mgmt_def_pol = replace_ - @memoize - def _get_cpu_info(): - # DANGER: This is rather slow -- from .._vendor.cpuinfo import get_cpu_info -+ from cpuinfo import get_cpu_info - return frozendict(get_cpu_info()) - - diff --git a/conda.spec b/conda.spec index 76178fb..5e7e2c3 100644 --- a/conda.spec +++ b/conda.spec @@ -1,31 +1,22 @@ -%{!?_with_bootstrap: %global bootstrap 0} +%bcond_without tests Name: conda -Version: 4.9.1 +Version: 25.11.1 Release: %autorelease Summary: Cross-platform, Python-agnostic binary package manager -License: BSD and ASL 2.0 and LGPLv2+ and MIT -# The conda code is BSD -# progressbar is LGPLv2+ -# six is MIT/X11 -# adapters/ftp.py is ASL 2.0 +License: BSD-3-Clause AND Apache-2.0 +# The conda code is BSD-3-Clause +# adapters/ftp.py is Apache-2.0 URL: http://conda.pydata.org/docs/ Source0: https://github.com/conda/conda/archive/%{version}/%{name}-%{version}.tar.gz # bash completion script moved to a separate project -Source1: https://raw.githubusercontent.com/tartansandal/conda-bash-completion/1.5/conda -Patch0: conda_sys_prefix.patch -Patch1: conda_gateways_disk_create.patch -Patch2: setup.patch -# Use system cpuinfo -Patch3: conda-cpuinfo.patch -# Fix tests on 32bit -# https://github.com/conda/conda/pull/9759 -Patch4: conda-32bit.patch +Source1: https://raw.githubusercontent.com/tartansandal/conda-bash-completion/1.7/conda +Patch0: 0001-conda_sys_prefix.patch.patch +# Use main entry point for conda and re-add conda-env entry point, no need to run conda init +Patch1: 0002-Use-main-entry-point-for-conda-and-re-add-conda-env-.patch -Patch10001: 0001-Fix-toolz-imports.patch -Patch10003: 0003-Drop-fs-path-encoding-manipulation-under-python2.patch Patch10004: 0004-Do-not-try-to-run-usr-bin-python.patch Patch10005: 0005-Fix-failing-tests-in-test_api.py.patch Patch10006: 0006-shell-assume-shell-plugins-are-in-etc.patch @@ -35,13 +26,13 @@ BuildArch: noarch BuildRequires: pkgconfig(bash-completion) %global bash_completionsdir %(pkg-config --variable=completionsdir bash-completion 2>/dev/null || echo '/etc/bash_completion.d') BuildRequires: sed +# For man pages +BuildRequires: python-conda-sphinx-theme Requires: python%{python3_pkgversion}-conda = %{version}-%{release} # Removed upstream in favour of calling "conda activate" in version 4.4.0 Obsoletes: conda-activate < 4.4 -%?python_enable_dependency_generator - %global _description %{expand: Conda is a cross-platform, Python-agnostic binary package manager. It @@ -57,78 +48,54 @@ can only use conda to create and manage new environments.} %description %_description -%global _py3_reqs \ - python%{python3_pkgversion}-cpuinfo \ - python%{python3_pkgversion}-conda-package-handling >= 1.3.0 \ - python%{python3_pkgversion}-distro >= 1.0.4 \ - python%{python3_pkgversion}-frozendict >= 1.2 \ - python%{python3_pkgversion}-pycosat >= 0.6.3 \ - python%{python3_pkgversion}-pyOpenSSL >= 16.2.0 \ - python%{python3_pkgversion}-requests >= 2.18.4 \ - python%{python3_pkgversion}-ruamel-yaml >= 0.11.14 \ - python%{python3_pkgversion}-tqdm >= 4.22.0 \ - python%{python3_pkgversion}-urllib3 >= 1.19.1 -%global py3_reqs %(c="%_py3_reqs"; echo "$c" | xargs) + +%package tests +Summary: conda tests + +%description tests +Data for conda tests. Set CONDA_TEST_DATA_DIR to +%{_datadir}/conda/tests/data. %package -n python%{python3_pkgversion}-conda Summary: %{summary} BuildRequires: python%{python3_pkgversion}-devel -BuildRequires: python%{python3_pkgversion}-setuptools -BuildRequires: %py3_reqs -# When this is present, vendored toolz should not be used -%if 0%{?fedora} || 0%{?rhel} >= 8 -# EPEL7 does not have new enough cytoolz -BuildRequires: python%{python3_pkgversion}-cytoolz >= 0.8.2 -%endif # For tests BuildRequires: python-unversioned-command -BuildRequires: python%{python3_pkgversion}-mock -BuildRequires: python%{python3_pkgversion}-pytest-cov +BuildRequires: python%{python3_pkgversion}-boltons +BuildRequires: python%{python3_pkgversion}-boto3 +BuildRequires: python%{python3_pkgversion}-conda-libmamba-solver +BuildRequires: python%{python3_pkgversion}-flask +BuildRequires: python%{python3_pkgversion}-jsonpatch +BuildRequires: python%{python3_pkgversion}-libmambapy +BuildRequires: python%{python3_pkgversion}-pexpect +BuildRequires: python%{python3_pkgversion}-pytest-mock +BuildRequires: python%{python3_pkgversion}-pytest-rerunfailures +BuildRequires: python%{python3_pkgversion}-pytest-split +BuildRequires: python%{python3_pkgversion}-pytest-timeout +BuildRequires: python%{python3_pkgversion}-pytest-xprocess BuildRequires: python%{python3_pkgversion}-responses -Requires: %py3_reqs -%if 0%{?fedora} || 0%{?rhel} >= 8 -# EPEL does not have new enough cytoolz -Requires: python%{python3_pkgversion}-cytoolz >= 0.8.2 -%endif -Provides: bundled(python%{python3_pkgversion}-appdirs) = 1.2.0 -Provides: bundled(python%{python3_pkgversion}-auxlib) -Provides: bundled(python%{python3_pkgversion}-boltons) = 18.0.0 -Provides: bundled(python%{python3_pkgversion}-six) = 1.10.0 -Provides: bundled(python%{python3_pkgversion}-toolz) = 0.8.2 - -%{?python_provide:%python_provide python%{python3_pkgversion}-conda} +# conda uses a modified version of auxlib +Provides: bundled(python%{python3_pkgversion}-auxlib) = 0.0.43 %description -n python%{python3_pkgversion}-conda %_description %prep %autosetup -p1 -sed -r -i 's/^(__version__ = ).*/\1"%{version}"/' conda/__init__.py +# Re-enable dep on conda-libmamba-solver +sed -i -e '/"conda-libmamba-solver/s/# *//' pyproject.toml -# delete interpreter line, the user can always call the file -# explicitly as python3 /usr/lib/python3.6/site-packages/conda/_vendor/appdirs.py -# or so. -sed -r -i '1 {/#![/]usr[/]bin[/]env/d}' conda/_vendor/appdirs.py +# Do not restrict upper bound of ruamel-yaml +sed -i -e '/ruamel.yaml/s/,<[0-9.]*//' pyproject.toml -# Use Fedora's cpuinfo since it supports more arches -rm conda/_vendor/cpuinfo.py +# pytest-split/xdoctest not packaged, store-duration not needed +sed -i -e '/splitting-algorithm/d' -e '/store-durations/d' -e '/xdoctest/d' pyproject.toml -# Replaced by cytools, byte compilation fails under python3.7 -%if 0%{?fedora} || 0%{?rhel} >= 8 -# EPEL does not have new enough cytoolz -# We need to keep __init__.py which does the dispatch between vendored and non-vendored -rm conda/_vendor/toolz/[a-zA-Z]* -%endif - -# Use system versions -# TODO - urllib3 - results in test failures: https://github.com/conda/conda/issues/9512 -#rm -r conda/_vendor/{distro.py,frozendict.py,tqdm,urllib3} -#find conda -name \*.py | xargs sed -i -e 's/^\( *\)from .*_vendor\.\(\(distro\|frozendict\|tqdm\|urllib3\).*\) import/\1from \2 import/' -rm -r conda/_vendor/{distro.py,frozendict.py,tqdm} -find conda -name \*.py | xargs sed -i -e 's/^\( *\)from .*_vendor\.\(\(distro\|frozendict\|tqdm\).*\) import/\1from \2 import/' +# Unpackaged - really only applicable for macOS/Windows? +sed -i -e '/"truststore *>/d' pyproject.toml %ifnarch x86_64 # Tests on 32-bit @@ -139,40 +106,54 @@ cp -a tests/data/conda_format_repo/{linux-64,%{python3_platform}} sed -i -e s/linux-64/%{python3_platform}/ tests/data/conda_format_repo/%{python3_platform}/*json %endif +# Do not run coverage in pytest +sed -i -e '/"--cov/d' pyproject.toml + +%generate_buildrequires +# When not testing, we don't need runtime dependencies. +# Normally, we would still BuildRequire them to not accidentally build an uninstallable package, +# but there is a runtime dependency loop with python3-conda-libmamba-solver. +%pyproject_buildrequires %{!?with_tests:-R} %build -# build conda executable -%define py_setup utils/setup-testing.py -%py3_build +%pyproject_wheel %install -# install conda executable -%define py_setup utils/setup-testing.py -%py3_install +%pyproject_install +#py3_shebang_fix %{buildroot}%{python3_sitelib}/conda/shell/bin/conda +%pyproject_save_files conda* +mkdir -p %{buildroot}%{_sysconfdir}/conda/condarc.d mkdir -p %{buildroot}%{_datadir}/conda/condarc.d cat >%{buildroot}%{_datadir}/conda/condarc.d/defaults.yaml <= (3, 3)): - sys.exit("conda is only meant for Python 2.7 or 3.3 and up. " diff --git a/sources b/sources index fe97aad..28be694 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (conda-4.9.1.tar.gz) = 40be24067aad1b50aecc33fd11aff55c5a28de5a67683341c296be2da6c9f90353ef21ff7c4a6e57a1f19ac3a5d7702ef0fd40273775ecf4fe39f2428cb4b0a0 +SHA512 (conda-25.11.1.tar.gz) = ce04c8805ca51047cf1e1ebb945fcce1fbb559fe472d4f5fb4217d49b93b67c8e38baf735c6a9244b31d559247ec10d46e1e33caf8ac7fedc105ce3645121609