-
Notifications
You must be signed in to change notification settings - Fork 28.8k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Implement and adopt edit session identifier API proposal (#157733)
* Add canonical workspace identifier proposed API * Use canonical id to store and resume edit sessions * Add git extension workspace identity provider * Fix warning incorrectly showing up * Make auto resume behavior opt in * * Create a separate service * Accept WorkspaceFolder instead of URI * Return string instead of object * Make edit session restores resilient to provider registration races * Introduce an activation event * Activate contributing extension before using provider * `CanonicalWorkspaceIdentity` -> `EditSessionIdentity` * Show progress while resuming edit session * Store edit session even if extension will take care of opening target workspace * Address most of PR feedback * `IEditSessionsWorkbenchService` -> `IEditSessionsStorageService` * Unregister provider in renderer * Split out proposal into new `editSessionIdentityProvider.d.ts` * Fix bad merge * Always show progress in window * Convert URI schemes
- Loading branch information
Showing
23 changed files
with
411 additions
and
83 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,38 @@ | ||
/*--------------------------------------------------------------------------------------------- | ||
* Copyright (c) Microsoft Corporation. All rights reserved. | ||
* Licensed under the MIT License. See License.txt in the project root for license information. | ||
*--------------------------------------------------------------------------------------------*/ | ||
|
||
import * as path from 'path'; | ||
import * as vscode from 'vscode'; | ||
import { Model } from './model'; | ||
|
||
export class GitEditSessionIdentityProvider implements vscode.EditSessionIdentityProvider, vscode.Disposable { | ||
|
||
private providerRegistration: vscode.Disposable; | ||
|
||
constructor(private model: Model) { | ||
this.providerRegistration = vscode.workspace.registerEditSessionIdentityProvider('file', this); | ||
} | ||
|
||
dispose() { | ||
this.providerRegistration.dispose(); | ||
} | ||
|
||
async provideEditSessionIdentity(workspaceFolder: vscode.WorkspaceFolder, _token: vscode.CancellationToken): Promise<string | undefined> { | ||
await this.model.openRepository(path.dirname(workspaceFolder.uri.fsPath)); | ||
|
||
const repository = this.model.getRepository(workspaceFolder.uri); | ||
await repository?.status(); | ||
|
||
if (!repository || !repository?.HEAD?.upstream) { | ||
return undefined; | ||
} | ||
|
||
return JSON.stringify({ | ||
remote: repository.remotes.find((remote) => remote.name === repository.HEAD?.upstream?.remote)?.pushUrl ?? null, | ||
ref: repository.HEAD?.name ?? null, | ||
sha: repository.HEAD?.commit ?? null, | ||
}); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
29 changes: 29 additions & 0 deletions
29
extensions/git/src/typings/vscode.proposed.contribEditSessions.d.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
/*--------------------------------------------------------------------------------------------- | ||
* Copyright (c) Microsoft Corporation. All rights reserved. | ||
* Licensed under the MIT License. See License.txt in the project root for license information. | ||
*--------------------------------------------------------------------------------------------*/ | ||
|
||
declare module 'vscode' { | ||
|
||
// https://github.com/microsoft/vscode/issues/157734 | ||
|
||
export namespace workspace { | ||
/** | ||
* | ||
* @param scheme The URI scheme that this provider can provide edit session identities for. | ||
* @param provider A provider which can convert URIs for workspace folders of scheme @param scheme to | ||
* an edit session identifier which is stable across machines. This enables edit sessions to be resolved. | ||
*/ | ||
export function registerEditSessionIdentityProvider(scheme: string, provider: EditSessionIdentityProvider): Disposable; | ||
} | ||
|
||
export interface EditSessionIdentityProvider { | ||
/** | ||
* | ||
* @param workspaceFolder The workspace folder to provide an edit session identity for. | ||
* @param token A cancellation token for the request. | ||
* @returns An string representing the edit session identity for the requested workspace folder. | ||
*/ | ||
provideEditSessionIdentity(workspaceFolder: WorkspaceFolder, token: CancellationToken): ProviderResult<string>; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
/*--------------------------------------------------------------------------------------------- | ||
* Copyright (c) Microsoft Corporation. All rights reserved. | ||
* Licensed under the MIT License. See License.txt in the project root for license information. | ||
*--------------------------------------------------------------------------------------------*/ | ||
|
||
import { CancellationToken, CancellationTokenSource } from 'vs/base/common/cancellation'; | ||
import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; | ||
import { IWorkspaceFolder } from 'vs/platform/workspace/common/workspace'; | ||
|
||
export interface IEditSessionIdentityProvider { | ||
readonly scheme: string; | ||
getEditSessionIdentifier(workspaceFolder: IWorkspaceFolder, token: CancellationToken): Promise<string | undefined>; | ||
} | ||
|
||
export const IEditSessionIdentityService = createDecorator<IEditSessionIdentityService>('editSessionIdentityService'); | ||
|
||
export interface IEditSessionIdentityService { | ||
readonly _serviceBrand: undefined; | ||
|
||
registerEditSessionIdentityProvider(provider: IEditSessionIdentityProvider): void; | ||
unregisterEditSessionIdentityProvider(scheme: string): void; | ||
getEditSessionIdentifier(workspaceFolder: IWorkspaceFolder, cancellationTokenSource: CancellationTokenSource): Promise<string | undefined>; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.