Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
掘金者说
vscode
提交
c368342f
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,发现更多精彩内容 >>
提交
c368342f
编写于
5月 03, 2019
作者:
A
Alex Ross
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Handle newline characters in file picker
Fixes #71962
上级
45db52ba
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
36 addition
and
9 deletion
+36
-9
src/vs/workbench/services/dialogs/browser/remoteFileDialog.ts
...vs/workbench/services/dialogs/browser/remoteFileDialog.ts
+36
-9
未找到文件。
src/vs/workbench/services/dialogs/browser/remoteFileDialog.ts
浏览文件 @
c368342f
...
...
@@ -280,10 +280,11 @@ export class RemoteFileDialog {
// If the user has just entered more bad path, don't change anything
if
(
!
equalsIgnoreCase
(
value
,
this
.
constructFullUserPath
())
&&
!
this
.
isBadSubpath
(
value
))
{
this
.
filePickBox
.
validationMessage
=
undefined
;
const
valueUri
=
this
.
remoteUriFrom
(
this
.
trimTrailingSlash
(
this
.
filePickBox
.
value
));
const
filePickBoxUri
=
this
.
filePickBoxValue
();
const
valueUri
=
resources
.
removeTrailingPathSeparator
(
filePickBoxUri
);
let
updated
:
UpdateResult
=
UpdateResult
.
NotUpdated
;
if
(
!
resources
.
isEqual
(
this
.
remoteUriFrom
(
this
.
trimTrailingSlash
(
this
.
pathFromUri
(
this
.
currentFolder
))
),
valueUri
,
true
))
{
updated
=
await
this
.
tryUpdateItems
(
value
,
this
.
remoteUriFrom
(
this
.
filePickBox
.
value
)
);
if
(
!
resources
.
isEqual
(
resources
.
removeTrailingPathSeparator
(
this
.
currentFolder
),
valueUri
,
true
))
{
updated
=
await
this
.
tryUpdateItems
(
value
,
filePickBoxUri
);
}
if
(
updated
===
UpdateResult
.
NotUpdated
)
{
this
.
setActiveItems
(
value
);
...
...
@@ -331,6 +332,22 @@ export class RemoteFileDialog {
return
this
.
pathAppend
(
this
.
currentFolder
,
this
.
userEnteredPathSegment
);
}
private
filePickBoxValue
():
URI
{
// The file pick box can't render everything, so we use the current folder to create the uri so that it is an existing path.
const
directUri
=
this
.
remoteUriFrom
(
this
.
filePickBox
.
value
);
const
currentPath
=
this
.
pathFromUri
(
this
.
currentFolder
);
if
(
equalsIgnoreCase
(
this
.
filePickBox
.
value
,
currentPath
))
{
return
this
.
currentFolder
;
}
const
currentDisplayUri
=
this
.
remoteUriFrom
(
currentPath
);
const
relativePath
=
resources
.
relativePath
(
currentDisplayUri
,
directUri
);
if
(
relativePath
)
{
return
resources
.
joinPath
(
this
.
currentFolder
,
relativePath
);
}
else
{
return
directUri
;
}
}
private
async
onDidAccept
():
Promise
<
URI
|
undefined
>
{
this
.
filePickBox
.
busy
=
true
;
let
resolveValue
:
URI
|
undefined
;
...
...
@@ -340,7 +357,7 @@ export class RemoteFileDialog {
let
stat
:
IFileStat
|
undefined
;
let
statDirname
:
IFileStat
|
undefined
;
try
{
inputUri
=
resources
.
removeTrailingPathSeparator
(
this
.
remoteUriFrom
(
this
.
filePickBox
.
value
));
inputUri
=
resources
.
removeTrailingPathSeparator
(
this
.
filePickBoxValue
(
));
inputUriDirname
=
resources
.
dirname
(
inputUri
);
statDirname
=
await
this
.
fileService
.
resolve
(
inputUriDirname
);
stat
=
await
this
.
fileService
.
resolve
(
inputUri
);
...
...
@@ -415,7 +432,7 @@ export class RemoteFileDialog {
return
UpdateResult
.
InvalidPath
;
}
else
{
const
inputUriDirname
=
resources
.
dirname
(
valueUri
);
if
(
!
resources
.
isEqual
(
this
.
remoteUriFrom
(
this
.
trimTrailingSlash
(
this
.
pathFromUri
(
this
.
currentFolder
))
),
inputUriDirname
,
true
))
{
if
(
!
resources
.
isEqual
(
resources
.
removeTrailingPathSeparator
(
this
.
currentFolder
),
inputUriDirname
,
true
))
{
let
statWithoutTrailing
:
IFileStat
|
undefined
;
try
{
statWithoutTrailing
=
await
this
.
fileService
.
resolve
(
inputUriDirname
);
...
...
@@ -633,6 +650,16 @@ export class RemoteFileDialog {
return
Promise
.
resolve
(
true
);
}
private
ensureTrailingSeparator
(
uri
:
URI
):
URI
{
if
(
resources
.
hasTrailingPathSeparator
(
uri
))
{
return
uri
;
}
else
{
const
dir
=
resources
.
dirname
(
uri
);
const
base
=
resources
.
basename
(
uri
)
+
this
.
labelService
.
getSeparator
(
uri
.
scheme
,
uri
.
authority
);
return
resources
.
joinPath
(
dir
,
base
);
}
}
private
async
updateItems
(
newFolder
:
URI
,
force
:
boolean
=
false
,
trailing
?:
string
)
{
this
.
filePickBox
.
busy
=
true
;
this
.
userEnteredPathSegment
=
trailing
?
trailing
:
''
;
...
...
@@ -640,7 +667,7 @@ export class RemoteFileDialog {
const
newValue
=
trailing
?
this
.
pathFromUri
(
resources
.
joinPath
(
newFolder
,
trailing
))
:
this
.
pathFromUri
(
newFolder
,
true
);
const
oldFolder
=
this
.
currentFolder
;
const
newFolderPath
=
this
.
pathFromUri
(
newFolder
,
true
);
this
.
currentFolder
=
this
.
remoteUriFrom
(
newFolderPath
);
this
.
currentFolder
=
this
.
ensureTrailingSeparator
(
newFolder
);
return
this
.
createItems
(
this
.
currentFolder
).
then
(
items
=>
{
this
.
filePickBox
.
items
=
items
;
if
(
this
.
allowFolderSelection
)
{
...
...
@@ -669,11 +696,11 @@ export class RemoteFileDialog {
private
pathFromUri
(
uri
:
URI
,
endWithSeparator
:
boolean
=
false
):
string
{
const
sep
=
this
.
labelService
.
getSeparator
(
uri
.
scheme
,
uri
.
authority
);
let
result
:
string
;
let
result
:
string
=
uri
.
fsPath
.
replace
(
/
\n
/g
,
''
)
;
if
(
sep
===
'
/
'
)
{
result
=
uri
.
fsPath
.
replace
(
/
\\
/g
,
sep
);
result
=
result
.
replace
(
/
\\
/g
,
sep
);
}
else
{
result
=
uri
.
fsPath
.
replace
(
/
\/
/g
,
sep
);
result
=
result
.
replace
(
/
\/
/g
,
sep
);
}
if
(
endWithSeparator
&&
!
this
.
endsWithSlash
(
result
))
{
result
=
result
+
sep
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录