Skip to content

Commit eb5c8a0

Browse files
committed
1 parent 74b1f4d commit eb5c8a0

3 files changed

Lines changed: 16 additions & 4 deletions

File tree

src/vs/workbench/contrib/files/browser/views/explorerDecorationsProvider.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import { IDecorationsProvider, IDecorationData } from 'vs/workbench/services/dec
1111
import { listInvalidItemForeground } from 'vs/platform/theme/common/colorRegistry';
1212
import { DisposableStore } from 'vs/base/common/lifecycle';
1313
import { IExplorerService } from 'vs/workbench/contrib/files/common/files';
14+
import { explorerRootErrorEmitter } from 'vs/workbench/contrib/files/browser/views/explorerViewer';
1415

1516
export class ExplorerDecorationsProvider implements IDecorationsProvider {
1617
readonly label: string = localize('label', "Explorer");
@@ -30,6 +31,9 @@ export class ExplorerDecorationsProvider implements IDecorationsProvider {
3031
this._onDidChange.fire([change.item.resource]);
3132
}
3233
}));
34+
this.toDispose.add(explorerRootErrorEmitter.event((resource => {
35+
this._onDidChange.fire([resource]);
36+
})));
3337
}
3438

3539
get onDidChange(): Event<URI[]> {

src/vs/workbench/contrib/files/browser/views/explorerViewer.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ import { IEditorService } from 'vs/workbench/services/editor/common/editorServic
4646
import { IWorkspaceFolderCreationData } from 'vs/platform/workspaces/common/workspaces';
4747
import { findValidPasteFileTarget } from 'vs/workbench/contrib/files/browser/fileActions';
4848
import { FuzzyScore, createMatches } from 'vs/base/common/filters';
49+
import { Emitter } from 'vs/base/common/event';
4950

5051
export class ExplorerDelegate implements IListVirtualDelegate<ExplorerItem> {
5152

@@ -60,6 +61,7 @@ export class ExplorerDelegate implements IListVirtualDelegate<ExplorerItem> {
6061
}
6162
}
6263

64+
export const explorerRootErrorEmitter = new Emitter<URI>();
6365
export class ExplorerDataSource implements IAsyncDataSource<ExplorerItem | ExplorerItem[], ExplorerItem> {
6466

6567
constructor(
@@ -87,8 +89,9 @@ export class ExplorerDataSource implements IAsyncDataSource<ExplorerItem | Explo
8789
// Single folder create a dummy explorer item to show error
8890
const placeholder = new ExplorerItem(element.resource, undefined, false);
8991
placeholder.isError = true;
90-
9192
return [placeholder];
93+
} else {
94+
explorerRootErrorEmitter.fire(element.resource);
9295
}
9396
} else {
9497
// Do not show error for roots since we already use an explorer decoration to notify user

src/vs/workbench/contrib/files/common/explorerModel.ts

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -247,9 +247,14 @@ export class ExplorerItem {
247247
// Resolve metadata only when the mtime is needed since this can be expensive
248248
// Mtime is only used when the sort order is 'modified'
249249
const resolveMetadata = explorerService.sortOrder === 'modified';
250-
const stat = await fileService.resolve(this.resource, { resolveSingleChildDescendants: true, resolveMetadata });
251-
const resolved = ExplorerItem.create(stat, this);
252-
ExplorerItem.mergeLocalWithDisk(resolved, this);
250+
try {
251+
const stat = await fileService.resolve(this.resource, { resolveSingleChildDescendants: true, resolveMetadata });
252+
const resolved = ExplorerItem.create(stat, this);
253+
ExplorerItem.mergeLocalWithDisk(resolved, this);
254+
} catch (e) {
255+
this.isError = true;
256+
throw e;
257+
}
253258
this._isDirectoryResolved = true;
254259
}
255260

0 commit comments

Comments
 (0)