Skip to content

Commit aab2b1b

Browse files
author
Benjamin Pasero
committed
web - do not show untitled workspaces in history
1 parent f5d3ffa commit aab2b1b

8 files changed

Lines changed: 26 additions & 27 deletions

File tree

src/vs/platform/workspaces/common/workspaces.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import { FormattingOptions } from 'vs/base/common/jsonFormatter';
1919
import { getRemoteAuthority } from 'vs/platform/remote/common/remoteHosts';
2020
import { ILogService } from 'vs/platform/log/common/log';
2121
import { Event as CommonEvent } from 'vs/base/common/event';
22+
import { IEnvironmentService } from 'vs/platform/environment/common/environment';
2223

2324
export const WORKSPACE_EXTENSION = 'code-workspace';
2425
export const WORKSPACE_FILTER = [{ name: localize('codeWorkspace', "Code Workspace"), extensions: [WORKSPACE_EXTENSION] }];
@@ -172,6 +173,10 @@ export function toWorkspaceIdentifier(workspace: IWorkspace): IWorkspaceIdentifi
172173
return undefined;
173174
}
174175

176+
export function isUntitledWorkspace(path: URI, environmentService: IEnvironmentService): boolean {
177+
return isEqualOrParent(path, environmentService.untitledWorkspacesHome);
178+
}
179+
175180
export type IMultiFolderWorkspaceInitializationPayload = IWorkspaceIdentifier;
176181
export interface ISingleFolderWorkspaceInitializationPayload { id: string; folder: ISingleFolderWorkspaceIdentifier; }
177182
export interface IEmptyWorkspaceInitializationPayload { id: string; }

src/vs/platform/workspaces/electron-main/workspacesMainService.ts

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
* Licensed under the MIT License. See License.txt in the project root for license information.
44
*--------------------------------------------------------------------------------------------*/
55

6-
import { IWorkspaceIdentifier, hasWorkspaceFileExtension, UNTITLED_WORKSPACE_NAME, IResolvedWorkspace, IStoredWorkspaceFolder, isStoredWorkspaceFolder, IWorkspaceFolderCreationData, IUntitledWorkspaceInfo, getStoredWorkspaceFolder, IEnterWorkspaceResult } from 'vs/platform/workspaces/common/workspaces';
6+
import { IWorkspaceIdentifier, hasWorkspaceFileExtension, UNTITLED_WORKSPACE_NAME, IResolvedWorkspace, IStoredWorkspaceFolder, isStoredWorkspaceFolder, IWorkspaceFolderCreationData, IUntitledWorkspaceInfo, getStoredWorkspaceFolder, IEnterWorkspaceResult, isUntitledWorkspace } from 'vs/platform/workspaces/common/workspaces';
77
import { IEnvironmentService } from 'vs/platform/environment/common/environment';
88
import { join, dirname } from 'vs/base/common/path';
99
import { mkdirp, writeFile, rimrafSync, readdirSync, writeFileSync } from 'vs/base/node/pfs';
@@ -17,7 +17,7 @@ import { toWorkspaceFolders } from 'vs/platform/workspace/common/workspace';
1717
import { URI } from 'vs/base/common/uri';
1818
import { Schemas } from 'vs/base/common/network';
1919
import { Disposable } from 'vs/base/common/lifecycle';
20-
import { originalFSPath, isEqualOrParent, joinPath, isEqual, basename } from 'vs/base/common/resources';
20+
import { originalFSPath, joinPath, isEqual, basename } from 'vs/base/common/resources';
2121
import { createDecorator } from 'vs/platform/instantiation/common/instantiation';
2222
import { ICodeWindow } from 'vs/platform/windows/electron-main/windows';
2323
import { localize } from 'vs/nls';
@@ -104,7 +104,7 @@ export class WorkspacesMainService extends Disposable implements IWorkspacesMain
104104
}
105105

106106
private isWorkspacePath(uri: URI): boolean {
107-
return this.isInsideWorkspacesHome(uri) || hasWorkspaceFileExtension(uri);
107+
return isUntitledWorkspace(uri, this.environmentService) || hasWorkspaceFileExtension(uri);
108108
}
109109

110110
private doResolveWorkspace(path: URI, contents: string): IResolvedWorkspace | null {
@@ -142,10 +142,6 @@ export class WorkspacesMainService extends Disposable implements IWorkspacesMain
142142
return storedWorkspace;
143143
}
144144

