Skip to content

Commit 14293cb

Browse files
alexr00Copilot
andcommitted
CCR feedback
Co-authored-by: Copilot <copilot@github.com>
1 parent c59fcb0 commit 14293cb

2 files changed

Lines changed: 52 additions & 8 deletions

File tree

src/github/pullRequestOverview.ts

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -460,14 +460,17 @@ export class PullRequestOverviewPanel extends IssueOverviewPanel<PullRequestMode
460460
revertable: pullRequest.state === GithubItemStateEnum.Merged,
461461
isCopilotOnMyBehalf: await isCopilotOnMyBehalf(pullRequest, currentUser, coAuthors),
462462
generateDescriptionTitle: this.getGenerateDescriptionTitle(),
463-
closingIssues: await Promise.all((pullRequest.closingIssues ?? []).map(async issue => {
463+
closingIssues: await (async () => {
464464
const enterpriseUri = pullRequest.remote.isEnterprise ? getEnterpriseUri() : undefined;
465-
const parsed = parseIssueExpressionOutput(issue.url.match(getIssueOrURLExpression(enterpriseUri)));
466-
const owner = parsed?.owner ?? pullRequest.remote.owner;
467-
const repo = parsed?.name ?? pullRequest.remote.repositoryName;
468-
const webviewUri = await toOpenIssueWebviewUri({ owner, repo, issueNumber: issue.number });
469-
return { ...issue, url: webviewUri.toString() };
470-
})),
465+
const issueOrUrlExpression = getIssueOrURLExpression(enterpriseUri);
466+
return Promise.all((pullRequest.closingIssues ?? []).map(async issue => {
467+
const parsed = parseIssueExpressionOutput(issue.url.match(issueOrUrlExpression));
468+
const owner = parsed?.owner ?? pullRequest.remote.owner;
469+
const repo = parsed?.name ?? pullRequest.remote.repositoryName;
470+
const webviewUri = await toOpenIssueWebviewUri({ owner, repo, issueNumber: issue.number });
471+
return { ...issue, url: webviewUri.toString() };
472+
}));
473+
})(),
471474
};
472475
this._postMessage({
473476
command: 'pr.initialize',

src/test/issues/issuesUtils.test.ts

Lines changed: 42 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@
44
*--------------------------------------------------------------------------------------------*/
55

66
import { default as assert } from 'assert';
7-
import { parseIssueExpressionOutput, ISSUE_OR_URL_EXPRESSION } from '../../github/utils';
7+
import * as vscode from 'vscode';
8+
import { getIssueOrURLExpression, ISSUE_OR_URL_EXPRESSION, parseIssueExpressionOutput } from '../../github/utils';
89

910
describe('Issues utilities', function () {
1011
it('regular expressions', async function () {
@@ -65,4 +66,44 @@ describe('Issues utilities', function () {
6566
assert.strictEqual(prUrlHttpParsed?.name, 'repo');
6667
assert.strictEqual(prUrlHttpParsed?.owner, 'owner');
6768
});
69+
70+
it('getIssueOrURLExpression matches enterprise host URLs', function () {
71+
const enterpriseExpression = getIssueOrURLExpression(vscode.Uri.parse('https://my.ghe.host'));
72+
73+
// Enterprise host URL is matched
74+
const enterpriseIssueUrl = 'https://my.ghe.host/org/repo/issues/123';
75+
const enterpriseIssueParsed = parseIssueExpressionOutput(enterpriseIssueUrl.match(enterpriseExpression));
76+
assert.strictEqual(enterpriseIssueParsed?.issueNumber, 123);
77+
assert.strictEqual(enterpriseIssueParsed?.commentNumber, undefined);
78+
assert.strictEqual(enterpriseIssueParsed?.name, 'repo');
79+
assert.strictEqual(enterpriseIssueParsed?.owner, 'org');
80+
81+
// Enterprise PR URL is matched
82+
const enterprisePrUrl = 'https://my.ghe.host/org/repo/pull/456';
83+
const enterprisePrParsed = parseIssueExpressionOutput(enterprisePrUrl.match(enterpriseExpression));
84+
assert.strictEqual(enterprisePrParsed?.issueNumber, 456);
85+
assert.strictEqual(enterprisePrParsed?.name, 'repo');
86+
assert.strictEqual(enterprisePrParsed?.owner, 'org');
87+
88+
// Enterprise comment URL is matched
89+
const enterpriseCommentUrl = 'https://my.ghe.host/org/repo/issues/789#issuecomment-12345';
90+
const enterpriseCommentParsed = parseIssueExpressionOutput(enterpriseCommentUrl.match(enterpriseExpression));
91+
assert.strictEqual(enterpriseCommentParsed?.issueNumber, 789);
92+
assert.strictEqual(enterpriseCommentParsed?.commentNumber, 12345);
93+
assert.strictEqual(enterpriseCommentParsed?.name, 'repo');
94+
assert.strictEqual(enterpriseCommentParsed?.owner, 'org');
95+
96+
// github.com URLs are still matched when an enterprise URI is provided
97+
const dotComUrl = 'https://github.com/microsoft/vscode/issues/96';
98+
const dotComParsed = parseIssueExpressionOutput(dotComUrl.match(enterpriseExpression));
99+
assert.strictEqual(dotComParsed?.issueNumber, 96);
100+
assert.strictEqual(dotComParsed?.name, 'vscode');
101+
assert.strictEqual(dotComParsed?.owner, 'microsoft');
102+
103+
// Without an enterprise URI, only github.com URLs are matched as full URLs
104+
const defaultExpression = getIssueOrURLExpression();
105+
const enterpriseAgainstDefault = parseIssueExpressionOutput(enterpriseIssueUrl.match(defaultExpression));
106+
// The owner/repo/number should not match the URL form (the alternate `owner/repo#num` form is also not present here).
107+
assert.strictEqual(enterpriseAgainstDefault, undefined);
108+
});
68109
});

0 commit comments

Comments
 (0)