Skip to content

Commit ae9ae5a

Browse files
author
Loïc Mangeonjean
committed
Revert "fix: properly report error on stream in readFileStream"
This reverts commit 7e45828.
1 parent 0e04a04 commit ae9ae5a

1 file changed

Lines changed: 43 additions & 24 deletions

File tree

src/service-override/files.ts

Lines changed: 43 additions & 24 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, newWriteableStream } from 'vs/base/common/stream'
59+
import { type ReadableStreamEvents, listenStream, 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 readFromDelegates<T>(
766-
caller: (delegate: IFileSystemProviderWithFileReadWriteCapability) => T,
765+
private async readFromDelegates<T>(
766+
caller: (delegate: IFileSystemProviderWithFileReadWriteCapability) => Promise<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 caller(delegate)
778+
return await caller(delegate)
779779
} catch (err) {
780780
errors.push(err)
781781
if (err instanceof FileSystemProviderError) {
@@ -859,29 +859,48 @@ class OverlayFileSystemProvider
859859
opts: IFileReadStreamOptions,
860860
token: CancellationToken
861861
): ReadableStreamEvents<Uint8Array> {
862-
return this.readFromDelegates<ReadableStreamEvents<Uint8Array>>((delegate) => {
862+
const writableStream = newWriteableStream<Uint8Array>(
863+
(data) => VSBuffer.concat(data.map((data) => VSBuffer.wrap(data))).buffer
864+
)
865+
this.readFromDelegates(async (delegate) => {
863866
if (hasFileReadStreamCapability(delegate)) {
864-
return delegate.readFileStream(resource, opts, token)
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+
})
865892
} else {
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-
}
875-
876-
writableStream.end(data)
877-
} catch (err) {
878-
writableStream.error(err as Error)
879-
}
880-
})()
881-
882-
return writableStream
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)
883898
}
884-
}, token)
899+
}, token).catch((err) => {
900+
writableStream.error(err)
901+
})
902+
903+
return writableStream
885904
}
886905

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

0 commit comments

Comments
 (0)