Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
掘金者说
vscode
提交
49990beb
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,发现更多精彩内容 >>
未验证
提交
49990beb
编写于
11月 05, 2020
作者:
J
João Moreno
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
add git CommandErrorOutputTextDocumentContentProvider
上级
ec471da6
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
49 addition
and
17 deletion
+49
-17
extensions/git/src/commands.ts
extensions/git/src/commands.ts
+42
-15
extensions/git/src/git.ts
extensions/git/src/git.ts
+7
-2
未找到文件。
extensions/git/src/commands.ts
浏览文件 @
49990beb
...
...
@@ -6,7 +6,7 @@
import
{
lstat
,
Stats
}
from
'
fs
'
;
import
*
as
os
from
'
os
'
;
import
*
as
path
from
'
path
'
;
import
{
commands
,
Disposable
,
LineChange
,
MessageOptions
,
OutputChannel
,
Position
,
ProgressLocation
,
QuickPickItem
,
Range
,
SourceControlResourceState
,
TextDocumentShowOptions
,
TextEditor
,
Uri
,
ViewColumn
,
window
,
workspace
,
WorkspaceEdit
,
WorkspaceFolder
,
TimelineItem
,
env
,
Selection
}
from
'
vscode
'
;
import
{
commands
,
Disposable
,
LineChange
,
MessageOptions
,
OutputChannel
,
Position
,
ProgressLocation
,
QuickPickItem
,
Range
,
SourceControlResourceState
,
TextDocumentShowOptions
,
TextEditor
,
Uri
,
ViewColumn
,
window
,
workspace
,
WorkspaceEdit
,
WorkspaceFolder
,
TimelineItem
,
env
,
Selection
,
TextDocumentContentProvider
}
from
'
vscode
'
;
import
TelemetryReporter
from
'
vscode-extension-telemetry
'
;
import
*
as
nls
from
'
vscode-nls
'
;
import
{
Branch
,
GitErrorCodes
,
Ref
,
RefType
,
Status
,
CommitOptions
,
RemoteSourceProvider
}
from
'
./api/git
'
;
...
...
@@ -254,10 +254,27 @@ interface PushOptions {
silent
?:
boolean
;
}
class
CommandErrorOutputTextDocumentContentProvider
implements
TextDocumentContentProvider
{
private
items
=
new
Map
<
string
,
string
>
();
set
(
uri
:
Uri
,
contents
:
string
):
void
{
this
.
items
.
set
(
uri
.
path
,
contents
);
}
delete
(
uri
:
Uri
):
void
{
this
.
items
.
delete
(
uri
.
path
);
}
provideTextDocumentContent
(
uri
:
Uri
):
string
|
undefined
{
return
this
.
items
.
get
(
uri
.
path
);
}
}
export
class
CommandCenter
{
private
disposables
:
Disposable
[];
private
lastCommandErrorOutput
=
''
;
private
commandErrors
=
new
CommandErrorOutputTextDocumentContentProvider
()
;
constructor
(
private
git
:
Git
,
...
...
@@ -274,13 +291,8 @@ export class CommandCenter {
return
commands
.
registerCommand
(
commandId
,
command
);
}
});
this
.
disposables
.
push
(
workspace
.
registerTextDocumentContentProvider
(
'
git-output
'
,
this
)
);
}
async
provideTextDocumentContent
():
Promise
<
string
>
{
return
this
.
lastCommandErrorOutput
;
this
.
disposables
.
push
(
workspace
.
registerTextDocumentContentProvider
(
'
git-output
'
,
this
.
commandErrors
));
}
@
command
(
'
git.setLogLevel
'
)
...
...
@@ -2689,14 +2701,29 @@ export class CommandCenter {
const
openOutputChannelChoice
=
localize
(
'
open git log
'
,
"
Open Git Log
"
);
const
outputChannel
=
this
.
outputChannel
as
OutputChannel
;
choices
.
set
(
openOutputChannelChoice
,
()
=>
outputChannel
.
show
());
const
showCommandOutputChoice
=
localize
(
'
show command output
'
,
'
Show Command Output
'
);
const
showCommandOutputChoice
=
localize
(
'
show command output
'
,
"
Show Command Output
"
);
if
(
err
.
stderr
)
{
choices
.
set
(
showCommandOutputChoice
,
()
=>
{
this
.
lastCommandErrorOutput
=
err
.
stderr
;
const
uri
=
Uri
.
parse
(
`git-output://command-error/
${
err
.
gitCommand
}
-
${
Math
.
random
().
toString
(
16
).
slice
(
2
,
10
)}
`
);
workspace
.
openTextDocument
(
uri
).
then
(
doc
=>
{
return
window
.
showTextDocument
(
doc
);
});
choices
.
set
(
showCommandOutputChoice
,
async
()
=>
{
const
timestamp
=
new
Date
().
getTime
();
const
uri
=
Uri
.
parse
(
`git-output:/git-error-
${
timestamp
}
`
);
let
command
=
'
git
'
;
if
(
err
.
gitArgs
)
{
command
=
`
${
command
}
${
err
.
gitArgs
.
join
(
'
'
)}
`
;
}
else
if
(
err
.
gitCommand
)
{
command
=
`
${
command
}
${
err
.
gitCommand
}
`
;
}
this
.
commandErrors
.
set
(
uri
,
`>
${
command
}
\n
${
err
.
stderr
}
`
);
try
{
const
doc
=
await
workspace
.
openTextDocument
(
uri
);
await
window
.
showTextDocument
(
doc
);
}
finally
{
this
.
commandErrors
.
delete
(
uri
);
}
});
}
...
...
extensions/git/src/git.ts
浏览文件 @
49990beb
...
...
@@ -260,6 +260,7 @@ export interface IGitErrorData {
exitCode
?:
number
;
gitErrorCode
?:
string
;
gitCommand
?:
string
;
gitArgs
?:
string
[];
}
export
class
GitError
{
...
...
@@ -271,6 +272,7 @@ export class GitError {
exitCode
?:
number
;
gitErrorCode
?:
string
;
gitCommand
?:
string
;
gitArgs
?:
string
[];
constructor
(
data
:
IGitErrorData
)
{
if
(
data
.
error
)
{
...
...
@@ -287,6 +289,7 @@ export class GitError {
this
.
exitCode
=
data
.
exitCode
;
this
.
gitErrorCode
=
data
.
gitErrorCode
;
this
.
gitCommand
=
data
.
gitCommand
;
this
.
gitArgs
=
data
.
gitArgs
;
}
toString
():
string
{
...
...
@@ -535,7 +538,8 @@ export class Git {
stderr: result.stderr,
exitCode: result.exitCode,
gitErrorCode: getGitErrorCode(result.stderr),
gitCommand: args[0]
gitCommand: args[0],
gitArgs: args
}));
}
...
...
@@ -1781,7 +1785,8 @@ export class Repository {
stderr,
exitCode,
gitErrorCode: getGitErrorCode(stderr),
gitCommand: 'status'
gitCommand: 'status',
gitArgs: args
}));
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录