diff --git a/extensions/git/src/decorationProvider.ts b/extensions/git/src/decorationProvider.ts index dcd1077819e..fe0379fcf3e 100644 --- a/extensions/git/src/decorationProvider.ts +++ b/extensions/git/src/decorationProvider.ts @@ -6,7 +6,7 @@ 'use strict'; import { window, workspace, Uri, Disposable, Event, EventEmitter, DecorationData, DecorationProvider, ThemeColor } from 'vscode'; -import { Repository, GitResourceGroup } from './repository'; +import { Repository, GitResourceGroup, Status } from './repository'; import { Model } from './model'; import { debounce } from './decorators'; import { filterEvent } from './util'; @@ -84,24 +84,18 @@ class GitDecorationProvider implements DecorationProvider { this.collectDecorationData(this.repository.workingTreeGroup, newDecorations); this.collectDecorationData(this.repository.mergeGroup, newDecorations); - let uris: Uri[] = []; - newDecorations.forEach((value, uriString) => { - if (this.decorations.has(uriString)) { - this.decorations.delete(uriString); - } else { - uris.push(Uri.parse(uriString)); - } - }); - this.decorations.forEach((value, uriString) => { - uris.push(Uri.parse(uriString)); - }); + const uris = new Set([...this.decorations.keys()].concat([...newDecorations.keys()])); this.decorations = newDecorations; - this._onDidChangeDecorations.fire(uris); + this._onDidChangeDecorations.fire([...uris.values()].map(Uri.parse)); } private collectDecorationData(group: GitResourceGroup, bucket: Map): void { group.resourceStates.forEach(r => { - if (r.resourceDecoration) { + if (r.resourceDecoration + && r.type !== Status.DELETED + && r.type !== Status.INDEX_DELETED + ) { + // not deleted and has a decoration bucket.set(r.original.toString(), r.resourceDecoration); } });