Skip to content

Commit 16a13bd

Browse files
authored
Fixes #24: Ensure platform override works on prereleases. (#25)
Previously, if all matching runtimes were prereleases, the platform specifier would essentially be ignored. Now, when all matches are prereleases, we are okay with all matches after applying the platform filter being prereleases.
1 parent f1c3c8f commit 16a13bd

File tree

3 files changed

+23
-8
lines changed

3 files changed

+23
-8
lines changed

src/manage/installs.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -210,13 +210,17 @@ def get_matching_install_tags(
210210
# If none or only prereleases, keep them all
211211
if default_platform:
212212
default_platform = default_platform.casefold()
213+
all_pre = all(Version(i["sort-version"]).is_prerelease for i, t in best)
213214
best2 = best
214215
best = [(i, t) for i, t in best
215216
if i.get("__any-platform")
216217
or t["tag"].casefold().endswith(default_platform)]
217218
LOGGER.debug("default_platform '%s' matched %s %s", default_platform,
218219
len(best), "install" if len(best) == 1 else "installs")
219-
if not best or all(Version(i["sort-version"]).is_prerelease for i, t in best):
220+
if (
221+
not best or
222+
(not all_pre and all(Version(i["sort-version"]).is_prerelease for i, t in best))
223+
):
220224
LOGGER.debug("Reusing unfiltered list")
221225
best = best2
222226

tests/test_indexutils.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -180,4 +180,6 @@ def test_select_package():
180180
],
181181
})
182182
assert select_package([index], "3.13", "-64")["tag"] == "3.13.0-64"
183+
assert select_package([index], "3.13-32", "-64")["tag"] == "3.13.0-32"
183184
assert select_package([index], "3.13", "-32")["tag"] == "3.13.0-32"
185+
assert select_package([index], "3.13-64", "-32")["tag"] == "3.13.0-64"

tests/test_installs.py

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,10 @@
66

77

88
def make_install(tag, **kwargs):
9-
run_for = [
10-
{"tag": tag, "target": kwargs.get("target", "python.exe")},
11-
{"tag": tag, "target": kwargs.get("targetw", "pythonw.exe"), "windowed": 1},
12-
]
9+
run_for = []
10+
for t in kwargs.get("run_for", [tag]):
11+
run_for.append({"tag": t, "target": kwargs.get("target", "python.exe")})
12+
run_for.append({"tag": t, "target": kwargs.get("targetw", "pythonw.exe"), "windowed": 1})
1313

1414
return {
1515
"company": kwargs.get("company", "PythonCore"),
@@ -40,9 +40,9 @@ def fake_get_installs(install_dir):
4040

4141
def fake_get_installs2(install_dir):
4242
yield make_install("1.0-32", sort_version="1.0")
43-
yield make_install("3.0a1-32", sort_version="3.0a1")
44-
yield make_install("3.0a1-64", sort_version="3.0a1")
45-
yield make_install("3.0a1-arm64", sort_version="3.0a1")
43+
yield make_install("3.0a1-32", sort_version="3.0a1", run_for=["3-32", "3.0-32", "3.0a1-32"])
44+
yield make_install("3.0a1-64", sort_version="3.0a1", run_for=["3-64", "3.0-64", "3.0a1-64"])
45+
yield make_install("3.0a1-arm64", sort_version="3.0a1", run_for=["3-arm64", "3.0-arm64", "3.0a1-arm64"])
4646

4747

4848
def fake_get_unmanaged_installs():
@@ -161,6 +161,15 @@ def test_get_install_to_run_with_default_platform_prerelease(patched_installs2):
161161
assert i["id"] == "PythonCore-1.0-32"
162162

163163

164+
def test_get_install_to_run_with_platform_prerelease(patched_installs2):
165+
i = installs.get_install_to_run("<none>", None, "3", default_platform="-32")
166+
assert i["id"] == "PythonCore-3.0a1-32"
167+
i = installs.get_install_to_run("<none>", None, "3-32", default_platform="-64")
168+
assert i["id"] == "PythonCore-3.0a1-32"
169+
i = installs.get_install_to_run("<none>", None, "3-32", default_platform="-arm64")
170+
assert i["id"] == "PythonCore-3.0a1-32"
171+
172+
164173
def test_get_install_to_run_with_range(patched_installs):
165174
i = installs.get_install_to_run("<none>", None, "<=1.0")
166175
assert i["id"] == "PythonCore-1.0"

0 commit comments

Comments
 (0)