Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xxadev
vscode
提交
afce5c42
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,发现更多精彩内容 >>
提交
afce5c42
编写于
11月 24, 2020
作者:
A
Alex Ross
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Add simple check for task dependency cycles
Fixes #111186
上级
cf4f2fa6
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
28 addition
and
0 deletion
+28
-0
src/vs/workbench/contrib/tasks/browser/terminalTaskSystem.ts
src/vs/workbench/contrib/tasks/browser/terminalTaskSystem.ts
+28
-0
未找到文件。
src/vs/workbench/contrib/tasks/browser/terminalTaskSystem.ts
浏览文件 @
afce5c42
...
...
@@ -174,6 +174,7 @@ export class TerminalTaskSystem implements ITaskSystem {
};
private
activeTasks
:
IStringDictionary
<
ActiveTerminalData
>
;
private
dependencyCycleCheck
:
Set
<
string
>
;
private
instances
:
IStringDictionary
<
InstanceManager
>
;
private
busyTasks
:
IStringDictionary
<
Task
>
;
private
terminals
:
IStringDictionary
<
TerminalData
>
;
...
...
@@ -210,6 +211,7 @@ export class TerminalTaskSystem implements ITaskSystem {
)
{
this
.
activeTasks
=
Object
.
create
(
null
);
this
.
dependencyCycleCheck
=
new
Set
();
this
.
instances
=
Object
.
create
(
null
);
this
.
busyTasks
=
Object
.
create
(
null
);
this
.
terminals
=
Object
.
create
(
null
);
...
...
@@ -437,7 +439,31 @@ export class TerminalTaskSystem implements ITaskSystem {
return
Promise
.
all
<
TaskTerminateResponse
>
(
promises
);
}
private
hasDependencyCycle
(
task
:
Task
):
boolean
{
const
key
=
task
.
getCommonTaskId
();
if
(
this
.
dependencyCycleCheck
.
has
(
key
))
{
this
.
showDependencyCycleMessage
(
task
);
return
true
;
}
else
{
this
.
dependencyCycleCheck
.
add
(
key
);
return
false
;
}
}
private
showDependencyCycleMessage
(
task
:
Task
)
{
this
.
log
(
nls
.
localize
(
'
dependencyCycle
'
,
'
There is a dependency cycle. See task {0}.
'
,
task
.
_label
));
this
.
showOutput
();
}
private
async
executeTask
(
task
:
Task
,
resolver
:
ITaskResolver
,
trigger
:
string
,
alreadyResolved
?:
Map
<
string
,
string
>
):
Promise
<
ITaskSummary
>
{
if
(
this
.
hasDependencyCycle
(
task
))
{
this
.
dependencyCycleCheck
.
delete
(
task
.
getCommonTaskId
());
return
{};
}
alreadyResolved
=
alreadyResolved
??
new
Map
<
string
,
string
>
();
let
promises
:
Promise
<
ITaskSummary
>
[]
=
[];
if
(
task
.
configurationProperties
.
dependsOn
)
{
...
...
@@ -480,6 +506,7 @@ export class TerminalTaskSystem implements ITaskSystem {
return
{
exitCode
:
summary
.
exitCode
};
}
}
this
.
dependencyCycleCheck
.
delete
(
task
.
getCommonTaskId
());
if
(
this
.
isRerun
)
{
return
this
.
reexecuteCommand
(
task
,
trigger
,
alreadyResolved
!
);
}
else
{
...
...
@@ -487,6 +514,7 @@ export class TerminalTaskSystem implements ITaskSystem {
}
});
}
else
{
this
.
dependencyCycleCheck
.
delete
(
task
.
getCommonTaskId
());
return
Promise
.
all
(
promises
).
then
((
summaries
):
ITaskSummary
=>
{
for
(
let
summary
of
summaries
)
{
if
(
summary
.
exitCode
!==
0
)
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录