Skip to content

Commit 8bcd256

Browse files
author
Vladimir Safonkin
authored
Add architecture input check for PyPy for Windows platform (#520)
* Revert cache index.js * build cache index file * Refactor * Debug * Debug * Debug * Debug * Debug * Debug * Debug * Debug * Format code * Rebuild dist * Minor refactor * Format code * Minor fixes * Check platform firstly
1 parent 13ae5bb commit 8bcd256

File tree

2 files changed

+31
-17
lines changed

2 files changed

+31
-17
lines changed

dist/setup/index.js

+15-8
Original file line numberDiff line numberDiff line change
@@ -66577,7 +66577,7 @@ function findRelease(releases, pythonVersion, pypyVersion, architecture) {
6657766577
semver.satisfies(pypyVersionToSemantic(item.pypy_version), pypyVersion);
6657866578
const isArchPresent = item.files &&
6657966579
(utils_1.IS_WINDOWS
66580-
? isArchPresentForWindows(item)
66580+
? isArchPresentForWindows(item, architecture)
6658166581
: isArchPresentForMacOrLinux(item, architecture, process.platform));
6658266582
return isPythonVersionSatisfied && isPyPyVersionSatisfied && isArchPresent;
6658366583
});
@@ -66590,7 +66590,7 @@ function findRelease(releases, pythonVersion, pypyVersion, architecture) {
6659066590
});
6659166591
const foundRelease = sortedReleases[0];
6659266592
const foundAsset = utils_1.IS_WINDOWS
66593-
? findAssetForWindows(foundRelease)
66593+
? findAssetForWindows(foundRelease, architecture)
6659466594
: findAssetForMacOrLinux(foundRelease, architecture, process.platform);
6659566595
return {
6659666596
foundAsset,
@@ -66613,24 +66613,31 @@ function pypyVersionToSemantic(versionSpec) {
6661366613
return versionSpec.replace(prereleaseVersion, '$1-$2.$3');
6661466614
}
6661566615
exports.pypyVersionToSemantic = pypyVersionToSemantic;
66616-
function isArchPresentForWindows(item) {
66617-
return item.files.some((file) => utils_1.WINDOWS_ARCHS.includes(file.arch) &&
66618-
utils_1.WINDOWS_PLATFORMS.includes(file.platform));
66616+
function isArchPresentForWindows(item, architecture) {
66617+
architecture = replaceX32toX86(architecture);
66618+
return item.files.some((file) => utils_1.WINDOWS_PLATFORMS.includes(file.platform) && file.arch === architecture);
6661966619
}
6662066620
exports.isArchPresentForWindows = isArchPresentForWindows;
6662166621
function isArchPresentForMacOrLinux(item, architecture, platform) {
6662266622
return item.files.some((file) => file.arch === architecture && file.platform === platform);
6662366623
}
6662466624
exports.isArchPresentForMacOrLinux = isArchPresentForMacOrLinux;
66625-
function findAssetForWindows(releases) {
66626-
return releases.files.find((item) => utils_1.WINDOWS_ARCHS.includes(item.arch) &&
66627-
utils_1.WINDOWS_PLATFORMS.includes(item.platform));
66625+
function findAssetForWindows(releases, architecture) {
66626+
architecture = replaceX32toX86(architecture);
66627+
return releases.files.find((item) => utils_1.WINDOWS_PLATFORMS.includes(item.platform) && item.arch === architecture);
6662866628
}
6662966629
exports.findAssetForWindows = findAssetForWindows;
6663066630
function findAssetForMacOrLinux(releases, architecture, platform) {
6663166631
return releases.files.find((item) => item.arch === architecture && item.platform === platform);
6663266632
}
6663366633
exports.findAssetForMacOrLinux = findAssetForMacOrLinux;
66634+
function replaceX32toX86(architecture) {
66635+
// convert x32 to x86 because os.arch() returns x32 for 32-bit systems but PyPy releases json has x86 arch value.
66636+
if (architecture === 'x32') {
66637+
architecture = 'x86';
66638+
}
66639+
return architecture;
66640+
}
6663466641

6663566642

6663666643
/***/ }),

src/install-pypy.ts

+16-9
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import fs from 'fs';
88

99
import {
1010
IS_WINDOWS,
11-
WINDOWS_ARCHS,
1211
WINDOWS_PLATFORMS,
1312
IPyPyManifestRelease,
1413
createSymlinkInFolder,
@@ -157,7 +156,7 @@ export function findRelease(
157156
const isArchPresent =
158157
item.files &&
159158
(IS_WINDOWS
160-
? isArchPresentForWindows(item)
159+
? isArchPresentForWindows(item, architecture)
161160
: isArchPresentForMacOrLinux(item, architecture, process.platform));
162161
return isPythonVersionSatisfied && isPyPyVersionSatisfied && isArchPresent;
163162
});
@@ -181,7 +180,7 @@ export function findRelease(
181180

182181
const foundRelease = sortedReleases[0];
183182
const foundAsset = IS_WINDOWS
184-
? findAssetForWindows(foundRelease)
183+
? findAssetForWindows(foundRelease, architecture)
185184
: findAssetForMacOrLinux(foundRelease, architecture, process.platform);
186185

187186
return {
@@ -205,11 +204,11 @@ export function pypyVersionToSemantic(versionSpec: string) {
205204
return versionSpec.replace(prereleaseVersion, '$1-$2.$3');
206205
}
207206

208-
export function isArchPresentForWindows(item: any) {
207+
export function isArchPresentForWindows(item: any, architecture: string) {
208+
architecture = replaceX32toX86(architecture);
209209
return item.files.some(
210210
(file: any) =>
211-
WINDOWS_ARCHS.includes(file.arch) &&
212-
WINDOWS_PLATFORMS.includes(file.platform)
211+
WINDOWS_PLATFORMS.includes(file.platform) && file.arch === architecture
213212
);
214213
}
215214

@@ -223,11 +222,11 @@ export function isArchPresentForMacOrLinux(
223222
);
224223
}
225224

226-
export function findAssetForWindows(releases: any) {
225+
export function findAssetForWindows(releases: any, architecture: string) {
226+
architecture = replaceX32toX86(architecture);
227227
return releases.files.find(
228228
(item: any) =>
229-
WINDOWS_ARCHS.includes(item.arch) &&
230-
WINDOWS_PLATFORMS.includes(item.platform)
229+
WINDOWS_PLATFORMS.includes(item.platform) && item.arch === architecture
231230
);
232231
}
233232

@@ -240,3 +239,11 @@ export function findAssetForMacOrLinux(
240239
(item: any) => item.arch === architecture && item.platform === platform
241240
);
242241
}
242+
243+
function replaceX32toX86(architecture: string): string {
244+
// convert x32 to x86 because os.arch() returns x32 for 32-bit systems but PyPy releases json has x86 arch value.
245+
if (architecture === 'x32') {
246+
architecture = 'x86';
247+
}
248+
return architecture;
249+
}

0 commit comments

Comments
 (0)