145-
private isInsideWorkspacesHome(path: URI): boolean {
146-
return isEqualOrParent(path, this.environmentService.untitledWorkspacesHome);
147-
}
148-
149145
async createUntitledWorkspace(folders?: IWorkspaceFolderCreationData[], remoteAuthority?: string): Promise<IWorkspaceIdentifier> {
150146
const { workspace, storedWorkspace } = this.newUntitledWorkspace(folders, remoteAuthority);
151147
const configPath = workspace.configPath.fsPath;
@@ -196,7 +192,7 @@ export class WorkspacesMainService extends Disposable implements IWorkspacesMain
196192
}
197193

198194
isUntitledWorkspace(workspace: IWorkspaceIdentifier): boolean {
199-
return this.isInsideWorkspacesHome(workspace.configPath);
195+
return isUntitledWorkspace(workspace.configPath, this.environmentService);
200196
}
201197

202198
deleteUntitledWorkspaceSync(workspace: IWorkspaceIdentifier): void {

src/vs/workbench/api/browser/mainThreadWorkspace.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ import { ITextFileService } from 'vs/workbench/services/textfile/common/textfile
1919
import { IWorkspaceEditingService } from 'vs/workbench/services/workspaces/common/workspaceEditing';
2020
import { ExtHostContext, ExtHostWorkspaceShape, IExtHostContext, MainContext, MainThreadWorkspaceShape, IWorkspaceData, ITextSearchComplete } from '../common/extHost.protocol';
2121
import { IEnvironmentService } from 'vs/platform/environment/common/environment';
22-
import { isEqualOrParent } from 'vs/base/common/resources';
22+
import { isUntitledWorkspace } from 'vs/platform/workspaces/common/workspaces';
2323
import { INotificationService } from 'vs/platform/notification/common/notification';
2424
import { withNullAsUndefined } from 'vs/base/common/types';
2525
import { IFileService } from 'vs/platform/files/common/files';
@@ -121,7 +121,7 @@ export class MainThreadWorkspace implements MainThreadWorkspaceShape {
121121
}
122122
return {
123123
configuration: workspace.configuration || undefined,
124-
isUntitled: workspace.configuration ? isEqualOrParent(workspace.configuration, this._environmentService.untitledWorkspacesHome) : false,
124+
isUntitled: workspace.configuration ? isUntitledWorkspace(workspace.configuration, this._environmentService) : false,
125125
folders: workspace.folders,
126126
id: workspace.id,
127127
name: this._labelService.getWorkspaceLabel(workspace)

src/vs/workbench/services/dialogs/browser/abstractFileDialogService.ts

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import { Schemas } from 'vs/base/common/network';
1414
import * as resources from 'vs/base/common/resources';
1515
import { IInstantiationService, } from 'vs/platform/instantiation/common/instantiation';
1616
import { SimpleFileDialog } from 'vs/workbench/services/dialogs/browser/simpleFileDialog';
17-
import { WORKSPACE_EXTENSION } from 'vs/platform/workspaces/common/workspaces';
17+
import { WORKSPACE_EXTENSION, isUntitledWorkspace } from 'vs/platform/workspaces/common/workspaces';
1818
import { REMOTE_HOST_SCHEME } from 'vs/platform/remote/common/remoteHosts';
1919
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
2020
import { IFileService } from 'vs/platform/files/common/files';
@@ -180,7 +180,3 @@ export abstract class AbstractFileDialogService {
180180
return options.availableFileSystems && options.availableFileSystems[0] || this.getSchemeFilterForWindow();
181181
}
182182
}
183-
184-
function isUntitledWorkspace(path: URI, environmentService: IWorkbenchEnvironmentService): boolean {
185-
return resources.isEqualOrParent(path, environmentService.untitledWorkspacesHome);
186-
}

src/vs/workbench/services/extensions/electron-browser/extensionHost.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ import { parseExtensionDevOptions } from '../common/extensionDevOptions';
3737
import { VSBuffer } from 'vs/base/common/buffer';
3838
import { IExtensionHostDebugService } from 'vs/platform/debug/common/extensionHostDebug';
3939
import { IExtensionHostStarter } from 'vs/workbench/services/extensions/common/extensions';
40-
import { isEqualOrParent } from 'vs/base/common/resources';
40+
import { isUntitledWorkspace } from 'vs/platform/workspaces/common/workspaces';
4141
import { IHostService } from 'vs/workbench/services/host/browser/host';
4242

4343
export class ExtensionHostProcessWorker implements IExtensionHostStarter {
@@ -410,7 +410,7 @@ export class ExtensionHostProcessWorker implements IExtensionHostStarter {
410410
configuration: withNullAsUndefined(workspace.configuration),
411411
id: workspace.id,
412412
name: this._labelService.getWorkspaceLabel(workspace),
413-
isUntitled: workspace.configuration ? isEqualOrParent(workspace.configuration, this._environmentService.untitledWorkspacesHome) : false
413+
isUntitled: workspace.configuration ? isUntitledWorkspace(workspace.configuration, this._environmentService) : false
414414
},
415415
remote: {
416416
authority: this._environmentService.configuration.remoteAuthority,

src/vs/workbench/services/label/common/labelService.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,10 @@ import { Extensions as WorkbenchExtensions, IWorkbenchContributionsRegistry, IWo
1212
import { Registry } from 'vs/platform/registry/common/platform';
1313
import { IEnvironmentService } from 'vs/platform/environment/common/environment';
1414
import { IWorkspaceContextService, IWorkspace } from 'vs/platform/workspace/common/workspace';
15-
import { isEqual, basenameOrAuthority, isEqualOrParent, basename, joinPath, dirname } from 'vs/base/common/resources';
15+
import { isEqual, basenameOrAuthority, basename, joinPath, dirname } from 'vs/base/common/resources';
1616
import { tildify, getPathLabel } from 'vs/base/common/labels';
1717
import { ltrim, endsWith } from 'vs/base/common/strings';
18-
import { IWorkspaceIdentifier, ISingleFolderWorkspaceIdentifier, isSingleFolderWorkspaceIdentifier, WORKSPACE_EXTENSION, toWorkspaceIdentifier, isWorkspaceIdentifier } from 'vs/platform/workspaces/common/workspaces';
18+
import { IWorkspaceIdentifier, ISingleFolderWorkspaceIdentifier, isSingleFolderWorkspaceIdentifier, WORKSPACE_EXTENSION, toWorkspaceIdentifier, isWorkspaceIdentifier, isUntitledWorkspace } from 'vs/platform/workspaces/common/workspaces';
1919
import { ILabelService, ResourceLabelFormatter, ResourceLabelFormatting } from 'vs/platform/label/common/label';
2020
import { ExtensionsRegistry } from 'vs/workbench/services/extensions/common/extensionsRegistry';
2121
import { match } from 'vs/base/common/glob';
@@ -193,7 +193,7 @@ export class LabelService implements ILabelService {
193193

194194
if (isWorkspaceIdentifier(workspace)) {
195195
// Workspace: Untitled
196-
if (isEqualOrParent(workspace.configPath, this.environmentService.untitledWorkspacesHome)) {
196+
if (isUntitledWorkspace(workspace.configPath, this.environmentService)) {
197197
return localize('untitledWorkspace', "Untitled (Workspace)");
198198
}
199199

src/vs/workbench/services/workspaces/browser/workspacesService.ts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
*--------------------------------------------------------------------------------------------*/
55

66
import { registerSingleton } from 'vs/platform/instantiation/common/extensions';
7-
import { IWorkspacesService, IWorkspaceFolderCreationData, IWorkspaceIdentifier, IEnterWorkspaceResult, IRecentlyOpened, restoreRecentlyOpened, IRecent, isRecentFile, isRecentFolder, toStoreData, IStoredWorkspaceFolder, getStoredWorkspaceFolder, WORKSPACE_EXTENSION, IStoredWorkspace } from 'vs/platform/workspaces/common/workspaces';
7+
import { IWorkspacesService, IWorkspaceFolderCreationData, IWorkspaceIdentifier, IEnterWorkspaceResult, IRecentlyOpened, restoreRecentlyOpened, IRecent, isRecentFile, isRecentFolder, toStoreData, IStoredWorkspaceFolder, getStoredWorkspaceFolder, WORKSPACE_EXTENSION, IStoredWorkspace, isUntitledWorkspace } from 'vs/platform/workspaces/common/workspaces';
88
import { URI } from 'vs/base/common/uri';
99
import { Event, Emitter } from 'vs/base/common/event';
1010
import { IStorageService, StorageScope } from 'vs/platform/storage/common/storage';
@@ -57,7 +57,9 @@ export class BrowserWorkspacesService extends Disposable implements IWorkspacesS
5757
this.addRecentlyOpened([{ folderUri: workspace.folders[0].uri }]);
5858
break;
5959
case WorkbenchState.WORKSPACE:
60-
this.addRecentlyOpened([{ workspace: { id: workspace.id, configPath: workspace.configuration! } }]);
60+
if (!isUntitledWorkspace(workspace.configuration!, this.environmentService)) {
61+
this.addRecentlyOpened([{ workspace: { id: workspace.id, configPath: workspace.configuration! } }]);
62+
}
6163
break;
6264
}
6365
}
@@ -125,7 +127,7 @@ export class BrowserWorkspacesService extends Disposable implements IWorkspacesS
125127
async enterWorkspace(path: URI): Promise<IEnterWorkspaceResult | null> {
126128

127129
// Open workspace in same window
128-
await this.hostService.openWindow([{ workspaceUri: path }], { forceReuseWindow: true });
130+
await this.hostService.openWindow([{ workspaceUri: path }], { forceReuseWindow: true, noRecentEntry: isUntitledWorkspace(path, this.environmentService) });
129131

130132
return {
131133
workspace: await this.getWorkspaceIdentifier(path)
@@ -134,7 +136,7 @@ export class BrowserWorkspacesService extends Disposable implements IWorkspacesS
134136

135137
async createUntitledWorkspace(folders?: IWorkspaceFolderCreationData[], remoteAuthority?: string): Promise<IWorkspaceIdentifier> {
136138
const randomId = (Date.now() + Math.round(Math.random() * 1000)).toString();
137-
const newUntitledWorkspacePath = joinPath(this.environmentService.untitledWorkspacesHome, `${randomId}.${WORKSPACE_EXTENSION}`);
139+
const newUntitledWorkspacePath = joinPath(this.environmentService.untitledWorkspacesHome, `Untitled-${randomId}.${WORKSPACE_EXTENSION}`);
138140

139141
// Build array of workspace folders to store
140142
const storedWorkspaceFolder: IStoredWorkspaceFolder[] = [];

src/vs/workbench/services/workspaces/electron-browser/workspaceEditingService.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,13 @@ import { URI } from 'vs/base/common/uri';
88
import * as nls from 'vs/nls';
99
import { IWorkspaceContextService } from 'vs/platform/workspace/common/workspace';
1010
import { IJSONEditingService } from 'vs/workbench/services/configuration/common/jsonEditing';
11-
import { IWorkspacesService } from 'vs/platform/workspaces/common/workspaces';
11+
import { IWorkspacesService, isUntitledWorkspace } from 'vs/platform/workspaces/common/workspaces';
1212
import { WorkspaceService } from 'vs/workbench/services/configuration/browser/configurationService';
1313
import { IStorageService } from 'vs/platform/storage/common/storage';
1414
import { IExtensionService } from 'vs/workbench/services/extensions/common/extensions';
1515
import { IBackupFileService } from 'vs/workbench/services/backup/common/backup';
1616
import { ICommandService } from 'vs/platform/commands/common/commands';
17-
import { isEqual, basename, isEqualOrParent } from 'vs/base/common/resources';
17+
import { isEqual, basename } from 'vs/base/common/resources';
1818
import { INotificationService, Severity } from 'vs/platform/notification/common/notification';
1919
import { IFileService } from 'vs/platform/files/common/files';
2020
import { IWorkbenchEnvironmentService } from 'vs/workbench/services/environment/common/environmentService';
@@ -74,7 +74,7 @@ export class NativeWorkspaceEditingService extends AbstractWorkspaceEditingServi
7474
}
7575

7676
const workspaceIdentifier = this.getCurrentWorkspaceIdentifier();
77-
if (!workspaceIdentifier || !isEqualOrParent(workspaceIdentifier.configPath, this.environmentService.untitledWorkspacesHome)) {
77+
if (!workspaceIdentifier || !isUntitledWorkspace(workspaceIdentifier.configPath, this.environmentService)) {
7878
return false; // only care about untitled workspaces to ask for saving
7979
}
8080

0 commit comments

Comments
 (0)