Skip to content

Commit d5dcbdd

Browse files
authored
Fix initialize_conda for boolean values (#1032)
* Set initialize_conda to classic when True * Add additional type check for Windows variables * Add tests for boolean initialize_conda values * Add news * Fix evaluation order of initialization tests
1 parent aa5d1eb commit d5dcbdd

4 files changed

Lines changed: 33 additions & 9 deletions

File tree

constructor/main.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -265,6 +265,8 @@ def main_build(
265265
if initialize_conda := info.get("initialize_conda"):
266266
if not info.get("_has_conda"):
267267
sys.exit("Error: 'initialize_conda' requires 'conda' in the base environment.")
268+
if initialize_conda is True:
269+
info["initialize_conda"] = "classic"
268270
if initialize_conda == "condabin" and platform.startswith(("linux-", "osx-")):
269271
conda = next(record for record in info.get("_records", ()) if record.name == "conda")
270272
if Version(conda.version) < Version("25.5.0"):

constructor/winexe.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -217,7 +217,7 @@ def make_nsi(
217217
info[key] = valid_values
218218

219219
for key, value in variables.items():
220-
if value.startswith("@"):
220+
if isinstance(value, str) and value.startswith("@"):
221221
value = join(dir_path, value[1:])
222222
variables[key] = win_str_esc(value)
223223

news/1032-initialize-conda-boolean

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
### Enhancements
2+
3+
* <news item>
4+
5+
### Bug fixes
6+
7+
* Re-enable boolean values for `initialize_conda` on Windows. (#1032)
8+
9+
### Deprecations
10+
11+
* <news item>
12+
13+
### Docs
14+
15+
* <news item>
16+
17+
### Other
18+
19+
* <news item>

tests/test_examples.py

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -990,15 +990,16 @@ def test_virtual_specs_override(tmp_path, request, monkeypatch):
990990

991991

992992
@pytest.mark.skipif(not ON_CI, reason="Run on CI only")
993-
@pytest.mark.parametrize("method", ("classic", "condabin"))
993+
@pytest.mark.parametrize("method", ("classic", "condabin", True, False))
994994
def test_initialization(tmp_path, request, monkeypatch, method):
995995
request.addfinalizer(
996996
lambda: subprocess.run([sys.executable, "-m", "conda", "init", "--reverse"])
997997
)
998998
monkeypatch.setenv("initialization_method", method)
999999
input_path = _example_path("initialization")
1000+
initialize = method is not False
10001001
for installer, install_dir in create_installer(input_path, tmp_path):
1001-
if installer.suffix == ".sh":
1002+
if installer.suffix == ".sh" and initialize:
10021003
options = ["-c"]
10031004
elif installer.suffix == ".exe":
10041005
# GHA runs on an admin user account, but AllUsers (admin) installs
@@ -1031,11 +1032,11 @@ def test_initialization(tmp_path, request, monkeypatch, method):
10311032
value = winreg.QueryValueEx(key, "PATH")[0]
10321033
paths += value.strip().split(os.pathsep)
10331034
if method == "condabin":
1034-
assert str(install_dir / "condabin") in paths
1035+
assert (str(install_dir / "condabin") in paths) == initialize
10351036
else:
1036-
assert str(install_dir) in paths
1037-
assert str(install_dir / "Scripts") in paths
1038-
assert str(install_dir / "Library" / "bin") in paths
1037+
assert (str(install_dir) in paths) == initialize
1038+
assert (str(install_dir / "Scripts") in paths) == initialize
1039+
assert (str(install_dir / "Library" / "bin") in paths) == initialize
10391040

10401041
finally:
10411042
_run_uninstaller_exe(install_dir, check=True)
@@ -1047,9 +1048,11 @@ def test_initialization(tmp_path, request, monkeypatch, method):
10471048
text=True,
10481049
)
10491050
if method == "condabin":
1050-
assert str(install_dir / "condabin") in out.strip().split(os.pathsep)
1051+
assert (
1052+
str(install_dir / "condabin") in out.strip().split(os.pathsep)
1053+
) == initialize
10511054
else:
1052-
assert str(install_dir / "bin") in out.strip().split(os.pathsep)
1055+
assert (str(install_dir / "bin") in out.strip().split(os.pathsep)) == initialize
10531056

10541057

10551058
@pytest.mark.skipif(not ON_CI, reason="CI only")

0 commit comments

Comments
 (0)