Skip to content

Commit

Permalink
files - add a FileOperation.WRITE (#142020)
Browse files Browse the repository at this point in the history
  • Loading branch information
bpasero committed Feb 4, 2022
1 parent 56ff566 commit 19034bc
Show file tree
Hide file tree
Showing 4 changed files with 17 additions and 4 deletions.
3 changes: 3 additions & 0 deletions src/vs/platform/files/common/fileService.ts
Original file line number Diff line number Diff line change
Expand Up @@ -388,6 +388,9 @@ export class FileService extends Disposable implements IFileService {
else {
await this.doWriteBuffered(provider, resource, options, bufferOrReadableOrStreamOrBufferedStream instanceof VSBuffer ? bufferToReadable(bufferOrReadableOrStreamOrBufferedStream) : bufferOrReadableOrStreamOrBufferedStream);
}

// events
this._onDidRunOperation.fire(new FileOperationEvent(resource, FileOperation.WRITE));
} catch (error) {
throw new FileOperationError(localize('err.write', "Unable to write file '{0}' ({1})", this.resourceForError(resource), ensureFileSystemProviderError(error).toString()), toFileOperationResult(error), options);
}
Expand Down
9 changes: 5 additions & 4 deletions src/vs/platform/files/common/files.ts
Original file line number Diff line number Diff line change
Expand Up @@ -654,17 +654,18 @@ export const enum FileOperation {
CREATE,
DELETE,
MOVE,
COPY
COPY,
WRITE
}

export class FileOperationEvent {

constructor(resource: URI, operation: FileOperation.DELETE);
constructor(resource: URI, operation: FileOperation.DELETE | FileOperation.WRITE);
constructor(resource: URI, operation: FileOperation.CREATE | FileOperation.MOVE | FileOperation.COPY, target: IFileStatWithMetadata);
constructor(readonly resource: URI, readonly operation: FileOperation, readonly target?: IFileStatWithMetadata) { }

isOperation(operation: FileOperation.DELETE): boolean;
isOperation(operation: FileOperation.MOVE | FileOperation.COPY | FileOperation.CREATE): this is { readonly target: IFileStatWithMetadata };
isOperation(operation: FileOperation.DELETE | FileOperation.WRITE): boolean;
isOperation(operation: FileOperation.CREATE | FileOperation.MOVE | FileOperation.COPY): this is { readonly target: IFileStatWithMetadata };
isOperation(operation: FileOperation): boolean {
return this.operation === operation;
}
Expand Down
7 changes: 7 additions & 0 deletions src/vs/platform/files/test/node/diskFileService.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1717,6 +1717,9 @@ flakySuite('Disk File Service', function () {
});

async function testWriteFile() {
let event: FileOperationEvent;
disposables.add(service.onDidRunOperation(e => event = e));

const resource = URI.file(join(testDir, 'small.txt'));

const content = readFileSync(resource.fsPath).toString();
Expand All @@ -1725,6 +1728,10 @@ flakySuite('Disk File Service', function () {
const newContent = 'Updates to the small file';
await service.writeFile(resource, VSBuffer.fromString(newContent));

assert.ok(event!);
assert.strictEqual(event!.resource.fsPath, resource.fsPath);
assert.strictEqual(event!.operation, FileOperation.WRITE);

assert.strictEqual(readFileSync(resource.fsPath).toString(), newContent);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -165,6 +165,8 @@ export class MainThreadFileSystemEventService {
return localize('msg-copy', "Running 'File Copy' participants...");
case FileOperation.DELETE:
return localize('msg-delete', "Running 'File Delete' participants...");
case FileOperation.WRITE:
return localize('msg-write', "Running 'File Write' participants...");
}
}
};
Expand Down

0 comments on commit 19034bc

Please sign in to comment.