Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xxadev
vscode
提交
d8ef7579
V
vscode
项目概览
xxadev
/
vscode
与 Fork 源项目一致
从无法访问的项目Fork
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
V
vscode
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
d8ef7579
编写于
2月 25, 2017
作者:
K
katainaka0503
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Add flag to decide whether to automatically detect
上级
5ecf4d25
变更
11
显示空白变更内容
内联
并排
Showing
11 changed file
with
43 addition
and
21 deletion
+43
-21
src/vs/base/node/mime.ts
src/vs/base/node/mime.ts
+14
-10
src/vs/base/test/node/mime/fixtures/some.shiftjis.txt
src/vs/base/test/node/mime/fixtures/some.shiftjis.txt
+1
-0
src/vs/base/test/node/mime/mime.test.ts
src/vs/base/test/node/mime/mime.test.ts
+14
-6
src/vs/platform/files/common/files.ts
src/vs/platform/files/common/files.ts
+1
-0
src/vs/platform/telemetry/common/telemetryUtils.ts
src/vs/platform/telemetry/common/telemetryUtils.ts
+1
-0
src/vs/workbench/parts/files/browser/files.contribution.ts
src/vs/workbench/parts/files/browser/files.contribution.ts
+5
-0
src/vs/workbench/parts/git/node/git.lib.ts
src/vs/workbench/parts/git/node/git.lib.ts
+1
-1
src/vs/workbench/parts/git/node/rawGitService.ts
src/vs/workbench/parts/git/node/rawGitService.ts
+2
-2
src/vs/workbench/services/files/electron-browser/fileService.ts
.../workbench/services/files/electron-browser/fileService.ts
+1
-0
src/vs/workbench/services/files/node/fileService.ts
src/vs/workbench/services/files/node/fileService.ts
+2
-1
src/vs/workbench/services/search/node/worker/searchWorker.ts
src/vs/workbench/services/search/node/worker/searchWorker.ts
+1
-1
未找到文件。
src/vs/base/node/mime.ts
浏览文件 @
d8ef7579
...
@@ -58,15 +58,19 @@ export interface IMimeAndEncoding {
...
@@ -58,15 +58,19 @@ export interface IMimeAndEncoding {
mimes
:
string
[];
mimes
:
string
[];
}
}
function
doDetectMimesFromStream
(
instream
:
streams
.
Readable
):
TPromise
<
IMimeAndEncoding
>
{
function
doDetectMimesFromStream
(
instream
:
streams
.
Readable
,
autoDetectEncoding
:
boolean
):
TPromise
<
IMimeAndEncoding
>
{
return
stream
.
readExactlyByStream
(
instream
,
BUFFER_READ_MAX_LEN
).
then
(
detectMimeAndEncodingFromBuffer
);
return
stream
.
readExactlyByStream
(
instream
,
BUFFER_READ_MAX_LEN
).
then
((
readResult
:
stream
.
ReadResult
)
=>
{
return
detectMimeAndEncodingFromBuffer
(
readResult
,
autoDetectEncoding
);
});
}
}
function
doDetectMimesFromFile
(
absolutePath
:
string
):
TPromise
<
IMimeAndEncoding
>
{
function
doDetectMimesFromFile
(
absolutePath
:
string
,
autoDetectEncoding
:
boolean
):
TPromise
<
IMimeAndEncoding
>
{
return
stream
.
readExactlyByFile
(
absolutePath
,
BUFFER_READ_MAX_LEN
).
then
(
detectMimeAndEncodingFromBuffer
);
return
stream
.
readExactlyByFile
(
absolutePath
,
BUFFER_READ_MAX_LEN
).
then
((
readResult
:
stream
.
ReadResult
)
=>
{
return
detectMimeAndEncodingFromBuffer
(
readResult
,
autoDetectEncoding
);
});
}
}
export
function
detectMimeAndEncodingFromBuffer
({
buffer
,
bytesRead
}:
stream
.
ReadResult
):
IMimeAndEncoding
{
export
function
detectMimeAndEncodingFromBuffer
({
buffer
,
bytesRead
}:
stream
.
ReadResult
,
autoDetectEncoding
:
boolean
):
IMimeAndEncoding
{
let
enc
=
encoding
.
detectEncodingByBOMFromBuffer
(
buffer
,
bytesRead
);
let
enc
=
encoding
.
detectEncodingByBOMFromBuffer
(
buffer
,
bytesRead
);
// Detect 0 bytes to see if file is binary (ignore for UTF 16 though)
// Detect 0 bytes to see if file is binary (ignore for UTF 16 though)
...
@@ -79,7 +83,7 @@ export function detectMimeAndEncodingFromBuffer({buffer, bytesRead}: stream.Read
...
@@ -79,7 +83,7 @@ export function detectMimeAndEncodingFromBuffer({buffer, bytesRead}: stream.Read
}
}
}
}
}
}
if
(
isText
&&
!
enc
)
{
if
(
autoDetectEncoding
&&
isText
&&
!
enc
)
{
enc
=
encoding
.
detectEncodingByBuffer
(
buffer
);
enc
=
encoding
.
detectEncodingByBuffer
(
buffer
);
}
}
...
@@ -119,8 +123,8 @@ function filterAndSortMimes(detectedMimes: string[], guessedMimes: string[]): st
...
@@ -119,8 +123,8 @@ function filterAndSortMimes(detectedMimes: string[], guessedMimes: string[]): st
* @param instream the readable stream to detect the mime types from.
* @param instream the readable stream to detect the mime types from.
* @param nameHint an additional hint that can be used to detect a mime from a file extension.
* @param nameHint an additional hint that can be used to detect a mime from a file extension.
*/
*/
export
function
detectMimesFromStream
(
instream
:
streams
.
Readable
,
nameHint
:
string
):
TPromise
<
IMimeAndEncoding
>
{
export
function
detectMimesFromStream
(
instream
:
streams
.
Readable
,
nameHint
:
string
,
autoDetectEncoding
:
boolean
):
TPromise
<
IMimeAndEncoding
>
{
return
doDetectMimesFromStream
(
instream
).
then
(
encoding
=>
return
doDetectMimesFromStream
(
instream
,
autoDetectEncoding
).
then
(
encoding
=>
handleMimeResult
(
nameHint
,
encoding
)
handleMimeResult
(
nameHint
,
encoding
)
);
);
}
}
...
@@ -129,8 +133,8 @@ export function detectMimesFromStream(instream: streams.Readable, nameHint: stri
...
@@ -129,8 +133,8 @@ export function detectMimesFromStream(instream: streams.Readable, nameHint: stri
* Opens the given file to detect its mime type. Returns an array of mime types sorted from most specific to unspecific.
* Opens the given file to detect its mime type. Returns an array of mime types sorted from most specific to unspecific.
* @param absolutePath the absolute path of the file.
* @param absolutePath the absolute path of the file.
*/
*/
export
function
detectMimesFromFile
(
absolutePath
:
string
):
TPromise
<
IMimeAndEncoding
>
{
export
function
detectMimesFromFile
(
absolutePath
:
string
,
autoDetectEncoding
:
boolean
):
TPromise
<
IMimeAndEncoding
>
{
return
doDetectMimesFromFile
(
absolutePath
).
then
(
encoding
=>
return
doDetectMimesFromFile
(
absolutePath
,
autoDetectEncoding
).
then
(
encoding
=>
handleMimeResult
(
absolutePath
,
encoding
)
handleMimeResult
(
absolutePath
,
encoding
)
);
);
}
}
...
...
src/vs/base/test/node/mime/fixtures/some.shiftjis.txt
0 → 100644
浏览文件 @
d8ef7579
VSCODE͍ō̃GfB^B
\ No newline at end of file
src/vs/base/test/node/mime/mime.test.ts
浏览文件 @
d8ef7579
...
@@ -14,7 +14,7 @@ suite('Mime', () => {
...
@@ -14,7 +14,7 @@ suite('Mime', () => {
test
(
'
detectMimesFromFile (JSON saved as PNG)
'
,
function
(
done
:
(
err
?:
any
)
=>
void
)
{
test
(
'
detectMimesFromFile (JSON saved as PNG)
'
,
function
(
done
:
(
err
?:
any
)
=>
void
)
{
const
file
=
require
.
toUrl
(
'
./fixtures/some.json.png
'
);
const
file
=
require
.
toUrl
(
'
./fixtures/some.json.png
'
);
mime
.
detectMimesFromFile
(
file
).
then
(
mimes
=>
{
mime
.
detectMimesFromFile
(
file
,
false
).
then
(
mimes
=>
{
assert
.
deepEqual
(
mimes
.
mimes
,
[
'
text/plain
'
]);
assert
.
deepEqual
(
mimes
.
mimes
,
[
'
text/plain
'
]);
done
();
done
();
},
done
);
},
done
);
...
@@ -23,7 +23,7 @@ suite('Mime', () => {
...
@@ -23,7 +23,7 @@ suite('Mime', () => {
test
(
'
detectMimesFromFile (PNG saved as TXT)
'
,
function
(
done
:
(
err
?:
any
)
=>
void
)
{
test
(
'
detectMimesFromFile (PNG saved as TXT)
'
,
function
(
done
:
(
err
?:
any
)
=>
void
)
{
mimeCommon
.
registerTextMime
({
id
:
'
text
'
,
mime
:
'
text/plain
'
,
extension
:
'
.txt
'
});
mimeCommon
.
registerTextMime
({
id
:
'
text
'
,
mime
:
'
text/plain
'
,
extension
:
'
.txt
'
});
const
file
=
require
.
toUrl
(
'
./fixtures/some.png.txt
'
);
const
file
=
require
.
toUrl
(
'
./fixtures/some.png.txt
'
);
mime
.
detectMimesFromFile
(
file
).
then
(
mimes
=>
{
mime
.
detectMimesFromFile
(
file
,
false
).
then
(
mimes
=>
{
assert
.
deepEqual
(
mimes
.
mimes
,
[
'
text/plain
'
,
'
application/octet-stream
'
]);
assert
.
deepEqual
(
mimes
.
mimes
,
[
'
text/plain
'
,
'
application/octet-stream
'
]);
done
();
done
();
},
done
);
},
done
);
...
@@ -31,7 +31,7 @@ suite('Mime', () => {
...
@@ -31,7 +31,7 @@ suite('Mime', () => {
test
(
'
detectMimesFromFile (XML saved as PNG)
'
,
function
(
done
:
(
err
?:
any
)
=>
void
)
{
test
(
'
detectMimesFromFile (XML saved as PNG)
'
,
function
(
done
:
(
err
?:
any
)
=>
void
)
{
const
file
=
require
.
toUrl
(
'
./fixtures/some.xml.png
'
);
const
file
=
require
.
toUrl
(
'
./fixtures/some.xml.png
'
);
mime
.
detectMimesFromFile
(
file
).
then
(
mimes
=>
{
mime
.
detectMimesFromFile
(
file
,
false
).
then
(
mimes
=>
{
assert
.
deepEqual
(
mimes
.
mimes
,
[
'
text/plain
'
]);
assert
.
deepEqual
(
mimes
.
mimes
,
[
'
text/plain
'
]);
done
();
done
();
},
done
);
},
done
);
...
@@ -39,7 +39,7 @@ suite('Mime', () => {
...
@@ -39,7 +39,7 @@ suite('Mime', () => {
test
(
'
detectMimesFromFile (QWOFF saved as TXT)
'
,
function
(
done
:
(
err
?:
any
)
=>
void
)
{
test
(
'
detectMimesFromFile (QWOFF saved as TXT)
'
,
function
(
done
:
(
err
?:
any
)
=>
void
)
{
const
file
=
require
.
toUrl
(
'
./fixtures/some.qwoff.txt
'
);
const
file
=
require
.
toUrl
(
'
./fixtures/some.qwoff.txt
'
);
mime
.
detectMimesFromFile
(
file
).
then
(
mimes
=>
{
mime
.
detectMimesFromFile
(
file
,
false
).
then
(
mimes
=>
{
assert
.
deepEqual
(
mimes
.
mimes
,
[
'
text/plain
'
,
'
application/octet-stream
'
]);
assert
.
deepEqual
(
mimes
.
mimes
,
[
'
text/plain
'
,
'
application/octet-stream
'
]);
done
();
done
();
},
done
);
},
done
);
...
@@ -47,7 +47,7 @@ suite('Mime', () => {
...
@@ -47,7 +47,7 @@ suite('Mime', () => {
test
(
'
detectMimesFromFile (CSS saved as QWOFF)
'
,
function
(
done
:
(
err
?:
any
)
=>
void
)
{
test
(
'
detectMimesFromFile (CSS saved as QWOFF)
'
,
function
(
done
:
(
err
?:
any
)
=>
void
)
{
const
file
=
require
.
toUrl
(
'
./fixtures/some.css.qwoff
'
);
const
file
=
require
.
toUrl
(
'
./fixtures/some.css.qwoff
'
);
mime
.
detectMimesFromFile
(
file
).
then
(
mimes
=>
{
mime
.
detectMimesFromFile
(
file
,
false
).
then
(
mimes
=>
{
assert
.
deepEqual
(
mimes
.
mimes
,
[
'
text/plain
'
]);
assert
.
deepEqual
(
mimes
.
mimes
,
[
'
text/plain
'
]);
done
();
done
();
},
done
);
},
done
);
...
@@ -55,9 +55,17 @@ suite('Mime', () => {
...
@@ -55,9 +55,17 @@ suite('Mime', () => {
test
(
'
detectMimesFromFile (PDF)
'
,
function
(
done
:
()
=>
void
)
{
test
(
'
detectMimesFromFile (PDF)
'
,
function
(
done
:
()
=>
void
)
{
const
file
=
require
.
toUrl
(
'
./fixtures/some.pdf
'
);
const
file
=
require
.
toUrl
(
'
./fixtures/some.pdf
'
);
mime
.
detectMimesFromFile
(
file
).
then
(
mimes
=>
{
mime
.
detectMimesFromFile
(
file
,
false
).
then
(
mimes
=>
{
assert
.
deepEqual
(
mimes
.
mimes
,
[
'
application/octet-stream
'
]);
assert
.
deepEqual
(
mimes
.
mimes
,
[
'
application/octet-stream
'
]);
done
();
done
();
},
done
);
},
done
);
});
});
test
(
'
autoDetectEncoding (ShiftJIS)
'
,
function
(
done
:
()
=>
void
)
{
const
file
=
require
.
toUrl
(
'
./fixtures/some.shiftjis.txt
'
);
mime
.
detectMimesFromFile
(
file
,
true
).
then
(
mimes
=>
{
assert
.
deepEqual
(
mimes
.
encoding
,
'
SHIFT_JIS
'
);
done
();
},
done
);
});
});
});
src/vs/platform/files/common/files.ts
浏览文件 @
d8ef7579
...
@@ -575,6 +575,7 @@ export interface IFilesConfiguration {
...
@@ -575,6 +575,7 @@ export interface IFilesConfiguration {
exclude
:
glob
.
IExpression
;
exclude
:
glob
.
IExpression
;
watcherExclude
:
{
[
filepattern
:
string
]:
boolean
};
watcherExclude
:
{
[
filepattern
:
string
]:
boolean
};
encoding
:
string
;
encoding
:
string
;
autoDetectEncoding
:
boolean
;
trimTrailingWhitespace
:
boolean
;
trimTrailingWhitespace
:
boolean
;
autoSave
:
string
;
autoSave
:
string
;
autoSaveDelay
:
number
;
autoSaveDelay
:
number
;
...
...
src/vs/platform/telemetry/common/telemetryUtils.ts
浏览文件 @
d8ef7579
...
@@ -240,6 +240,7 @@ const configurationValueWhitelist = [
...
@@ -240,6 +240,7 @@ const configurationValueWhitelist = [
'
editor.acceptSuggestionOnCommitCharacter
'
,
'
editor.acceptSuggestionOnCommitCharacter
'
,
'
workbench.editor.showTabs
'
,
'
workbench.editor.showTabs
'
,
'
files.encoding
'
,
'
files.encoding
'
,
'
files.autoDetectEncoding
'
,
'
editor.quickSuggestionsDelay
'
,
'
editor.quickSuggestionsDelay
'
,
'
editor.snippetSuggestions
'
,
'
editor.snippetSuggestions
'
,
'
editor.selectionHighlight
'
,
'
editor.selectionHighlight
'
,
...
...
src/vs/workbench/parts/files/browser/files.contribution.ts
浏览文件 @
d8ef7579
...
@@ -212,6 +212,11 @@ configurationRegistry.registerConfiguration({
...
@@ -212,6 +212,11 @@ configurationRegistry.registerConfiguration({
'
default
'
:
'
utf8
'
,
'
default
'
:
'
utf8
'
,
'
description
'
:
nls
.
localize
(
'
encoding
'
,
"
The default character set encoding to use when reading and writing files.
"
),
'
description
'
:
nls
.
localize
(
'
encoding
'
,
"
The default character set encoding to use when reading and writing files.
"
),
},
},
'
files.autoDetectEncoding
'
:
{
'
type
'
:
'
boolean
'
,
'
default
'
:
false
,
'
description
'
:
nls
.
localize
(
'
autoDetetEncoding
'
,
"
whem enabled, will use detected encoding in opening a text file.
"
)
},
'
files.eol
'
:
{
'
files.eol
'
:
{
'
type
'
:
'
string
'
,
'
type
'
:
'
string
'
,
'
enum
'
:
[
'
enum
'
:
[
...
...
src/vs/workbench/parts/git/node/git.lib.ts
浏览文件 @
d8ef7579
...
@@ -327,7 +327,7 @@ export class Repository {
...
@@ -327,7 +327,7 @@ export class Repository {
return
TPromise
.
wrapError
(
localize
(
'
errorBuffer
'
,
"
Can't open file from git
"
));
return
TPromise
.
wrapError
(
localize
(
'
errorBuffer
'
,
"
Can't open file from git
"
));
}
}
return
detectMimesFromStream
(
child
.
stdout
,
null
).
then
(
result
=>
{
return
detectMimesFromStream
(
child
.
stdout
,
null
,
false
).
then
(
result
=>
{
return
isBinaryMime
(
result
.
mimes
)
?
return
isBinaryMime
(
result
.
mimes
)
?
TPromise
.
wrapError
<
string
>
(
<
IFileOperationResult
>
{
TPromise
.
wrapError
<
string
>
(
<
IFileOperationResult
>
{
message
:
localize
(
'
fileBinaryError
'
,
"
File seems to be binary and cannot be opened as text
"
),
message
:
localize
(
'
fileBinaryError
'
,
"
File seems to be binary and cannot be opened as text
"
),
...
...
src/vs/workbench/parts/git/node/rawGitService.ts
浏览文件 @
d8ef7579
...
@@ -165,14 +165,14 @@ export class RawGitService implements IRawGitService {
...
@@ -165,14 +165,14 @@ export class RawGitService implements IRawGitService {
detectMimetypes
(
filePath
:
string
,
treeish
?:
string
):
TPromise
<
string
[]
>
{
detectMimetypes
(
filePath
:
string
,
treeish
?:
string
):
TPromise
<
string
[]
>
{
return
exists
(
join
(
this
.
repo
.
path
,
filePath
)).
then
((
exists
)
=>
{
return
exists
(
join
(
this
.
repo
.
path
,
filePath
)).
then
((
exists
)
=>
{
if
(
exists
)
{
if
(
exists
)
{
return
detectMimesFromFile
(
join
(
this
.
repo
.
path
,
filePath
))
return
detectMimesFromFile
(
join
(
this
.
repo
.
path
,
filePath
)
,
false
)
.
then
(
result
=>
result
.
mimes
);
.
then
(
result
=>
result
.
mimes
);
}
}
const
child
=
this
.
repo
.
show
(
treeish
+
'
:
'
+
filePath
);
const
child
=
this
.
repo
.
show
(
treeish
+
'
:
'
+
filePath
);
return
new
TPromise
<
string
[]
>
((
c
,
e
)
=>
return
new
TPromise
<
string
[]
>
((
c
,
e
)
=>
detectMimesFromStream
(
child
.
stdout
,
filePath
)
detectMimesFromStream
(
child
.
stdout
,
filePath
,
false
)
.
then
(
result
=>
result
.
mimes
)
.
then
(
result
=>
result
.
mimes
)
);
);
});
});
...
...
src/vs/workbench/services/files/electron-browser/fileService.ts
浏览文件 @
d8ef7579
...
@@ -81,6 +81,7 @@ export class FileService implements IFileService {
...
@@ -81,6 +81,7 @@ export class FileService implements IFileService {
const
fileServiceConfig
:
IFileServiceOptions
=
{
const
fileServiceConfig
:
IFileServiceOptions
=
{
errorLogger
:
(
msg
:
string
)
=>
this
.
onFileServiceError
(
msg
),
errorLogger
:
(
msg
:
string
)
=>
this
.
onFileServiceError
(
msg
),
encoding
:
configuration
.
files
&&
configuration
.
files
.
encoding
,
encoding
:
configuration
.
files
&&
configuration
.
files
.
encoding
,
autoDetectEncoding
:
configuration
.
files
&&
configuration
.
files
.
autoDetectEncoding
,
encodingOverride
,
encodingOverride
,
watcherIgnoredPatterns
,
watcherIgnoredPatterns
,
verboseLogging
:
environmentService
.
verbose
,
verboseLogging
:
environmentService
.
verbose
,
...
...
src/vs/workbench/services/files/node/fileService.ts
浏览文件 @
d8ef7579
...
@@ -44,6 +44,7 @@ export interface IFileServiceOptions {
...
@@ -44,6 +44,7 @@ export interface IFileServiceOptions {
tmpDir
?:
string
;
tmpDir
?:
string
;
errorLogger
?:
(
msg
:
string
)
=>
void
;
errorLogger
?:
(
msg
:
string
)
=>
void
;
encoding
?:
string
;
encoding
?:
string
;
autoDetectEncoding
?:
boolean
;
bom
?:
string
;
bom
?:
string
;
encodingOverride
?:
IEncodingOverride
[];
encodingOverride
?:
IEncodingOverride
[];
watcherIgnoredPatterns
?:
string
[];
watcherIgnoredPatterns
?:
string
[];
...
@@ -205,7 +206,7 @@ export class FileService implements IFileService {
...
@@ -205,7 +206,7 @@ export class FileService implements IFileService {
}
}
// 2.) detect mimes
// 2.) detect mimes
return
mime
.
detectMimesFromFile
(
absolutePath
).
then
((
detected
:
mime
.
IMimeAndEncoding
)
=>
{
return
mime
.
detectMimesFromFile
(
absolutePath
,
this
.
options
.
autoDetectEncoding
).
then
((
detected
:
mime
.
IMimeAndEncoding
)
=>
{
const
isText
=
detected
.
mimes
.
indexOf
(
baseMime
.
MIME_BINARY
)
===
-
1
;
const
isText
=
detected
.
mimes
.
indexOf
(
baseMime
.
MIME_BINARY
)
===
-
1
;
// Return error early if client only accepts text and this is not text
// Return error early if client only accepts text and this is not text
...
...
src/vs/workbench/services/search/node/worker/searchWorker.ts
浏览文件 @
d8ef7579
...
@@ -209,7 +209,7 @@ export class SearchWorkerEngine {
...
@@ -209,7 +209,7 @@ export class SearchWorkerEngine {
// Detect encoding and mime when this is the beginning of the file
// Detect encoding and mime when this is the beginning of the file
if
(
isFirstRead
)
{
if
(
isFirstRead
)
{
const
mimeAndEncoding
=
detectMimeAndEncodingFromBuffer
({
buffer
,
bytesRead
});
const
mimeAndEncoding
=
detectMimeAndEncodingFromBuffer
({
buffer
,
bytesRead
}
,
false
);
if
(
mimeAndEncoding
.
mimes
[
mimeAndEncoding
.
mimes
.
length
-
1
]
!==
baseMime
.
MIME_TEXT
)
{
if
(
mimeAndEncoding
.
mimes
[
mimeAndEncoding
.
mimes
.
length
-
1
]
!==
baseMime
.
MIME_TEXT
)
{
return
clb
(
null
);
// skip files that seem binary
return
clb
(
null
);
// skip files that seem binary
}
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录