Skip to content

Commit 9d5d53b

Browse files
author
Akos Kitta
committed
fix: can recover index files if locale is not en
Signed-off-by: Akos Kitta <[email protected]>
1 parent 5622674 commit 9d5d53b

File tree

5 files changed

+29
-24
lines changed

5 files changed

+29
-24
lines changed

arduino-ide-extension/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@
6868
"cpy": "^8.1.2",
6969
"cross-fetch": "^3.1.5",
7070
"dateformat": "^3.0.3",
71-
"deepmerge": "2.0.1",
71+
"deepmerge": "^4.2.2",
7272
"electron-updater": "^4.6.5",
7373
"fast-json-stable-stringify": "^2.1.0",
7474
"fast-safe-stringify": "^2.1.1",

arduino-ide-extension/src/node/core-client-provider.ts

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -530,7 +530,6 @@ function isPrimaryPackageIndexMissingStatus(
530530
{ directories: { data } }: DefaultCliConfig
531531
): boolean {
532532
const predicate = ({ message }: RpcStatus.AsObject) =>
533-
message.includes('loading json index file') &&
534533
message.includes(join(data, 'package_index.json'));
535534
// https://github.com/arduino/arduino-cli/blob/f0245bc2da6a56fccea7b2c9ea09e85fdcc52cb8/arduino/cores/packagemanager/package_manager.go#L247
536535
return evaluate(status, predicate);
@@ -551,8 +550,6 @@ function isLibraryIndexMissingStatus(
551550
{ directories: { data } }: DefaultCliConfig
552551
): boolean {
553552
const predicate = ({ message }: RpcStatus.AsObject) =>
554-
message.includes('index file') &&
555-
message.includes('reading') &&
556553
message.includes(join(data, 'library_index.json'));
557554
// https://github.com/arduino/arduino-cli/blob/f0245bc2da6a56fccea7b2c9ea09e85fdcc52cb8/arduino/cores/packagemanager/package_manager.go#L247
558555
return evaluate(status, predicate);

arduino-ide-extension/src/test/node/core-client-provider.slow-test.ts

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import {
1313
LibraryService,
1414
} from '../../common/protocol';
1515
import { ArduinoDaemonImpl } from '../../node/arduino-daemon-impl';
16-
import { CLI_CONFIG } from '../../node/cli-config';
16+
import { CLI_CONFIG, DefaultCliConfig } from '../../node/cli-config';
1717
import { BoardListRequest } from '../../node/cli-protocol/cc/arduino/cli/commands/v1/board_pb';
1818
import { CoreClientProvider } from '../../node/core-client-provider';
1919
import { ConfigDirUriProvider } from '../../node/theia/env-variables/env-variables-server';
@@ -45,6 +45,20 @@ describe('core-client-provider', () => {
4545
});
4646
});
4747

