Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xxadev
vscode
提交
0dcdf199
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,发现更多精彩内容 >>
提交
0dcdf199
编写于
8月 31, 2017
作者:
B
Benjamin Pasero
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Undo after external modification does not turn editor dirty (fixes #33580)
上级
a9398d49
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
47 addition
and
12 deletion
+47
-12
src/vs/workbench/services/textfile/common/textFileEditorModel.ts
...workbench/services/textfile/common/textFileEditorModel.ts
+18
-10
src/vs/workbench/services/textfile/test/textFileEditorModel.test.ts
...kbench/services/textfile/test/textFileEditorModel.test.ts
+17
-0
src/vs/workbench/test/workbenchTestServices.ts
src/vs/workbench/test/workbenchTestServices.ts
+12
-2
未找到文件。
src/vs/workbench/services/textfile/common/textFileEditorModel.ts
浏览文件 @
0dcdf199
...
...
@@ -408,8 +408,10 @@ export class TextFileEditorModel extends BaseTextEditorModel implements ITextFil
private
doUpdateTextModel
(
value
:
string
|
IRawTextSource
):
TPromise
<
TextFileEditorModel
>
{
diag
(
'
load() - updated text editor model
'
,
this
.
resource
,
new
Date
());
this
.
setDirty
(
false
);
// Ensure we are not tracking a stale state
// Ensure we are not tracking a stale state
this
.
setDirty
(
false
);
// Update model value in a block that ignores model content change events
this
.
blockModelContentChange
=
true
;
try
{
this
.
updateTextEditorModel
(
value
);
...
...
@@ -417,6 +419,9 @@ export class TextFileEditorModel extends BaseTextEditorModel implements ITextFil
this
.
blockModelContentChange
=
false
;
}
// Ensure we track the latest saved version ID given that the contents changed
this
.
updateSavedVersionId
();
return
TPromise
.
as
<
TextFileEditorModel
>
(
this
);
}
...
...
@@ -767,15 +772,7 @@ export class TextFileEditorModel extends BaseTextEditorModel implements ITextFil
this
.
dirty
=
false
;
this
.
inConflictMode
=
false
;
this
.
inErrorMode
=
false
;
// we remember the models alternate version id to remember when the version
// of the model matches with the saved version on disk. we need to keep this
// in order to find out if the model changed back to a saved version (e.g.
// when undoing long enough to reach to a version that is saved and then to
// clear the dirty flag)
if
(
this
.
textEditorModel
)
{
this
.
bufferSavedVersionId
=
this
.
textEditorModel
.
getAlternativeVersionId
();
}
this
.
updateSavedVersionId
();
}
else
{
this
.
dirty
=
true
;
}
...
...
@@ -789,6 +786,17 @@ export class TextFileEditorModel extends BaseTextEditorModel implements ITextFil
};
}
private
updateSavedVersionId
():
void
{
// we remember the models alternate version id to remember when the version
// of the model matches with the saved version on disk. we need to keep this
// in order to find out if the model changed back to a saved version (e.g.
// when undoing long enough to reach to a version that is saved and then to
// clear the dirty flag)
if
(
this
.
textEditorModel
)
{
this
.
bufferSavedVersionId
=
this
.
textEditorModel
.
getAlternativeVersionId
();
}
}
private
updateLastResolvedDiskStat
(
newVersionOnDiskStat
:
IFileStat
):
void
{
// First resolve - just take
...
...
src/vs/workbench/services/textfile/test/textFileEditorModel.test.ts
浏览文件 @
0dcdf199
...
...
@@ -32,15 +32,18 @@ suite('Files - TextFileEditorModel', () => {
let
instantiationService
:
IInstantiationService
;
let
accessor
:
ServiceAccessor
;
let
content
:
string
;
setup
(()
=>
{
instantiationService
=
workbenchInstantiationService
();
accessor
=
instantiationService
.
createInstance
(
ServiceAccessor
);
content
=
accessor
.
fileService
.
getContent
();
});
teardown
(()
=>
{
(
<
TextFileEditorModelManager
>
accessor
.
textFileService
.
models
).
clear
();
TextFileEditorModel
.
setSaveParticipant
(
null
);
// reset any set participant
accessor
.
fileService
.
setContent
(
content
);
});
test
(
'
Save
'
,
function
(
done
)
{
...
...
@@ -190,6 +193,20 @@ suite('Files - TextFileEditorModel', () => {
},
error
=>
onError
(
error
,
done
));
});
test
(
'
Load and undo turns model dirty
'
,
function
(
done
)
{
const
model
:
TextFileEditorModel
=
instantiationService
.
createInstance
(
TextFileEditorModel
,
toResource
.
call
(
this
,
'
/path/index_async.txt
'
),
'
utf8
'
);
model
.
load
().
done
(()
=>
{
accessor
.
fileService
.
setContent
(
'
Hello Change
'
);
model
.
load
().
done
(()
=>
{
model
.
textEditorModel
.
undo
();
assert
.
ok
(
model
.
isDirty
());
done
();
});
},
error
=>
onError
(
error
,
done
));
});
test
(
'
File not modified error is handled gracefully
'
,
function
(
done
)
{
const
model
:
TextFileEditorModel
=
instantiationService
.
createInstance
(
TextFileEditorModel
,
toResource
.
call
(
this
,
'
/path/index_async.txt
'
),
'
utf8
'
);
...
...
src/vs/workbench/test/workbenchTestServices.ts
浏览文件 @
0dcdf199
...
...
@@ -631,11 +631,21 @@ export class TestFileService implements IFileService {
private
_onFileChanges
:
Emitter
<
FileChangesEvent
>
;
private
_onAfterOperation
:
Emitter
<
FileOperationEvent
>
;
private
content
=
'
Hello Html
'
;
constructor
()
{
this
.
_onFileChanges
=
new
Emitter
<
FileChangesEvent
>
();
this
.
_onAfterOperation
=
new
Emitter
<
FileOperationEvent
>
();
}
public
setContent
(
content
:
string
):
void
{
this
.
content
=
content
;
}
public
getContent
():
string
{
return
this
.
content
;
}
public
get
onFileChanges
():
Event
<
FileChangesEvent
>
{
return
this
.
_onFileChanges
.
event
;
}
...
...
@@ -675,7 +685,7 @@ export class TestFileService implements IFileService {
resolveContent
(
resource
:
URI
,
options
?:
IResolveContentOptions
):
TPromise
<
IContent
>
{
return
TPromise
.
as
({
resource
:
resource
,
value
:
'
Hello Html
'
,
value
:
this
.
content
,
etag
:
'
index.txt
'
,
encoding
:
'
utf8
'
,
mtime
:
Date
.
now
(),
...
...
@@ -689,7 +699,7 @@ export class TestFileService implements IFileService {
value
:
{
on
:
(
event
:
string
,
callback
:
Function
):
void
=>
{
if
(
event
===
'
data
'
)
{
callback
(
'
Hello Html
'
);
callback
(
this
.
content
);
}
if
(
event
===
'
end
'
)
{
callback
();
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录