Skip to content

Commit f7ee1cf

Browse files
Disables and hides code suggest on non-GitHub PRs
1 parent e43161f commit f7ee1cf

File tree

7 files changed

+65
-26
lines changed

7 files changed

+65
-26
lines changed

src/plus/drafts/draftsService.ts

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ import { getSettledValue } from '../../system/promise';
2525
import type { OrganizationMember } from '../gk/models/organization';
2626
import type { SubscriptionAccount } from '../gk/models/subscription';
2727
import type { ServerConnection } from '../gk/serverConnection';
28-
import { providersMetadata } from '../integrations/providers/models';
28+
import { providersMetadata, supportsCodeSuggest } from '../integrations/providers/models';
2929
import { getEntityIdentifierInput } from '../integrations/providers/utils';
3030
import type { LaunchpadItem } from '../launchpad/launchpadProvider';
3131
import type {
@@ -832,6 +832,8 @@ export class DraftService implements Disposable {
832832
repositoryOrIntegrationId: Repository | IntegrationId,
833833
options?: { includeArchived?: boolean },
834834
): Promise<Draft[]> {
835+
if (!supportsCodeSuggest(item.provider)) return [];
836+
835837
const entityIdentifier = getEntityIdentifierInput(item);
836838
const prEntityId = EntityIdentifierUtils.encode(entityIdentifier);
837839
const providerAuth = await this.getProviderAuthFromRepoOrIntegrationId(repositoryOrIntegrationId);
@@ -855,9 +857,11 @@ export class DraftService implements Disposable {
855857

856858
type Result = { data: CodeSuggestionCountsResponse };
857859

858-
const prEntityIds = pullRequests.map(pr => {
859-
return EntityIdentifierUtils.encode(getEntityIdentifierInput(pr));
860-
});
860+
const prEntityIds = pullRequests
861+
.filter(pr => supportsCodeSuggest(pr.provider))
862+
.map(pr => {
863+
return EntityIdentifierUtils.encode(getEntityIdentifierInput(pr));
864+
});
861865

862866
const body = JSON.stringify({
863867
prEntityIds: prEntityIds,

src/plus/integrations/integrationService.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,9 +52,14 @@ import type {
5252
SupportedSelfHostedIntegrationIds,
5353
} from './integration';
5454
import { isAzureCloudDomain } from './providers/azureDevOps';
55-
import { isCloudSelfHostedIntegrationId, isHostingIntegrationId, isSelfHostedIntegrationId } from './providers/models';
55+
import {
56+
isCloudSelfHostedIntegrationId,
57+
isGitHubDotCom,
58+
isGitLabDotCom,
59+
isHostingIntegrationId,
60+
isSelfHostedIntegrationId,
61+
} from './providers/models';
5662
import type { ProvidersApi } from './providers/providersApi';
57-
import { isGitHubDotCom, isGitLabDotCom } from './providers/utils';
5863

5964
export interface ConnectionStateChangeEvent {
6065
key: string;

src/plus/integrations/providers/models.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ import {
5353
PullRequestStatusCheckRollupState,
5454
} from '../../../git/models/pullRequest';
5555
import type { ProviderReference } from '../../../git/models/remoteProvider';
56+
import { equalsIgnoreCase } from '../../../system/string';
5657
import type { EnrichableItem } from '../../launchpad/models/enrichedItem';
5758
import type { Integration, IntegrationType } from '../integration';
5859
import { getEntityIdentifierInput } from './utils';
@@ -1064,3 +1065,15 @@ export type GitConfigEntityIdentifier = AnyEntityIdentifierInput & {
10641065
isCloudEnterprise?: boolean;
10651066
};
10661067
};
1068+
1069+
export function isGitHubDotCom(domain: string): boolean {
1070+
return equalsIgnoreCase(domain, 'github.com');
1071+
}
1072+
1073+
export function isGitLabDotCom(domain: string): boolean {
1074+
return equalsIgnoreCase(domain, 'gitlab.com');
1075+
}
1076+
1077+
export function supportsCodeSuggest(provider: ProviderReference): boolean {
1078+
return isGitHubDotCom(provider.domain);
1079+
}

src/plus/integrations/providers/utils.ts

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,21 +7,12 @@ import type { Issue, IssueShape } from '../../../git/models/issue';
77
import type { IssueOrPullRequest } from '../../../git/models/issueOrPullRequest';
88
import type { PullRequest } from '../../../git/models/pullRequest';
99
import { Logger } from '../../../system/logger';
10-
import { equalsIgnoreCase } from '../../../system/string';
1110
import type { LaunchpadItem } from '../../launchpad/launchpadProvider';
1211
import type { IssueResourceDescriptor, RepositoryDescriptor } from '../integration';
1312
import { isIssueResourceDescriptor, isRepositoryDescriptor } from '../integration';
1413
import type { AzureProjectInputDescriptor } from './azure/models';
1514
import type { GitConfigEntityIdentifier } from './models';
16-
import { isCloudSelfHostedIntegrationId } from './models';
17-
18-
export function isGitHubDotCom(domain: string): boolean {
19-
return equalsIgnoreCase(domain, 'github.com');
20-
}
21-
22-
export function isGitLabDotCom(domain: string): boolean {
23-
return equalsIgnoreCase(domain, 'gitlab.com');
24-
}
15+
import { isCloudSelfHostedIntegrationId, isGitHubDotCom, isGitLabDotCom } from './models';
2516

2617
function isLaunchpadItem(item: IssueOrPullRequest | LaunchpadItem): item is LaunchpadItem {
2718
return (item as LaunchpadItem).uuid !== undefined;

src/plus/launchpad/launchpadProvider.ts

Lines changed: 28 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import type { Account } from '../../git/models/author';
1616
import type { GitBranch } from '../../git/models/branch';
1717
import type { PullRequest, SearchedPullRequest } from '../../git/models/pullRequest';
1818
import type { GitRemote } from '../../git/models/remote';
19+
import type { ProviderReference } from '../../git/models/remoteProvider';
1920
import type { Repository } from '../../git/models/repository';
2021
import { getOrOpenPullRequestRepository } from '../../git/utils/-webview/pullRequest.utils';
2122
import type { PullRequestUrlIdentity } from '../../git/utils/pullRequest.utils';
@@ -46,7 +47,11 @@ import type { ConnectionStateChangeEvent } from '../integrations/integrationServ
4647
import { isMaybeGitHubPullRequestUrl } from '../integrations/providers/github/github.utils';
4748
import { isMaybeGitLabPullRequestUrl } from '../integrations/providers/gitlab/gitlab.utils';
4849
import type { EnrichablePullRequest, ProviderActionablePullRequest } from '../integrations/providers/models';
49-
import { getActionablePullRequests, toProviderPullRequestWithUniqueId } from '../integrations/providers/models';
50+
import {
51+
getActionablePullRequests,
52+
supportsCodeSuggest,
53+
toProviderPullRequestWithUniqueId,
54+
} from '../integrations/providers/models';
5055
import {
5156
convertIntegrationIdToEnrichProvider,
5257
convertRemoteProviderIdToEnrichProvider,
@@ -63,12 +68,26 @@ import {
6368
sharedCategoryToLaunchpadActionCategoryMap,
6469
} from './models/launchpad';
6570

66-
export function getSuggestedActions(category: LaunchpadActionCategory, isCurrentBranch: boolean): LaunchpadAction[] {
71+
export function getSuggestedActions(
72+
category: LaunchpadActionCategory,
73+
provider: ProviderReference,
74+
isCurrentBranch: boolean,
75+
): LaunchpadAction[] {
6776
const actions = [...prActionsMap.get(category)!];
6877
if (isCurrentBranch) {
69-
actions.push('show-overview', 'open-changes', 'code-suggest', 'open-in-graph');
78+
actions.push('show-overview', 'open-changes');
79+
if (supportsCodeSuggest(provider)) {
80+
actions.push('code-suggest');
81+
}
82+
83+
actions.push('open-in-graph');
7084
} else {
71-
actions.push('open-worktree', 'switch', 'switch-and-code-suggest', 'open-in-graph');
85+
actions.push('open-worktree', 'switch');
86+
if (supportsCodeSuggest(provider)) {
87+
actions.push('switch-and-code-suggest');
88+
}
89+
90+
actions.push('open-in-graph');
7291
}
7392
return actions;
7493
}
@@ -205,7 +224,9 @@ export class LaunchpadProvider implements Disposable {
205224
if (prs?.value?.length && subscription?.account != null) {
206225
try {
207226
suggestionCounts = await withDurationAndSlowEventOnTimeout(
208-
this.container.drafts.getCodeSuggestionCounts(prs.value.map(pr => pr.pullRequest)),
227+
this.container.drafts.getCodeSuggestionCounts(
228+
prs.value.map(pr => pr.pullRequest).filter(pr => supportsCodeSuggest(pr.provider)),
229+
),
209230
'getCodeSuggestionCounts',
210231
this.container,
211232
);
@@ -326,7 +347,7 @@ export class LaunchpadProvider implements Disposable {
326347
this._codeSuggestions.get(item.uuid)!.expiresAt < Date.now()
327348
) {
328349
const providerId = item.provider.id;
329-
if (!isSupportedLaunchpadIntegrationId(providerId)) {
350+
if (!isSupportedLaunchpadIntegrationId(providerId) || !supportsCodeSuggest(item.provider)) {
330351
return undefined;
331352
}
332353

@@ -790,6 +811,7 @@ export class LaunchpadProvider implements Disposable {
790811

791812
const suggestedActions = getSuggestedActions(
792813
actionableCategory,
814+
item.provider,
793815
openRepository?.localBranch?.current ?? false,
794816
);
795817

src/webviews/apps/commitDetails/components/gl-wip-details.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { css, html, nothing } from 'lit';
44
import { customElement, property, state } from 'lit/decorators.js';
55
import { repeat } from 'lit/directives/repeat.js';
66
import { when } from 'lit/directives/when.js';
7+
import { equalsIgnoreCase } from '../../../../system/string';
78
import type { DraftState, State, Wip } from '../../../commitDetails/protocol';
89
import type { TreeItemAction, TreeItemBase } from '../../shared/components/tree/base';
910
import type { File } from './gl-details-base';
@@ -128,7 +129,7 @@ export class GlWipDetails extends GlDetailsBase {
128129
let label = 'Share as Cloud Patch';
129130
let action = 'create-patch';
130131
const pr = this.wip?.pullRequest;
131-
if (pr != null && pr.state === 'opened') {
132+
if (pr != null && pr.state === 'opened' && equalsIgnoreCase(pr.provider.domain, 'github.com')) {
132133
// const isMe = pr.author.name.endsWith('(you)');
133134
// if (isMe) {
134135
// label = 'Share with PR Participants';

src/webviews/commitDetails/commitDetailsWebview.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ import type { Subscription } from '../../plus/gk/models/subscription';
4747
import type { SubscriptionChangeEvent } from '../../plus/gk/subscriptionService';
4848
import { ensureAccount } from '../../plus/gk/utils/-webview/acount.utils';
4949
import type { ConnectionStateChangeEvent } from '../../plus/integrations/integrationService';
50+
import { supportsCodeSuggest } from '../../plus/integrations/providers/models';
5051
import { getEntityIdentifierInput } from '../../plus/integrations/providers/utils';
5152
import {
5253
executeCommand,
@@ -1342,7 +1343,7 @@ export class CommitDetailsWebviewProvider
13421343
});
13431344

13441345
let codeSuggestions: Draft[] = [];
1345-
if (pullRequest != null) {
1346+
if (pullRequest != null && supportsCodeSuggest(pullRequest.provider)) {
13461347
const results = await this.getCodeSuggestions(pullRequest, repository);
13471348
if (results.length) {
13481349
codeSuggestions = results;
@@ -1363,7 +1364,7 @@ export class CommitDetailsWebviewProvider
13631364
}
13641365

13651366
private async getCodeSuggestions(pullRequest: PullRequest, repository: Repository): Promise<Draft[]> {
1366-
if (!(await this.canAccessDrafts())) return [];
1367+
if (!(await this.canAccessDrafts()) || !supportsCodeSuggest(pullRequest.provider)) return [];
13671368

13681369
const results = await this.container.drafts.getCodeSuggestions(pullRequest, repository);
13691370

@@ -1391,7 +1392,9 @@ export class CommitDetailsWebviewProvider
13911392
const wip = this._context.wip;
13921393
const { pullRequest, repo } = wip;
13931394

1394-
wip.codeSuggestions = await this.getCodeSuggestions(pullRequest!, repo);
1395+
wip.codeSuggestions = supportsCodeSuggest(pullRequest!.provider)
1396+
? await this.getCodeSuggestions(pullRequest!, repo)
1397+
: [];
13951398

13961399
if (this._pendingContext == null) {
13971400
const success = await this.host.notify(

0 commit comments

Comments
 (0)