Skip to content

Commit 9f7ddb2

Browse files
author
aiday-mar
committed
Merge branch 'main' into aiday/issue157055
2 parents 40a85c5 + 67a6f23 commit 9f7ddb2

File tree

87 files changed

+1833
-615
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

87 files changed

+1833
-615
lines changed

build/azure-pipelines/win32/product-build-win32.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,7 @@ steps:
156156
$ErrorActionPreference = "Stop"
157157
exec { node build\lib\policies }
158158
displayName: Generate Group Policy definitions
159+
retryCountOnTaskFailure: 3
159160
160161
- ${{ if eq(parameters.VSCODE_QUALITY, 'oss') }}:
161162
- powershell: |

extensions/git/package.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
"diffCommand",
1414
"contribMergeEditorToolbar",
1515
"contribViewsWelcome",
16+
"editSessionIdentityProvider",
1617
"scmActionButton",
1718
"scmSelectedProvider",
1819
"scmValidation",
@@ -24,6 +25,7 @@
2425
],
2526
"activationEvents": [
2627
"*",
28+
"onEditSession:file",
2729
"onFileSystem:git",
2830
"onFileSystem:git-show"
2931
],
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
/*---------------------------------------------------------------------------------------------
2+
* Copyright (c) Microsoft Corporation. All rights reserved.
3+
* Licensed under the MIT License. See License.txt in the project root for license information.
4+
*--------------------------------------------------------------------------------------------*/
5+
6+
import * as path from 'path';
7+
import * as vscode from 'vscode';
8+
import { Model } from './model';
9+
10+
export class GitEditSessionIdentityProvider implements vscode.EditSessionIdentityProvider, vscode.Disposable {
11+
12+
private providerRegistration: vscode.Disposable;
13+
14+
constructor(private model: Model) {
15+
this.providerRegistration = vscode.workspace.registerEditSessionIdentityProvider('file', this);
16+
}
17+
18+
dispose() {
19+
this.providerRegistration.dispose();
20+
}
21+
22+
async provideEditSessionIdentity(workspaceFolder: vscode.WorkspaceFolder, _token: vscode.CancellationToken): Promise<string | undefined> {
23+
await this.model.openRepository(path.dirname(workspaceFolder.uri.fsPath));
24+
25+
const repository = this.model.getRepository(workspaceFolder.uri);
26+
await repository?.status();
27+
28+
if (!repository || !repository?.HEAD?.upstream) {
29+
return undefined;
30+
}
31+
32+
return JSON.stringify({
33+
remote: repository.remotes.find((remote) => remote.name === repository.HEAD?.upstream?.remote)?.pushUrl ?? null,
34+
ref: repository.HEAD?.name ?? null,
35+
sha: repository.HEAD?.commit ?? null,
36+
});
37+
}
38+
}

extensions/git/src/main.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ import { OutputChannelLogger } from './log';
2828
import { createIPCServer, IPCServer } from './ipc/ipcServer';
2929
import { GitEditor } from './gitEditor';
3030
import { GitPostCommitCommandsProvider } from './postCommitCommands';
31+
import { GitEditSessionIdentityProvider } from './editSessionIdentityProvider';
3132

3233
const deactivateTasks: { (): Promise<any> }[] = [];
3334

@@ -115,7 +116,8 @@ async function createModel(context: ExtensionContext, outputChannelLogger: Outpu
115116
new GitFileSystemProvider(model),
116117
new GitDecorations(model),
117118
new GitProtocolHandler(),
118-
new GitTimelineProvider(model, cc)
119+
new GitTimelineProvider(model, cc),
120+
new GitEditSessionIdentityProvider(model)
119121
);
120122

121123
const postCommitCommandsProvider = new GitPostCommitCommandsProvider();

extensions/git/src/repository.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@ export class Resource implements SourceControlResourceState {
8787
return this.resources[1];
8888
}
8989

90+
@memoize
9091
get command(): Command {
9192
return this._commandResolver.resolveDefaultCommand(this);
9293
}
@@ -938,8 +939,7 @@ export class Repository implements Disposable {
938939

939940
workspace.onDidChangeConfiguration(e => {
940941
if (e.affectsConfiguration('git.mergeEditor')) {
941-
// this.mergeGroup.resourceStates = this.mergeGroup.resourceStates.map(r => r.clone());
942-
this.status();
942+
this.mergeGroup.resourceStates = this.mergeGroup.resourceStates.map(r => r.clone());
943943
}
944944
}, undefined, this.disposables);
945945

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
/*---------------------------------------------------------------------------------------------
2+
* Copyright (c) Microsoft Corporation. All rights reserved.
3+
* Licensed under the MIT License. See License.txt in the project root for license information.
4+
*--------------------------------------------------------------------------------------------*/
5+
6+
declare module 'vscode' {
7+
8+
// https://github.com/microsoft/vscode/issues/157734
9+
10+
export namespace workspace {
11+
/**
12+
*
13+
* @param scheme The URI scheme that this provider can provide edit session identities for.
14+
* @param provider A provider which can convert URIs for workspace folders of scheme @param scheme to
15+
* an edit session identifier which is stable across machines. This enables edit sessions to be resolved.
16+
*/
17+
export function registerEditSessionIdentityProvider(scheme: string, provider: EditSessionIdentityProvider): Disposable;
18+
}
19+
20+
export interface EditSessionIdentityProvider {
21+
/**
22+
*
23+
* @param workspaceFolder The workspace folder to provide an edit session identity for.
24+
* @param token A cancellation token for the request.
25+
* @returns An string representing the edit session identity for the requested workspace folder.
26+
*/
27+
provideEditSessionIdentity(workspaceFolder: WorkspaceFolder, token: CancellationToken): ProviderResult<string>;
28+
}
29+
}

extensions/references-view/src/extension.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,5 +22,9 @@ export function activate(context: vscode.ExtensionContext): SymbolTree {
2222
tree.setInput(input);
2323
}
2424

25-
return { setInput };
25+
function getInput(): SymbolTreeInput<unknown> | undefined {
26+
return tree.getInput();
27+
}
28+
29+
return { setInput, getInput };
2630
}

