Skip to content

Commit b06ae3b

Browse files
authored
Download policy translations for previous version if current version fails (microsoft#154891)
download policy translations for previous version if current version fails
1 parent ae2c2dd commit b06ae3b

File tree

2 files changed

+46
-2
lines changed

2 files changed

+46
-2
lines changed

build/lib/policies.js

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -413,7 +413,7 @@ async function getLatestStableVersion(updateUrl) {
413413
const { name: version } = await res.json();
414414
return version;
415415
}
416-
async function getNLS(resourceUrlTemplate, languageId, version) {
416+
async function getSpecificNLS(resourceUrlTemplate, languageId, version) {
417417
const resource = {
418418
publisher: 'ms-ceintl',
419419
name: `vscode-language-pack-${languageId}`,
@@ -422,9 +422,30 @@ async function getNLS(resourceUrlTemplate, languageId, version) {
422422
};
423423
const url = resourceUrlTemplate.replace(/\{([^}]+)\}/g, (_, key) => resource[key]);
424424
const res = await (0, node_fetch_1.default)(url);
425+
if (res.status !== 200) {
426+
throw new Error(`[${res.status}] Error downloading language pack ${languageId}@${version}`);
427+
}
425428
const { contents: result } = await res.json();
426429
return result;
427430
}
431+
function previousVersion(version) {
432+
const [, major, minor, patch] = /^(\d+)\.(\d+)\.(\d+)$/.exec(version);
433+
return `${major}.${parseInt(minor) - 1}.${patch}`;
434+
}
435+
async function getNLS(resourceUrlTemplate, languageId, version) {
436+
try {
437+
return await getSpecificNLS(resourceUrlTemplate, languageId, version);
438+
}
439+
catch (err) {
440+
if (/\[404\]/.test(err.message)) {
441+
console.warn(`Language pack ${languageId}@${version} is missing. Downloading previous version...`);
442+
return await getSpecificNLS(resourceUrlTemplate, languageId, previousVersion(version));
443+
}
444+
else {
445+
throw err;
446+
}
447+
}
448+
}
428449
async function parsePolicies() {
429450
const parser = new Parser();
430451
parser.setLanguage(typescript);

build/lib/policies.ts

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -593,7 +593,7 @@ async function getLatestStableVersion(updateUrl: string) {
593593
return version;
594594
}
595595

596-
async function getNLS(resourceUrlTemplate: string, languageId: string, version: string) {
596+
async function getSpecificNLS(resourceUrlTemplate: string, languageId: string, version: string) {
597597
const resource = {
598598
publisher: 'ms-ceintl',
599599
name: `vscode-language-pack-${languageId}`,
@@ -603,10 +603,33 @@ async function getNLS(resourceUrlTemplate: string, languageId: string, version:
603603

604604
const url = resourceUrlTemplate.replace(/\{([^}]+)\}/g, (_, key) => resource[key as keyof typeof resource]);
605605
const res = await fetch(url);
606+
607+
if (res.status !== 200) {
608+
throw new Error(`[${res.status}] Error downloading language pack ${languageId}@${version}`);
609+
}
610+
606611
const { contents: result } = await res.json() as { contents: LanguageTranslations };
607612
return result;
608613
}
609614

615+
function previousVersion(version: string): string {
616+
const [, major, minor, patch] = /^(\d+)\.(\d+)\.(\d+)$/.exec(version)!;
617+
return `${major}.${parseInt(minor) - 1}.${patch}`;
618+
}
619+
620+
async function getNLS(resourceUrlTemplate: string, languageId: string, version: string) {
621+
try {
622+
return await getSpecificNLS(resourceUrlTemplate, languageId, version);
623+
} catch (err) {
624+
if (/\[404\]/.test(err.message)) {
625+
console.warn(`Language pack ${languageId}@${version} is missing. Downloading previous version...`);
626+
return await getSpecificNLS(resourceUrlTemplate, languageId, previousVersion(version));
627+
} else {
628+
throw err;
629+
}
630+
}
631+
}
632+
610633
async function parsePolicies(): Promise<Policy[]> {
611634
const parser = new Parser();
612635
parser.setLanguage(typescript);

0 commit comments

Comments
 (0)