guix_mirror_bot pushed a commit to branch master
in repository guix.

commit a3a998141b09b44e1156efd644c8c7e0063e3a46
Author: Danny Milosavljevic <[email protected]>
AuthorDate: Sun Dec 14 21:03:28 2025 +0100

    gnu: Add conda.
    
    * gnu/packages/patches/conda-fix-plugin-settings-test.patch: New file.
    * gnu/packages/patches/conda-fix-cross-platform-export-tests.patch: New 
file.
    * gnu/local.mk (dist_patch_DATA): Add reference to them.
    * gnu/packages/package-management.scm (conda): New variable.
    
    Change-Id: I77335397e51a2b309567721151940e4207643911
---
 gnu/local.mk                                       |  2 +
 gnu/packages/package-management.scm                | 45 ++++++++++++
 .../conda-fix-cross-platform-export-tests.patch    | 57 ++++++++++++++++
 .../patches/conda-fix-plugin-settings-test.patch   | 79 ++++++++++++++++++++++
 4 files changed, 183 insertions(+)

diff --git a/gnu/local.mk b/gnu/local.mk
index ada9f9ed08..4fd3861c10 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1131,6 +1131,8 @@ dist_patch_DATA =                                         
\
   %D%/packages/patches/combinatorial-blas-io-fix.patch         \
   %D%/packages/patches/composable-kernel-conditional-kernels.patch \
   %D%/packages/patches/compsize-fix-btrfs-progs-compatibility.patch    \
+  %D%/packages/patches/conda-fix-cross-platform-export-tests.patch     \
+  %D%/packages/patches/conda-fix-plugin-settings-test.patch    \
   %D%/packages/patches/containerd-create-pid-file.patch        \
   %D%/packages/patches/containerd-fix-includes.patch            \
   %D%/packages/patches/cool-retro-term-wctype.patch            \
diff --git a/gnu/packages/package-management.scm 
b/gnu/packages/package-management.scm
index 64c74a081b..6ffc232fb9 100644
--- a/gnu/packages/package-management.scm
+++ b/gnu/packages/package-management.scm
@@ -1480,7 +1480,17 @@ manage (install/update) them for you.")
                     ;; XXX: Issues salad: network access, can't detect Conda
                     ;; environemnt, assertion failed; review if they may be
                     ;; fixed.
+                    ;;
+                    ;; test_info_all: Fails due to parallel test interference.
+                    ;; test_notices_appear_once_when_running_decorated_commands
+                    ;; creates and deletes an environment named "notices_test".
+                    ;; When test_info_all runs in parallel, it invokes
+                    ;; "conda info --envs" (sees notices_test), then the other
+                    ;; test deletes it, then test_info_all invokes
+                    ;; "conda info --all" (doesn't see notices_test).  The
+                    ;; assertion that these outputs match fails.
                     (list "not test_PrefixData_return_value_contract"
+                          "test_info_all"
                           "test__get_python_info"
                           "test_auto_update_conda"
                           "test_build_version_shows_as_changed "
@@ -1896,6 +1906,41 @@ enabling fast package management functionality in Python 
applications.")
 Conda based on the libmamba library.  It significantly speeds up dependency
 resolution compared to the classic solver.")
     (license license:bsd-3)))
