Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
掘金者说
vscode
提交
239ff7d0
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,发现更多精彩内容 >>
提交
239ff7d0
编写于
6月 01, 2017
作者:
D
Dirk Baeumer
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Fixes #23758: Can start same task twice when adding task to tasks.json in between
上级
c8ad3f5a
变更
1
显示空白变更内容
内联
并排
Showing
1 changed file
with
66 addition
and
4 deletion
+66
-4
src/vs/workbench/parts/tasks/common/taskConfiguration.ts
src/vs/workbench/parts/tasks/common/taskConfiguration.ts
+66
-4
未找到文件。
src/vs/workbench/parts/tasks/common/taskConfiguration.ts
浏览文件 @
239ff7d0
...
...
@@ -358,6 +358,7 @@ function fillProperty<T, K extends keyof T>(target: T, source: T, key: K) {
interface
ParseContext
{
problemReporter
:
IProblemReporter
;
namedProblemMatchers
:
IStringDictionary
<
NamedProblemMatcher
>
;
uuidMap
:
UUIDMap
;
engine
:
Tasks
.
ExecutionEngine
;
schemaVersion
:
Tasks
.
JsonSchemaVersion
;
}
...
...
@@ -882,7 +883,7 @@ namespace TaskDescription {
let
command
:
Tasks
.
CommandConfiguration
=
CommandConfiguration
.
from
(
externalTask
,
context
);
let
identifer
=
Types
.
isString
(
externalTask
.
identifier
)
?
externalTask
.
identifier
:
taskName
;
let
task
:
Tasks
.
Task
=
{
_id
:
UUID
.
generateUuid
(
),
_id
:
context
.
uuidMap
.
getUUID
(
taskName
),
_source
:
source
,
_label
:
taskName
,
name
:
taskName
,
...
...
@@ -1222,11 +1223,65 @@ export interface IProblemReporter extends IProblemReporterBase {
clearOutput
():
void
;
}
class
UUIDMap
{
private
last
:
IStringDictionary
<
string
|
string
[]
>
;
private
current
:
IStringDictionary
<
string
|
string
[]
>
;
constructor
()
{
this
.
current
=
Object
.
create
(
null
);
}
public
start
():
void
{
this
.
last
=
this
.
current
;
this
.
current
=
Object
.
create
(
null
);
}
public
getUUID
(
identifier
:
string
):
string
{
let
lastValue
=
this
.
last
[
identifier
];
let
result
:
string
;
if
(
lastValue
!==
void
0
)
{
if
(
Array
.
isArray
(
lastValue
))
{
result
=
lastValue
.
shift
();
if
(
lastValue
.
length
===
0
)
{
delete
this
.
last
[
identifier
];
}
}
else
{
result
=
lastValue
;
delete
this
.
last
[
identifier
];
}
}
if
(
result
===
void
0
)
{
result
=
UUID
.
generateUuid
();
}
let
currentValue
=
this
.
current
[
identifier
];
if
(
currentValue
===
void
0
)
{
this
.
current
[
identifier
]
=
result
;
}
else
{
if
(
Array
.
isArray
(
currentValue
))
{
currentValue
.
push
(
result
);
}
else
{
let
arrayValue
:
string
[]
=
[
currentValue
];
arrayValue
.
push
(
result
);
this
.
current
[
identifier
]
=
arrayValue
;
}
}
return
result
;
}
public
finish
():
void
{
this
.
last
=
undefined
;
}
}
class
ConfigurationParser
{
private
problemReporter
:
IProblemReporter
;
constructor
(
problemReporter
:
IProblemReporter
)
{
private
uuidMap
:
UUIDMap
;
constructor
(
problemReporter
:
IProblemReporter
,
uuidMap
:
UUIDMap
)
{
this
.
problemReporter
=
problemReporter
;
this
.
uuidMap
=
uuidMap
;
}
public
run
(
fileConfig
:
ExternalTaskRunnerConfiguration
):
ParseResult
{
...
...
@@ -1237,6 +1292,7 @@ class ConfigurationParser {
}
let
context
:
ParseContext
=
{
problemReporter
:
this
.
problemReporter
,
uuidMap
:
this
.
uuidMap
,
namedProblemMatchers
:
undefined
,
engine
,
schemaVersion
,
...
...
@@ -1278,7 +1334,7 @@ class ConfigurationParser {
let
matchers
:
ProblemMatcher
[]
=
ProblemMatcherConverter
.
from
(
fileConfig
.
problemMatcher
,
context
);;
let
isBackground
=
fileConfig
.
isBackground
?
!!
fileConfig
.
isBackground
:
fileConfig
.
isWatching
?
!!
fileConfig
.
isWatching
:
undefined
;
let
task
:
Tasks
.
Task
=
{
_id
:
UUID
.
generateUuid
(
),
_id
:
context
.
uuidMap
.
getUUID
(
globals
.
command
.
name
),
_source
:
TaskDescription
.
source
,
_label
:
globals
.
command
.
name
,
name
:
globals
.
command
.
name
,
...
...
@@ -1303,8 +1359,14 @@ class ConfigurationParser {
}
}
let
uuidMap
:
UUIDMap
=
new
UUIDMap
();
export
function
parse
(
configuration
:
ExternalTaskRunnerConfiguration
,
logger
:
IProblemReporter
):
ParseResult
{
return
(
new
ConfigurationParser
(
logger
)).
run
(
configuration
);
try
{
uuidMap
.
start
();
return
(
new
ConfigurationParser
(
logger
,
uuidMap
)).
run
(
configuration
);
}
finally
{
uuidMap
.
finish
();
}
}
export
function
mergeTasks
(
target
:
Tasks
.
Task
,
source
:
Tasks
.
Task
):
Tasks
.
Task
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录