From b2c8b2ac0047e2c4336761a236cf0d6294f90ed5 Mon Sep 17 00:00:00 2001 From: rebornix Date: Mon, 13 Jul 2020 11:17:19 -0700 Subject: [PATCH] fix #102411. --- .../src/notebook.test.ts | 4 +++ .../notebook/common/notebookEditorModel.ts | 32 +++++++++++++------ 2 files changed, 27 insertions(+), 9 deletions(-) diff --git a/extensions/vscode-notebook-tests/src/notebook.test.ts b/extensions/vscode-notebook-tests/src/notebook.test.ts index c6092e5b081..ffff4539dff 100644 --- a/extensions/vscode-notebook-tests/src/notebook.test.ts +++ b/extensions/vscode-notebook-tests/src/notebook.test.ts @@ -889,6 +889,10 @@ suite('regression', () => { await vscode.commands.executeCommand('workbench.action.closeAllEditors'); }); + test('untitled file', async function () { + await vscode.commands.executeCommand('workbench.action.files.newUntitledFile', { viewType: "notebookCoreTest" }); + assert.notEqual(vscode.notebook.activeNotebookEditor, undefined, 'untitled notebook editor is not undefined'); + }); }); suite('webview', () => { diff --git a/src/vs/workbench/contrib/notebook/common/notebookEditorModel.ts b/src/vs/workbench/contrib/notebook/common/notebookEditorModel.ts index b8d32e4f541..35213ab164a 100644 --- a/src/vs/workbench/contrib/notebook/common/notebookEditorModel.ts +++ b/src/vs/workbench/contrib/notebook/common/notebookEditorModel.ts @@ -91,11 +91,11 @@ export class NotebookEditorModel extends EditorModel implements IWorkingCopy, IN if (this._notebook.supportBackup) { const tokenSource = new CancellationTokenSource(); const backupId = await this._notebookService.backup(this.viewType, this.resource, tokenSource.token); - const stats = await this._fileService.resolve(this.resource, { resolveMetadata: true }); + const stats = await this._resolveStats(this.resource); return { meta: { - mtime: stats.mtime || new Date().getTime(), + mtime: stats?.mtime || new Date().getTime(), name: this._name, viewType: this._notebook.viewType, backupId: backupId @@ -120,7 +120,7 @@ export class NotebookEditorModel extends EditorModel implements IWorkingCopy, IN } await this.load({ forceReadFromDisk: true }); - const newStats = await this._fileService.resolve(this.resource, { resolveMetadata: true }); + const newStats = await this._resolveStats(this.resource); this._lastResolvedFileStat = newStats; this._notebook.setDirty(false); @@ -159,7 +159,7 @@ export class NotebookEditorModel extends EditorModel implements IWorkingCopy, IN const notebook = await this._notebookService.createNotebookFromBackup(this.viewType!, this.resource, data.metadata, data.languages, data.cells, editorId); this._notebook = notebook!; - const newStats = await this._fileService.resolve(this.resource, { resolveMetadata: true }); + const newStats = await this._resolveStats(this.resource); this._lastResolvedFileStat = newStats; this._register(this._notebook); @@ -181,7 +181,7 @@ export class NotebookEditorModel extends EditorModel implements IWorkingCopy, IN private async loadFromProvider(forceReloadFromDisk: boolean, editorId: string | undefined, backupId: string | undefined) { const notebook = await this._notebookService.resolveNotebook(this.viewType!, this.resource, forceReloadFromDisk, editorId, backupId); this._notebook = notebook!; - const newStats = await this._fileService.resolve(this.resource, { resolveMetadata: true }); + const newStats = await this._resolveStats(this.resource); this._lastResolvedFileStat = newStats; this._register(this._notebook); @@ -216,8 +216,8 @@ export class NotebookEditorModel extends EditorModel implements IWorkingCopy, IN } private async _assertStat() { - const stats = await this._fileService.resolve(this.resource, { resolveMetadata: true }); - if (this._lastResolvedFileStat && stats.mtime > this._lastResolvedFileStat.mtime) { + const stats = await this._resolveStats(this.resource); + if (this._lastResolvedFileStat && stats && stats.mtime > this._lastResolvedFileStat.mtime) { return new Promise<'overwrite' | 'revert' | 'none'>(resolve => { const handle = this._notificationService.prompt( Severity.Info, @@ -258,7 +258,7 @@ export class NotebookEditorModel extends EditorModel implements IWorkingCopy, IN const tokenSource = new CancellationTokenSource(); await this._notebookService.save(this.notebook.viewType, this.notebook.uri, tokenSource.token); - const newStats = await this._fileService.resolve(this.resource, { resolveMetadata: true }); + const newStats = await this._resolveStats(this.resource); this._lastResolvedFileStat = newStats; this._notebook.setDirty(false); return true; @@ -278,12 +278,26 @@ export class NotebookEditorModel extends EditorModel implements IWorkingCopy, IN const tokenSource = new CancellationTokenSource(); await this._notebookService.saveAs(this.notebook.viewType, this.notebook.uri, targetResource, tokenSource.token); - const newStats = await this._fileService.resolve(this.resource, { resolveMetadata: true }); + const newStats = await this._resolveStats(this.resource); this._lastResolvedFileStat = newStats; this._notebook.setDirty(false); return true; } + private async _resolveStats(resource: URI) { + if (resource.scheme === Schemas.untitled) { + return undefined; + } + + try { + const newStats = await this._fileService.resolve(this.resource, { resolveMetadata: true }); + return newStats; + } catch (e) { + return undefined; + } + + } + dispose() { super.dispose(); } -- GitLab