Merge from vscode e3c4990c67c40213af168300d1cfeb71d680f877 (#16569)

This commit is contained in:
Cory Rivera
2021-08-25 16:28:29 -07:00
committed by GitHub
parent ab1112bfb3
commit cb7b7da0a4
1752 changed files with 59525 additions and 33878 deletions

View File

@@ -684,8 +684,8 @@ export class UserDataSyncWorkbenchContribution extends Disposable implements IWo
const leftResourceName = localize({ key: 'leftResourceName', comment: ['remote as in file in cloud'] }, "{0} (Remote)", basename(conflict.remoteResource));
const rightResourceName = localize('merges', "{0} (Merges)", basename(conflict.previewResource));
await this.editorService.openEditor({
leftResource: conflict.remoteResource,
rightResource: conflict.previewResource,
originalInput: { resource: conflict.remoteResource },
modifiedInput: { resource: conflict.previewResource },
label: localize('sideBySideLabels', "{0} ↔ {1}", leftResourceName, rightResourceName),
description: localize('sideBySideDescription', "Settings Sync"),
options: {

View File

@@ -267,7 +267,7 @@ export class UserDataSyncMergesViewPane extends TreeViewPane {
previewResource = this.userDataSyncPreview.resources.find(({ local }) => isEqual(local, previewResource.local))!;
await this.reopen(previewResource);
if (previewResource.mergeState === MergeState.Conflict) {
await this.dialogService.show(Severity.Warning, localize('conflicts detected', "Conflicts Detected"), [], {
await this.dialogService.show(Severity.Warning, localize('conflicts detected', "Conflicts Detected"), undefined, {
detail: localize('resolve', "Unable to merge due to conflicts. Please resolve them to continue.")
});
}
@@ -315,8 +315,8 @@ export class UserDataSyncMergesViewPane extends TreeViewPane {
const rightResourceName = previewResource.mergeState === MergeState.Conflict ? localize('merges', "{0} (Merges)", basename(rightResource))
: localize({ key: 'rightResourceName', comment: ['local as in file in disk'] }, "{0} (Local)", basename(rightResource));
await this.editorService.openEditor({
leftResource,
rightResource,
originalInput: { resource: leftResource },
modifiedInput: { resource: rightResource },
label: localize('sideBySideLabels', "{0} ↔ {1}", leftResourceName, rightResourceName),
description: localize('sideBySideDescription', "Settings Sync"),
options: {
@@ -419,7 +419,7 @@ class AcceptChangesContribution extends Disposable implements IEditorContributio
return editor.getContribution<AcceptChangesContribution>(AcceptChangesContribution.ID);
}
public static readonly ID = 'editor.contrib.acceptChangesButton';
public static readonly ID = 'editor.contrib.acceptChangesButton2';
private acceptChangesButton: FloatingClickWidget | undefined;

View File

@@ -6,7 +6,7 @@
import { Event } from 'vs/base/common/event';
import { Disposable } from 'vs/base/common/lifecycle';
import { IEditorService } from 'vs/workbench/services/editor/common/editorService';
import { SettingsEditor2Input, KeybindingsEditorInput, PreferencesEditorInput } from 'vs/workbench/services/preferences/browser/preferencesEditorInput';
import { SettingsEditor2Input, PreferencesEditorInput } from 'vs/workbench/services/preferences/common/preferencesEditorInput';
import { isEqual } from 'vs/base/common/resources';
import { IWorkbenchEnvironmentService } from 'vs/workbench/services/environment/common/environmentService';
import { VIEWLET_ID } from 'vs/workbench/contrib/extensions/common/extensions';
@@ -16,6 +16,7 @@ import { IUserDataAutoSyncService } from 'vs/platform/userDataSync/common/userDa
import { IWorkbenchContribution } from 'vs/workbench/common/contributions';
import { isWeb } from 'vs/base/common/platform';
import { IHostService } from 'vs/workbench/services/host/browser/host';
import { KeybindingsEditorInput } from 'vs/workbench/services/preferences/browser/keybindingsEditorInput';
export class UserDataSyncTrigger extends Disposable implements IWorkbenchContribution {

View File

@@ -9,7 +9,7 @@ import { localize } from 'vs/nls';
import { SyncDescriptor } from 'vs/platform/instantiation/common/descriptors';
import { TreeView, TreeViewPane } from 'vs/workbench/browser/parts/views/treeView';
import { IInstantiationService, ServicesAccessor } from 'vs/platform/instantiation/common/instantiation';
import { ALL_SYNC_RESOURCES, SyncResource, IUserDataSyncService, ISyncResourceHandle as IResourceHandle, SyncStatus, IUserDataSyncResourceEnablementService, IUserDataAutoSyncService, UserDataSyncError, UserDataSyncErrorCode, IUserDataAutoSyncEnablementService } from 'vs/platform/userDataSync/common/userDataSync';
import { ALL_SYNC_RESOURCES, SyncResource, IUserDataSyncService, ISyncResourceHandle as IResourceHandle, SyncStatus, IUserDataSyncResourceEnablementService, IUserDataAutoSyncService, UserDataSyncError, UserDataSyncErrorCode, IUserDataAutoSyncEnablementService, getLastSyncResourceUri } from 'vs/platform/userDataSync/common/userDataSync';
import { registerAction2, Action2, MenuId } from 'vs/platform/actions/common/actions';
import { ContextKeyExpr, ContextKeyEqualsExpr } from 'vs/platform/contextkey/common/contextkey';
import { URI } from 'vs/base/common/uri';
@@ -28,7 +28,10 @@ import { INotificationService, Severity } from 'vs/platform/notification/common/
import { flatten } from 'vs/base/common/arrays';
import { UserDataSyncMergesViewPane } from 'vs/workbench/contrib/userDataSync/browser/userDataSyncMergesView';
import { basename } from 'vs/base/common/resources';
import { API_OPEN_DIFF_EDITOR_COMMAND_ID } from 'vs/workbench/browser/parts/editor/editorCommands';
import { API_OPEN_DIFF_EDITOR_COMMAND_ID, API_OPEN_EDITOR_COMMAND_ID } from 'vs/workbench/browser/parts/editor/editorCommands';
import { IFileService } from 'vs/platform/files/common/files';
import { IEnvironmentService } from 'vs/platform/environment/common/environment';
import { IUriIdentityService } from 'vs/workbench/services/uriIdentity/common/uriIdentity';
export class UserDataSyncDataViews extends Disposable {
@@ -51,6 +54,7 @@ export class UserDataSyncDataViews extends Disposable {
this.registerMachinesView(container);
this.registerActivityView(container, false);
this.registerTroubleShootView(container);
}
private registerMergesView(container: ViewContainer): void {
@@ -219,6 +223,34 @@ export class UserDataSyncDataViews extends Disposable {
}
private registerTroubleShootView(container: ViewContainer): void {
const id = `workbench.views.sync.troubleshoot`;
const name = localize('troubleshoot', "Troubleshoot");
const treeView = this.instantiationService.createInstance(TreeView, id, name);
const dataProvider = this.instantiationService.createInstance(UserDataSyncTroubleshootViewDataProvider);
treeView.showRefreshAction = true;
const disposable = treeView.onDidChangeVisibility(visible => {
if (visible && !treeView.dataProvider) {
disposable.dispose();
treeView.dataProvider = dataProvider;
}
});
const viewsRegistry = Registry.as<IViewsRegistry>(Extensions.ViewsRegistry);
viewsRegistry.registerViews([<ITreeViewDescriptor>{
id,
name,
ctorDescriptor: new SyncDescriptor(TreeViewPane),
when: CONTEXT_ENABLE_ACTIVITY_VIEWS,
canToggleVisibility: true,
canMoveView: false,
treeView,
collapsed: false,
order: 500,
hideByDefault: true
}], container);
}
}
interface ISyncResourceHandle extends IResourceHandle {
@@ -479,3 +511,83 @@ class UserDataSyncMachinesViewDataProvider implements ITreeViewDataProvider {
});
}
}
class UserDataSyncTroubleshootViewDataProvider implements ITreeViewDataProvider {
constructor(
@IFileService private readonly fileService: IFileService,
@IEnvironmentService private readonly environmentService: IEnvironmentService,
@IUriIdentityService private readonly uriIdentityService: IUriIdentityService,
) {
}
async getChildren(element?: ITreeItem): Promise<ITreeItem[]> {
if (!element) {
return [{
handle: 'SYNC_LOGS',
collapsibleState: TreeItemCollapsibleState.Collapsed,
label: { label: localize('sync logs', "Logs") },
themeIcon: Codicon.folder,
}, {
handle: 'LAST_SYNC_STATES',
collapsibleState: TreeItemCollapsibleState.Collapsed,
label: { label: localize('last sync states', "Last Synced Remotes") },
themeIcon: Codicon.folder,
}];
}
if (element.handle === 'LAST_SYNC_STATES') {
return this.getLastSyncStates();
}
if (element.handle === 'SYNC_LOGS') {
return this.getSyncLogs();
}
return [];
}
private async getLastSyncStates(): Promise<ITreeItem[]> {
const result: ITreeItem[] = [];
for (const syncResource of ALL_SYNC_RESOURCES) {
const resource = getLastSyncResourceUri(syncResource, this.environmentService, this.uriIdentityService.extUri);
if (await this.fileService.exists(resource)) {
result.push({
handle: resource.toString(),
label: { label: getSyncAreaLabel(syncResource) },
collapsibleState: TreeItemCollapsibleState.None,
resourceUri: resource,
command: { id: API_OPEN_EDITOR_COMMAND_ID, title: '', arguments: [resource, undefined, undefined] },
});
}
}
return result;
}
private async getSyncLogs(): Promise<ITreeItem[]> {
const logsFolders: URI[] = [];
const stat = await this.fileService.resolve(this.uriIdentityService.extUri.dirname(this.uriIdentityService.extUri.dirname(this.environmentService.userDataSyncLogResource)));
if (stat.children) {
logsFolders.push(...stat.children
.filter(stat => stat.isDirectory && /^\d{8}T\d{6}$/.test(stat.name))
.sort()
.reverse()
.map(d => d.resource));
}
const result: ITreeItem[] = [];
for (const logFolder of logsFolders) {
const syncLogResource = this.uriIdentityService.extUri.joinPath(logFolder, this.uriIdentityService.extUri.basename(this.environmentService.userDataSyncLogResource));
result.push({
handle: syncLogResource.toString(),
collapsibleState: TreeItemCollapsibleState.None,
resourceUri: syncLogResource,
label: { label: this.uriIdentityService.extUri.basename(logFolder) },
description: this.uriIdentityService.extUri.isEqual(syncLogResource, this.environmentService.userDataSyncLogResource) ? localize({ key: 'current', comment: ['Represents current log file'] }, "Current") : undefined,
command: { id: API_OPEN_EDITOR_COMMAND_ID, title: '', arguments: [syncLogResource, undefined, undefined] },
});
}
return result;
}
}