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

show local branches for PR

上级 1dc35219
......@@ -14,7 +14,8 @@ export enum PRType {
ReviewedByMe = 1,
Mine = 2,
Mention = 3,
All = 4
All = 4,
LocalPullRequest = 5
}
export enum PullRequestStateEnum {
......
......@@ -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[]> {
const result = await GitProcess.exec(['for-each-ref', '--format', '%(refname) %(objectname)', '--sort', '-committerdate'], this.path);
......
......@@ -200,8 +200,29 @@ export class PullRequestGitHelper {
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) {
let prConfigKey = `branch.${branchName}.${SettingGHfVSCPullRequest}`;
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 {
case PRType.Mine:
this.label = 'Mine';
break;
case PRType.LocalPullRequest:
this.label = 'Local Pull Request Branches';
break;
default:
break;
}
......
......@@ -78,6 +78,7 @@ export class PRProvider implements vscode.TreeDataProvider<PRGroupTreeItem | Pul
async getChildren(element?: PRGroupTreeItem | PullRequestModel | PRGroupActionTreeItem | FileChangeTreeItem): Promise<(PRGroupTreeItem | PullRequestModel | PRGroupActionTreeItem | FileChangeTreeItem)[]> {
if (!element) {
return Promise.resolve([
new PRGroupTreeItem(PRType.LocalPullRequest),
new PRGroupTreeItem(PRType.RequestReview),
new PRGroupTreeItem(PRType.ReviewedByMe),
new PRGroupTreeItem(PRType.Mine),
......@@ -245,6 +246,25 @@ export class PRProvider implements vscode.TreeDataProvider<PRGroupTreeItem | Pul
}
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 remote = githubRepository.remote.remoteName;
let isRemoteForPR = await PullRequestGitHelper.isRemoteCreatedForPullRequest(this.repository, remote);
......
......@@ -385,7 +385,6 @@ export class ReviewManager implements vscode.DecorationProvider {
}
}
return {};
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册