Skip to content

Commit 67e863d

Browse files
author
Akos Kitta
committed
fix: order the resources to delete
longest path comes first to remove to most nested resources, then their container if any. Signed-off-by: Akos Kitta <a.kitta@arduino.cc>
1 parent 478c36c commit 67e863d

File tree

2 files changed

+11
-10
lines changed

2 files changed

+11
-10
lines changed

arduino-ide-extension/src/browser/create/create-fs-provider.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -104,9 +104,9 @@ export class CreateFsProvider
104104
let errToRethrow = err;
105105
// Not Found (Create API) errors must be remapped to VS Code filesystem provider specific errors
106106
// https://code.visualstudio.com/api/references/vscode-api#FileSystemError
107-
if (isNotFound(err)) {
107+
if (isNotFound(errToRethrow)) {
108108
errToRethrow = createFileSystemProviderError(
109-
err,
109+
errToRethrow,
110110
FileSystemProviderErrorCode.FileNotFound
111111
);
112112
}

arduino-ide-extension/src/browser/widgets/cloud-sketchbook/cloud-sketchbook-tree.ts

+9-8
Original file line numberDiff line numberDiff line change
@@ -391,9 +391,10 @@ export class CloudSketchbookTree extends SketchbookTree {
391391
const { filesToWrite, filesToDelete } = await this.treeDiff(source, dest);
392392
// Sort by the URIs. The shortest comes first. It's to ensure creating the parent folder for nested resources, for example.
393393
// When sorting the URIs, it does not matter whether on source or dest, only the URI path and its length matters; they're the same for a source+dest pair
394-
filesToWrite.sort(
395-
(left, right) =>
396-
left.source.path.toString().length - right.source.path.toString().length
394+
const uriPathLengthComparator = (left: URI, right: URI) =>
395+
left.path.toString().length - right.path.toString().length;
396+
filesToWrite.sort((left, right) =>
397+
uriPathLengthComparator(left.source, right.source)
397398
);
398399
for (const { source, dest } of filesToWrite) {
399400
const stat = await this.fileService.resolve(source);
@@ -405,11 +406,11 @@ export class CloudSketchbookTree extends SketchbookTree {
405406
}
406407
}
407408

408-
await Promise.all(
409-
filesToDelete.map((file) =>
410-
this.fileService.delete(file, { recursive: true })
411-
)
412-
);
409+
// Longes URI paths come first to delete the most nested ones first.
410+
filesToDelete.sort(uriPathLengthComparator).reverse();
411+
for (const resource of filesToDelete) {
412+
await this.fileService.delete(resource, { recursive: true });
413+
}
413414
}
414415

415416
override async resolveChildren(

0 commit comments

Comments
 (0)