48+
['it', 'de'].map(([locale]) =>
49+
it(`should recover from the missing 'directories.data' independently from the CLI locale: '${locale}'`, async function () {
50+
this.timeout(timeout);
51+
const configDirPath = await prepareTestConfigDir({ locale });
52+
53+
const container = await startCli(configDirPath, toDispose);
54+
await assertFunctionalCli(container, ({ coreClientProvider }) => {
55+
const { indexUpdateSummaryBeforeInit } = coreClientProvider;
56+
expect(indexUpdateSummaryBeforeInit).to.be.not.undefined;
57+
expect(indexUpdateSummaryBeforeInit).to.be.empty;
58+
});
59+
})
60+
);
61+
4862
it("should recover all when the 'directories.data' folder is missing", async function () {
4963
this.timeout(timeout);
5064
const configDirPath = await prepareTestConfigDir();
@@ -157,7 +171,7 @@ describe('core-client-provider', () => {
157171
).to.be.equal(1);
158172
};
159173
const configDirPath = await prepareTestConfigDir(
160-
additionalUrls,
174+
{ board_manager: { additional_urls: additionalUrls } },
161175
({ boardsService }) => assertTeensyAvailable(boardsService)
162176
);
163177
const thirdPartyPackageIndexPath = join(
@@ -252,11 +266,11 @@ async function assertFunctionalCli(
252266
* the config folder.
253267
*/
254268
async function prepareTestConfigDir(
255-
additionalUrls: string[] = [],
269+
configOverrides: Partial<DefaultCliConfig> = {},
256270
otherExpect?: (services: Services) => MaybePromise<void>
257271
): Promise<string> {
258272
const toDispose = new DisposableCollection();
259-
const params = { configDirPath: newTempConfigDirPath(), additionalUrls };
273+
const params = { configDirPath: newTempConfigDirPath(), configOverrides };
260274
const container = await createContainer(params);
261275
try {
262276
await start(container, toDispose);
@@ -304,13 +318,13 @@ async function start(
304318

305319
async function createContainer(
306320
params:
307-
| { configDirPath: string; additionalUrls: string[] }
321+
| { configDirPath: string; configOverrides: Partial<DefaultCliConfig> }
308322
| string = newTempConfigDirPath()
309323
): Promise<Container> {
310324
if (typeof params === 'string') {
311325
return createBaseContainer({ configDirPath: params });
312326
}
313-
const { configDirPath, additionalUrls } = params;
314-
const cliConfig = await createCliConfig(configDirPath, additionalUrls);
327+
const { configDirPath, configOverrides } = params;
328+
const cliConfig = await createCliConfig(configDirPath, configOverrides);
315329
return createBaseContainer({ configDirPath, cliConfig });
316330
}

arduino-ide-extension/src/test/node/test-bindings.ts

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import {
2222
injectable,
2323
interfaces,
2424
} from '@theia/core/shared/inversify';
25+
import * as deepmerge from 'deepmerge';
2526
import { promises as fs, mkdirSync } from 'fs';
2627
import { dump as dumpYaml } from 'js-yaml';
2728
import { join } from 'path';
@@ -367,14 +368,14 @@ async function writeCliConfigFile(
367368
const yaml = dumpYaml(cliConfig);
368369
const cliConfigPath = join(containerFolderPath, CLI_CONFIG);
369370
await fs.writeFile(cliConfigPath, yaml);
370-
console.debug(`Created CLI configuration file at ${cliConfig}:
371+
console.debug(`Created CLI configuration file at ${cliConfigPath}:
371372
${yaml}
372373
`);
373374
}
374375

375376
export async function createCliConfig(
376377
configDirPath: string,
377-
additionalUrls: string[]
378+
configOverrides: Partial<DefaultCliConfig> = {}
378379
): Promise<DefaultCliConfig> {
379380
const directories = {
380381
data: join(configDirPath, 'data', 'Arduino15'),
@@ -385,13 +386,11 @@ export async function createCliConfig(
385386
for (const directoryPath of Object.values(directories)) {
386387
await fs.mkdir(directoryPath, { recursive: true });
387388
}
388-
return {
389-
directories,
390-
board_manager: {
391-
additional_urls: additionalUrls.length ? additionalUrls : [],
392-
},
389+
const config = { directories };
390+
const mergedOverrides = deepmerge(configOverrides, <DefaultCliConfig>{
393391
logging: { level: 'trace' },
394-
};
392+
});
393+
return deepmerge(config, mergedOverrides);
395394
}
396395

397396
export async function startDaemon(

yarn.lock

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6296,11 +6296,6 @@ deepmerge@*, deepmerge@^4.2.2:
62966296
resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955"
62976297
integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==
62986298

6299-
6300-
version "2.0.1"
6301-
resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-2.0.1.tgz#25c1c24f110fb914f80001b925264dd77f3f4312"
6302-
integrity sha512-VIPwiMJqJ13ZQfaCsIFnp5Me9tnjURiaIFxfz7EH0Ci0dTSQpZtSLrqOicXqEd/z2r+z+Klk9GzmnRsgpgbOsQ==
6303-
63046299
default-compare@^1.0.0:
63056300
version "1.0.0"
63066301
resolved "https://registry.yarnpkg.com/default-compare/-/default-compare-1.0.0.tgz#cb61131844ad84d84788fb68fd01681ca7781a2f"

0 commit comments

Comments
 (0)