Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xxadev
vscode
提交
bc23a02e
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,发现更多精彩内容 >>
提交
bc23a02e
编写于
4月 05, 2018
作者:
P
Peng Lyu
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
review requested PR.
上级
0671a030
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
93 addition
and
27 deletion
+93
-27
extensions/git-extended/src/prProvider.ts
extensions/git-extended/src/prProvider.ts
+93
-27
未找到文件。
extensions/git-extended/src/prProvider.ts
浏览文件 @
bc23a02e
...
...
@@ -14,6 +14,38 @@ import { Configuration } from './configuration';
import
{
CredentialStore
}
from
'
./credentials
'
;
import
{
parseComments
,
getMatchingCommentsForDiffViewEditor
,
getMatchingCommentsForNormalEditor
}
from
'
./common/comment
'
;
export
enum
PRGroupType
{
RequestReview
=
0
,
Mine
=
1
,
Mention
=
2
,
All
=
3
}
export
class
PRGroup
implements
vscode
.
TreeItem
{
public
readonly
label
:
string
;
public
collapsibleState
:
vscode
.
TreeItemCollapsibleState
;
public
prs
:
PullRequest
[];
public
groupType
:
PRGroupType
;
constructor
(
type
:
PRGroupType
)
{
this
.
prs
=
[];
this
.
collapsibleState
=
vscode
.
TreeItemCollapsibleState
.
Collapsed
;
this
.
groupType
=
type
;
switch
(
type
)
{
case
PRGroupType
.
All
:
this
.
label
=
'
All
'
;
break
;
case
PRGroupType
.
RequestReview
:
this
.
label
=
'
Request Review
'
;
break
;
case
PRGroupType
.
Mine
:
this
.
label
=
'
Mine
'
;
break
;
default
:
break
;
}
}
}
export
class
PullRequest
{
public
comments
?:
Comment
[];
public
fileChanges
?:
FileChangeItem
[];
...
...
@@ -52,7 +84,7 @@ export class FileChangeItem implements vscode.TreeItem {
}
}
export
class
PRProvider
implements
vscode
.
TreeDataProvider
<
PullRequest
|
FileChangeItem
>
,
vscode
.
CommentProvider
{
export
class
PRProvider
implements
vscode
.
TreeDataProvider
<
P
RGroup
|
P
ullRequest
|
FileChangeItem
>
,
vscode
.
CommentProvider
{
private
_fileChanges
:
FileChangeItem
[];
private
_comments
?:
Comment
[];
private
context
:
vscode
.
ExtensionContext
;
...
...
@@ -61,7 +93,7 @@ export class PRProvider implements vscode.TreeDataProvider<PullRequest | FileCha
private
icons
:
any
;
private
crendentialStore
:
CredentialStore
;
private
configuration
:
Configuration
;
private
_onDidChangeTreeData
=
new
vscode
.
EventEmitter
<
PullRequest
|
FileChangeItem
|
undefined
>
();
private
_onDidChangeTreeData
=
new
vscode
.
EventEmitter
<
P
RGroup
|
P
ullRequest
|
FileChangeItem
|
undefined
>
();
readonly
onDidChangeTreeData
=
this
.
_onDidChangeTreeData
.
event
;
constructor
(
configuration
:
Configuration
)
{
...
...
@@ -74,7 +106,7 @@ export class PRProvider implements vscode.TreeDataProvider<PullRequest | FileCha
this
.
workspaceRoot
=
workspaceRoot
;
this
.
repository
=
repository
;
this
.
context
.
subscriptions
.
push
(
vscode
.
window
.
registerTreeDataProvider
<
PullRequest
|
FileChangeItem
>
(
'
pr
'
,
this
));
this
.
context
.
subscriptions
.
push
(
vscode
.
window
.
registerTreeDataProvider
<
P
RGroup
|
P
ullRequest
|
FileChangeItem
>
(
'
pr
'
,
this
));
this
.
icons
=
{
light
:
{
Modified
:
context
.
asAbsolutePath
(
path
.
join
(
'
resources
'
,
'
icons
'
,
'
light
'
,
'
status-modified.svg
'
)),
...
...
@@ -104,7 +136,10 @@ export class PRProvider implements vscode.TreeDataProvider<PullRequest | FileCha
}));
}
getTreeItem
(
element
:
PullRequest
|
FileChangeItem
):
vscode
.
TreeItem
{
getTreeItem
(
element
:
PRGroup
|
PullRequest
|
FileChangeItem
):
vscode
.
TreeItem
{
if
(
element
instanceof
PRGroup
)
{
return
element
;
}
if
(
element
instanceof
PullRequest
)
{
return
{
...
...
@@ -145,8 +180,51 @@ export class PRProvider implements vscode.TreeDataProvider<PullRequest | FileCha
}
}
getChildren
(
element
?:
PullRequest
):
PullRequest
[]
|
Thenable
<
PullRequest
[]
>
|
FileChangeItem
[]
|
Thenable
<
FileChangeItem
[]
>
{
if
(
element
)
{
getChildren
(
element
?:
PRGroup
|
PullRequest
|
FileChangeItem
):
Thenable
<
(
PRGroup
|
PullRequest
|
FileChangeItem
)[]
>
{
if
(
!
element
)
{
return
Promise
.
resolve
([
new
PRGroup
(
PRGroupType
.
RequestReview
),
new
PRGroup
(
PRGroupType
.
Mine
),
new
PRGroup
(
PRGroupType
.
All
)
]);
}
if
(
!
this
.
repository
.
remotes
||
!
this
.
repository
.
remotes
.
length
)
{
return
Promise
.
resolve
([]);
}
if
(
element
instanceof
PRGroup
)
{
// fetch PRs
if
(
element
.
groupType
===
PRGroupType
.
RequestReview
)
{
let
promises
=
this
.
repository
.
remotes
.
map
(
async
remote
=>
{
const
octo
=
await
this
.
crendentialStore
.
getOctokit
(
remote
);
if
(
octo
)
{
const
{
data
}
=
await
octo
.
search
.
issues
({
q
:
`is:open review-requested:rebornix type:pr repo:
${
remote
.
owner
}
/
${
remote
.
name
}
`
});
return
data
.
items
.
map
(
item
=>
new
PullRequest
(
octo
,
remote
.
owner
,
remote
.
name
,
item
));
}
});
return
Promise
.
all
(
promises
).
then
(
values
=>
{
return
_
.
flatten
(
values
);
});
}
else
if
(
element
.
groupType
===
PRGroupType
.
All
)
{
let
promises
=
this
.
repository
.
remotes
.
map
(
async
remote
=>
{
const
octo
=
await
this
.
crendentialStore
.
getOctokit
(
remote
);
if
(
octo
)
{
const
{
data
}
=
await
octo
.
pullRequests
.
getAll
({
owner
:
remote
.
owner
,
repo
:
remote
.
name
});
return
data
.
map
(
item
=>
new
PullRequest
(
octo
,
remote
.
owner
,
remote
.
name
,
item
));
}
});
return
Promise
.
all
(
promises
).
then
(
values
=>
{
return
_
.
flatten
(
values
);
});
}
}
else
if
(
element
instanceof
PullRequest
)
{
return
element
.
otcokit
.
pullRequests
.
getFiles
({
owner
:
element
.
owner
,
repo
:
element
.
repo
,
...
...
@@ -159,6 +237,15 @@ export class PRProvider implements vscode.TreeDataProvider<PullRequest | FileCha
});
const
rawComments
=
reviewData
.
data
;
const
comments
:
Comment
[]
=
parseComments
(
rawComments
);
if
(
!
element
.
prItem
.
base
)
{
// this one is from search results, which is not complete.
const
{
data
}
=
await
element
.
otcokit
.
pullRequests
.
get
({
owner
:
element
.
owner
,
repo
:
element
.
repo
,
number
:
element
.
prItem
.
number
});
element
.
prItem
=
data
;
}
let
richContentChanges
=
await
parseDiff
(
data
,
this
.
repository
,
element
.
prItem
.
base
.
sha
);
let
fileChanges
=
richContentChanges
.
map
(
change
=>
{
let
changedItem
=
new
FileChangeItem
(
element
.
prItem
,
change
.
fileName
,
change
.
status
,
this
.
context
,
change
.
fileName
,
this
.
workspaceRoot
);
...
...
@@ -172,27 +259,6 @@ export class PRProvider implements vscode.TreeDataProvider<PullRequest | FileCha
this
.
_comments
=
comments
;
return
fileChanges
;
});
}
else
{
if
(
this
.
repository
.
remotes
&&
this
.
repository
.
remotes
.
length
>
0
)
{
let
promises
=
this
.
repository
.
remotes
.
map
(
remote
=>
{
return
this
.
crendentialStore
.
getOctokit
(
remote
).
then
(
octo
=>
{
if
(
octo
)
{
return
octo
.
pullRequests
.
getAll
({
owner
:
remote
.
owner
,
repo
:
remote
.
name
}).
then
(({
data
})
=>
{
return
data
.
map
(
item
=>
new
PullRequest
(
octo
,
remote
.
owner
,
remote
.
name
,
item
));
});
}
});
});
return
Promise
.
all
(
promises
).
then
(
values
=>
{
return
_
.
flatten
(
values
);
});
}
return
[];
}
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录