files - final fixes for PR

This commit is contained in:
Benjamin Pasero 2023-05-26 09:42:06 +02:00
parent 4d10c16310
commit 7ca0c85dfe
No known key found for this signature in database
GPG key ID: E6380CC4C8219E65
2 changed files with 15 additions and 7 deletions

View file

@ -988,7 +988,7 @@ export class FileService extends Disposable implements IFileService {
}
if (useTrash && atomic) {
throw new Error(localize('deleteFailedTrashAndAtomicUnsupported', "Unable to delete file '{0}' with option to use trash and atomic both enabled.", this.resourceForError(resource)));
throw new Error(localize('deleteFailedTrashAndAtomicUnsupported', "Unable to atomically delete file '{0}' because using trash is enabled.", this.resourceForError(resource)));
}
// Validate delete
@ -1167,7 +1167,11 @@ export class FileService extends Disposable implements IFileService {
} catch (error) {
// Cleanup in case of rename error
await provider.delete(resource, { recursive: false, useTrash: false, atomic: false });
try {
await provider.delete(tempResource, { recursive: false, useTrash: false, atomic: false });
} catch (error) {
// ignore - we want the outer error to bubble up
}
throw error;
}

View file

@ -258,12 +258,16 @@ export class DiskFileSystemProvider extends AbstractDiskFileSystemProvider imple
try {
// Rename over existing to ensure atomic replace
await this.rename(tempResource, resource, { overwrite: opts.overwrite });
await this.rename(tempResource, resource, { overwrite: true });
} catch (error) {
// Cleanup in case of rename error
await this.delete(tempResource, { recursive: false, useTrash: false, atomic: false });
try {
await this.delete(tempResource, { recursive: false, useTrash: false, atomic: false });
} catch (error) {
// ignore - we want the outer error to bubble up
}
throw error;
}
@ -583,12 +587,12 @@ export class DiskFileSystemProvider extends AbstractDiskFileSystemProvider imple
try {
const filePath = this.toFilePath(resource);
if (opts.recursive) {
let atomicDeleteTarget: string | undefined = undefined;
let rmMoveToPath: string | undefined = undefined;
if (opts?.atomic !== false && opts.atomic.postfix) {
atomicDeleteTarget = join(dirname(filePath), `${basename(filePath)}${opts.atomic.postfix}`);
rmMoveToPath = join(dirname(filePath), `${basename(filePath)}${opts.atomic.postfix}`);
}
await Promises.rm(filePath, RimRafMode.MOVE, atomicDeleteTarget);
await Promises.rm(filePath, RimRafMode.MOVE, rmMoveToPath);
} else {
try {
await Promises.unlink(filePath);