Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xxadev
vscode
提交
007d686e
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,发现更多精彩内容 >>
提交
007d686e
编写于
6月 09, 2020
作者:
B
Benjamin Pasero
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
workspaces - allow to same on same path
上级
5ee0133b
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
36 addition
and
7 deletion
+36
-7
src/vs/workbench/services/workspaces/browser/abstractWorkspaceEditingService.ts
...ces/workspaces/browser/abstractWorkspaceEditingService.ts
+36
-7
未找到文件。
src/vs/workbench/services/workspaces/browser/abstractWorkspaceEditingService.ts
浏览文件 @
007d686e
...
...
@@ -8,13 +8,13 @@ import { URI } from 'vs/base/common/uri';
import
*
as
nls
from
'
vs/nls
'
;
import
{
IWorkspaceContextService
,
WorkbenchState
}
from
'
vs/platform/workspace/common/workspace
'
;
import
{
IJSONEditingService
,
JSONEditingError
,
JSONEditingErrorCode
}
from
'
vs/workbench/services/configuration/common/jsonEditing
'
;
import
{
IWorkspaceIdentifier
,
IWorkspaceFolderCreationData
,
IWorkspacesService
,
rewriteWorkspaceFileForNewLocation
,
WORKSPACE_FILTER
,
IEnterWorkspaceResult
,
hasWorkspaceFileExtension
,
WORKSPACE_EXTENSION
,
isUntitledWorkspace
}
from
'
vs/platform/workspaces/common/workspaces
'
;
import
{
IWorkspaceIdentifier
,
IWorkspaceFolderCreationData
,
IWorkspacesService
,
rewriteWorkspaceFileForNewLocation
,
WORKSPACE_FILTER
,
IEnterWorkspaceResult
,
hasWorkspaceFileExtension
,
WORKSPACE_EXTENSION
,
isUntitledWorkspace
,
IStoredWorkspace
}
from
'
vs/platform/workspaces/common/workspaces
'
;
import
{
WorkspaceService
}
from
'
vs/workbench/services/configuration/browser/configurationService
'
;
import
{
ConfigurationScope
,
IConfigurationRegistry
,
Extensions
as
ConfigurationExtensions
,
IConfigurationPropertySchema
}
from
'
vs/platform/configuration/common/configurationRegistry
'
;
import
{
Registry
}
from
'
vs/platform/registry/common/platform
'
;
import
{
ICommandService
}
from
'
vs/platform/commands/common/commands
'
;
import
{
distinct
}
from
'
vs/base/common/arrays
'
;
import
{
isEqual
,
getComparisonKey
,
isEqualAuthority
}
from
'
vs/base/common/resources
'
;
import
{
isEqual
,
getComparisonKey
,
isEqualAuthority
,
extUri
}
from
'
vs/base/common/resources
'
;
import
{
INotificationService
,
Severity
}
from
'
vs/platform/notification/common/notification
'
;
import
{
IFileService
}
from
'
vs/platform/files/common/files
'
;
import
{
IWorkbenchEnvironmentService
}
from
'
vs/workbench/services/environment/common/environmentService
'
;
...
...
@@ -24,6 +24,7 @@ import { IConfigurationService } from 'vs/platform/configuration/common/configur
import
{
ITextFileService
}
from
'
vs/workbench/services/textfile/common/textfiles
'
;
import
{
IHostService
}
from
'
vs/workbench/services/host/browser/host
'
;
import
{
Schemas
}
from
'
vs/base/common/network
'
;
import
{
SaveReason
}
from
'
vs/workbench/common/editor
'
;
export
abstract
class
AbstractWorkspaceEditingService
implements
IWorkspaceEditingService
{
...
...
@@ -31,7 +32,7 @@ export abstract class AbstractWorkspaceEditingService implements IWorkspaceEditi
constructor
(
@
IJSONEditingService
private
readonly
jsonEditingService
:
IJSONEditingService
,
@
IWorkspaceContextService
pr
ivate
readonly
contextService
:
WorkspaceService
,
@
IWorkspaceContextService
pr
otected
readonly
contextService
:
WorkspaceService
,
@
IConfigurationService
private
readonly
configurationService
:
IConfigurationService
,
@
INotificationService
private
readonly
notificationService
:
INotificationService
,
@
ICommandService
private
readonly
commandService
:
ICommandService
,
...
...
@@ -206,12 +207,18 @@ export abstract class AbstractWorkspaceEditingService implements IWorkspaceEditi
}
async
saveAndEnterWorkspace
(
path
:
URI
):
Promise
<
void
>
{
if
(
!
await
this
.
isValidTargetWorkspacePath
(
path
))
{
const
workspaceIdentifier
=
this
.
getCurrentWorkspaceIdentifier
();
if
(
!
workspaceIdentifier
)
{
return
;
}
const
workspaceIdentifier
=
this
.
getCurrentWorkspaceIdentifier
();
if
(
!
workspaceIdentifier
)
{
// Allow to save the workspace of the current window
if
(
extUri
.
isEqual
(
workspaceIdentifier
.
configPath
,
path
))
{
return
this
.
saveWorkspace
(
workspaceIdentifier
);
}
// From this moment on we require a valid target that is not opened already
if
(
!
await
this
.
isValidTargetWorkspacePath
(
path
))
{
return
;
}
...
...
@@ -224,7 +231,7 @@ export abstract class AbstractWorkspaceEditingService implements IWorkspaceEditi
return
true
;
// OK
}
protected
async
saveWorkspaceAs
(
workspace
:
IWorkspaceIdentifier
,
targetConfigPathURI
:
URI
):
Promise
<
any
>
{
protected
async
saveWorkspaceAs
(
workspace
:
IWorkspaceIdentifier
,
targetConfigPathURI
:
URI
):
Promise
<
void
>
{
const
configPathURI
=
workspace
.
configPath
;
// Return early if target is same as source
...
...
@@ -240,6 +247,28 @@ export abstract class AbstractWorkspaceEditingService implements IWorkspaceEditi
await
this
.
textFileService
.
create
(
targetConfigPathURI
,
newRawWorkspaceContents
,
{
overwrite
:
true
});
}
protected
async
saveWorkspace
(
workspace
:
IWorkspaceIdentifier
):
Promise
<
void
>
{
const
configPathURI
=
workspace
.
configPath
;
// First: try to save any existing model as it could be dirty
const
existingModel
=
this
.
textFileService
.
files
.
get
(
configPathURI
);
if
(
existingModel
)
{
await
existingModel
.
save
({
force
:
true
,
reason
:
SaveReason
.
EXPLICIT
});
return
;
}
// Second: if the file exists on disk, simply return
const
workspaceFileExists
=
await
this
.
fileService
.
exists
(
configPathURI
);
if
(
workspaceFileExists
)
{
return
;
}
// Finally, we need to re-create the file as it was deleted
const
newWorkspace
:
IStoredWorkspace
=
{
folders
:
[]
};
const
newRawWorkspaceContents
=
rewriteWorkspaceFileForNewLocation
(
JSON
.
stringify
(
newWorkspace
,
null
,
'
\t
'
),
configPathURI
,
false
,
configPathURI
);
await
this
.
textFileService
.
create
(
configPathURI
,
newRawWorkspaceContents
);
}
private
handleWorkspaceConfigurationEditingError
(
error
:
JSONEditingError
):
void
{
switch
(
error
.
code
)
{
case
JSONEditingErrorCode
.
ERROR_INVALID_FILE
:
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录