mirror of
https://github.com/microsoft/vscode.git
synced 2026-05-08 09:08:48 +01:00
fix #102411.
This commit is contained in:
@@ -889,6 +889,10 @@ suite('regression', () => {
|
|||||||
await vscode.commands.executeCommand('workbench.action.closeAllEditors');
|
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', () => {
|
suite('webview', () => {
|
||||||
|
|||||||
@@ -91,11 +91,11 @@ export class NotebookEditorModel extends EditorModel implements IWorkingCopy, IN
|
|||||||
if (this._notebook.supportBackup) {
|
if (this._notebook.supportBackup) {
|
||||||
const tokenSource = new CancellationTokenSource();
|
const tokenSource = new CancellationTokenSource();
|
||||||
const backupId = await this._notebookService.backup(this.viewType, this.resource, tokenSource.token);
|
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 {
|
return {
|
||||||
meta: {
|
meta: {
|
||||||
mtime: stats.mtime || new Date().getTime(),
|
mtime: stats?.mtime || new Date().getTime(),
|
||||||
name: this._name,
|
name: this._name,
|
||||||
viewType: this._notebook.viewType,
|
viewType: this._notebook.viewType,
|
||||||
backupId: backupId
|
backupId: backupId
|
||||||
@@ -120,7 +120,7 @@ export class NotebookEditorModel extends EditorModel implements IWorkingCopy, IN
|
|||||||
}
|
}
|
||||||
|
|
||||||
await this.load({ forceReadFromDisk: true });
|
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._lastResolvedFileStat = newStats;
|
||||||
|
|
||||||
this._notebook.setDirty(false);
|
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);
|
const notebook = await this._notebookService.createNotebookFromBackup(this.viewType!, this.resource, data.metadata, data.languages, data.cells, editorId);
|
||||||
this._notebook = notebook!;
|
this._notebook = notebook!;
|
||||||
const newStats = await this._fileService.resolve(this.resource, { resolveMetadata: true });
|
const newStats = await this._resolveStats(this.resource);
|
||||||
this._lastResolvedFileStat = newStats;
|
this._lastResolvedFileStat = newStats;
|
||||||
this._register(this._notebook);
|
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) {
|
private async loadFromProvider(forceReloadFromDisk: boolean, editorId: string | undefined, backupId: string | undefined) {
|
||||||
const notebook = await this._notebookService.resolveNotebook(this.viewType!, this.resource, forceReloadFromDisk, editorId, backupId);
|
const notebook = await this._notebookService.resolveNotebook(this.viewType!, this.resource, forceReloadFromDisk, editorId, backupId);
|
||||||
this._notebook = notebook!;
|
this._notebook = notebook!;
|
||||||
const newStats = await this._fileService.resolve(this.resource, { resolveMetadata: true });
|
const newStats = await this._resolveStats(this.resource);
|
||||||
this._lastResolvedFileStat = newStats;
|
this._lastResolvedFileStat = newStats;
|
||||||
|
|
||||||
this._register(this._notebook);
|
this._register(this._notebook);
|
||||||
@@ -216,8 +216,8 @@ export class NotebookEditorModel extends EditorModel implements IWorkingCopy, IN
|
|||||||
}
|
}
|
||||||
|
|
||||||
private async _assertStat() {
|
private async _assertStat() {
|
||||||
const stats = await this._fileService.resolve(this.resource, { resolveMetadata: true });
|
const stats = await this._resolveStats(this.resource);
|
||||||
if (this._lastResolvedFileStat && stats.mtime > this._lastResolvedFileStat.mtime) {
|
if (this._lastResolvedFileStat && stats && stats.mtime > this._lastResolvedFileStat.mtime) {
|
||||||
return new Promise<'overwrite' | 'revert' | 'none'>(resolve => {
|
return new Promise<'overwrite' | 'revert' | 'none'>(resolve => {
|
||||||
const handle = this._notificationService.prompt(
|
const handle = this._notificationService.prompt(
|
||||||
Severity.Info,
|
Severity.Info,
|
||||||
@@ -258,7 +258,7 @@ export class NotebookEditorModel extends EditorModel implements IWorkingCopy, IN
|
|||||||
|
|
||||||
const tokenSource = new CancellationTokenSource();
|
const tokenSource = new CancellationTokenSource();
|
||||||
await this._notebookService.save(this.notebook.viewType, this.notebook.uri, tokenSource.token);
|
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._lastResolvedFileStat = newStats;
|
||||||
this._notebook.setDirty(false);
|
this._notebook.setDirty(false);
|
||||||
return true;
|
return true;
|
||||||
@@ -278,12 +278,26 @@ export class NotebookEditorModel extends EditorModel implements IWorkingCopy, IN
|
|||||||
|
|
||||||
const tokenSource = new CancellationTokenSource();
|
const tokenSource = new CancellationTokenSource();
|
||||||
await this._notebookService.saveAs(this.notebook.viewType, this.notebook.uri, targetResource, tokenSource.token);
|
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._lastResolvedFileStat = newStats;
|
||||||
this._notebook.setDirty(false);
|
this._notebook.setDirty(false);
|
||||||
return true;
|
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() {
|
dispose() {
|
||||||
super.dispose();
|
super.dispose();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user