Skip to content

Commit 7e45828

Browse files
author
Loïc Mangeonjean
committed
fix: properly report error on stream in readFileStream
1 parent 1299bbb commit 7e45828

1 file changed

Lines changed: 24 additions & 43 deletions

File tree

src/service-override/files.ts

Lines changed: 24 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ import { BrowserElevatedFileService } from 'vs/workbench/services/files/browser/
5656
import { IElevatedFileService } from 'vs/workbench/services/files/common/elevatedFileService.service'
5757
import * as resources from 'vs/base/common/resources'
5858
import { VSBuffer } from 'vs/base/common/buffer'
59-
import { type ReadableStreamEvents, listenStream, newWriteableStream } from 'vs/base/common/stream'
59+
import { type ReadableStreamEvents, newWriteableStream } from 'vs/base/common/stream'
6060
import { CancellationToken } from 'vs/base/common/cancellation'
6161
import { checkServicesNotInitialized, registerServiceInitializePreParticipant } from '../lifecycle'
6262
import { logsPath } from '../workbench'
@@ -762,8 +762,8 @@ class OverlayFileSystemProvider
762762
FileSystemProviderCapabilities.FileReadStream |
763763
FileSystemProviderCapabilities.FileAppend
764764

765-
private async readFromDelegates<T>(
766-
caller: (delegate: IFileSystemProviderWithFileReadWriteCapability) => Promise<T>,
765+
private readFromDelegates<T>(
766+
caller: (delegate: IFileSystemProviderWithFileReadWriteCapability) => T,
767767
token?: CancellationToken
768768
) {
769769
if (this.delegates.length === 0) {
@@ -775,7 +775,7 @@ class OverlayFileSystemProvider
775775
throw new Error('Cancelled')
776776
}
777777
try {
778-
return await caller(delegate)
778+
return caller(delegate)
779779
} catch (err) {
780780
errors.push(err)
781781
if (err instanceof FileSystemProviderError) {
@@ -859,48 +859,29 @@ class OverlayFileSystemProvider
859859
opts: IFileReadStreamOptions,
860860
token: CancellationToken
861861
): ReadableStreamEvents<Uint8Array> {
862-
const writableStream = newWriteableStream<Uint8Array>(
863-
(data) => VSBuffer.concat(data.map((data) => VSBuffer.wrap(data))).buffer
864-
)
865-
this.readFromDelegates(async (delegate) => {
862+
return this.readFromDelegates<ReadableStreamEvents<Uint8Array>>((delegate) => {
866863
if (hasFileReadStreamCapability(delegate)) {
867-
const stream = delegate.readFileStream(resource, opts, token)
868-
await new Promise<void>((resolve, reject) => {
869-
let dataReceived = false
870-
listenStream(
871-
stream,
872-
{
873-
onData(data) {
874-
dataReceived = true
875-
void writableStream.write(data)
876-
},
877-
onEnd() {
878-
writableStream.end()
879-
resolve()
880-
},
881-
onError(err) {
882-
if (!dataReceived) {
883-
reject(err)
884-
} else {
885-
writableStream.error(err)
886-
}
887-
}
888-
},
889-
token
890-
)
891-
})
864+
return delegate.readFileStream(resource, opts, token)
892865
} else {
893-
let data = await this.readFile(resource)
894-
if (typeof opts.position === 'number' || typeof opts.length === 'number') {
895-
data = data.slice(opts.position ?? 0, opts.length)
896-
}
897-
return writableStream.end(data)
898-
}
899-
}, token).catch((err) => {
900-
writableStream.error(err)
901-
})
866+
const writableStream = newWriteableStream<Uint8Array>(
867+
(data) => VSBuffer.concat(data.map((data) => VSBuffer.wrap(data))).buffer
868+
)
869+
;(async () => {
870+
try {
871+
let data = await this.readFile(resource)
872+
if (typeof opts.position === 'number' || typeof opts.length === 'number') {
873+
data = data.slice(opts.position ?? 0, opts.length)
874+
}
902875

903-
return writableStream
876+
writableStream.end(data)
877+
} catch (err) {
878+
writableStream.error(err as Error)
879+
}
880+
})()
881+
882+
return writableStream
883+
}
884+
}, token)
904885
}
905886

906887
async readdir(resource: URI): Promise<[string, FileType][]> {

0 commit comments

Comments
 (0)