Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
掘金者说
vscode
提交
f77d6768
V
vscode
项目概览
掘金者说
/
vscode
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
V
vscode
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
f77d6768
编写于
6月 11, 2020
作者:
B
Benjamin Pasero
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
files -
💄
上级
bef1b60d
变更
6
隐藏空白更改
内联
并排
Showing
6 changed file
with
49 addition
and
48 deletion
+49
-48
src/vs/platform/files/common/fileService.ts
src/vs/platform/files/common/fileService.ts
+7
-3
src/vs/platform/files/common/files.ts
src/vs/platform/files/common/files.ts
+2
-2
src/vs/platform/files/common/io.ts
src/vs/platform/files/common/io.ts
+20
-26
src/vs/platform/files/node/diskFileSystemProvider.ts
src/vs/platform/files/node/diskFileSystemProvider.ts
+9
-4
src/vs/workbench/services/remote/common/remoteAgentFileSystemChannel.ts
...ch/services/remote/common/remoteAgentFileSystemChannel.ts
+10
-12
src/vs/workbench/services/userData/common/fileUserDataProvider.ts
...orkbench/services/userData/common/fileUserDataProvider.ts
+1
-1
未找到文件。
src/vs/platform/files/common/fileService.ts
浏览文件 @
f77d6768
...
...
@@ -13,12 +13,12 @@ import { TernarySearchTree } from 'vs/base/common/map';
import
{
isNonEmptyArray
,
coalesce
}
from
'
vs/base/common/arrays
'
;
import
{
getBaseLabel
}
from
'
vs/base/common/labels
'
;
import
{
ILogService
}
from
'
vs/platform/log/common/log
'
;
import
{
VSBuffer
,
VSBufferReadable
,
readableToBuffer
,
bufferToReadable
,
streamToBuffer
,
bufferToStream
,
VSBufferReadableStream
,
VSBufferReadableBufferedStream
,
bufferedStreamToBuffer
}
from
'
vs/base/common/buffer
'
;
import
{
VSBuffer
,
VSBufferReadable
,
readableToBuffer
,
bufferToReadable
,
streamToBuffer
,
bufferToStream
,
VSBufferReadableStream
,
VSBufferReadableBufferedStream
,
bufferedStreamToBuffer
,
newWriteableBufferStream
}
from
'
vs/base/common/buffer
'
;
import
{
isReadableStream
,
transform
,
peekReadable
,
peekStream
,
isReadableBufferedStream
}
from
'
vs/base/common/stream
'
;
import
{
Queue
}
from
'
vs/base/common/async
'
;
import
{
CancellationTokenSource
,
CancellationToken
}
from
'
vs/base/common/cancellation
'
;
import
{
Schemas
}
from
'
vs/base/common/network
'
;
import
{
createVSBufferRead
Stream
}
from
'
vs/platform/files/common/io
'
;
import
{
readFileInto
Stream
}
from
'
vs/platform/files/common/io
'
;
export
class
FileService
extends
Disposable
implements
IFileService
{
...
...
@@ -476,11 +476,15 @@ export class FileService extends Disposable implements IFileService {
}
private
readFileBuffered
(
provider
:
IFileSystemProviderWithOpenReadWriteCloseCapability
,
resource
:
URI
,
token
:
CancellationToken
,
options
:
IReadFileOptions
=
Object
.
create
(
null
)):
VSBufferReadableStream
{
return
createVSBufferReadStream
(
provider
,
resource
,
{
const
stream
=
newWriteableBufferStream
();
readFileIntoStream
(
provider
,
resource
,
stream
,
data
=>
data
,
{
...
options
,
bufferSize
:
this
.
BUFFER_SIZE
,
errorTransformer
:
error
=>
new
FileOperationError
(
localize
(
'
err.read
'
,
"
Unable to read file '{0}' ({1})
"
,
this
.
resourceForError
(
resource
),
ensureFileSystemProviderError
(
error
).
toString
()),
toFileOperationResult
(
error
),
options
)
},
token
);
return
stream
;
}
private
async
readFileUnbuffered
(
provider
:
IFileSystemProviderWithFileReadWriteCapability
,
resource
:
URI
,
options
?:
IReadFileOptions
):
Promise
<
VSBufferReadableStream
>
{
...
...
src/vs/platform/files/common/files.ts
浏览文件 @
f77d6768
...
...
@@ -283,7 +283,7 @@ export interface IFileSystemProvider {
readFile
?(
resource
:
URI
):
Promise
<
Uint8Array
>
;
writeFile
?(
resource
:
URI
,
content
:
Uint8Array
,
opts
:
FileWriteOptions
):
Promise
<
void
>
;
readFileStream
?(
resource
:
URI
,
opts
:
FileReadStreamOptions
,
token
?
:
CancellationToken
):
ReadableStreamEvents
<
Uint8Array
>
;
readFileStream
?(
resource
:
URI
,
opts
:
FileReadStreamOptions
,
token
:
CancellationToken
):
ReadableStreamEvents
<
Uint8Array
>
;
open
?(
resource
:
URI
,
opts
:
FileOpenOptions
):
Promise
<
number
>
;
close
?(
fd
:
number
):
Promise
<
void
>
;
...
...
@@ -320,7 +320,7 @@ export function hasOpenReadWriteCloseCapability(provider: IFileSystemProvider):
}
export
interface
IFileSystemProviderWithFileReadStreamCapability
extends
IFileSystemProvider
{
readFileStream
(
resource
:
URI
,
opts
:
FileReadStreamOptions
,
token
?
:
CancellationToken
):
ReadableStreamEvents
<
Uint8Array
>
;
readFileStream
(
resource
:
URI
,
opts
:
FileReadStreamOptions
,
token
:
CancellationToken
):
ReadableStreamEvents
<
Uint8Array
>
;
}
export
function
hasFileReadStreamCapability
(
provider
:
IFileSystemProvider
):
provider
is
IFileSystemProviderWithFileReadStreamCapability
{
...
...
src/vs/platform/files/common/io.ts
浏览文件 @
f77d6768
...
...
@@ -5,11 +5,11 @@
import
{
localize
}
from
'
vs/nls
'
;
import
{
URI
}
from
'
vs/base/common/uri
'
;
import
{
VSBuffer
,
newWriteableBufferStream
,
VSBufferReadableStream
}
from
'
vs/base/common/buffer
'
;
import
{
VSBuffer
}
from
'
vs/base/common/buffer
'
;
import
{
CancellationToken
}
from
'
vs/base/common/cancellation
'
;
import
{
IFileSystemProviderWithOpenReadWriteCloseCapability
,
FileReadStreamOptions
,
createFileSystemProviderError
,
FileSystemProviderErrorCode
,
ensureFileSystemProviderError
}
from
'
vs/platform/files/common/files
'
;
import
{
canceled
}
from
'
vs/base/common/errors
'
;
import
{
IErrorTransformer
,
IDataTransformer
,
ReadableStream
,
WriteableStream
,
new
WriteableStream
}
from
'
vs/base/common/stream
'
;
import
{
IErrorTransformer
,
IDataTransformer
,
WriteableStream
}
from
'
vs/base/common/stream
'
;
export
interface
ICreateReadStreamOptions
extends
FileReadStreamOptions
{
...
...
@@ -24,27 +24,21 @@ export interface ICreateReadStreamOptions extends FileReadStreamOptions {
errorTransformer
?:
IErrorTransformer
;
}
export
function
createVSBufferReadStream
(
provider
:
IFileSystemProviderWithOpenReadWriteCloseCapability
,
resource
:
URI
,
options
:
ICreateReadStreamOptions
,
token
?:
CancellationToken
):
VSBufferReadableStream
{
const
stream
=
newWriteableBufferStream
();
readFileIntoStream
(
provider
,
resource
,
stream
,
data
=>
data
,
options
,
token
);
return
stream
;
}
export
function
createUint8ArrayReadStream
(
provider
:
IFileSystemProviderWithOpenReadWriteCloseCapability
,
resource
:
URI
,
options
:
ICreateReadStreamOptions
,
token
?:
CancellationToken
):
ReadableStream
<
Uint8Array
>
{
const
stream
=
newWriteableStream
<
Uint8Array
>
(
data
=>
VSBuffer
.
concat
(
data
.
map
(
data
=>
VSBuffer
.
wrap
(
data
))).
buffer
);
readFileIntoStream
(
provider
,
resource
,
stream
,
data
=>
data
.
buffer
,
options
,
token
);
return
stream
;
}
async
function
readFileIntoStream
<
T
>
(
provider
:
IFileSystemProviderWithOpenReadWriteCloseCapability
,
resource
:
URI
,
stream
:
WriteableStream
<
T
>
,
transformer
:
IDataTransformer
<
VSBuffer
,
T
>
,
options
:
ICreateReadStreamOptions
,
token
?:
CancellationToken
):
Promise
<
void
>
{
/**
* A helper to read a file from a provider with open/read/close capability into a stream.
*/
export
async
function
readFileIntoStream
<
T
>
(
provider
:
IFileSystemProviderWithOpenReadWriteCloseCapability
,
resource
:
URI
,
target
:
WriteableStream
<
T
>
,
transformer
:
IDataTransformer
<
VSBuffer
,
T
>
,
options
:
ICreateReadStreamOptions
,
token
:
CancellationToken
):
Promise
<
void
>
{
let
error
:
Error
|
undefined
=
undefined
;
try
{
await
doReadFileIntoStream
(
provider
,
resource
,
stream
,
transformer
,
options
,
token
);
await
doReadFileIntoStream
(
provider
,
resource
,
target
,
transformer
,
options
,
token
);
}
catch
(
err
)
{
error
=
err
;
}
finally
{
...
...
@@ -52,11 +46,11 @@ async function readFileIntoStream<T>(provider: IFileSystemProviderWithOpenReadWr
error
=
options
.
errorTransformer
(
error
);
}
stream
.
end
(
error
);
target
.
end
(
error
);
}
}
async
function
doReadFileIntoStream
<
T
>
(
provider
:
IFileSystemProviderWithOpenReadWriteCloseCapability
,
resource
:
URI
,
stream
:
WriteableStream
<
T
>
,
transformer
:
IDataTransformer
<
VSBuffer
,
T
>
,
options
:
ICreateReadStreamOptions
,
token
?
:
CancellationToken
):
Promise
<
void
>
{
async
function
doReadFileIntoStream
<
T
>
(
provider
:
IFileSystemProviderWithOpenReadWriteCloseCapability
,
resource
:
URI
,
target
:
WriteableStream
<
T
>
,
transformer
:
IDataTransformer
<
VSBuffer
,
T
>
,
options
:
ICreateReadStreamOptions
,
token
:
CancellationToken
):
Promise
<
void
>
{
// Check for cancellation
throwIfCancelled
(
token
);
...
...
@@ -91,7 +85,7 @@ async function doReadFileIntoStream<T>(provider: IFileSystemProviderWithOpenRead
// when buffer full, create a new one and emit it through stream
if
(
posInBuffer
===
buffer
.
byteLength
)
{
stream
.
write
(
transformer
(
buffer
));
target
.
write
(
transformer
(
buffer
));
buffer
=
VSBuffer
.
alloc
(
Math
.
min
(
options
.
bufferSize
,
typeof
allowedRemainingBytes
===
'
number
'
?
allowedRemainingBytes
:
options
.
bufferSize
));
...
...
@@ -106,7 +100,7 @@ async function doReadFileIntoStream<T>(provider: IFileSystemProviderWithOpenRead
lastChunkLength
=
Math
.
min
(
posInBuffer
,
allowedRemainingBytes
);
}
stream
.
write
(
transformer
(
buffer
.
slice
(
0
,
lastChunkLength
)));
target
.
write
(
transformer
(
buffer
.
slice
(
0
,
lastChunkLength
)));
}
}
catch
(
error
)
{
throw
ensureFileSystemProviderError
(
error
);
...
...
@@ -115,8 +109,8 @@ async function doReadFileIntoStream<T>(provider: IFileSystemProviderWithOpenRead
}
}
function
throwIfCancelled
(
token
?
:
CancellationToken
):
boolean
{
if
(
token
&&
token
.
isCancellationRequested
)
{
function
throwIfCancelled
(
token
:
CancellationToken
):
boolean
{
if
(
token
.
isCancellationRequested
)
{
throw
canceled
();
}
...
...
src/vs/platform/files/node/diskFileSystemProvider.ts
浏览文件 @
f77d6768
...
...
@@ -23,9 +23,10 @@ import { FileWatcher as WindowsWatcherService } from 'vs/platform/files/node/wat
import
{
FileWatcher
as
NsfwWatcherService
}
from
'
vs/platform/files/node/watcher/nsfw/watcherService
'
;
import
{
FileWatcher
as
NodeJSWatcherService
}
from
'
vs/platform/files/node/watcher/nodejs/watcherService
'
;
import
{
CancellationToken
}
from
'
vs/base/common/cancellation
'
;
import
{
ReadableStreamEvents
}
from
'
vs/base/common/stream
'
;
import
{
createUint8ArrayRead
Stream
}
from
'
vs/platform/files/common/io
'
;
import
{
ReadableStreamEvents
,
newWriteableStream
}
from
'
vs/base/common/stream
'
;
import
{
readFileInto
Stream
}
from
'
vs/platform/files/common/io
'
;
import
{
insert
}
from
'
vs/base/common/arrays
'
;
import
{
VSBuffer
}
from
'
vs/base/common/buffer
'
;
export
interface
IWatcherOptions
{
pollingInterval
?:
number
;
...
...
@@ -153,11 +154,15 @@ export class DiskFileSystemProvider extends Disposable implements
}
}
readFileStream
(
resource
:
URI
,
opts
:
FileReadStreamOptions
,
token
?:
CancellationToken
):
ReadableStreamEvents
<
Uint8Array
>
{
return
createUint8ArrayReadStream
(
this
,
resource
,
{
readFileStream
(
resource
:
URI
,
opts
:
FileReadStreamOptions
,
token
:
CancellationToken
):
ReadableStreamEvents
<
Uint8Array
>
{
const
stream
=
newWriteableStream
<
Uint8Array
>
(
data
=>
VSBuffer
.
concat
(
data
.
map
(
data
=>
VSBuffer
.
wrap
(
data
))).
buffer
);
readFileIntoStream
(
this
,
resource
,
stream
,
data
=>
data
.
buffer
,
{
...
opts
,
bufferSize
:
this
.
BUFFER_SIZE
},
token
);
return
stream
;
}
async
writeFile
(
resource
:
URI
,
content
:
Uint8Array
,
opts
:
FileWriteOptions
):
Promise
<
void
>
{
...
...
src/vs/workbench/services/remote/common/remoteAgentFileSystemChannel.ts
浏览文件 @
f77d6768
...
...
@@ -121,7 +121,7 @@ export class RemoteFileSystemProvider extends Disposable implements
return
buff
.
buffer
;
}
readFileStream
(
resource
:
URI
,
opts
:
FileReadStreamOptions
,
token
?
:
CancellationToken
):
ReadableStreamEvents
<
Uint8Array
>
{
readFileStream
(
resource
:
URI
,
opts
:
FileReadStreamOptions
,
token
:
CancellationToken
):
ReadableStreamEvents
<
Uint8Array
>
{
const
stream
=
newWriteableStream
<
Uint8Array
>
(
data
=>
VSBuffer
.
concat
(
data
.
map
(
data
=>
VSBuffer
.
wrap
(
data
))).
buffer
);
// Reading as file stream goes through an event to the remote side
...
...
@@ -156,19 +156,17 @@ export class RemoteFileSystemProvider extends Disposable implements
});
// Support cancellation
if
(
token
)
{
token
.
onCancellationRequested
(()
=>
{
token
.
onCancellationRequested
(()
=>
{
// Ensure to end the stream properly with an error
// to indicate the cancellation.
stream
.
end
(
canceled
());
// Ensure to end the stream properly with an error
// to indicate the cancellation.
stream
.
end
(
canceled
());
// Ensure to dispose the listener upon cancellation. This will
// bubble through the remote side as event and allows to stop
// reading the file.
listener
.
dispose
();
});
}
// Ensure to dispose the listener upon cancellation. This will
// bubble through the remote side as event and allows to stop
// reading the file.
listener
.
dispose
();
});
return
stream
;
}
...
...
src/vs/workbench/services/userData/common/fileUserDataProvider.ts
浏览文件 @
f77d6768
...
...
@@ -67,7 +67,7 @@ export class FileUserDataProvider extends Disposable implements
throw
new
Error
(
'
not supported
'
);
}
readFileStream
(
resource
:
URI
,
opts
:
FileReadStreamOptions
,
token
?
:
CancellationToken
):
ReadableStreamEvents
<
Uint8Array
>
{
readFileStream
(
resource
:
URI
,
opts
:
FileReadStreamOptions
,
token
:
CancellationToken
):
ReadableStreamEvents
<
Uint8Array
>
{
if
(
hasFileReadStreamCapability
(
this
.
fileSystemProvider
))
{
return
this
.
fileSystemProvider
.
readFileStream
(
this
.
toFileSystemResource
(
resource
),
opts
,
token
);
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录