Skip to content

Commit

Permalink
Add read-only message for unchecked out PR files (#4923)
Browse files Browse the repository at this point in the history
* Add read-only message for unchecked out PR files
Part of microsoft/vscode#166971

* Update readonly message
  • Loading branch information
alexr00 authored Jun 22, 2023
1 parent 29397ed commit 5c6a66d
Show file tree
Hide file tree
Showing 5 changed files with 53 additions and 8 deletions.
10 changes: 8 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,8 @@
"contribCommentEditorActionsMenu",
"shareProvider",
"quickDiffProvider",
"quickPickItemIcon"
"quickPickItemIcon",
"readonlyMessage"
],
"version": "0.66.0",
"publisher": "GitHub",
Expand Down Expand Up @@ -949,6 +950,11 @@
"category": "%command.pull.request.category%",
"icon": "$(comment)"
},
{
"command": "pr.checkoutFromReadonlyFile",
"title": "%command.pr.pick.title%",
"category": "%command.pull.request.category%"
},
{
"command": "review.diffWithPrHead",
"title": "%command.review.diffWithPrHead.title%",
Expand Down Expand Up @@ -2349,7 +2355,7 @@
"@types/react-dom": "^16.8.2",
"@types/sinon": "7.0.11",
"@types/temp": "0.8.34",
"@types/vscode": "1.69.0",
"@types/vscode": "1.79.0",
"@types/webpack-env": "^1.16.0",
"@typescript-eslint/eslint-plugin": "4.18.0",
"@typescript-eslint/parser": "4.18.0",
Expand Down
14 changes: 14 additions & 0 deletions src/@types/vscode.proposed.readonlyMessage.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/

// https://github.com/microsoft/vscode/issues/166971

declare module 'vscode' {

export namespace workspace {

export function registerFileSystemProvider(scheme: string, provider: FileSystemProvider, options?: { readonly isCaseSensitive?: boolean; readonly isReadonly?: boolean | MarkdownString }): Disposable;
}
}
25 changes: 24 additions & 1 deletion src/commands.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ import { IComment } from './common/comment';
import Logger from './common/logger';
import { FILE_LIST_LAYOUT, PR_SETTINGS_NAMESPACE } from './common/settingKeys';
import { ITelemetry } from './common/telemetry';
import { asTempStorageURI, fromReviewUri, Schemes, toPRUri } from './common/uri';
import { asTempStorageURI, fromPRUri, fromReviewUri, Schemes, toPRUri } from './common/uri';
import { formatError } from './common/utils';
import { EXTENSION_ID } from './constants';
import { FolderRepositoryManager } from './github/folderRepositoryManager';
Expand Down Expand Up @@ -511,6 +511,29 @@ export function registerCommands(
}),
);

context.subscriptions.push(vscode.commands.registerCommand('pr.checkoutFromReadonlyFile', async () => {
const uri = vscode.window.activeTextEditor?.document.uri;
if (uri?.scheme !== Schemes.Pr) {
return;
}
const prUriPropserties = fromPRUri(uri);
if (prUriPropserties === undefined) {
return;
}
let githubRepository: GitHubRepository | undefined;
const folderManager = reposManager.folderManagers.find(folderManager => {
githubRepository = folderManager.gitHubRepositories.find(githubRepo => githubRepo.remote.remoteName === prUriPropserties.remoteName);
return !!githubRepository;
});
if (!folderManager || !githubRepository) {
return;
}
const prModel = await folderManager.fetchById(githubRepository, Number(prUriPropserties.prNumber));
if (prModel) {
return ReviewManager.getReviewManagerForFolderManager(reviewsManager.reviewManagers, folderManager)?.switch(prModel);
}
}));

context.subscriptions.push(
vscode.commands.registerCommand('pr.pickOnVscodeDev', async (pr: PRNode | DescriptionNode | PullRequestModel) => {
if (pr === undefined) {
Expand Down
4 changes: 3 additions & 1 deletion src/extension.ts
Original file line number Diff line number Diff line change
Expand Up @@ -368,7 +368,9 @@ async function deferredActivate(context: vscode.ExtensionContext, apiImpl: GitAp
const reposManager = new RepositoriesManager(folderManagers, credentialStore, telemetry);
context.subscriptions.push(reposManager);
const inMemPRFileSystemProvider = getInMemPRFileSystemProvider({ reposManager, gitAPI: apiImpl, credentialStore })!;
context.subscriptions.push(vscode.workspace.registerFileSystemProvider(Schemes.Pr, inMemPRFileSystemProvider, { isReadonly: true }));
const readOnlyMessage = new vscode.MarkdownString(vscode.l10n.t('Cannot edit this pull request file. [Check out](command:pr.checkoutFromReadonlyFile) this pull request to edit.'));
readOnlyMessage.isTrusted = { enabledCommands: ['pr.checkoutFromReadonlyFile'] };
context.subscriptions.push(vscode.workspace.registerFileSystemProvider(Schemes.Pr, inMemPRFileSystemProvider, { isReadonly: readOnlyMessage }));

await init(context, apiImpl, credentialStore, repositories, prTree, liveshareApiPromise, showPRController, reposManager);
}
Expand Down
8 changes: 4 additions & 4 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -618,10 +618,10 @@
dependencies:
"@types/node" "*"

"@types/vscode@1.69.0":
version "1.69.0"
resolved "https://registry.yarnpkg.com/@types/vscode/-/vscode-1.69.0.tgz#a472011af392fbcf82cbb82f60b4c239c21b921c"
integrity sha512-RlzDAnGqUoo9wS6d4tthNyAdZLxOIddLiX3djMoWk29jFfSA1yJbIwr0epBYqqYarWB6s2Z+4VaZCQ80Jaa3kA==
"@types/vscode@1.79.0":
version "1.79.0"
resolved "https://registry.yarnpkg.com/@types/vscode/-/vscode-1.79.0.tgz#e2aed1bb3946ae2bebbc3b88020d0efe18f941a9"
integrity sha512-Tfowu2rSW8hVGbqzQLSPlOEiIOYYryTkgJ+chMecpYiJcnw9n0essvSiclnK+Qh/TcSVJHgaK4EMrQDZjZJ/Sw==

"@types/webpack-env@^1.16.0":
version "1.16.2"
Expand Down

0 comments on commit 5c6a66d

Please sign in to comment.