提交 a1fd23d5 编写于 作者: P Peng Lyu

show local branches for PR

上级 1dc35219
...@@ -14,7 +14,8 @@ export enum PRType { ...@@ -14,7 +14,8 @@ export enum PRType {
ReviewedByMe = 1, ReviewedByMe = 1,
Mine = 2, Mine = 2,
Mention = 3, Mention = 3,
All = 4 All = 4,
LocalPullRequest = 5
} }
export enum PullRequestStateEnum { export enum PullRequestStateEnum {
......
...@@ -243,6 +243,18 @@ export class Repository { ...@@ -243,6 +243,18 @@ export class Repository {
} }
} }
async getLocalBranches(): Promise<string[]> {
let result = await GitProcess.exec(['branch'], this.path);
if (result.exitCode !== 0) {
return [];
}
return result.stdout.trim().split(/\r|\n|\r\n/).map(branchName => {
return branchName.substr(2);
});
}
async getRefs(): Promise<Ref[]> { async getRefs(): Promise<Ref[]> {
const result = await GitProcess.exec(['for-each-ref', '--format', '%(refname) %(objectname)', '--sort', '-committerdate'], this.path); const result = await GitProcess.exec(['for-each-ref', '--format', '%(refname) %(objectname)', '--sort', '-committerdate'], this.path);
......
...@@ -200,8 +200,29 @@ export class PullRequestGitHelper { ...@@ -200,8 +200,29 @@ export class PullRequestGitHelper {
return repository.cloneUrl && repository.cloneUrl.equals(pullRequest.head.repositoryCloneUrl); return repository.cloneUrl && repository.cloneUrl.equals(pullRequest.head.repositoryCloneUrl);
} }
static async getPullRequestForBranch(repository: Repository, branchName: string) {
let prConfigKey = `branch.${branchName}.${SettingGHfVSCPullRequest}`;
let info = await repository.getConfig(prConfigKey);
return info;
}
static async markBranchAsPullRequest(repository: Repository, pullRequest: PullRequestModel, branchName: string) { static async markBranchAsPullRequest(repository: Repository, pullRequest: PullRequestModel, branchName: string) {
let prConfigKey = `branch.${branchName}.${SettingGHfVSCPullRequest}`; let prConfigKey = `branch.${branchName}.${SettingGHfVSCPullRequest}`;
await repository.setConfig(prConfigKey, PullRequestGitHelper.buildGHfVSConfigKeyValue(pullRequest)); await repository.setConfig(prConfigKey, PullRequestGitHelper.buildGHfVSConfigKeyValue(pullRequest));
} }
static async getLocalBranchesMarkedAsPullRequest(repository: Repository) {
let branches = await repository.getLocalBranches();
let ret = [];
for (let i = 0; i < branches.length; i++) {
let localInfo = await PullRequestGitHelper.getPullRequestForBranch(repository, branches[i]);
if (localInfo) {
ret.push(PullRequestGitHelper.parseGHfVSConfigKeyValue(localInfo));
}
}
return ret;
}
} }
\ No newline at end of file
...@@ -60,6 +60,9 @@ export class PRGroupTreeItem implements vscode.TreeItem { ...@@ -60,6 +60,9 @@ export class PRGroupTreeItem implements vscode.TreeItem {
case PRType.Mine: case PRType.Mine:
this.label = 'Mine'; this.label = 'Mine';
break; break;
case PRType.LocalPullRequest:
this.label = 'Local Pull Request Branches';
break;
default: default:
break; break;
} }
......
...@@ -78,6 +78,7 @@ export class PRProvider implements vscode.TreeDataProvider<PRGroupTreeItem | Pul ...@@ -78,6 +78,7 @@ export class PRProvider implements vscode.TreeDataProvider<PRGroupTreeItem | Pul
async getChildren(element?: PRGroupTreeItem | PullRequestModel | PRGroupActionTreeItem | FileChangeTreeItem): Promise<(PRGroupTreeItem | PullRequestModel | PRGroupActionTreeItem | FileChangeTreeItem)[]> { async getChildren(element?: PRGroupTreeItem | PullRequestModel | PRGroupActionTreeItem | FileChangeTreeItem): Promise<(PRGroupTreeItem | PullRequestModel | PRGroupActionTreeItem | FileChangeTreeItem)[]> {
if (!element) { if (!element) {
return Promise.resolve([ return Promise.resolve([
new PRGroupTreeItem(PRType.LocalPullRequest),
new PRGroupTreeItem(PRType.RequestReview), new PRGroupTreeItem(PRType.RequestReview),
new PRGroupTreeItem(PRType.ReviewedByMe), new PRGroupTreeItem(PRType.ReviewedByMe),
new PRGroupTreeItem(PRType.Mine), new PRGroupTreeItem(PRType.Mine),
...@@ -245,6 +246,25 @@ export class PRProvider implements vscode.TreeDataProvider<PRGroupTreeItem | Pul ...@@ -245,6 +246,25 @@ export class PRProvider implements vscode.TreeDataProvider<PRGroupTreeItem | Pul
} }
async getPRs(element: PRGroupTreeItem): Promise<PullRequestModel[]> { async getPRs(element: PRGroupTreeItem): Promise<PullRequestModel[]> {
if (element.type === PRType.LocalPullRequest) {
let infos = await PullRequestGitHelper.getLocalBranchesMarkedAsPullRequest(this.repository);
let promises = infos.map(async info => {
let owner = info.owner;
let prNumber = info.prNumber;
let githubRepo = this.repository.githubRepositories.find(repo => repo.remote.owner.toLocaleLowerCase() === owner.toLocaleLowerCase());
if (!githubRepo) {
return Promise.resolve([]);
}
return await githubRepo.getPullRequest(prNumber);
});
return Promise.all(promises).then(values => {
return _.flatten(values);
});
}
let promises = this.repository.githubRepositories.map(async githubRepository => { let promises = this.repository.githubRepositories.map(async githubRepository => {
let remote = githubRepository.remote.remoteName; let remote = githubRepository.remote.remoteName;
let isRemoteForPR = await PullRequestGitHelper.isRemoteCreatedForPullRequest(this.repository, remote); let isRemoteForPR = await PullRequestGitHelper.isRemoteCreatedForPullRequest(this.repository, remote);
......
...@@ -385,7 +385,6 @@ export class ReviewManager implements vscode.DecorationProvider { ...@@ -385,7 +385,6 @@ export class ReviewManager implements vscode.DecorationProvider {
} }
} }
return {}; return {};
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册