Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xxadev
vscode
提交
b8512b20
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,发现更多精彩内容 >>
提交
b8512b20
编写于
4月 15, 2020
作者:
J
João Moreno
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
remove git content provider
上级
1c36d747
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
0 addition
and
152 deletion
+0
-152
extensions/git/src/contentProvider.ts
extensions/git/src/contentProvider.ts
+0
-150
extensions/git/src/main.ts
extensions/git/src/main.ts
+0
-2
未找到文件。
extensions/git/src/contentProvider.ts
已删除
100644 → 0
浏览文件 @
1c36d747
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import
{
workspace
,
Uri
,
Disposable
,
Event
,
EventEmitter
,
window
}
from
'
vscode
'
;
import
{
debounce
,
throttle
}
from
'
./decorators
'
;
import
{
fromGitUri
,
toGitUri
}
from
'
./uri
'
;
import
{
Model
,
ModelChangeEvent
,
OriginalResourceChangeEvent
}
from
'
./model
'
;
import
{
filterEvent
,
eventToPromise
,
isDescendant
,
pathEquals
}
from
'
./util
'
;
interface
CacheRow
{
uri
:
Uri
;
timestamp
:
number
;
}
interface
Cache
{
[
uri
:
string
]:
CacheRow
;
}
const
THREE_MINUTES
=
1000
*
60
*
3
;
const
FIVE_MINUTES
=
1000
*
60
*
5
;
export
class
GitContentProvider
{
private
_onDidChange
=
new
EventEmitter
<
Uri
>
();
get
onDidChange
():
Event
<
Uri
>
{
return
this
.
_onDidChange
.
event
;
}
private
changedRepositoryRoots
=
new
Set
<
string
>
();
private
cache
:
Cache
=
Object
.
create
(
null
);
private
disposables
:
Disposable
[]
=
[];
constructor
(
private
model
:
Model
)
{
this
.
disposables
.
push
(
model
.
onDidChangeRepository
(
this
.
onDidChangeRepository
,
this
),
model
.
onDidChangeOriginalResource
(
this
.
onDidChangeOriginalResource
,
this
),
workspace
.
registerTextDocumentContentProvider
(
'
git
'
,
this
)
);
setInterval
(()
=>
this
.
cleanup
(),
FIVE_MINUTES
);
}
private
onDidChangeRepository
({
repository
}:
ModelChangeEvent
):
void
{
this
.
changedRepositoryRoots
.
add
(
repository
.
root
);
this
.
eventuallyFireChangeEvents
();
}
private
onDidChangeOriginalResource
({
uri
}:
OriginalResourceChangeEvent
):
void
{
if
(
uri
.
scheme
!==
'
file
'
)
{
return
;
}
this
.
_onDidChange
.
fire
(
toGitUri
(
uri
,
''
,
{
replaceFileExtension
:
true
}));
}
@
debounce
(
1100
)
private
eventuallyFireChangeEvents
():
void
{
this
.
fireChangeEvents
();
}
@
throttle
private
async
fireChangeEvents
():
Promise
<
void
>
{
if
(
!
window
.
state
.
focused
)
{
const
onDidFocusWindow
=
filterEvent
(
window
.
onDidChangeWindowState
,
e
=>
e
.
focused
);
await
eventToPromise
(
onDidFocusWindow
);
}
Object
.
keys
(
this
.
cache
).
forEach
(
key
=>
{
const
uri
=
this
.
cache
[
key
].
uri
;
const
fsPath
=
uri
.
fsPath
;
for
(
const
root
of
this
.
changedRepositoryRoots
)
{
if
(
isDescendant
(
root
,
fsPath
))
{
this
.
_onDidChange
.
fire
(
uri
);
return
;
}
}
});
this
.
changedRepositoryRoots
.
clear
();
}
async
provideTextDocumentContent
(
uri
:
Uri
):
Promise
<
string
>
{
let
{
path
,
ref
,
submoduleOf
}
=
fromGitUri
(
uri
);
if
(
submoduleOf
)
{
const
repository
=
this
.
model
.
getRepository
(
submoduleOf
);
if
(
!
repository
)
{
return
''
;
}
if
(
ref
===
'
index
'
)
{
return
await
repository
.
diffIndexWithHEAD
(
path
);
}
else
{
return
await
repository
.
diffWithHEAD
(
path
);
}
}
const
repository
=
this
.
model
.
getRepository
(
uri
);
if
(
!
repository
)
{
return
''
;
}
const
cacheKey
=
uri
.
toString
();
const
timestamp
=
new
Date
().
getTime
();
const
cacheValue
:
CacheRow
=
{
uri
,
timestamp
};
this
.
cache
[
cacheKey
]
=
cacheValue
;
if
(
ref
===
'
~
'
)
{
const
fileUri
=
Uri
.
file
(
path
);
const
uriString
=
fileUri
.
toString
();
const
[
indexStatus
]
=
repository
.
indexGroup
.
resourceStates
.
filter
(
r
=>
r
.
resourceUri
.
toString
()
===
uriString
);
ref
=
indexStatus
?
''
:
'
HEAD
'
;
}
else
if
(
/^~
\d
$/
.
test
(
ref
))
{
ref
=
`:
${
ref
[
1
]}
`
;
}
try
{
return
await
repository
.
show
(
ref
,
path
);
}
catch
(
err
)
{
return
''
;
}
}
private
cleanup
():
void
{
const
now
=
new
Date
().
getTime
();
const
cache
=
Object
.
create
(
null
);
Object
.
keys
(
this
.
cache
).
forEach
(
key
=>
{
const
row
=
this
.
cache
[
key
];
const
{
path
}
=
fromGitUri
(
row
.
uri
);
const
isOpen
=
workspace
.
textDocuments
.
filter
(
d
=>
d
.
uri
.
scheme
===
'
file
'
)
.
some
(
d
=>
pathEquals
(
d
.
uri
.
fsPath
,
path
));
if
(
isOpen
||
now
-
row
.
timestamp
<
THREE_MINUTES
)
{
cache
[
row
.
uri
.
toString
()]
=
row
;
}
});
this
.
cache
=
cache
;
}
dispose
():
void
{
this
.
disposables
.
forEach
(
d
=>
d
.
dispose
());
}
}
extensions/git/src/main.ts
浏览文件 @
b8512b20
...
...
@@ -10,7 +10,6 @@ import { ExtensionContext, workspace, window, Disposable, commands, Uri, OutputC
import
{
findGit
,
Git
,
IGit
}
from
'
./git
'
;
import
{
Model
}
from
'
./model
'
;
import
{
CommandCenter
}
from
'
./commands
'
;
import
{
GitContentProvider
}
from
'
./contentProvider
'
;
import
{
GitFileSystemProvider
}
from
'
./fileSystemProvider
'
;
import
{
GitDecorations
}
from
'
./decorationProvider
'
;
import
{
Askpass
}
from
'
./askpass
'
;
...
...
@@ -81,7 +80,6 @@ async function createModel(context: ExtensionContext, outputChannel: OutputChann
disposables
.
push
(
new
CommandCenter
(
git
,
model
,
outputChannel
,
telemetryReporter
),
new
GitContentProvider
(
model
),
new
GitFileSystemProvider
(
model
),
new
GitDecorations
(
model
),
new
GitProtocolHandler
(),
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录