extensions/references-view/src/references-view.d.ts

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,19 @@
66
import * as vscode from 'vscode';
77

88
/**
9-
* This interface describes the shape for the references viewlet API. It consists
10-
* of a single `setInput` function which must be called with a full implementation
11-
* of the `SymbolTreeInput`-interface. To acquire this API use the default mechanics, e.g:
9+
* This interface describes the shape for the references viewlet API. It includes
10+
* a single `setInput` function which must be called with a full implementation
11+
* of the `SymbolTreeInput`-interface. You can also use `getInput` function to
12+
* get the current `SymbolTreeInput`. To acquire this API use the default mechanics, e.g:
1213
*
1314
* ```ts
1415
* // get references viewlet API
1516
* const api = await vscode.extensions.getExtension<SymbolTree>('vscode.references-view').activate();
1617
*
1718
* // instantiate and set input which updates the view
1819
* const myInput: SymbolTreeInput<MyItems> = ...
19-
* api.setInput(myInput)
20+
* api.setInput(myInput);
21+
* const currentInput = api.getInput();
2022
* ```
2123
*/
2224
export interface SymbolTree {
@@ -27,6 +29,13 @@ export interface SymbolTree {
2729
* @param input A symbol tree input object
2830
*/
2931
setInput(input: SymbolTreeInput<unknown>): void;
32+
33+
/**
34+
* Get the contents of the references viewlet.
35+
*
36+
* @returns The current symbol tree input object
37+
*/
38+
getInput(): SymbolTreeInput<unknown> | undefined;
3039
}
3140

3241
/**

extensions/references-view/src/types/index.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,15 @@ export function register(tree: SymbolsTree, context: vscode.ExtensionContext): v
1919
}
2020
}
2121

22-
function setTypeHierarchyDirection(value: TypeHierarchyDirection, anchor: TypeItem | unknown) {
22+
function setTypeHierarchyDirection(value: TypeHierarchyDirection, anchor: TypeItem | vscode.Location | unknown) {
2323
direction.value = value;
2424

2525
let newInput: TypesTreeInput | undefined;
2626
const oldInput = tree.getInput();
2727
if (anchor instanceof TypeItem) {
2828
newInput = new TypesTreeInput(new vscode.Location(anchor.item.uri, anchor.item.selectionRange.start), direction.value);
29+
} else if (anchor instanceof vscode.Location) {
30+
newInput = new TypesTreeInput(anchor, direction.value);
2931
} else if (oldInput instanceof TypesTreeInput) {
3032
newInput = new TypesTreeInput(oldInput.location, direction.value);
3133
}
@@ -36,8 +38,8 @@ export function register(tree: SymbolsTree, context: vscode.ExtensionContext): v
3638

3739
context.subscriptions.push(
3840
vscode.commands.registerCommand('references-view.showTypeHierarchy', showTypeHierarchy),
39-
vscode.commands.registerCommand('references-view.showSupertypes', (item: TypeItem | unknown) => setTypeHierarchyDirection(TypeHierarchyDirection.Supertypes, item)),
40-
vscode.commands.registerCommand('references-view.showSubtypes', (item: TypeItem | unknown) => setTypeHierarchyDirection(TypeHierarchyDirection.Subtypes, item)),
41+
vscode.commands.registerCommand('references-view.showSupertypes', (item: TypeItem | vscode.Location | unknown) => setTypeHierarchyDirection(TypeHierarchyDirection.Supertypes, item)),
42+
vscode.commands.registerCommand('references-view.showSubtypes', (item: TypeItem | vscode.Location | unknown) => setTypeHierarchyDirection(TypeHierarchyDirection.Subtypes, item)),
4143
vscode.commands.registerCommand('references-view.removeTypeItem', removeTypeItem)
4244
);
4345
}

src/vs/base/browser/ui/tree/abstractTree.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -663,7 +663,7 @@ export interface ICaseSensitiveToggleOpts {
663663
export class ModeToggle extends Toggle {
664664
constructor(opts?: ICaseSensitiveToggleOpts) {
665665
super({
666-
icon: Codicon.filter,
666+
icon: Codicon.listFilter,
667667
title: localize('filter', "Filter"),
668668
isChecked: opts?.isChecked ?? false,
669669
inputActiveOptionBorder: opts?.inputActiveOptionBorder,

0 commit comments

Comments
 (0)