+
+(define-public conda
+  (package
+    (inherit conda-bootstrap)
+    (name "conda")
+    (version "25.9.1")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+              (url "https://github.com/conda/conda";)
+              (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1s8xxc8rfayfq6p3iwgp9v3hbanp30ciw7cznppn1qk1l9fy7nxj"))
+       (patches
+        (search-patches "conda-fix-plugin-settings-test.patch"
+                        "conda-fix-cross-platform-export-tests.patch"))))
+    (arguments
+     (substitute-keyword-arguments (package-arguments conda-bootstrap)
+       ((#:phases phases)
+        #~(modify-phases #$phases
+            ;; Remove the patch that forces classic solver - we have libmamba
+            (delete 'set-default-solver-to-classic)
+            ;; Replace pre-check to not force classic solver
+            (replace 'pre-check
+              (lambda _
+                (setenv "HOME" "/tmp")
+                ;; Prevent tests from writing package cache to the output
+                ;; directory, which would cause non-reproducible builds.
+                (setenv "CONDA_PKGS_DIRS" "/tmp/conda-pkgs")))))))
+    (propagated-inputs
+     (modify-inputs (package-propagated-inputs conda-bootstrap)
+       (prepend python-conda-libmamba-solver)))))
+
 (define-public conan
   (package
     (name "conan")
diff --git a/gnu/packages/patches/conda-fix-cross-platform-export-tests.patch 
b/gnu/packages/patches/conda-fix-cross-platform-export-tests.patch
new file mode 100644
index 0000000000..54122dd560
--- /dev/null
+++ b/gnu/packages/patches/conda-fix-cross-platform-export-tests.patch
@@ -0,0 +1,57 @@
+Author: Danny Milosavljevic <[email protected]>
+Date: Sun Dec 14 09:26:14 PM CET 2025
+Subject: Fix cross-platform export tests to work offline.
+SPDX-License-Identifier: BSD-3-Clause
+
+These tests need channels configured to resolve packages for other platforms.
+Without channels, the libmamba solver crashes with IndexError on empty repos.
+This patch adds the local conda_format_repo test channel to these tests,
+allowing them to work without network access.
+
+diff --git a/tests/cli/test_main_export.py b/tests/cli/test_main_export.py
+index 1234567..abcdefg 100644
+--- a/tests/cli/test_main_export.py
++++ b/tests/cli/test_main_export.py
+@@ -848,6 +848,7 @@ def test_export_platform_argument(
+
+ def test_export_multiple_platforms(
+     conda_cli: CondaCLIFixture,
++    conda_format_repo_channel,
+     plugin_manager_with_exporters: CondaPluginManager,
+     tmp_path: Path,
+ ) -> None:
+@@ -874,6 +875,7 @@ def test_export_multiple_platforms(
+
+ def test_export_single_platform_different_platform(
+     conda_cli: CondaCLIFixture,
++    conda_format_repo_channel,
+     tmp_path: Path,
+     plugin_manager_with_exporters: CondaPluginManager,
+ ):
+diff --git a/tests/conftest.py b/tests/conftest.py
+index 1234567..abcdefg 100644
+--- a/tests/conftest.py
++++ b/tests/conftest.py
+@@ -75,6 +75,22 @@ def test_recipes_channel(mocker: MockerFixture) -> Path:
+     return TEST_RECIPES_CHANNEL
+
+
++CONDA_FORMAT_REPO = Path(__file__).parent / "data" / "conda_format_repo"
++
++
[email protected]
++def conda_format_repo_channel(mocker: MockerFixture) -> Path:
++    """Set up conda_format_repo as the channel for tests needing 
multi-platform data."""
++    mocker.patch(
++        "conda.base.context.Context.channels",
++        new_callable=mocker.PropertyMock,
++        return_value=(channel_str := str(CONDA_FORMAT_REPO),),
++    )
++    reset_context()
++    assert context.channels == (channel_str,)
++    return CONDA_FORMAT_REPO
++
++
+ @pytest.fixture
+ def wheelhouse() -> Path:
+     """Return the path to the directory containing pre-built wheel files used 
in tests."""
diff --git a/gnu/packages/patches/conda-fix-plugin-settings-test.patch 
b/gnu/packages/patches/conda-fix-plugin-settings-test.patch
new file mode 100644
index 0000000000..d2d3afcd14
--- /dev/null
+++ b/gnu/packages/patches/conda-fix-plugin-settings-test.patch
@@ -0,0 +1,79 @@
+From 39ea25ff598cfd52e0cac37525a44dbf6590b800 Mon Sep 17 00:00:00 2001
+From: Travis Hathaway <[email protected]>
+Date: Mon, 29 Sep 2025 15:22:44 +0200
+SPDX-License-Identifier: BSD-3-Clause
+Subject: [PATCH 1/2] removing this test because it we are adding a setting to
+ conda-libmamba-solver
+
+---
+ tests/plugins/test_settings.py | 17 -----------------
+ 1 file changed, 17 deletions(-)
+
+diff --git a/tests/plugins/test_settings.py b/tests/plugins/test_settings.py
+index 05196c5c09b..27b9fcf70c1 100644
+--- a/tests/plugins/test_settings.py
++++ b/tests/plugins/test_settings.py
+@@ -326,23 +326,6 @@ def test_conda_config_describe_includes_plugin_settings(
+     assert f"plugins.{MAP_PARAMETER_NAME}:" in out
+ 
+ 
+-def test_conda_config_describe_not_included_without_plugins(conda_cli):
+-    """
+-    Ensure that the describe command does not include the section banner
+-    for plugins when no additional settings are provided by plugins
+-    """
+-    out, err, _ = conda_cli("config", "--describe")
+-
+-    section_banner = (
+-        "# ######################################################\n"
+-        "# ##     Additional settings provided by plugins      ##\n"
+-        "# ######################################################"
+-    )
+-
+-    assert not err
+-    assert section_banner not in out
+-
+-
+ def test_conda_config_describe_unknown_plugin_setting(
+     condarc_plugin_manager, conda_cli
+ ):
+
+From 7254151456ad201bfc1ead8ab48a509c4e9a7319 Mon Sep 17 00:00:00 2001
+From: Travis Hathaway <[email protected]>
+Date: Mon, 29 Sep 2025 17:09:01 +0200
+Subject: [PATCH 2/2] using a mock to fix test instead of removing it
+
+---
+ tests/plugins/test_settings.py | 19 +++++++++++++++++++
+ 1 file changed, 19 insertions(+)
+
+diff --git a/tests/plugins/test_settings.py b/tests/plugins/test_settings.py
+index 27b9fcf70c1..eb5200eb105 100644
+--- a/tests/plugins/test_settings.py
++++ b/tests/plugins/test_settings.py
+@@ -326,6 +326,25 @@ def test_conda_config_describe_includes_plugin_settings(
+     assert f"plugins.{MAP_PARAMETER_NAME}:" in out
+ 
+ 
++def test_conda_config_describe_not_included_without_plugins(conda_cli, 
mocker):
++    """
++    Ensure that the describe command does not include the section banner
++    for plugins when no additional settings are provided by plugins
++    """
++    mock = 
mocker.patch("conda.plugins.manager.CondaPluginManager.get_hook_results")
++    mock.return_value = []
++    out, err, _ = conda_cli("config", "--describe")
++
++    section_banner = (
++        "# ######################################################\n"
++        "# ##     Additional settings provided by plugins      ##\n"
++        "# ######################################################"
++    )
++
++    assert not err
++    assert section_banner not in out
++
++
+ def test_conda_config_describe_unknown_plugin_setting(
+     condarc_plugin_manager, conda_cli
+ ):

Reply via email to